File size: 1,591 Bytes
6e00079
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import streamlit as st

@st.cache_data
def get_search_mask(df, search_query):
    return (
        df["world"].str.contains(search_query, case=False, na=False) |
        df["name"].str.contains(search_query, case=False, na=False) |
        df["short_story"].str.contains(search_query, case=False, na=False) |
        df["description"].str.contains(search_query, case=False, na=False) |
        df["style"].str.contains(search_query, case=False, na=False) |
        df["first_message"].str.contains(search_query, case=False, na=False)
    )

@st.cache_data
def apply_filters(df, search_query, absurdity_range, selected_mood, selected_tags, sort_option):
    """Применение фильтров и сортировки"""
    filtered_df = df[
        (df["absurdity"] >= absurdity_range[0]) & 
        (df["absurdity"] <= absurdity_range[1])
    ]
    
    if selected_mood != "Все":
        filtered_df = filtered_df[filtered_df["mood"] == selected_mood]
    
    if selected_tags:
        filtered_df = filtered_df[filtered_df["tags"].str.contains("|".join(selected_tags))]
    
    if search_query:
        mask = get_search_mask(df, search_query)
        filtered_df = filtered_df[mask]
    
    # Сортировка
    sort_columns = {
        "По имени (А→Я)": ("name", True),
        "По имени (Я→А)": ("name", False),
        "По абсурдности (↑)": ("absurdity", True),
        "По абсурдности (↓)": ("absurdity", False)
    }
    col, asc = sort_columns[sort_option]
    return filtered_df.sort_values(col, ascending=asc)