Spaces:
Sleeping
Sleeping
File size: 7,493 Bytes
35b3c68 51ac38d 35b3c68 78e411c 35b3c68 78e411c 38972c8 78e411c 38972c8 78e411c 38972c8 78e411c 38972c8 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 24a550e 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c 35b3c68 78e411c |
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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
import streamlit as st
import pandas as pd
import torch
from transformers import AutoTokenizer, AutoModel
import faiss
import numpy as np
@st.cache_data
def load_data(url):
df = pd.read_csv(url) # 👈 Download the data
return df
df = load_data('data/final_data.csv')
# @st.cache_data
# def embedding_and_index():
# embeddings_array = np.load('data/embeddings_final.npy')
# index = faiss.read_index('data/desc_faiss_index_final.index')
# return(embeddings_array, index)
# embeddings_array, index = embedding_and_index()
# @st.cache_resource
# def load_tokenizer_and_model():
# tokenizer = AutoTokenizer.from_pretrained("DeepPavlov/rubert-base-cased-sentence")
# model = AutoModel.from_pretrained("DeepPavlov/rubert-base-cased-sentence")
# return tokenizer, model
# tokenizer, model = load_tokenizer_and_model()
# @st.cache_resource
# def encode_description(description, tokenizer, model):
# 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')
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("""
<span style='font-size:18px; color:purple;'>Задача 1:</span> Спарсить информацию по 5 тыс. фильмов и обработать ее
<span style='font-size:18px; 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.subheader(' '*10)
st.info('🌟Сервис принимает на вход описание фильма от пользователя и возвращает заданное количество подходящих вариантов')
st.info('🌟Если не знаете, что посмотреть, нажмите кнопку "Сгенерировать" - сервис предложит вам 10 случайных фильмов из библиотеки')
# Отображаем HTML-разметку в Streamlit
if st.button("Сгенерировать 🎲"):
# Получение случайных 10 строк
random_rows = df[['movie_title', 'description']].sample(n=10).reset_index(drop=True)
random_rows.index = random_rows.index + 1
st.markdown(f"<span style='font-size:{20}px; color:violet'>{'Сегодня мы подобрали для вас следующие фильмы:'}</span>", unsafe_allow_html=True)
st.write(random_rows)
st.image("apps/1.png", use_column_width=True)
# if page == "Подбор фильмов по описанию":
# def main():
# # Пользовательский ввод
# user_input = st.text_input("Введите описание фильма:", value="", help="Чем подробнее будет ваше описание, тем точнее мы сможем подобрать для вас фильм 🤗'")
# 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.markdown(f"<span style='font-size:{20}px; color:purple'>{recs['movie_title'].iloc[i]}</span>", unsafe_allow_html=True)
# # Создаем две колонки: одну для текста, другую для изображения
# col1, col2 = st.columns([2, 1])
# # В колонке отображаем название фильма, описание, роли и ссылку
# col1.info(recs['description'].iloc[i])
# col1.markdown(f"**В ролях:** {recs['actors'].iloc[i]}")
# col1.markdown(f"**Фильм можно посмотреть [здесь]({recs['page_url'].iloc[i]})**")
# # В колонке отображаем изображение
# col2.image(recs['image_url'].iloc[i], caption=recs['movie_title'].iloc[i], width=200)
# with st.sidebar:
# st.info("""
# #### Мы смогли помочь вам с выбором?
# """)
# feedback = st.text_input('Поделитесь с нами вашим мнением')
# feedback_button = st.button("Отправить отзыв", key="feedback_button")
# if feedback_button and feedback:
# feedback_container.success("Спасибо, каждый день мы стараемся быть лучше для вас 💟")
# elif feedback_button:
# feedback_container.warning("Пожалуйста, введите отзыв перед отправкой.")
# if __name__ == "__main__":
# main()
# if page == "Итоги":
# st.header('Инструменты для создания проекта: ')
# list_text = """
# <div style='color: violet; border: 2px solid purple; padding: 10px;'>
# <ul>
# <li>Используемые языковые модели: rubert-base-cased-sentence, rubert-tiny2</li>
# <li>Библиотека Sentence Transformers</li>
# <li>Faiss (для уменьшения времени генерации подборки фильмов)</li>
# <li>Сайт-жертва для парсинга - <a href="https://www.kinoafisha.info/" style='color: purple;'>Киноафиша</a></li>
# </ul>
# </div>
# """
# # Отображение HTML-разметки в Streamlit
# st.markdown(list_text, unsafe_allow_html=True) |