Tweet-Analyse mit NLP

 Prajwal Shreyas
Prajwal Shreyas

Folgen

Jul 23, 2019 · 9 min Lesezeit

Einführung

In den letzten Tagen mit der Explosion von Big Data gibt es eine große Nachfrage nach Organisationen und Datenwissenschaftlern, um Informationsextraktion mit nicht-traditionellen Datenquellen durchzuführen. Untersuchungen haben gezeigt, dass fast 80% der Daten als unstrukturierte Textdaten vorliegen, daher ist die Textanalyse von grundlegender Bedeutung, um die Fülle an Informationen zu Chat-Transkripten, Social-Media-Posts, Rezensionen, Newsfeeds usw. zu analysieren.

Was ist Textanalyse?

Textanalyse ist der Prozess der Synthese unstrukturierter Daten, um Muster zu entdecken und Entscheidungen zu treffen. Bis vor kurzem musste die Textanalyse auf die altmodische Art und Weise durchgeführt werden, d. H. Eyeballing und manuelle Kategorisierung von Text, was ineffizient und zeitaufwändig ist. Dies ist auch keine gute Lösung, wenn es um Millionen von Dokumenten wie Twitter-Daten geht.

Twitter-Daten (auch Tweets genannt) sind eine reichhaltige Informationsquelle zu einer Vielzahl von Themen. Diese Daten können verwendet werden, um Trends in Bezug auf ein bestimmtes Keyword zu finden, die Markenstimmung zu messen oder Feedback zu neuen Produkten und Dienstleistungen zu erhalten. Dieser Beitrag enthält eine Schritt-für-Schritt-Anleitung zur Textanalyse von Twitter-Daten.

Wie führe ich Textanalysen für Twitter-Daten durch?

Die Schritte in der Textanalyse sind:

Schritt 1: Tweets sammeln

Schritt 2: Tweets vorverarbeiten

Schritt 3: Sentimentanalyse anwenden

Schritt 4: Erkennung benannter Entitäten anwenden

Schritt 5: Cluster-Tweets

Schritt 6: Analyse visualisieren

Ich habe ein Jupyter-Notizbuch angehängt, das die obigen Schritte an einem Beispiel von Twitter-Daten ausführt hier.

Schritt 1: Tweets sammeln

Auf die Tweet-Daten kann auf zwei Arten programmgesteuert zugegriffen werden, d. H. Auf die Twitter Rest API oder die Streaming API.

Mit der Rest-API können Sie die Liste aller Tweets oder Follower für einen bestimmten Benutzer sammeln. Sie können auch das Konto eines Benutzers abfragen und sogar ändern, sofern Sie über die erforderlichen Berechtigungen verfügen. Mit der Streaming-API können Sie Tweets in Echtzeit basierend auf Suchbegriffen, Benutzer-IDs oder Standorten sammeln.

Um auf die API zugreifen zu können, benötigen Sie 4 Informationen von Twitter, dh API-Schlüssel, API-Geheimnis, Zugriffstoken und Zugriffstokengeheimnis. Die detaillierten Schritte zum Einrichten eines Kontos und zum Herstellen einer Verbindung zu den Twitter API-Diensten mithilfe von Python-Paketen finden Sie im Blog hier.

Für unsere Analyse habe ich den Twitter Streaming API-Dienst verwendet und ab dem 1. Oktober 2016 über eine Woche Tweets für zwanzig FTSE 100-Unternehmen gesammelt. Dies hat zu insgesamt 37.313 Tweets geführt. Die Ausgabe der Streaming-API muss vor jeder Analyse in ein geeignetes Format geparst werden. Im nächsten Abschnitt behandeln wir die Schritte zur Vorverarbeitung von Tweets.

Schritt 2: Tweets vorverarbeiten

Hier analysieren wir die Antwort von der Twitter-API in eine strukturierte Tabelle. Die Antwort von Twitter Streaming APIs ist im folgenden Format:

Der detaillierte Code zum Analysieren der Ausgabe von der Twitter-API ist unten. Die Ausgabe ist in Schlüsselfelder wie „doc_id“, „Benutzername“, „Text“ usw. strukturiert. Die analysierte Antwort kann in einer Datenbank oder einer JSON-Datei gespeichert werden.

