Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import base64 | |
| import fasttext | |
| import re | |
| import torch | |
| from model_wrapper.model_wrapper import ModelWrapper | |
| st.set_page_config( | |
| page_title="detoxi.ai", | |
| page_icon="./mini_logo1.png", | |
| layout="centered" | |
| ) | |
| # Кодируем логотип в base64 (для локальных файлов) | |
| def get_image_base64(path): | |
| with open(path, "rb") as img_file: | |
| return base64.b64encode(img_file.read()).decode() | |
| # Кэширование модели для ускорения работы | |
| def load_model(): | |
| return ModelWrapper() | |
| model_wrapper= load_model() | |
| bin_str = get_image_base64("./билли.png") | |
| page_bg_img = ''' | |
| <style> | |
| .stApp{ | |
| background-image: linear-gradient(rgba(255, 255, 255, 0.7), | |
| rgba(255, 255, 255, 0.7)), | |
| url("data:image/png;base64,%s"); | |
| background-size: cover; | |
| background-position: center; | |
| background-repeat: no-repeat; | |
| background-attachment: fixed; | |
| } | |
| </style> | |
| ''' % bin_str | |
| st.markdown(page_bg_img, unsafe_allow_html=True) | |
| logo_base64 = get_image_base64("./top_logo1.png") | |
| # Используем HTML для вставки логотипа в заголовок | |
| st.markdown( | |
| f""" | |
| <div style="display: flex; justify-content: center;"> | |
| <img src="data:image/png;base64,{logo_base64}" width="400"> | |
| </div> | |
| """, | |
| unsafe_allow_html=True | |
| ) | |
| # Описание | |
| st.write("""<p style='text-align: center; font-size: 24px;'>Это приложение сделает твою речь менее токсичной. | |
| И даже не придётся платить 300 bucks.</p>""", unsafe_allow_html=True) | |
| # Боковая панель | |
| with st.sidebar: | |
| st.header("""О приложении""") | |
| st.write(""" | |
| Это приложение, созданно для сдачи задания по ML. | |
| Оно показывает, чему мы научились за эту домашку: | |
| - Благославлять создателей hugging face | |
| - Писать прототипы приложений с помощью библиотеки Streamlit | |
| - Дружно работать в команде | |
| """, unsafe_allow_html=True) | |
| st.write("""<p style='text-align: center;'>Введите текст ниже, и приложение определит токсичность твоего предложения.</p>""", unsafe_allow_html=True) | |
| user_input = st.text_area('',height=200) | |
| model_type = st.radio( | |
| "Выберите модель", | |
| ("fasttext", "ru-BERT","FRIDA") | |
| ) | |
| def highlight_obscene_words(text, model_type): | |
| if model_type=="FRIDA": | |
| result=model_wrapper(text, model_type) | |
| result=result.predictions | |
| for item in result: | |
| if item.label=="non-toxic": | |
| st.markdown( | |
| "<span style='background:#47916B;'>{}:приемлемо</span>".format(item.text), | |
| unsafe_allow_html=True | |
| ) | |
| else: | |
| st.markdown( | |
| "<span style='background:#ffcccc;'>{}:токсично</span>".format(item.text), | |
| unsafe_allow_html=True | |
| ) | |
| else: | |
| label, prob=model_wrapper(text.lower(),model_type) | |
| if label=='__label__positive': | |
| st.markdown( | |
| "<span style='background:#47916B;'>{}:приемлемо</span>".format(text), | |
| unsafe_allow_html=True | |
| ) | |
| else: | |
| st.markdown( | |
| "<span style='background:#ffcccc;'>{}:токсично</span>".format(text), | |
| unsafe_allow_html=True | |
| ) | |
| if st.button("Проверить текст"): | |
| if user_input.strip(): | |
| st.subheader("Результат:") | |
| result = re.split(r'[.\n!?]+', user_input) | |
| result = [part for part in result if part.strip() != ""] | |
| if model_type=="FRIDA": | |
| highlight_obscene_words(result,model_type) | |
| else: | |
| if result!=[]: | |
| for text in result: | |
| highlight_obscene_words(text,model_type) | |
| else: | |
| st.warning("Пожалуйста, введите текст для проверки") |