Stimmungsanalyse (Sentiment Analysis) auf deutsch mit Python

Wie ist der Grundtenor in einem Text? Vermittelt er eine positive oder neutrale Stimmung? Oder gar eine negative? Was Menschen schnell und intuitiv erfassen, stellt den Computer vor ein schwieriges Problem. Noch schwieriger wird dieses, wenn es nicht um englische, sondern um deutschsprachige Texte geht. Mit der Python-Bibliothek textblob-de lassen sich Textdaten auf ihre Stimmung analysieren.

TextBlob: Simplified Text Processing

TextBlob ist die Basis für natural language processing (NLP) mit Python – sowohl für Python 2 als auch 3. Damit sind viele Ansätze wie etwa Erkennen von Wortarten, Extraktion von Substantiven, Stimmungsanalyse und auch Klassifizierungen möglich. So richtig zur Geltung kommt die Bibliothek in der englischen Sprache, aber inzwischen gibt es mit textblob-de eine Erweiterung, mit der sich auch deutsche Texte untersuchen lassen.

textblob-de installieren

Wie es sich gehört, wird textblob-de mithilfe von pip installiert, dem Paketverwaltungsprogramm für Python-Pakete. Das Paketverwaltungsprogramm ist bereits vorhanden, wenn auf dem Rechner Python läuft und muss nicht zusätzlich installiert werden.

Die Installation von textblob-de erfolgt in zwei Schritten. Wir starten zunächst das Terminal auf dem Mac und geben anschließend ein:

pip install -U textblob-de

Damit installieren wir textblob-de und sorgen mit „-U“ dafür, dass alle notwendigen Abhängigkeiten auf die neueste Version gebracht werden.

Im zweiten Schritt fügen wir Sprachmodelle und Sprachdaten aus dem Natural Language Toolkit (NLTK) hinzu. Das geschieht durch Ausführung von:

python3 -m textblob.download_corpora

Falls hierbei ein Fehler auftreten sollte, der in etwa folgendermaßen aussieht:

[nltk_data] Error loading brown: <urlopen error [SSL:
[nltk_data] CERTIFICATE_VERIFY_FAILED] certificate verify failed:
[nltk_data] unable to get local issuer certificate (_ssl.c:1045)>

hilft ein beherzter Doppelklick auf Install Certificates.command aus dem Python-Ordner im Programme-Verzeichnis. Anschließend ruft man

python3 -m textblob.download_corpora

erneut auf und die Installation sollte klappen.

Nun haben wir alles, was wir für eine basale Stimmungsanalyse benötigen und können loslegen.

Wir schreiben ein deutsches Stimmungsanalyse-Programm in Python

Um das Prinzip ein wenig kennenzulernen, schreiben wir ein kleines Stimmungsanalyse-Programm in Python und analysieren damit deutsche Texte.

#!/usr/local/bin/python3 #1`

from textblob_de import TextBlobDE as TextBlob #2

text1 = '''Das ist alles wunderschön. Ich freue mich.''' #3`

text2 = '''Heute ist der 3. Mai 2014 und Dr. Meier feiert seinen 43. Geburtstag. Ich muss unbedingt daran denken, Mehl, usw. für einen Kuchen einzukaufen. Aber leider habe ich nur noch EUR 3,50 in meiner Brieftasche.''' #4

text3 = '''Es ist so schlimm und so furchtbar. Es war alles so traurig und grässlich. #5'''

blob = TextBlob(text1`) #6

print(blob.sentences) #7

print(blob.tokens) #8

print(blob.tags) #9

print(blob.noun_phrases) #10

print(blob.sentiment) #11

blob = TextBlob(text3`) #12

print(blob.sentiment) #13

Gehen wir das Programm einmal Zeile für Zeile durch:

  1. Wir wollen Python in der Version 3 verwenden
  2. Wir wollen einen Text mit der deutschen Erweiterung von TextBlob verwenden, dafür importieren wir das Modul unter dem Namen TextBlob.
  3. In text1 merken wir uns einen Text mit offensichtlich positiver Stimmung.
  4. In text2 merken wir uns einen Text mit eher neutraler Stimmung.
  5. Und in text3 haben wir einen Text mit offensichtlich negativer Stimmung.
  6. Nun analysieren wir text1.
  7. Wir lassen uns die einzelnen Sätze ausgeben.
    Ausgabe:
    [Sentence("Das ist alles wunderschön."), Sentence("Ich freue mich.")]
  8. Hier werden uns die einzelnen Elemente der Sätze genannt.
    Ausgabe:
    ['Das', 'ist', 'alles', 'wunderschön', '.', 'Ich', 'freue', 'mich', '.']
  9. Nun sehen wir uns die Wortarten an.
    Ausgabe:
    [('Das', 'DT'), ('ist', 'VB'), ('alles', 'DT'), ('wunderschön', 'JJ'), ('Ich', 'PRP'), ('freue', 'NN'), ('mich', 'PRP')]
  10. Das Array der Ausgabe von Nominalphrasen ist leer.
    Ausgabe:
    []
  11. Schließlich lassen wir uns ausgeben, wie die Stimmung unseres Beispiels vom NLTK interpretiert wird.
    Ausgabe:
    Sentiment(polarity=0.5, subjectivity=0.0)
  12. Wir analysieren zum Vergleich den Text aus der Variable text3.
  13. Und lassen uns hier lediglich die Stimmung ausgeben.
    Ausgabe:
    Sentiment(polarity=-1.0, subjectivity=0.0)

Interpretation der Stimmung

Die Stimmung lässt sich vom Wert in polarity abzulesen. Der Wert kann zwischen -1,0 und 1,0 liegen, wobei -1,0 eine sehr negative und 1,0 für eine ausgesprochen positive Stimmung stehen. In unserem Beispiel liegen wir bei 0,5, was auf eine gute Stimmung schließen lässt.

Im zweiten Beispiel anhand von text3 sehen wir, wie NLTK die Stimmung hier mit einem Wert von -1,0 bei polarity als extrem negativ bewertet.

Weiterführende Links