File size: 4,355 Bytes
d910a94
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
import pandas as pd
import requests
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import os 
import re

# Установка API URL и заголовков
API_URL_TRA = "https://api-inference.huggingface.co/models/Helsinki-NLP/opus-mt-en-ru"
API_URL_KEY = "https://api-inference.huggingface.co/models/ml6team/keyphrase-extraction-kbir-inspec"
API_URL_SUM = "https://api-inference.huggingface.co/models/facebook/bart-large-cnn"

headers = {"Authorization": os.getenv("API_TOKEN")}


# Функция для получения ключевых слов
def get_key_words(payload):
    response = requests.post(API_URL_KEY, headers=headers, json=payload)
    return response.json()

# Функция для перевода слова
def translate_key_words(payload):
    response = requests.post(API_URL_TRA, headers=headers, json=payload)
    return response.json()

# Функция для составления конспекта
def make_summary(payload):
    response = requests.post(API_URL_SUM, headers=headers, json=payload)
    return response.json()


# Очищаем список слов
def clean_list(words_list):
    cleaned_words_list = []
    for word in words_list:
        word = word.lower()
        word =re.sub(r"[^а-яА-Яa-zA-Z\s]", "", word)
        word = word.lstrip()
        word = word.rstrip()
        cleaned_words_list.append(word)
    return cleaned_words_list


# Настраиваем заголовок и название страницы
st.set_page_config(layout="wide", page_title="Students' Personal Assistant")
st.markdown(' # :female-student: Персональный помощник для студентов')

st.divider()
st.markdown('# :blue_book:  Конспект на английском языке')

col1, col2 = st.columns(2)
text_from_tarea = col1.text_area('Введите тект статьи на английском языке', height=500)

button_start = st.button('Обработать текст')
key_words_list = []


if button_start:
    with st.spinner('Составляем конспект...'):
        # Составляем конспект
        summary_text = make_summary({"inputs": text_from_tarea})
        col2.text_area('Конспект статьи', height=500, value=summary_text[0]['summary_text'])

    with st.spinner('Получаем ключевые слова...'):
        # Извлекаем ключевые слова
        kew_words = get_key_words({"inputs": text_from_tarea})
        for key_word in kew_words:
            key_words_list.append(key_word['word'].lower())

        sorted_keywords = set(sorted(key_words_list))
        sorted_keywords = clean_list(sorted_keywords)

    with st.spinner('Переводим ключевые слова...'):
        # Переводим ключевые слова
        translated_words_dict = translate_key_words({"inputs": sorted_keywords})
        print(translated_words_dict)
        translated_words_list = [word['translation_text'] for word in translated_words_dict]

        # Создаем карточки
        cleaned_words_list_ru = clean_list(translated_words_list)
        cards_list = []
        for item1, item2 in zip(sorted_keywords, cleaned_words_list_ru):
            cards_list.append([item1, item2])

    st.success('Готово')

    with st.spinner('Создаем WordCloud...'):
        # Выводим Word Cloud
        st.set_option('deprecation.showPyplotGlobalUse', False)
        words_str = ', '.join(sorted_keywords)
        w = WordCloud(background_color="white", width=1600, height=800).generate(words_str)
        plt.imshow(w, interpolation='bilinear')
        plt.imshow(w)
        plt.axis("off")
        st.pyplot()

    # Выводим карточки
    st.markdown('# :bookmark_tabs: Карточки из ключевых слов')
    col1, col2, col3 = st.columns(3)
    columns = [col1, col2, col3]
    for index, el in enumerate(cards_list):
        with columns[(index + 1) % 3]:
            with st.container(border=True):
                col4, col5 = st.columns([0.1, 0.9])
                with col4:
                    st.write("# :flower_playing_cards:")
                with col5:
                    st.write(f'## :green[{el[0]}]')
                    st.write(f'### :blue[{el[1]}]')