import simplejson as json
def get_tweet(doc):
tweetItem = {}
#Available tweet data
tweetItem = doc
#hashtags are identified and provided as a field in the tweet
tweetItem = map(lambda x: x,doc)
# user_mentiones are identified and provided as a field
tweetItem = map(lambda x: x,doc
) # symbols e.g. $APPL are identified and provided as a field
tweetItem = map(lambda x: x,doc)
tweetItem = doc
tweetItem = doc
tweetItem = doc try: tweetItem = doc
except KeyError as e:
tweetItem = 0
pass
return tweetItem

Schritt 3: Stimmungsanalyse

Menschen äußern ihre Meinung über Tweets und diese haben normalerweise eine Stimmung, dh positiv, negativ oder neutral. Die Analyse dieser Stimmung kann zu nützlichen Erkenntnissen über das diskutierte Thema oder Unternehmen führen. Daher empfehlen wir die Verwendung von Sentiment-Analyse-Algorithmen, um diese Analyse durchzuführen. Ich habe hier einen separaten Blog mit Details zur Durchführung von Stimmungsanalysen mithilfe des Deep-Learning-Algorithmus erstellt.

Die Stimmung ist ein nützlicher Indikator, Tweets enthalten jedoch zusätzliche Informationen wie Namen von Personen, Orten und Organisationen. Die extrahierten Daten können zu sehr nützlichen Erkenntnissen über Ihr Produkt oder Unternehmen führen. Im nächsten Schritt behandeln wir die Verwendung von Algorithmen zur Erkennung benannter Entitäten, die diese Informationen extrahieren sollen.

Schritt 4: Named Entity Recognition

Der Algorithmus zur Erkennung von Named Entities identifiziert wichtige Tags wie Personen, Orte oder Organisationen, die in den Tweets enthalten sind. Wenn in Ihrem Tweet beispielsweise „London“ erwähnt wird, markiert der Algorithmus dies als „Standort“. Da Tweets jedoch im Allgemeinen nicht der englischen Standardsyntax folgen, liegt die Genauigkeit der Tags bei 60% bis 70%.

Sie können den Stanford NER Tagger verwenden, um die Entitätserkennung für die Tweets zu erhalten. Im folgenden Beispiel habe ich einen Tweet von Donald Trump verwendet.

# -*- coding: utf-8 -*-
from nltk.tag import StanfordNERTagger
from nltk.tokenize import word_tokenize
st = StanfordNERTagger('/stanford-ner/classifiers/english.all.3class.distsim.crf.ser.gz',
'/usr/share/stanford-ner/stanford-ner.jar',
encoding='utf-8')#a tweet by Donald Trump
text = 'Just had a very good call with @SwedishPM Stefan Löfven who assured me that American citizen A$AP Rocky will be treated fairly. Likewise, I assured him that A$AP was not a flight risk and offered to personally vouch for his bail, or an alternative....'
tokenized_text = word_tokenize(text)
classified_text = st.tag(tokenized_text)
print(classified_text)

Schritt 5: Clustering ähnlicher Tweets

Eine Reihe von Tweets sind einander sehr ähnlich, dies kann daran liegen, dass Personen über dasselbe Thema twittern. Um das Rauschen zu reduzieren, wäre es daher nützlich, die Tweets basierend auf ihrer Ähnlichkeit in Gruppen zu gruppieren. Dies kann mit dem Clustering-Algorithmus erfolgen.

Das Innenleben der Algorithmen basiert auf einem maschinellen Lernkonzept, das als tf-idf—Matrix (Term Frequency – Inverse Document Frequency) bekannt ist. Hier wird jeder Tweet als Dokument (d) und die Wörter innerhalb des Tweets als Begriff (t) behandelt.

Term Frequency-Inverse Document Frequency ist eine numerische Statistik, die zeigt, wie wichtig ein Wort für einen Korpus ist.

