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)