Tweet analytics använder NLP

Prajwal Shreyas
Prajwal Shreyas

följ

Jul 23, 2019 * 9 min läs

Inledning

under de senaste dagarna med explosionen av Big Data finns det en stor efterfrågan på organisationer och datavetare att utföra informationsutvinning med hjälp av icke-traditionella datakällor. Forskning har visat att nästan 80% av data existerar som ostrukturerad textdata, därför är textanalys grundläggande för att analysera den mängd information som finns tillgänglig på chattutskrifter, sociala medier, recensioner, nyhetsflöden etc.

Vad är textanalys?

textanalys är processerna för att syntetisera ostrukturerade data för att upptäcka mönster och möjliggöra beslutsfattande. Fram till de senaste åren måste textanalys utföras på gammaldags sätt, dvs eyeballing och manuell kategorisering av text, vilket är ineffektivt och tidskrävande. Detta är inte heller en praktiklösning när man hanterar miljontals dokument som twitter-data.

Twitter-data (även känd som tweets) är en rik informationskälla om en stor uppsättning ämnen. Dessa data kan användas för att hitta trender relaterade till ett visst nyckelord, mäta varumärkeskänsla eller samla in feedback om nya produkter och tjänster. Det här inlägget kommer att ge en stegvis guide för textanalys på twitter-data.

hur utför man textanalys på twitter-data?

stegen som är involverade i textanalys är:

Steg 1: Samla tweets

steg 2: Pre-process tweets

steg 3: Applicera sentimentanalys

steg 4: Applicera namngiven entity recognition

Steg 5: Cluster tweets

steg 6: visualisera analys

jag har bifogat en Jupyter-anteckningsbok som utför ovanstående steg på ett urval av twitter-data här.

Steg 1: Samla tweets

tweetdata kan nås programmatiskt på två sätt, dvs Twitter Rest API eller Streaming API.

Rest API kan du samla listan över alla tweets eller anhängare för en viss användare. Du kan också fråga en användares konto och även ändra dem förutsatt att du har de behörigheter som krävs. Var som Streaming API kan du samla tweets i realtid baserat på söktermer, användar-ID eller platser.

för att komma åt API: n behöver du 4 bitar av information från Twitter, dvs API-nyckel, API-hemlighet, åtkomsttoken och åtkomsttoken hemlighet. De detaljerade stegen för att skapa ett konto och ansluta till twitter API-tjänsterna med python-paket behandlas i bloggen här.

för vår analys har jag använt twitter streaming API-tjänsten och samlat tweets för tjugo FTSE 100-företag under en vecka från och med 1st oktober 2016. Detta har resulterat i totalt 37 313 tweets. Utgången från streaming API måste analyseras i ett lämpligt format innan någon analys. I nästa avsnitt täcker vi stegen i förbehandling av tweets.

steg 2: pre-Process tweets

här analyserar vi svaret från twitter API till en strukturerad tabell. Svaret från twitter streaming API är i nedanstående format:

den detaljerade koden för att analysera utmatningen från twitter API är nedan. Utgången är strukturerad i nyckelfält som” doc_id”,” användarnamn”,” text ” etc. Det tolkade svaret kan lagras i en databas eller en JSON-fil.

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

steg 3: sentimentanalys

människor uttrycker sina åsikter via tweets och dessa har vanligtvis känslor associerade med det, dvs positiva, negativa eller neutrala. Analys av denna känsla kan leda till viss användbar insikt om ämnet eller företaget som diskuteras. Därför föreslår vi användning av sentimentanalysalgoritmer för att utföra denna analys. Jag har skapat en separat blogg med detaljer om att utföra sentimentanalys med hjälp av deep learning-algoritmen här.

känslan är en användbar indikator, men tweets innehåller ytterligare information som namn på personer, platser och organisationer. Uppgifterna när de extraheras kan leda till mycket användbara insikter om din produkt eller ditt företag. Så i nästa steg täcker vi användningen av namngivna entitetsigenkänningsalgoritmer, som är utformade för att extrahera denna information.

steg 4: Namngiven Entitetsigenkänning

den namngivna Entitetsigenkänningsalgoritmen identifierar nyckeltaggar som personer, platser eller organisationer som finns i tweetsna. Om det till exempel nämns ”London” i din tweet skulle algoritmen märka det som ”plats”. Men eftersom tweets i allmänhet inte följer den vanliga engelska syntaxen är taggarnas noggrannhet cirka 60% till 70%.

du kan använda Stanford NER-taggen för att få enhetsigenkänningen för tweetsna. I exemplet nedan har jag använt en tweet av Donald Trump.

# -*- 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)

Steg 5: Kluster av liknande tweets

ett antal tweets är mycket lika varandra, kan detta bero på människor tweeting om samma ämne detta orsakar en hel del buller i data. För att minska bullret skulle det därför vara användbart att klustra tweetsna i grupper baserat på deras likhet. Detta kan göras med hjälp av klusteralgoritmen.

algoritmernas inre arbete är baserat på ett maskininlärningskoncept som kallas TF-IDF (term frequency — Inverse document frequency) – matris. Här behandlas varje tweet som ett dokument (d) och orden i tweeten som term (t).

Term Frequency-Inverse Document Frequency är en numerisk statistik som visar hur viktigt ett ord är för en corpus.

Term frekvens är bara förhållandet antal nuvarande ord till antalet alla ord i dokument / sträng / etc.

Termfrekvensformel

frekvens av term t_i, där n_t-antalet t_i i aktuellt dokument/sträng, summan av n_k är antalet av alla termer i aktuellt dokument/sträng.

Inverse Document Frequency är en logg över förhållandet mellan antalet dokument/sträng i corpus och antalet dokument med termen t_i.

omvänd Dokumentfrekvensformel

tf-idf(t, d, D) är produkten tf(t, d) till idf(t, D). Ytterligare information om tf-idf finns i bloggen här.

TF-IDF-formeln

i koden nedan för att få klustringen, förutom textinmatningen, är den enda ytterligare parametern som måste anges i ingången likhetströskeln. Du kan ställa in tröskeln i funktionen ”get_clusters(processedTweets, similarity_threshold)”. Därför kommer alla tweets, som är 80% lika, att grupperas tillsammans baserat på likhetsmått som kallas cosinuslikhet.

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

resultaten kommer att innehålla en ytterligare kolumn”cluster_ref”. Cluster_ref grupperar alla liknande dokument i en enda grupp, till exempel om dokument 1 och dokument 2 är likartade, därför har båda cluster_ref av 1.

steg 6: Visualisering av resultat

visualiseringen av ovanstående resultat skulle hjälpa till att driva insikter i konsumenternas åsikt om produkten eller företaget. I nedanstående avsnitt kommer jag att använda Tableau för visualiseringsändamål. Se länken till instrumentpanelen här.

den första grafen som visas nedan är den positiva, negativa och genomsnittliga känslan (blå linje) för varje företag. Staplarna representerar den genomsnittliga känslan för företaget och vägs inte för antalet tweets. Denna ovägda känsla ger inte en exakt jämförelse mellan företag eftersom den inte tar hänsyn till antalet tweets.

Lämna ett svar

Din e-postadress kommer inte publiceras.