Direkt zum Inhalt
HeimAnleitungenPython

NLTK Sentiment Analysis Tutorial für Einsteiger

Python NLTK (Natural Language Toolkit) Tutorial zur Stimmungsanalyse. Lerne, wie du mit Python Sentiment-Analysen erstellen und entwickeln kannst. Befolge bestimmte Schritte, um Text für die Verarbeitung natürlicher Sprache zu analysieren.
Aktualisierte 11. Sept. 2024  · 13 Min. lesen

Im heutigen digitalen Zeitalter sind Textanalyse und Textmining in verschiedenen Branchen unverzichtbar geworden. Unter Textanalyse versteht man den Prozess der Analyse und Gewinnung aussagekräftiger Erkenntnisse aus unstrukturierten Textdaten. Eines der wichtigsten Teilgebiete der Textanalyse ist die Stimmungsanalyse, bei der es darum geht, den emotionalen Ton eines Textes zu bestimmen.

Die Sentimentanalyse hat zahlreiche praktische Anwendungen, von der Markenüberwachung bis zur Analyse von Kundenfeedback. Python ist eine beliebte Programmiersprache für Textanalyse und Mining, und die Natural Language Toolkit (NLTK)-Bibliothek ist eine der am häufigsten verwendeten Bibliotheken für die Verarbeitung natürlicher Sprache in Python.

Dieses Tutorial bietet eine Schritt-für-Schritt-Anleitung zur Durchführung von Sentiment-Analysen mit der NLTK-Bibliothek in Python. Am Ende dieses Tutorials wirst du ein solides Verständnis dafür haben, wie man mit NLTK in Python Sentiment-Analysen durchführt, und ein komplettes Beispiel haben, das du als Ausgangspunkt für deine eigenen Projekte verwenden kannst. Also, lass uns loslegen!

Die Natural Language Toolkit (NLTK) Bibliothek

Das Natural Language Toolkit (NLTK) ist eine beliebte Open-Source-Bibliothek für die Verarbeitung natürlicher Sprache (NLP) in Python. Es bietet eine einfach zu bedienende Oberfläche für eine Vielzahl von Aufgaben, darunter Tokenisierung, Stemming, Lemmatisierung, Parsing und Sentimentanalyse.

NLTK wird weltweit von Forschern, Entwicklern und Datenwissenschaftlern eingesetzt, um NLP-Anwendungen zu entwickeln und Textdaten zu analysieren.

Einer der größten Vorteile des NLTK ist seine umfangreiche Sammlung von Korpora, die Textdaten aus verschiedenen Quellen wie Büchern, Nachrichtenartikeln und Social-Media-Plattformen enthält. Diese Korpora bieten eine reichhaltige Datenquelle zum Trainieren und Testen von NLP-Modellen.

NLP in Python heute meistern

Erlerne die NLP-Fähigkeiten, um Daten in wertvolle Erkenntnisse umzuwandeln.
Kostenloses Lernen Beginnen

Was ist Sentiment Analysis?

Die Sentiment-Analyse ist eine Technik, mit der man den emotionalen Ton oder die Stimmung in einem Text bestimmen kann. Dabei werden die im Text verwendeten Wörter und Sätze analysiert, um die zugrundeliegende Stimmung zu ermitteln, egal ob sie positiv, negativ oder neutral ist.

Die Sentiment-Analyse hat eine Vielzahl von Anwendungsmöglichkeiten, wie z.B. Social Media Monitoring, Kundenfeedback-Analyse und Marktforschung.

Eine der größten Herausforderungen bei der Stimmungsanalyse ist die der menschlichen Sprache innewohnende Komplexität. Textdaten enthalten oft Sarkasmus, Ironie und andere Formen der bildlichen Sprache, die mit herkömmlichen Methoden schwer zu interpretieren sind.

Die jüngsten Fortschritte in der Verarbeitung natürlicher Sprache (NLP) und im maschinellen Lernen haben es jedoch möglich gemacht, große Mengen an Textdaten mit einem hohen Maß an Genauigkeit einer Stimmungsanalyse zu unterziehen.

Drei Methoden für die Sentiment-Analyse

