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 = """ #
# #
# """ # # ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ HTML-Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ Π² Streamlit # st.markdown(list_text, unsafe_allow_html=True)