Spaces:
Sleeping
Sleeping
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'<p style="font-family: Arial, sans-serif; font-size: 24px; ">Количество сериалов, \ | |
предоставляемых сервисом {len(df)}</p>', 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'<p style="font-family: Arial, sans-serif; font-size: 18px; text-align: center;"><strong>Всего подобранных \ | |
рекомендаций {len(sorted_indices[0])}</strong></p>', 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( | |
# "<hr style='border: 2px solid #000; margin-top: 10px; margin-bottom: 10px;'>", | |
# 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( | |
"<hr style='border: 2px solid #000; margin-top: 10px; margin-bottom: 10px;'>", | |
unsafe_allow_html=True | |
) |