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("""
ΠΠ°Π΄Π°ΡΠ° 1: Π‘ΠΏΠ°ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ 5 ΡΡΡ. ΡΠΈΠ»ΡΠΌΠΎΠ² ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π΅
ΠΠ°Π΄Π°ΡΠ° 2: Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΈΠ»ΡΠΌΠ° ΠΏΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ Π·Π°ΠΏΡΠΎΡΡ
""", unsafe_allow_html=True)
st.markdown(
f"
ΠΡ Π»ΡΠ±Π΅Π·Π½ΠΎ ΠΏΠΎΠ·Π°ΠΈΠΌΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΎ ΡΠΈΠ»ΡΠΌΠ°Ρ
Ρ \
ΠΠΈΠ½ΠΎΠ°ΡΠΈΡΠΈ, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΡΠ°ΡΡΠ½ΠΈΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ ΠΏΠΎΡΡΡΠ°Π΄Π°Π» π
",
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"{'Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ°Π»ΠΈ Π΄Π»Ρ Π²Π°Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠ»ΡΠΌΡ:'}", 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"{recs['movie_title'].iloc[i]}", 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 = """
#
#
# - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΎΠ²ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ: rubert-base-cased-sentence, rubert-tiny2
# - ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Sentence Transformers
# - Faiss (Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄Π±ΠΎΡΠΊΠΈ ΡΠΈΠ»ΡΠΌΠΎΠ²)
# - Π‘Π°ΠΉΡ-ΠΆΠ΅ΡΡΠ²Π° Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° - ΠΠΈΠ½ΠΎΠ°ΡΠΈΡΠ°
#
#
# """
# # ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ HTML-ΡΠ°Π·ΠΌΠ΅ΡΠΊΠΈ Π² Streamlit
# st.markdown(list_text, unsafe_allow_html=True)