Es gibt verschiedene Möglichkeiten, Textdaten einer Stimmungsanalyse zu unterziehen, mit unterschiedlichem Grad an Komplexität und Genauigkeit. Zu den gebräuchlichsten Methoden gehören ein lexikonbasierter Ansatz, ein auf maschinellem Lernen (ML) basierender Ansatz und ein auf vortrainierten Transformern basierender Deep-Learning-Ansatz. Schauen wir uns die einzelnen Punkte genauer an:

Lexikonbasierte Analyse

Bei dieser Art der Analyse, wie z.B. dem NLTK Vader Sentiment Analyzer, werden eine Reihe von vordefinierten Regeln und Heuristiken verwendet, um das Sentiment eines Textes zu bestimmen. Diese Regeln basieren in der Regel auf lexikalischen und syntaktischen Merkmalen des Textes, wie z. B. dem Vorhandensein positiver oder negativer Wörter und Phrasen.

Die lexikonbasierte Analyse ist zwar relativ einfach zu implementieren und zu interpretieren, aber sie ist möglicherweise nicht so genau wie ML-basierte oder transformierte Ansätze, vor allem wenn es um komplexe oder mehrdeutige Textdaten geht.

Maschinelles Lernen (ML)

Bei diesem Ansatz wird ein Modell trainiert, um die Stimmung eines Textes auf der Grundlage einer Reihe von gelabelten Trainingsdaten zu erkennen. Diese Modelle können mit einer Vielzahl von ML-Algorithmen trainiert werden, darunter Entscheidungsbäume, Support Vector Machines (SVMs) und neuronale Netze.

ML-basierte Ansätze können genauer sein als regelbasierte Analysen, vor allem wenn es um komplexe Textdaten geht, aber sie erfordern eine größere Menge an gelabelten Trainingsdaten und können rechenintensiver sein.

Vortrainiertes transformatorbasiertes Deep Learning

Bei einem auf Deep Learning basierenden Ansatz, wie er bei BERT und GPT-4 zum Einsatz kommt, werden vortrainierte Modelle verwendet, die auf großen Mengen von Textdaten trainiert wurden. Diese Modelle verwenden komplexe neuronale Netze, um den Kontext und die Bedeutung des Textes zu kodieren. Dadurch erreichen sie bei einer Vielzahl von NLP-Aufgaben, einschließlich der Stimmungsanalyse, die höchste Genauigkeit. Diese Modelle erfordern jedoch erhebliche Rechenressourcen und sind möglicherweise nicht für alle Anwendungsfälle geeignet.

  • Die lexikonbasierte Analyse ist ein einfacher Ansatz für die Stimmungsanalyse, aber sie ist möglicherweise nicht so genau wie komplexere Methoden.
  • Ansätze, die auf maschinellem Lernen basieren, können genauer sein, aber sie benötigen markierte Trainingsdaten und können rechenintensiver sein.
  • Vortrainierte transformatorbasierte Deep Learning-Ansätze können eine hohe Genauigkeit erreichen, erfordern aber erhebliche Rechenressourcen und sind möglicherweise nicht für alle Anwendungsfälle geeignet.

Die Wahl des Ansatzes hängt von den spezifischen Bedürfnissen und Beschränkungen des jeweiligen Projekts ab.

NLTK installieren und Python-Umgebung einrichten

Um die NLTK-Bibliothek zu verwenden, musst du eine Python-Umgebung auf deinem Computer haben. Der einfachste Weg, Python zu installieren, ist, die Anaconda Distribution herunterzuladen und zu installieren. Diese Distribution kommt mit der Python 3-Basisumgebung und anderen Extras wie Jupyter Notebook. Du musst auch nicht die NLTK-Bibliothek installieren, da sie mit NLTK und vielen anderen nützlichen Bibliotheken vorinstalliert ist.

Wenn du Python ohne eine Distribution installieren möchtest, kannst du Python direkt von python.org herunterladen und installieren. In diesem Fall musst du NLTK installieren, sobald deine Python-Umgebung fertig ist.

Um die NLTK-Bibliothek zu installieren, öffne das Kommandoterminal und gib ein:

pip install nltk

Es ist erwähnenswert, dass NLTK auch einige zusätzliche Daten benötigt, die heruntergeladen werden müssen, bevor es effektiv genutzt werden kann. Zu diesen Daten gehören vortrainierte Modelle, Korpora und andere Ressourcen, die NLTK für verschiedene NLP-Aufgaben verwendet. Um diese Daten herunterzuladen, führst du den folgenden Befehl im Terminal oder in deinem Python-Skript aus:

