import streamlit as st import pandas as pd import numpy as np import time import base64 import requests from PIL import Image from io import BytesIO from model.bert import recommend LIST_GENRE = ['Классическая литература', 'Современная проза', 'Отечественные детективы', 'Зарубежные детективы', 'Иронические детективы', 'Отечественная фантастика', 'Зарубежная фантастика', 'Отечественное фэнтези', 'Зарубежное фэнтези', 'Ужасы', 'Фантастический боевик', 'Российские любовные романы', 'Зарубежные любовные романы', 'Поэзия', 'Драматургия', 'Публицистика', 'Биографии', 'Мемуары', 'Исторические романы', 'Комисксы и манга', 'Юмор', 'Афоризмы и цитаты', 'Мифы легенды эпос', 'Сказки', 'Пословицы поговорки загадки', 'Прочие издания', 'Другое'] st.header(""" Рекомендательная модель 🤖 """, divider='blue') text_users = st.text_input('**Опишите ваши предпочтения по выбору книги:**') genre_book = st.selectbox('**По желанию укажите жанр книги:**', options=LIST_GENRE, index=None) count_recommended = st.slider('**Пожалуйста, укажите какое количество рекомендаций Вы хотите получить:**', min_value=1, max_value=10, value=5) push_button = st.button('**Получить рекомендации >>>**', type='primary') start_time = time.time() if push_button: recommend_book, value_metrics = recommend(text_users, count_recommended) st.write(""" #### Модель нашла лучшие рекомендации для Вас 🎉 : """) st.info(f""" - ##### Это заняло всего {round(time.time() - start_time, 3)} сек. """) col1, col2, col3, col4 = st.columns(4) with col1: st.write('##### Обложка') with col2: st.write('##### Инфо') with col3: st.write('##### Аннотация') with col4: st.write('##### Величина сходства (Евклидово расстояние)') st.divider() for index in range(count_recommended): col1, col2, col3, col4 = st.columns(4) response = requests.get(recommend_book.loc[index, 'Обложка']) image_bytes = BytesIO(response.content) image = Image.open(image_bytes) with col1: st.image(image) with col2: st.write(f"{recommend_book.loc[index, 'Инфо']}") with col3: st.write(f"{recommend_book.loc[index, 'Аннотация']}") with col4: st.write(f'{value_metrics[index]}') st.divider() time.sleep(3) with st.sidebar: st.info(""" #### Понравились ли Вам наши рекомендации? """) col1, col2 = st.columns(2) with col1: st.button('**Да, очень**🔥', type='primary') with col2: st.button('**Нет, можно лучше**👎🏻', type='primary')