So arbeiten Sie mit Sprachdaten in Python 3 mit dem Natural Language Toolkit (NLTK)

Einführung

Textbasierte Kommunikation ist zu einer der häufigsten Ausdrucksformen geworden. Wir senden täglich E-Mails, SMS-Nachrichten, twittern und aktualisieren unseren Status. Infolgedessen sind unstrukturierte Textdaten sehr verbreitet, und die Analyse großer Mengen von Textdaten ist heute eine wichtige Methode, um zu verstehen, was die Menschen denken.

Tweets auf Twitter helfen uns, die aktuellsten Nachrichten der Welt zu finden. Bewertungen bei Amazon helfen Benutzern beim Kauf der am besten bewerteten Produkte. Diese Beispiele für das Organisieren und Strukturieren von Wissen stellen Aufgaben der Verarbeitung natürlicher Sprache (Natural Language Processing, NLP) dar.

NLP ist ein Gebiet der Informatik, das sich auf die Interaktion zwischen Computern und Menschen konzentriert. NLP-Techniken werden zum Analysieren von Text verwendet, um Computern das Verstehen der menschlichen Sprache zu ermöglichen. Einige Beispiele für NLP-Anwendungen umfassen die automatische Zusammenfassung, Themensegmentierung und Stimmungsanalyse.

Dieses Tutorial bietet eine Einführung in die Verwendung des Natural Language Toolkit (NLTK): eines NLP-Tools für Python.

Voraussetzungen

Für dieses Tutorial sollten Sie Python 3 sowie eine lokale Programmierumgebung auf Ihrem Computer installiert haben. Wenn dies nicht der Fall ist, können Sie die Einstellungen unter https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming-environment-for vornehmen -python-3 [entsprechendes Installations- und Einrichtungshandbuch für Ihr Betriebssystem].

Um dieses Lernprogramm optimal nutzen zu können, sollten Sie mit der Python-Programmiersprache vertraut sein.

Schritt 1 - NLTK importieren

Vergewissern Sie sich, dass das NLTK-Modul installiert ist, bevor Sie mit der Arbeit in Python beginnen. Suchen Sie in der Befehlszeile nach NLTK, indem Sie den folgenden Befehl ausführen:

python -c "import nltk"
  • Wenn NLTK installiert ist *, wird dieser Befehl ohne Fehler ausgeführt. Stellen Sie jetzt sicher, dass Sie die neueste Version installiert haben:

python -c "import nltk; print(nltk.__version__)"

Sie sollten Version 3.2.1 installiert haben, da wir das Twitter-Paket von NLTK verwenden, für das diese Version erforderlich ist.

  • Wenn NLTK nicht installiert ist *, erhalten Sie eine Fehlermeldung:

OutputTraceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'nltk'

Die Fehlermeldung zeigt an, dass NLTK nicht installiert ist. Laden Sie daher die Bibliothek mit + pip + herunter:

pip install nltk

Als Nächstes laden wir die Daten und NLTK-Tools herunter, mit denen wir in diesem Tutorial arbeiten werden.

Schritt 2 - Herunterladen der NLTK-Daten und des Taggers

In diesem Tutorial verwenden wir einen Twitter-Korpus, den wir über NLTK herunterladen können. Insbesondere werden wir mit dem + twitter_samples + Corpus von NLTK arbeiten. Laden Sie den Korpus folgendermaßen über die Befehlszeile herunter:

python -m nltk.downloader twitter_samples

Wenn der Befehl erfolgreich ausgeführt wurde, sollten Sie die folgende Ausgabe erhalten:

Output[nltk_data] Downloading package twitter_samples to
[nltk_data]     /Users//nltk_data...
[nltk_data]   Unzipping corpora/twitter_samples.zip.

Laden Sie als Nächstes den POS-Tagger (Part-of-Speech) herunter. Beim POS-Tagging wird ein Wort in einem Text als einem bestimmten POS-Tag entsprechend gekennzeichnet: Substantive, Verben, Adjektive, Adverbien usw. In diesem Tutorial verwenden wir speziell NLTKs + averaged_perceptron_tagger +. Der durchschnittliche Perzeptron-Tagger verwendet den Perzeptron-Algorithmus, um vorherzusagen, welcher POS-Tag das Wort am wahrscheinlichsten enthält. Laden Sie den Tagger wie folgt herunter:

