test_2_2 / pages /01_🎥_Serials.py
RMakushkin's picture
Update pages/01_🎥_Serials.py
3394e57
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
)