Sentimentanalyse is verrassend nauwkeurig en je kunt deze eenvoudige Tkinter-app bouwen om het uit te proberen.

Sentimentanalyse is een techniek om de emotionele toon van een stuk tekst te bepalen. Het maakt gebruik van natuurlijke taalverwerking, tekstanalyse en computationele taalkunde. Hiermee kunt u de toon classificeren in positief, neutraal of negatief. Dit helpt bedrijven bij het analyseren van feedback van klanten op sociale media, beoordelingen en enquêtes.

Op basis van deze gegevens kunnen ze hun producten en campagnes effectiever strategiseren. Leer hoe u een applicatie kunt bouwen die sentimenten detecteert met behulp van Python.

De Tkinter en vaderSentiment Module

Met Tkinter kunt u desktop-applicaties maken. Het biedt een verscheidenheid aan widgets zoals knoppen, labels en tekstvakken die het gemakkelijk maken om apps te ontwikkelen. U kunt Tkinter gebruiken om bouw een woordenboek-app in Python of te maak je eigen nieuwsapplicatie die verhalen bijwerkt via een API.

Om Tkinter te installeren, opent u een terminal en voert u het volgende uit:

instagram viewer
pip installeer tkinter

VADER (Valence Aware Dictionary en sEntiment Reasoner) is een lexicon en op regels gebaseerde tool voor sentimentanalyse. Het is vooraf gebouwd en wordt veel gebruikt in Natuurlijke taalverwerking. Het algoritme heeft een reeks vooraf gedefinieerde woorden die verschillende gevoelens vertegenwoordigen. Op basis van de woorden in de zin geeft dit algoritme een polariteitsscore. Aan de hand van deze score kun je bepalen of de zin positief, negatief of neutraal is.

Voer deze terminalopdracht uit om het vaderSentiment-pakket in Python te installeren:

pip installeer vaderSentiment

Sentimenten detecteren met behulp van Python

U vindt de broncode van dit voorbeeldprogramma in zijn GitHub-opslagplaats.

Begin met het importeren van de vereiste VADER- en tkinter-modules:

van vaderSentiment.vaderSentiment importeren SentimentIntensityAnalyzer
van tkinter importeren *

Definieer vervolgens een functie, wis alles(). Het doel is om de invoervelden te wissen, wat u kunt doen met behulp van de verwijderen() methode vanaf een startindex van 0 naar de definitieve index, EINDE.

defwis alles():
negativeField.delete(0, EINDE)
neutralField.delete(0, EINDE)
positiveField.delete(0, EINDE)
overallField.delete(0, EINDE)
textArea.delete(1.0, EINDE)

Definieer een functie, detect_sentiment(). Gebruik de methode get om het woord op te halen dat is ingevoerd in de tekstGebied widget en maak er een object van SentimentIntensityAnalyzer klas. Gebruik de polariteit_scores methode op de tekst die u hebt opgehaald en pas het VADER-algoritme voor sentimentanalyse toe.

defdetect_sentiment():
zin = textArea.get("1.0", "einde")
sentiment_obj = SentimentIntensityAnalyzer()
sentiment_dict = sentiment_obj.polarity_scores (zin)

Extraheer de negatieve sentimentscore ('negeren') en zet het om in een percentage. Voer de verkregen waarde in de negatiefVeld vanaf positie 10. Herhaal hetzelfde proces voor de neutrale gevoelsscore ('neu') en de positieve sentimentscore('pos').

 string = str (sentiment_dict['negeren'] * 100)
negatiefVeld.insert(10, snaar)

string = str (sentiment_dict['neu'] * 100)
neutralField.insert(10, snaar)

string = str (sentiment_dict['pos'] * 100)
positiveField.insert(10, snaar)

Extraheer de waarde van de samengestelde sleutel die het algehele gevoel van de zin bevat. Als de waarde groter is dan of gelijk is aan 0,05, is de zin positief. Als de waarde kleiner is dan of gelijk is aan -0,05, is de zin negatief. Voor waarden tussen -0,05 en 0,05 is het een neutrale uitspraak.

als sentiment_dict['verbinding'] >= 0.05:
tekenreeks = "Positief"
elif sentiment_dict['verbinding'] <= - 0.05:
tekenreeks = "Negatief"
anders:
tekenreeks = "Neutrale"

Plaats het resultaat in de overallField vanaf de 10e positie:

 overallField.insert(10, snaar)

Initialiseer een grafisch gebruikersinterfacevenster met Tkinter. Stel de achtergrondkleur, de titel en de afmetingen van het venster in. Maak vijf labels. Een die de gebruiker vraagt ​​om een ​​zin in te voeren en de andere vier voor de verschillende gevoelens. Stel het bovenliggende element in waarin u het wilt plaatsen, de tekst die het moet weergeven en de lettertypestijlen die het moet hebben, samen met de achtergrondkleur.