python -m nltk.downloader averaged_perceptron_tagger

Wenn der Befehl erfolgreich ausgeführt wurde, sollten Sie die folgende Ausgabe erhalten:

Output[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data]     /Users//nltk_data...
[nltk_data]   Unzipping taggers/averaged_perceptron_tagger.zip.

Überprüfen wir noch einmal, ob der Korpus korrekt heruntergeladen wurde. Öffnen Sie in Ihrem Terminal die interaktive Python-Umgebung:

python

Importieren Sie in der interaktiven Umgebung von Python den Korpus "+ twitter_samples +":

from nltk.corpus import twitter_samples

Das Twitter-Korpus von NLTK enthält derzeit eine Stichprobe von 20.000 Tweets, die über die Twitter-Streaming-API abgerufen wurden. Vollständige Tweets werden als zeilenweise getrennter JSON gespeichert. Mit der Methode + twitter_samples.fileids () + können wir sehen, wie viele JSON-Dateien im Corpus vorhanden sind:

twitter_samples.fileids()

Unsere Ausgabe sieht folgendermaßen aus:

Output[u'negative_tweets.json', u'positive_tweets.json', u'tweets.20150430-223406.json']

Unter Verwendung dieser Datei-IDs können wir dann den Tweet strings zurückgeben:

twitter_samples.strings('tweets.20150430-223406.json')

Wenn Sie dies ausführen, wird eine Menge Ausgabe zurückgegeben. Es wird im Allgemeinen so aussehen:

Output[u'RT @KirkKus: Indirect cost of the UK being in the EU is estimated to be costing Britain \xa3170 billion per year! #BetterOffOut #UKIP'...]

Wir wissen jetzt, dass unser Korpus erfolgreich heruntergeladen wurde. Verlassen wir also die interaktive Python-Umgebung mit der Tastenkombination "+ Strg " + " D +".

Nachdem wir nun Zugriff auf das Korpus "+ twitter_samples +" haben, können wir mit dem Schreiben eines Skripts zur Verarbeitung von Tweets beginnen.

Das Ziel unseres Skripts ist es zu zählen, wie viele Adjektive und Substantive in der positiven Teilmenge des Korpus + twitter_samples + vorkommen:

  • Ein * Nomen * wird in seiner grundlegendsten Definition normalerweise als eine Person, ein Ort oder eine Sache definiert. Ein Film, ein Buch und ein Burger sind beispielsweise alle Substantive. Das Zählen von Substantiven kann dabei helfen, festzustellen, wie viele verschiedene Themen diskutiert werden.

  • Ein * Adjektiv * ist ein Wort, das ein Substantiv (oder Pronomen) modifiziert, zum Beispiel: ein schrecklicher Film, ein lustiges Buch oder ein köstlicher Burger. Das Zählen von Adjektiven kann bestimmen, welche Art von Sprache verwendet wird, d. H. Meinungen enthalten tendenziell mehr Adjektive als Fakten.

Sie können dieses Skript später erweitern, um positive Adjektive (großartig, schön, glücklich usw.) gegenüber negativen Adjektiven (bohrend, lame, sad usw.) zu zählen, die zum Analysieren der Stimmung von Tweets oder Bewertungen über ein Produkt oder verwendet werden können Film zum Beispiel. Dieses Skript stellt Daten bereit, die wiederum Entscheidungen in Bezug auf dieses Produkt oder diesen Film informieren können.

Wir werden unser Skript im nächsten Schritt beginnen.

Schritt 3 - Sätze ausdrücken

Erstellen Sie zunächst im Texteditor Ihrer Wahl das Skript, mit dem wir arbeiten, und nennen Sie es "++".

Importieren wir in unserer Datei zunächst den Korpus. Dann erstellen wir eine ++ variable und weisen ihr die https: //www.digitalocean zu .com / community / tutorials / verständnislisten-in-python-3 [liste] von tweet-strings aus der datei + positive_tweets.json +.

nlp.py

from nltk.corpus import twitter_samples

tweets = twitter_samples.strings('positive_tweets.json')

