import streamlit as st import pandas as pd import numpy as np import ast import faiss from data.func import filter_by_ganre, embed_user """ # Умный поиск сериалов """ df = pd.read_csv('data/dataset.csv') embeddings = np.load('data/embeddings_main.npy') index = faiss.read_index('data/faiss_index_main.index') df['ganres'] = df['ganres'].apply(lambda x: ast.literal_eval(x)) st.write(f'

Количество сериалов, \ предоставляемых сервисом {len(df)}

', unsafe_allow_html=True) ganres_lst = sorted(['драма', 'документальный', 'биография', 'комедия', 'фэнтези', 'приключения', 'для детей', 'мультсериалы', 'мелодрама', 'боевик', 'детектив', 'фантастика', 'триллер', 'семейный', 'криминал', 'исторический', 'музыкальные', 'мистика', 'аниме', 'ужасы', 'спорт', 'скетч-шоу', 'военный', 'для взрослых', 'вестерн']) st.sidebar.header('Панель инструментов :gear:') choice_g = st.sidebar.multiselect("Выберите жанры", options=ganres_lst) n = st.sidebar.selectbox("Количество отображаемых элементов на странице", options=[5, 10, 15]) # col3, col4 = st.columns([5,2]) # with col3: text = st.text_input('Введите описание для рекомендации') # with col4: button = st.button('Отправить запрос', type="primary") if text and button: if len(choice_g) == 0: choice_g = ganres_lst filt_ind = filter_by_ganre(df, choice_g) user_emb = embed_user(filt_ind, embeddings, text, n) _, sorted_indices = index.search(user_emb.reshape(1, -1), n) st.write(f'

Всего подобранных \ рекомендаций {len(sorted_indices[0])}

', unsafe_allow_html=True) st.write('\n') # Отображение изображений и названий # for ind, sim in top_dict.items(): # col1, col2 = st.columns([3, 4]) # with col1: # st.image(df['poster'][ind], width=300) # with col2: # st.write(f"***Название:*** {df['title'][ind]}") # st.write(f"***Жанр:*** {', '.join(df['ganres'][ind])}") # st.write(f"***Описание:*** {df['description'][ind]}") # similarity = round(sim, 4) # st.write(f"***Cosine Similarity : {similarity}***") # st.write(f"***Ссылка на фильм : {df['url'][ind]}***") # st.markdown( # "
", # unsafe_allow_html=True # ) for ind in sorted_indices[0]: col1, col2 = st.columns([3, 4]) with col1: st.image(df['poster'][ind], width=300) with col2: st.write(f"***Название:*** {df['title'][ind]}") st.write(f"***Жанр:*** {', '.join(df['ganres'][ind])}") st.write(f"***Описание:*** {df['description'][ind]}") # similarity = round(sim, 4) # st.write(f"***Cosine Similarity : {similarity}***") st.write(f"***Ссылка на фильм : {df['url'][ind]}***") st.markdown( "
", unsafe_allow_html=True )