Definieer een tekstwidget om de zin van de gebruiker te ontvangen. Stel het bovenliggende element in waarin u het wilt plaatsen, de hoogte, breedte, lettertypestijlen en de achtergrondkleur die het moet hebben. Definieer drie knoppen. Een om de sentimentanalyse uit te voeren, een om de inhoud na gebruik te wissen en een om de applicatie te verlaten. Stel het bovenliggende venster in, de tekst die moet worden weergegeven, de achtergrondkleur, lettertypestijlen en de opdracht die u wilt uitvoeren wanneer erop wordt geklikt.

als __naam__ == "__voornaamst__":
gui = Tk()
gui.config (achtergrond="#A020f0")
gui.titel("VADER Sentimentanalysator")
gui.geometry("400x700")
enterTekst = Label (gui, tekst="Voer uw zin in: ",lettertype="arial 15 vet",bg="#A020f0")
negatief = label (gui, tekst="Negatief percentage: ", lettertype="ariële 15",bg="#A020f0")
neutraal = Label (gui, tekst="Nutraal Percentage: ", lettertype="ariële 15",bg="#A020f0")
positief = label (gui, tekst="Positief Percentage: ", lettertype="ariële 15",bg="#A020f0")
algemeen = label (gui, tekst="Algemene zin is: ", lettertype="ariële 15",bg="#A020f0")
textArea = Tekst (gui, hoogte=5, breedte=25, lettertype="ariële 15", bg="#cf9fff")
check = knop (gui, tekst="Controleer gevoel", bg="#e7305b", lettertype=("arieel", 12, "vetgedrukt"), commando=detect_sentiment)
wissen = Knop (gui, tekst="Duidelijk", bg="#e7305b", lettertype=("arieel", 12, "vetgedrukt"), commando=clearAll)
Afsluiten = knop (gui, tekst="Uitgang", bg="#e7305b", lettertype=("arieel", 12, "vetgedrukt"), commando=afsluiten)

Definieer vier invoervelden voor de verschillende sentimenten en stel hun bovenliggende venster- en lettertypestijlen in.

 negatiefVeld = Invoer (gui, font="ariële 15")
neutralField = invoer (gui, font="ariële 15")
positiveField = Invoer (gui, font="ariële 15")
overallField = Invoer (gui, font="ariële 15")

Gebruik een raster bestaande uit 13 rijen en drie kolommen voor de algehele lay-out. Plaats de verschillende elementen zoals labels, tekstinvoervelden en knoppen in verschillende rijen en kolommen zoals afgebeeld. Voeg waar nodig de nodige opvulling toe. Stel de kleverig optie om "W" om de teksten in de cel links uit te lijnen.

 enterText.grid (rij=0, kolom=2, padie=15)
textArea.grid (rij=1, kolom=2, padx=60, padie=10, plakkerig=W)
check.grid (rij=2, kolom=2, padie=10)
negatief.raster (rij=3, kolom=2, padie=10)
neutral.grid (rij=5, kolom=2, padie=10)
positief.raster (rij=7, kolom=2, padie=10)
overall.grid (rij=9, kolom=2, padie=5)
negativeField.grid (rij=4, kolom=2)
neutralField.grid (rij=6, kolom=2)
positiveField.grid (rij=8, kolom=2)
overallField.grid (rij=10, kolom=2, padie=10)
clear.grid (rij=11, kolom=2, padie=10)
Exit.grid (rij=12, kolom=2, padie=10)

De Hoofdlus() functie vertelt Python om de Tkinter-gebeurtenislus uit te voeren en te luisteren naar gebeurtenissen totdat u het venster sluit.

 gui.mainloop()

Zet alle code bij elkaar en je kunt het resulterende korte programma gebruiken om sentimenten te detecteren.

De uitvoer van het detecteren van gevoelens met behulp van Python

Bij het uitvoeren van dit programma verschijnt het venster VADER Sentiment Analyzer. Toen we het programma testten op een positieve zin, detecteerde het deze met een nauwkeurigheid van 79%. Bij het proberen van een neutrale verklaring en een negatieve, kon het programma detecteren met respectievelijk 100% en 64,3% nauwkeurigheid.

Alternatieven voor sentimentanalyse met behulp van Python

U kunt Textblob gebruiken voor sentimentanalyse, spraaklabels en tekstclassificatie. Het heeft een consistente API en een ingebouwde classificatie voor sentimentpolariteit. NLTK is een uitgebreide NLP-bibliotheek die een breed scala aan hulpmiddelen voor tekstanalyse bevat, maar een steile leercurve heeft voor beginners.

Een van de meest populaire tools is de IBM Watson NLU. Het is cloudgebaseerd, ondersteunt verschillende talen en heeft functies zoals entiteitsherkenning en sleutelextractie. Met de introductie van GPT kunt u de OpenAI API gebruiken en deze in uw applicaties integreren om in realtime nauwkeurige en betrouwbare klantsentimenten te krijgen.