Wenn wir unsere Tweetliste zum ersten Mal laden, wird jeder Tweet als eine Zeichenfolge dargestellt. Bevor wir feststellen können, welche Wörter in unseren Tweets Adjektive oder Substantive sind, müssen wir unsere Tweets zuerst mit einem Token versehen.

  • Tokenization * ist die Aufteilung einer Folge von Zeichenfolgen in Teile wie Wörter, Schlüsselwörter, Phrasen, Symbole und andere Elemente, die als Tokens bezeichnet werden. Erstellen wir eine neue Variable mit dem Namen "++", der wir die Liste der Tweets mit Token zuweisen:

nlp.py

from nltk.corpus import twitter_samples

tweets = twitter_samples.strings('positive_tweets.json')

Diese neue Variable, "+ tweets_tokens +", ist eine Liste, in der jedes Element in der Liste eine Liste von Token ist. Nachdem wir die Token für jeden Tweet haben, können wir die Token mit den entsprechenden POS-Tags versehen.

Schritt 4 - Sätze markieren

Um auf den POS-Tagger von NLTK zugreifen zu können, müssen Sie ihn importieren. Alle import-Anweisungen müssen am Anfang des Skripts stehen. Stellen wir diesen neuen Import unter unsere andere Importanweisung.

nlp.py

from nltk.corpus import twitter_samples


tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')

Jetzt können wir jeden unserer Token markieren. NLTK ermöglicht es uns, alles auf einmal zu tun, indem wir: `` verwenden. Wir werden eine neue Variable "" erstellen, mit der wir unsere getaggten Listen speichern. Diese neue Zeile kann direkt am Ende unseres aktuellen Skripts eingefügt werden:

tweets_tagged = pos_tag_sents(tweets_tokens)

Um eine Vorstellung davon zu bekommen, wie mit Tags versehene Token aussehen, sehen Sie im Folgenden das erste Element in unserer Liste "tweets_tagged":

[(u'#FollowFriday', 'JJ'), (u'@France_Inte', 'NNP'), (u'@PKuchly57', 'NNP'), (u'@Milipol_Paris', 'NNP'), (u'for', 'IN'), (u'being', 'VBG'), (u'top', 'JJ'), (u'engaged', 'VBN'), (u'members', 'NNS'), (u'in', 'IN'), (u'my', 'PRP$'), (u'community', 'NN'), (u'this', 'DT'), (u'week', 'NN'), (u':)', 'NN')]

Wir können sehen, dass unser Tweet als Liste dargestellt wird und für jedes Token Informationen über sein POS-Tag vorliegen. Jedes Token / Tag-Paar wird als tuple gespeichert.

In NLTK lautet die Abkürzung für * Adjektiv * + JJ +.

Der NLTK-Tagger markiert * Singular Nomen * (+ NN +) mit anderen Tags als * Plural Nomen * (+ NNS +). Zur Vereinfachung werden wir nur einzelne Substantive zählen, indem wir das + NN + -Tag verfolgen.

Im nächsten Schritt werden wir zählen, wie oft "+ JJ " und " NN +" in unserem gesamten Korpus vorkommen.

Schritt 5 - POS-Tags zählen

Wir werden verfolgen, wie oft + JJ + und + NN + mit einer Akkumulatorvariablen (count) erscheinen, die wir jedes Mal, wenn wir ein Tag finden, fortlaufend ergänzen. Zuerst erstellen wir unsere Zählung am Ende unseres Skripts, das wir zuerst auf Null setzen.

nlp.py

from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents

tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')

Nachdem wir die Variablen erstellt haben, erstellen wir zwei https://www.digitalocean.com/community/tutorials/how-to-construct-for-loops-inpython-3 [+ for + loops]. Die * erste Schleife * durchläuft jeden Tweet in der Liste. Die * zweite Schleife * durchläuft jedes Token / Tag-Paar in jedem Tweet. Für jedes Paar suchen wir das Tag mit dem entsprechenden Tupel-Index.

Wir werden dann mithilfe von https://www.digitalocean.com/community/tutorials/how-to-write- überprüfen, ob das Tag entweder mit der Zeichenfolge "" JJ "" oder "" NN "" übereinstimmt. bedingte-anweisungen-in-python-3-2 [bedingte anweisungen]. Wenn das Tag eine Übereinstimmung ist, fügen wir (++ = 1 +) zum entsprechenden Akkumulator hinzu.