Term Frequency ist nur das Verhältnis der Anzahl des aktuellen Wortes zur Anzahl aller Wörter in Dokument / String / etc.

Termhäufigkeitsformel

Häufigkeit des Terms t_i, wobei n_t — die Anzahl von t_i im aktuellen Dokument / String, die Summe von n_k ist die Anzahl aller Terme im aktuellen Dokument / String.

Inverse Document Frequency ist ein Protokoll des Verhältnisses der Anzahl aller Dokumente/ Zeichenfolgen im Korpus zur Anzahl der Dokumente mit dem Term t_i.

Inverse Dokumenthäufigkeitsformel

tf-idf(t, d, D) ist das Produkt tf(t, d) zu idf(t, D). Weitere Details zu tf-idf finden Sie im Blog hier.

TF-IDF-Formel

Im folgenden Code Um das Clustering zu erhalten, ist neben der Texteingabe der einzige zusätzliche Parameter, der in der Eingabe angegeben werden muss, der Ähnlichkeitsschwellenwert. Sie können den Schwellenwert in der Funktion „get_clusters (processedTweets, similarity_threshold)“ festlegen. Daher werden alle Tweets, die 80% ähnlich sind, basierend auf einem Ähnlichkeitsmaß, das als Cosinusähnlichkeit bekannt ist, zusammengefasst.

def cluster_text(dist_text,processedTweets,dist_threshold_txt):
cluster_id = 1
for i in range(dist_text.shape):
try:
doc_dist_array_txt = dist_text
# identify document ids where the tweets are similar
similarDocs = np.where(doc_dist_array_txt <= dist_threshold_txt)
processedTweets.ix.isin(), 'cluster_ref'] = cluster_id
cluster_id = cluster_id + 1
except ValueError:
continue
return processedTweets
# %%%%%%%%% Calculate Cosine distance of documents %%%%%%%%%%%%%%
def tokenize_only(text):
# first tokenize by sentence, then by word to ensure that punctuation is caught as it's own token
tokens =
filtered_tokens =
# filter out any tokens not containing letters (e.g., numeric tokens, raw punctuation)
for token in tokens:
if re.search('', token):
filtered_tokens.append(token)
return filtered_tokens
def get_clusters(processedTweets, similarity_threshold):
tweets = processedTweets.tolist()
#Define count vectorizer parameters
vectorizer = CountVectorizer(max_df=1.0, min_df=1, stop_words=stopwords, tokenizer=tokenize_only)
# Get document term frequency matix
dtf_matrix = vectorizer.fit_transform(tweets) #fit the vectorizer to tweets which does not contain'htttp' and 'RT'
dist_text = np.around(abs(1 - cosine_similarity(dtf_matrix)),2)
# --------1D clustering based on distance measure
# Pre clustering setup
processedTweets = None # Tweets that are 1-similarithy% similar, as defined by dist_threshold
# Clustering of tweets based on text
processedTweets = cluster_text(dist_text,processedTweets,dist_threshold_txt = (1-similarity_threshold))
return processedTweets

Die Ergebnisse enthalten eine zusätzliche Spalte „cluster_ref“. Die cluster_ref gruppiert alle ähnlichen Dokumente in einer einzigen Gruppe, z. B. wenn Dokument 1 und Dokument 2 ähnlich sind und daher beide cluster_ref von 1 haben.

Schritt 6: Visualisierung der Ergebnisse

Die Visualisierung der oben genannten Ergebnisse würde dazu beitragen, Einblicke in die Verbrauchermeinung über das Produkt oder das Unternehmen zu gewinnen. Im folgenden Abschnitt werde ich Tableau für Visualisierungszwecke verwenden. Bitte beachten Sie den Link zum Dashboard hier.

Die erste Grafik unten zeigt die positive, negative und durchschnittliche Stimmung (Blaue Linie) jedes Unternehmens. Die Balken stellen die durchschnittliche Stimmung für das Unternehmen dar und werden nicht für die Anzahl der Tweets gewichtet. Diese ungewichtete Stimmung liefert keinen genauen Vergleich zwischen Unternehmen, da sie die Anzahl der Tweets nicht berücksichtigt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.