Spaces:
Sleeping
Sleeping
File size: 4,672 Bytes
8f0a418 a112502 ff6cf2b dddc284 ff6cf2b 8f0a418 c66c983 8f0a418 fa7222f ff6cf2b c66c983 ff6cf2b fa7222f 3bf5220 ac6735c ff6cf2b 1adb805 ff6cf2b 1adb805 8d176bf 11be106 1adb805 ac6735c 1adb805 fa7222f ac6735c 1adb805 8d176bf ac6735c c66c983 1adb805 8d176bf ff6cf2b 2ca7a2f ff6cf2b 1adb805 |
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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import streamlit as st
import pandas as pd
import torch
from transformers import AutoTokenizer, AutoModel
import faiss
import numpy as np
st.title('Умный поиск фильмов 🔍🎦')
with st.sidebar:
st.header('Выберите страницу')
page = st.selectbox("Выберите страницу", ["Главная", "какая-то еще", "Итоги"])
if page == "Главная":
st.header('Выполнила команда "FindMyMovie":')
st.subheader('🎥Алексей')
st.subheader('🎬Светлана')
st.subheader('🍿Тата')
st.subheader('Наши задачи:')
st.markdown(f"<span style='font-size:{20}px; color:purple'>{'Задача №1: Спарсить информацию по 5 тыс. [фильмов](https://www.kinoafisha.info/) и обработать ее'}</span>", unsafe_allow_html=True)
st.markdown(f"<span style='font-size:{20}px; color:purple'>{'Задача №2: Разработать систему поиска фильма по пользовательскому запросу'}</span>", unsafe_allow_html=True)
st.markdown(
f"<div style='border: 2px solid #800080; padding: 10px; text-align: center;'><span style='font-size: 20px; color: violet;'>Мы любезно позаимствовали данные о фильмах с \
Киноафиши, ни один участник команды при этом не пострадал 💟</span></div>",
unsafe_allow_html=True
)
st.info('🌟Сервис принимает на вход описание фильма от пользователя и возвращает заданное количество подходящих вариантов')
df = pd.read_csv('data_with_adds.csv')
st.info('🌟Если не знаете, что посмотреть, нажмите кнопку "Сгенерировать" - сервис предложит вам 10 случайных фильмов из библиотеки')
if st.button("Сгенерировать 🎲"):
# Получение случайных 10 строк
random_rows = df[['movie_title', 'description']].sample(n=10).reset_index(drop=True)
random_rows.index = random_rows.index + 1
# Вывод на страничке Streamlit
st.write("Случайные 10 фильмов")
st.write(random_rows)
if page == "какая-то еще":
# Загрузка предварительно обученной модели ruBERT
tokenizer = AutoTokenizer.from_pretrained("DeepPavlov/rubert-base-cased-sentence")
model = AutoModel.from_pretrained("DeepPavlov/rubert-base-cased-sentence")
df2 = pd.read_csv('data_with_adds.csv')
embeddings_array = np.load('embeddings.npy')
index = faiss.read_index('desc_faiss_index.index')
def encode_description(description):
tokens = tokenizer(description, return_tensors="pt")
with torch.no_grad():
outputs = model(**tokens)
embeddings = outputs.last_hidden_state.mean(dim=1)
return embeddings.cpu().numpy().astype('float32')
# embeddings = pd.read_pickle('embeddings.pkl')
def main():
st.title("Система поиска фильмов")
# Пользовательский ввод
user_input = st.text_input("Введите описание фильма:")
if st.button("Искать🔍🎦"):
if user_input:
# Векторизация введенного запроса
input_embedding = encode_description(user_input)
# Поиск с использованием Faiss
_, sorted_indices = index.search(input_embedding.reshape(1, -1), 5) # Изменил на 5
# Используйте индексы для извлечения строк из DataFrame
recs = df2.iloc[sorted_indices[0]].reset_index(drop=True)
recs.index = recs.index + 1
# Вывод рекомендованных фильмов с изображениями
st.subheader("Рекомендованные фильмы 🎉:")
for i in range(5):
st.title(recs['movie_title'].iloc[i]) # Вывести название фильма
st.text(recs['description'].iloc[i]) # Вывести полное описание фильма
st.image(recs['image_url'].iloc[i], caption=recs['movie_title'].iloc[i], use_column_width=True)
if __name__ == "__main__":
main() |