Эта статья является первой из четырех статей, в которых рассказывается о создании полезного гибридного пользовательского интерфейса, помогающего в процессе анализа твитов, сообщений и событий в Facebook, обзоров и всевозможных текстов с использованием нескольких доходов, включая Машинное обучение , Деревья решений и стандартные библиотеки Python.

Эта первая часть будет посвящена использованию очень практичных библиотек Python, а части 2, 3 и 4 будут больше сосредоточены на использовании машинного обучения, деревьев решений, использования API ...

Текстовый анализ является одним из наиболее важных, но не так сфокусированных на аспектах анализа данных, поскольку твиты, публикации в Facebook, обзоры и комментарии лежат в основе всего, что происходит в Интернете. Создание интеллектуального графического интерфейса пользователя (GUI), который поможет любому пользователю (который не обязательно имеет какие-либо навыки программирования) получить интересный и актуальный результат.

Ступенька.

Первой частью процесса было создание интерфейса для работы, который действительно может обрабатывать небольшие тексты и давать нам общий обзор текста.

Для этого мы будем использовать известную библиотеку Python Tkinter, которая поможет нам создать небольшой эргономичный графический интерфейс для помощи в написании текста.
Ее основная цель (для этой части проекта) - это предоставить пользователю:
перевод, исправление текста и, наконец, полярность и субъективность.

Прежде чем идти дальше, Полярность - это коэффициент, изменяющийся от -1 до 1: где -1 означает ужасный и очень негативный аспект, а 1 - что-то довольно позитивное и действительно радостное.
Для Субъективности это коэффициент, идущий от От 0 до 1, который показывает, насколько объективным (0) или субъективным является текст, предоставленный пользователем.

Графический интерфейс.

1. Создание окна

Как упоминалось ранее, мы будем использовать библиотеку Tkinter. Код для создания окна интерфейса выглядит следующим образом:

import tkinter as tk
from tkinter import ttk
from tkinter.ttk import Combobox
#Traitement de texte et fichiers
from textblob import TextBlob
from py_translator import Translator
window = tk.Tk() 
window.title("TextAnalysis") #What is going to be displayed as title
window.geometry('400x400+600+350') #Window Size (Up to the user)
window.mainloop()

Несмотря на то, что размер окна является чисто предпочтительным, моей целью было сохранить окно небольшого размера для интерфейса, чтобы его можно было использовать в углу дисплея, не закрывая исходную веб-страницу в фоновом режиме или исходный текстовый файл, который будет проанализирован. Как вы увидите далее в этой статье, я постарался сделать его максимально простым и эффективным, чтобы он соответствовал размеру, который я указал в образце. Также есть несколько библиотек, которые будут полезны позже, например py_translator и Textblob.

Важно: не забудьте добавить «window.mainloop ()» в свой код (в последней строке), чтобы поддерживать отображение интерфейса вместо того, чтобы код запускается успешно один раз и сразу закрывает окно сразу после его открытия (у вас даже не будет времени, чтобы увидеть его отображение без функции основного цикла).

Вот что вы увидите:

2.Заполнение графического интерфейса

Теперь, когда у нас есть наше окно, следующим шагом будет заполнение интерфейса всеми метками, полями со списком (скользящие списки) и кнопками, которые сделают его удобным и эргономичным.
В приведенном ниже коде мы размещаем различные кнопки и метки. будет использоваться для создания нашего графического интерфейса.

TextUser = tk.Entry(tab2)
TextUser.place(x=65, y=25)
SentimentPlbl=tk.Label(window, text='Polarity', bg='#C0C0C0')
SentimentPlbl.place(x=50,y=240)
SentimentSlbl=tk.Label(window, text='Subjectivity', bg='#C0C0C0')
SentimentSlbl.place(x=50,y=200)
languages = ("French", "Spanish", "German", "Japanese", "Korean", "Chinese") #Languages handled for translation
cb = Combobox(tab2, values=languages) #Translation combobox
cb.place(x=65, y=70)
#Traduire = tk.Button(window, text='Traduire', bg='#D3D3D3',width=25, #command=Trad)
#Traduire.place(x=40, y=120)
#Corriger = tk.Button(window, text='Corriger', bg='#D3D3D3',width=25, #command=VerifO)
#Corriger.place(x=40, y=280)
#Sentiment = tk.Button(window, text='Analyse Sentiment', #bg='#D3D3D3',width=25, command=SentimP)
#Sentiment.place(x=40, y=155)
window.mainloop()

Вставка этого непосредственно в вашу IDE будет генерировать только метки, поскольку я прокомментировал строки, относящиеся к кнопкам, чтобы избежать отображения ошибок, поскольку мы еще не определили каждую команду кнопки.
Я всегда сначала определяю свои функции python во избежание каких-либо проблем, связанных с переменными.
Убедитесь, что фрагменты кода, которые будут указаны ниже, находятся над кодом, который был только что представлен. Как видно из небольшого фрагмента кода выше, каждая кнопка требует определения функции, которая будет использоваться как команда, которая определяется как таковая:

Команда перевода (примечание: Trad).

