Im Rahmen einer Analyse von Textdaten sind Sentiment-Analysen häufig ein geeignetes Mittel, um zusätzliche Erkenntnisse aus Texten zu generieren. Von einem Freund bin ich auf Textblob hingewiesen worden, habe es ausprobiert und möchte in diesem Blogpost einen kurzen Guide zu Textblob geben und meine Erfahrungen teilen. In dem Testprojekt wurden englische Textdaten analysiert - für deutsche Daten ist "sentiws" (https://github.com/Liebeck/spacy-sentiws) eine gute Alternative, um eine Sentiment Analyse schnell und einfach durchzuführen.

Stellt zunächst in der Shell sicher, dass Ihr die aktuelle Version von Python3 installiert habt und installiert Textblob mit pip:

pip install -U textblob
python -m textblob.download_corpora

Oder alternativ mit conda:

conda install -c conda-forge textblob
python -m textblob.download_corpora

Nun könnt Ihr eine Python Datei z.B. "script.py" erstellen, ein erstes Blob-Objekt erzeugen und Euch die Part-of-speech-Tags ausgeben lassen:

from textblob import TextBlob

text = TextBlob('This is a good example.')

print(text.tags)

Möchtet Ihr das Sentiment von Eurer Eingabe, in diesem Fall 'This is a good example', ausgeben lassen baut den folgenden Code in Euer Skript ein:

print(text.sentiment.polarity)

Ihr erhaltet nun einen Wert im Bereich [-1,1], wobei Werte unter 0 ein ein negatives Sentiment implizieren, Werte oberhalb von 1 ein positives. Je weiter die Werte von 0 verschieden sind, desto stärker ist das Sentiment des Textes ausgeprägt.

Wenn Ihr nun eine größere Menge an Texten Eurer Sentiment Analyse unterziehen wollt könnt Ihr wie folgt vorgehen. Dabei gehe ich davon aus, dass Ihr ein CSV Dokument habt, in dem die Textdaten, die Ihr analysieren lassen möchtet in einer Spalte übereinander stehen. Dafür müsst Ihr vorher noch pandas über die Shell installieren.

conda install pandas

Nun könnt Ihr das folgende Skript laufen lassen:

import pandas as pd
from textblob import TextBlob

df = pd.read_csv('your_file_name.csv', sep=',')
text = df['The_column_where_your_text_is_in']

sentiment = []
sentiment_temp = []
result = []

for elem in text:
    blob = TextBlob(elem)
    for sentence in blob.sentences:
        sentiment_temp.append(sentence.sentiment.polarity)
    sentiment = Average(sentiment_temp)
    result.append(sentiment)

df['Sentiment'] = result
df.to_csv("./new_file_name.csv", sep=',', index=False)

Ihr solltet nun Euren ursprünglichen Datensatz erhalten, angereichert um einen Sentiment Score pro Beobachtung.

Wenn Ihr die Genauigkeit der Sentiment Analyse erhöhen möchtet, könntet Ihr zum Beispiel den Naive Bayes Analyzer verwenden.

Ihr findet den Code in folgendem GitHub repository: https://github.com/jasynho/kielai-tutorials

Wenn Ihr Fragen zum Artikel habt oder Fragen, die über den Artikel hinaus gehen, könnt Ihr mir gerne eine Mail schreiben an jonas@kiel.ai.