import nltk

nltk.download('all')

Text vorverarbeiten

Die Textvorverarbeitung ist ein entscheidender Schritt bei der Durchführung der Sentimentanalyse, denn sie hilft dabei, die Textdaten zu bereinigen und zu normalisieren, damit sie leichter analysiert werden können. Die Vorverarbeitung umfasst eine Reihe von Techniken, die dabei helfen, die rohen Textdaten in eine Form umzuwandeln, die du für die Analyse verwenden kannst. Einige gängige Verfahren zur Textvorverarbeitung sind Tokenisierung, Stoppwortentfernung, Stemming und Lemmatisierung.

Textvorverarbeitungsschritte in der Reihenfolge

Bildquelle

Tokenisierung

Die Tokenisierung ist ein Schritt der Textvorverarbeitung in der Stimmungsanalyse, bei dem der Text in einzelne Wörter oder Token zerlegt wird. Dies ist ein wichtiger Schritt bei der Analyse von Textdaten, da er dazu beiträgt, einzelne Wörter aus dem Rohtext herauszulösen, damit dieser leichter zu analysieren und zu verstehen ist. Die Tokenisierung wird in der Regel mit der in NLTK eingebauten Funktion word_tokenize durchgeführt, die den Text in einzelne Wörter und Satzzeichen aufteilen kann.

Stoppwörter

Das Entfernen von Stoppwörtern ist ein wichtiger Schritt bei der Textvorverarbeitung in der Stimmungsanalyse. Dabei werden häufige und irrelevante Wörter entfernt, die wahrscheinlich nicht viel Stimmung vermitteln. Stoppwörter sind Wörter, die in einer Sprache sehr häufig vorkommen und keine große Bedeutung haben, wie z.B. "und", "das", "von" und "es". Diese Wörter können Rauschen verursachen und die Analyse verfälschen, wenn sie nicht entfernt werden.

Durch das Entfernen von Stoppwörtern ist es wahrscheinlicher, dass die verbleibenden Wörter im Text die geäußerte Stimmung wiedergeben. Dies kann dazu beitragen, die Genauigkeit der Stimmungsanalyse zu verbessern. NLTK bietet eine eingebaute Liste von Stoppwörtern für verschiedene Sprachen, mit der du diese Wörter aus den Textdaten herausfiltern kannst.

Stemming und Lemmatisierung

Stemming und Lemmatisierung sind Techniken, mit denen Wörter auf ihre Stammformen reduziert werden. Beim Stemming werden die Suffixe von Wörtern entfernt, wie z.B. "ing" oder "ed", um sie auf ihre Grundform zu reduzieren. Zum Beispiel würde das Wort "springen" in "springen" umgewandelt werden.

Bei der Lemmatisierung hingegen werden Wörter auf der Grundlage ihrer Wortart auf ihre Grundform reduziert. Zum Beispiel würde das Wort "sprang" zu "springen" lemmatisiert werden, aber das Wort "springen" würde zu "springen" lemmatisiert werden, da es ein Partizip Präsens ist.

Mehr über Stemming und Lemmatisierung erfährst du in unserem Tutorial zu Stemming und Lemmatisierung in Python.

Bag of Words (BoW) Modell

Das Bag-of-Words-Modell ist eine Technik, die in der natürlichen Sprachverarbeitung (NLP) verwendet wird, um Textdaten als eine Reihe von numerischen Merkmalen darzustellen. In diesem Modell wird jedes Dokument oder Textstück als "Tasche" von Wörtern dargestellt, wobei jedes Wort im Text durch ein separates Merkmal oder eine Dimension im resultierenden Vektor repräsentiert wird. Der Wert jedes Merkmals wird dadurch bestimmt, wie oft das entsprechende Wort im Text vorkommt.

Das Bag-of-Words-Modell ist in der NLP nützlich, weil es uns ermöglicht, Textdaten mit Algorithmen des maschinellen Lernens zu analysieren, die normalerweise numerische Eingaben erfordern. Indem wir Textdaten als numerische Merkmale darstellen, können wir maschinelle Lernmodelle trainieren, um Texte zu klassifizieren oder Stimmungen zu analysieren.