Это функция, которая позволит нам придумать перевод текста, вставленного пользователем. Мы сократили некоторые языки, но есть гораздо больше, которые можно реализовать благодаря библиотеке py_translator (которая очень легкая и довольно эффективная с точки зрения перевода), как показано в ее документации.

def Trad():
    text = TextTranslate.get()
    if (cb.get() == "Spanish"):
        s = Translator().translate(text=text, dest='es').text
        Translationlbl = tk.Label(window, text=s)
        Translationlbl.place(x=60, y=100)

    if (cb.get() == 'French'):
        l = Translator().translate(text=text, dest='fr').text
        Translationlbl = tk.Label(window, text=l)
        Translationlbl.place(x=60, y=100)

    if (cb.get() == 'German'):
        m = Translator().translate(text=text, dest='de').text
        Translationlbl = tk.Label(window, text=m)
        Translationlbl.place(x=60, y=100)

    if (cb.get() == 'Japanese'):
        v = Translator().translate(text=text, dest='ja').text
        Translationlbl = tk.Label(window, text=v)
        Translationlbl.place(x=60, y=100)

    if (cb.get() == 'Korean'):
        d = Translator().translate(text=text, dest='ko').text
        Translationlbl = tk.Label(window, text=d)
        Translationlbl.place(x=60, y=100)

    if (cb.get() == 'Chinese'):
        f = Translator().translate(text=text, dest='zh').text
        Translationlbl = tk.Label(window, text=f)
        Translationlbl.place(x=60, y=100)

Команда исправления орфографии (примечание: Verif0).

Это также зависит от другой функции библиотеки Textblob - функции .correct. Но для этого мы должны сначала преобразовать наш текст в каплю, что стало очень просто благодаря этой библиотеке. После этого .correct сделает все.

Возможно, результат еще не идеален, но он может исправить классические ошибки, которые делают пользователи, и предоставить им небольшую корректуру.

Код выглядит так:

def VerifO():
    text = TextTranslate.get()
    o = TextBlob(text)
    Correctionlbl = tk.Label(window, text=o.correct())
    Correctionlbl.place(x=100, y=300)

Анализ полярности и субъективности.

Благодаря Textblob мы можем определить общую полярность и субъективность текста с помощью простых функций: .sentiment.polarity и .sentiment.subjectivity.
Результаты, как и другие аспекты анализа, будут отображаться в виде меток.

Еще раз, мы должны сначала убедиться, что большой двоичный объект был создан.
Код выглядит следующим образом:

def SentimP():
    text = TextTranslate.get()
    g = TextBlob(text) #Generating the blob
    SentimentPlbl=tk.Label(window, text=g.sentiment.polarity)
    SentimentPlbl.place(x=170,y=265)
    SentimentSlbl = tk.Label(window, text=g.sentiment.subjectivity)
    SentimentSlbl.place(x=170, y=225)

Теперь, когда мы определили функции, мы можем безопасно использовать весь «заполняющий» патч кода:

TextUser = tk.Entry(window)
TextUser.place(x=65, y=25)
SentimentPlbl=tk.Label(window, text='Polarity', bg='#C0C0C0')
SentimentPlbl.place(x=50,y=240)
SentimentSlbl=tk.Label(window, text='Subjectivity', bg='#C0C0C0')
SentimentSlbl.place(x=50,y=200)
languages = ("French", "Spanish", "German", "Japanese", "Korean", "Chinese") #Languages handled for translation
cb = Combobox(tab2, values=languages) #Translation combobox
cb.place(x=65, y=70)
Traduire = tk.Button(window, text='Traduire', bg='#D3D3D3',width=25, command=Trad)
Traduire.place(x=40, y=120)
Corriger = tk.Button(window, text='Corriger', bg='#D3D3D3',width=25, command=VerifO)
Corriger.place(x=40, y=280)
Sentiment = tk.Button(window, text='Analyse Sentiment', bg='#D3D3D3',width=25, command=SentimP)
Sentiment.place(x=40, y=155)
window.mainloop()

После того, как вы запустите весь код, окончательный результат должен выглядеть так:

Как видите, субъективность больше стремится к 1, чем к 0, поскольку мой текст был довольно субъективным, учитывая, что вдохновение - это что-то личное. Полярность также довольно положительная.
Я добавил фон к меткам вывода, чтобы выделить их, но его можно легко удалить, просто удалив «bg = # C0C0C0» из синтаксиса объявления метки.
Кроме того, у нас была успешная попытка исправить мою орфографию, но это не всегда работает, поскольку функция еще не улучшена: иногда некоторые слова могут быть полностью заменены (даже если они правильные), поэтому исправление орфографии - это всего лишь крошечное дополнение, которое должен быть более развитым.

Это почти все, что касается первой части этого анализатора, следующая часть будет посвящена созданию модели машинного обучения, которая поможет анализировать тексты еще лучше. Мы также увидим, как мы можем заставить наш графический интерфейс анализировать текстовые файлы, а не только тексты, вставленные пользователем, и как нам удастся создавать вкладки в графическом интерфейсе с помощью библиотеки Tkinter.