nlp.py

from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents

tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')

JJ_count = 0
NN_count = 0

Nachdem die beiden Schleifen abgeschlossen sind, sollten wir die Gesamtzahl der Adjektive und Substantive in unserem Korpus haben. Um zu sehen, wie viele Adjektive und Substantive unser Skript gefunden hat, fügen wir print-Anweisungen am Ende des Skripts hinzu.

nlp.py

...

for tweet in tweets_tagged:
   for pair in tweet:
       tag = pair[1]
       if tag == 'JJ':
           JJ_count += 1
       elif tag == 'NN':
           NN_count += 1

Zu diesem Zeitpunkt kann unser Programm die Anzahl der Adjektive und Substantive ausgeben, die im Korpus gefunden wurden.

Schritt 6 - Ausführen des NLP-Skripts

Speichern Sie Ihre "+ nlp.py +" - Datei und führen Sie sie aus, um zu sehen, wie viele Adjektive und Substantive wir finden:

python nlp.py

Seien Sie geduldig, es kann einige Sekunden dauern, bis das Skript ausgeführt wird. Wenn alles gut gelaufen ist, sollten wir beim Ausführen unseres Skripts die folgende Ausgabe erhalten:

OutputTotal number of adjectives =  6094
Total number of nouns =  13180

Wenn Ihre Ausgabe gleich aussieht, bedeutet dies, dass Sie dieses Lernprogramm erfolgreich abgeschlossen haben. Herzliche Glückwünsche!

Fertiger Code

Für unseren fertigen Code sollten wir einige Kommentare hinzufügen, damit andere und unser zukünftiges Selbst leichter folgen können. Unser Skript sieht so aus:

nlp.py

# Import data and tagger
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents

# Load tokenized tweets
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')

# Tag tagged tweets
tweets_tagged = pos_tag_sents(tweets_tokens)

# Set accumulators
JJ_count = 0
NN_count = 0

# Loop through list of tweets
for tweet in tweets_tagged:
   for pair in tweet:
       tag = pair[1]
       if tag == 'JJ':
           JJ_count += 1
       elif tag == 'NN':
           NN_count += 1

# Print total numbers for each adjectives and nouns
print('Total number of adjectives = ', JJ_count)
print('Total number of nouns = ', NN_count)

Wir haben in diesem Tutorial den über NLTK heruntergeladenen Twitter-Korpus verwendet, Sie können jedoch Ihre eigenen Daten einlesen. Informationen zum Lesen von Dateien in Python finden Sie in unserem Handbuch unter ´How To Handle Einfache Textdateien in Python 3 ".

Möglicherweise möchten Sie auch mit echten Twitter-Daten arbeiten. Weitere Informationen zum Zugriff auf die Twitter-API finden Sie unter "https://www.digitalocean.com/community/tutorials/how-to-create-a-twitter-app[How To Create a Twitter App]" Schauen Sie sich unseren Leitfaden unter Wie erstelle ich einen Twitterbot mit Python 3 und die Tweepy-Bibliothek “, in dem gezeigt wird, wie Sie mit der Tweepy-Python-Bibliothek Tweets mit einem bestimmten Hash-Tag sammeln. Die von Ihnen gesammelten Daten können dann mit NLTK analysiert werden.

Von hier aus können Sie den Code erweitern, um sowohl plurale als auch singuläre Substantive zu zählen, die Stimmung von Adjektiven zu analysieren oder Ihre Daten mit https://www.digitalocean.com/community/tutorials/how-to-plot-data-in zu visualisieren -python-3-using-matplotlib [Python und Matplotlib].

Fazit

In diesem Lernprogramm haben Sie einige Techniken zur Verarbeitung natürlicher Sprache zum Analysieren von Text mithilfe der NLTK-Bibliothek in Python erlernt. Jetzt können Sie in Python Korpora-Tags herunterladen, tokenisieren, taggen und POS-Tags zählen. Mithilfe dieses Lernprogramms können Sie die Arbeit mit Ihren eigenen Textdaten in Python vereinfachen.