Das Beispiel im nächsten Abschnitt verwendet das NLTK Vader-Modell für die Stimmungsanalyse des Amazon-Kundendatensatzes. In diesem Beispiel müssen wir diesen Schritt nicht durchführen, weil die NLTK Vader API Text als Eingabe akzeptiert und keine numerischen Vektoren. Wenn du jedoch ein überwachtes maschinelles Lernmodell zur Vorhersage der Stimmung erstellen würdest (vorausgesetzt, du hast beschriftete Daten), müsstest du den verarbeiteten Text in ein Bag-of-Words-Modell umwandeln, bevor du das maschinelle Lernmodell trainierst.

Beispiel für eine Tüte mit Wörtern

Bildquelle

Beispiel für eine End-to-End-Sentiment-Analyse in Python

Um eine Stimmungsanalyse mit NLTK in Python durchzuführen, müssen die Textdaten zunächst mit Techniken wie Tokenisierung, Stoppwortentfernung und Stemming oder Lemmatisierung vorverarbeitet werden. Nachdem der Text vorverarbeitet wurde, übergeben wir ihn an den Vader Sentiment Analyzer, um die Stimmung des Textes zu analysieren (positiv oder negativ).

Schritt 1 - Bibliotheken importieren und Datensatz laden

Zuerst importieren wir die notwendigen Bibliotheken für die Text- und Stimmungsanalyse, wie pandas für die Datenverarbeitung, nltk für die natürliche Sprachverarbeitung und SentimentIntensityAnalyzer für die Stimmungsanalyse.

Anschließend laden wir den gesamten NLTK-Korpus (eine Sammlung von Sprachdaten) mit nltk.download() herunter.

Sobald die Umgebung eingerichtet ist, laden wir mit pd.read_csv() einen Datensatz mit Amazon-Rezensionen. Dadurch wird ein DataFrame-Objekt in Python erstellt, das wir zur Analyse der Daten verwenden können. Wir werden den Inhalt des DataFrames mit df anzeigen.

# import libraries
import pandas as pd

import nltk

from nltk.sentiment.vader import SentimentIntensityAnalyzer

from nltk.corpus import stopwords

from nltk.tokenize import word_tokenize

from nltk.stem import WordNetLemmatizer


# download nltk corpus (first time only)
import nltk

nltk.download('all')




# Load the amazon review dataset

df = pd.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/amazon.csv')

df

Datensatz laden

Schritt 2 - Text vorverarbeiten

Erstellen wir eine Funktion preprocess_text, in der wir zuerst die Dokumente mit der Funktion word_tokenize aus NLTK tokenisieren, dann entfernen wir Stufenwörter mit dem Modul stepwords aus NLTK und schließlich lemmatisieren wir die filtered_tokens mit WordNetLemmatizer aus NLTK.

# create preprocess_text function
def preprocess_text(text):

    # Tokenize the text

    tokens = word_tokenize(text.lower())




    # Remove stop words

    filtered_tokens = [token for token in tokens if token not in stopwords.words('english')]




    # Lemmatize the tokens

    lemmatizer = WordNetLemmatizer()

    lemmatized_tokens = [lemmatizer.lemmatize(token) for token in filtered_tokens]




    # Join the tokens back into a string

    processed_text = ' '.join(lemmatized_tokens)

    return processed_text

# apply the function df

df['reviewText'] = df['reviewText'].apply(preprocess_text)
df

Daten vorverarbeiten

Beachte die Änderungen in der Spalte "Überprüfungstext" als Ergebnis der Funktion preprocess_text, die wir im obigen Schritt angewendet haben.

Schritt 3 - NLTK Sentiment Analyzer

Zuerst initialisieren wir ein Sentiment Intensity Analyzer Objekt aus der nltk.sentiment.vader Bibliothek.

Als Nächstes definieren wir eine Funktion namens get_sentiment, die einen Textstring als Eingabe benötigt. Die Funktion ruft die Methode polarity_scores des Analyzer-Objekts auf, um ein Wörterbuch mit Stimmungsbewertungen für den Text zu erhalten, das eine Bewertung für positive, negative und neutrale Stimmungen enthält.

Die Funktion prüft dann, ob der positive Wert größer als 0 ist und gibt in diesem Fall einen Sentiment-Wert von 1 zurück, andernfalls eine 0. Das bedeutet, dass jeder Text mit einer positiven Punktzahl als positiv eingestuft wird und jeder Text mit einer nicht-positiven Punktzahl als negativ eingestuft wird.

Schließlich wenden wir die Funktion get_sentiment mit der Methode apply auf die Spalte reviewText des DataFrame df an. Dadurch wird eine neue Spalte mit dem Namen sentiment im DataFrame erstellt, in der die Stimmungsbewertung für jede Rezension gespeichert wird. Anschließend zeigen wir den aktualisierten DataFrame mit df an.

# initialize NLTK sentiment analyzer

analyzer = SentimentIntensityAnalyzer()


# create get_sentiment function

def get_sentiment(text):

    scores = analyzer.polarity_scores(text)

    sentiment = 1 if scores['pos'] > 0 else 0

    return sentiment




# apply get_sentiment function

df['sentiment'] = df['reviewText'].apply(get_sentiment)

df

Stimmungsanalyse

Der NLTK Sentiment Analyzer liefert einen Wert zwischen -1 und +1. In der obigen Funktion get_sentiment haben wir einen Schwellenwert von 0 verwendet. Alles, was über 0 liegt, wird als 1 (also positiv) eingestuft. Da wir die tatsächlichen Kennzeichnungen haben, können wir die Leistung dieser Methode bewerten, indem wir eine Konfusionsmatrix erstellen.

from sklearn.metrics import confusion_matrix

print(confusion_matrix(df['Positive'], df['sentiment']))

Ausgabe:

[[ 1131  3636]

 [  576 14657]]

Wir können auch den Einstufungsbericht überprüfen:

from sklearn.metrics import classification_report

print(classification_report(df['Positive'], df['sentiment']))

Klassifizierungsbericht

Wie du siehst, liegt die Gesamtgenauigkeit dieses regelbasierten Stimmungsanalysemodells bei 79 %. Da es sich um gelabelte Daten handelt, kannst du auch versuchen, ein ML-Modell zu erstellen, um herauszufinden, ob ein ML-basierter Ansatz zu einer besseren Genauigkeit führt.

Schau dir das komplette Notizbuch im Datacamp-Arbeitsbereich an.

Fazit

NLTK ist eine leistungsstarke und flexible Bibliothek zur Durchführung von Sentiment-Analysen und anderen Aufgaben der natürlichen Sprachverarbeitung in Python. Mit NLTK können wir Textdaten vorverarbeiten, sie in ein Bag-of-Words-Modell umwandeln und mit dem Sentiment-Analyzer von Vader eine Stimmungsanalyse durchführen.

In diesem Tutorial haben wir die Grundlagen der NLTK-Sentimentanalyse kennengelernt, einschließlich der Vorverarbeitung von Textdaten, der Erstellung eines Bag-of-Words-Modells und der Durchführung der Sentimentanalyse mit NLTK Vader. Wir haben auch die Vorteile und Grenzen der NLTK-Sentiment-Analyse diskutiert und Vorschläge für weitere Lektüre und Erkundungen gegeben.

Insgesamt ist NLTK ein leistungsfähiges und weit verbreitetes Werkzeug für die Durchführung von Sentiment-Analysen und anderen Aufgaben der natürlichen Sprachverarbeitung in Python. Wenn du die in diesem Lernprogramm vorgestellten Techniken und Werkzeuge beherrschst, kannst du wertvolle Einblicke in die Stimmung von Textdaten gewinnen und diese Erkenntnisse nutzen, um datengestützte Entscheidungen in einer Vielzahl von Anwendungen zu treffen.

Wenn du lernen willst, wie du NLP auf reale Daten wie TED-Talks, Artikel und Filmkritiken anwenden kannst, indem du Python-Bibliotheken und -Frameworks wie NLTK, scikit-learn, spaCy und SpeechRecognition verwendest, schau dir die folgenden Ressourcen an:

Es bietet eine solide Grundlage für die Verarbeitung und Analyse von Textdaten mit Python. Egal, ob du neu im NLP bist oder deine Kenntnisse erweitern möchtest, dieser Kurs wird dich mit den Werkzeugen und dem Wissen ausstatten, um unstrukturierte Daten in wertvolle Erkenntnisse zu verwandeln.

Themen

Python-Kurse

Course

Introduction to Data Science in Python

4 hr
463.9K
Dive into data science using Python and learn how to effectively analyze and visualize your data. No coding experience or skills needed.
See DetailsRight Arrow
Start Course
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

15 Min.

See MoreSee More