Tweet analytics folosind NLP

Prajwal Shreyas
Prajwal Shreyas

urmați

Iulie 23 · 2019 * 9 min citit

Introducere

în ultimele zile, odată cu explozia de date mari, există o cerere mare pentru organizații și oameni de știință de date pentru a efectua extragerea informațiilor folosind surse netradiționale de date. Cercetările au arătat că aproape 80% din date există ca date text nestructurate, prin urmare analiza textului este fundamentală pentru a analiza bogăția de informații disponibile pe transcrieri de chat, postări pe rețelele de socializare, recenzii, fluxuri de știri etc.

ce este analiza textului?

analiza textului este procesul de sintetizare a datelor nestructurate pentru a ajuta la descoperirea modelelor și pentru a permite luarea deciziilor. Până în ultimii ani, analiza textului a trebuit să fie efectuată în mod vechi, adică ochi și clasificarea manuală a textului, care este ineficientă și consumă mult timp. De asemenea, aceasta nu este o soluție practică atunci când se ocupă de milioane de documente, cum ar fi datele twitter.

datele Twitter (cunoscute și sub numele de tweets) reprezintă o sursă bogată de informații despre un set mare de subiecte. Aceste date pot fi utilizate pentru a găsi tendințe legate de un anumit cuvânt cheie, pentru a măsura sentimentul mărcii sau pentru a aduna feedback despre produse și servicii noi. Această postare va oferi un ghid pas cu pas pentru analiza textului pe datele twitter.

cum se efectuează analize de text pe datele twitter?

pașii implicați în analiza textului sunt:

Pasul 1: colectați tweets

Pasul 2: Tweets Pre-proces

Pasul 3: Aplicați analiza sentimentului

Pasul 4: Aplicați recunoașterea entității numite

Pasul 5: Tweets Cluster

Pasul 6: Vizualizați analiza

am atașat un notebook jupyter care efectuează pașii de mai sus pe un eșantion de date twitter aici.

Pasul 1: colectați tweets

datele tweet pot fi accesate programatic în două moduri, adică Twitter Rest API sau Streaming API.

API-ul Rest vă permite să colectați lista tuturor tweet-urilor sau adepților pentru un anumit utilizator. De asemenea, puteți interoga contul unui utilizator și chiar le puteți modifica cu condiția să aveți permisiunile necesare. În cazul în care API-ul de Streaming vă permite să colectați tweet-uri în timp real pe baza termenilor de căutare, ID-urilor de utilizator sau locațiilor.

pentru a accesa API-ul, veți avea nevoie de 4 Informații de pe Twitter, adică API key, API secret, Access token și Access token secret. Pașii detaliați pentru configurarea unui cont și conectarea la serviciile API twitter folosind pachete python sunt acoperite în blog aici.

pentru analiza noastră am folosit serviciul twitter streaming API și am colectat tweets pentru douăzeci de companii FTSE 100 pe parcursul unei săptămâni începând cu 1 octombrie 2016. Acest lucru a dus la un total de 37.313 tweet-uri. Ieșirea API-ului de streaming trebuie analizată într-un format adecvat înainte de orice analiză. În secțiunea următoare vom acoperi pașii implicați în pre-procesarea tweets.

Pasul 2: tweets Pre-proces

aici analizăm răspunsul din API-ul twitter într-un tabel structurat. Răspunsul de la Twitter streaming API este în formatul de mai jos:

codul detaliat pentru parsarea ieșirii din API-ul twitter este mai jos. Rezultatul este structurat în câmpuri cheie, cum ar fi „doc_id”, „username”, „text” etc. Răspunsul analizat poate fi stocat într-o bază de date sau într-un fișier JSON.

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

Pasul 3: analiza sentimentului

oamenii își exprimă opiniile prin tweets și acestea au de obicei sentimente asociate cu acesta, adică pozitive, negative sau neutre. Analiza acestui sentiment poate duce la o perspectivă utilă asupra subiectului sau a companiei discutate. Prin urmare, sugerăm utilizarea algoritmilor de analiză a sentimentelor pentru a efectua această analiză. Am creat un blog separat cu detalii despre efectuarea analizei sentimentului folosind algoritmul de învățare profundă aici.

sentimentul este un indicator util, cu toate acestea tweet-urile conțin informații suplimentare, cum ar fi numele persoanelor, locurilor și organizațiilor. Datele extrase pot duce la informații foarte utile despre produsul sau compania dvs. Deci, în pasul următor vom acoperi utilizarea algoritmilor de recunoaștere entitate numit, care este proiectat pentru a extrage aceste informații.

Pasul 4: Recunoașterea entității denumite

algoritmul de recunoaștere a entității denumite va identifica etichetele cheie, cum ar fi persoanele, locațiile sau organizațiile conținute în tweets. De exemplu, dacă există o mențiune despre „Londra” în tweet-ul dvs., algoritmul ar eticheta-o ca „locație”. Cu toate acestea, deoarece tweet-urile nu respectă în general sintaxa engleză standard, precizia etichetelor este de aproximativ 60% până la 70%.

puteți utiliza Taggerul Stanford NER pentru a obține recunoașterea entității pentru tweets. În exemplul de mai jos am folosit un tweet de 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)

Pasul 5: Gruparea tweets similare

un număr de tweets sunt foarte asemănătoare între ele, acest lucru se poate datora oameni tweeting despre același subiect acest lucru provoacă o mulțime de zgomot în datele. Prin urmare, pentru a reduce zgomotul, ar fi util să grupați tweet-urile în grupuri pe baza asemănării lor. Acest lucru se poate face folosind algoritmul de clustering.

funcționarea interioară a algoritmilor se bazează pe un concept de învățare automată cunoscut sub numele de matrice tf-idf (term frequency — Inverse document frequency). Aici fiecare tweet este tratat ca un document (d) și cuvintele din tweet ca termen (t).

frecvența termenului-frecvența documentului invers este o statistică numerică care demonstrează cât de important este un cuvânt pentru un corpus.

frecvența termenului este doar raportul numărul cuvântului curent la numărul tuturor cuvintelor din document/șir/etc.

formula de frecvență a termenului

frecvența termenului t_i, unde n_t — numărul de t_i din documentul/șirul curent, suma lui n_k este numărul tuturor termenilor din documentul/șirul curent.

frecvența inversă a documentului este un jurnal al raportului dintre numărul tuturor documentelor/șirului din corpus și numărul de documente cu termen t_i.

Formula inversă a frecvenței documentului

tf-idf(t, d, D) este produsul tf(t, d) la idf(t, D). Detalii suplimentare despre tf-idf sunt disponibile pe blog aici.

Formula TF-IDF

în codul de mai jos pentru a obține gruparea, în afară de introducerea textului, singurul parametru suplimentar care trebuie specificat în intrare este pragul de similitudine. Puteți seta pragul în funcția ” get_clusters (procesattweets, similarity_threshold)”. Prin urmare, toate tweet-urile, care sunt 80% similare, vor fi grupate împreună pe baza măsurii de similitudine cunoscută sub numele de similitudine cosinus.

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

rezultatele vor conține o coloană suplimentară „cluster_ref”. Cluster_ref va grupa toate documentele similare într-un singur grup, de exemplu, dacă documentul 1 și documentul 2 sunt similare, prin urmare ambele au cluster_ref de 1.

Pasul 6: Vizualizarea rezultatelor

vizualizarea rezultatelor de mai sus ar ajuta la obținerea de informații despre opinia consumatorilor despre produs sau companie. În secțiunea de mai jos voi folosi Tableau în scopuri de vizualizare. Vă rugăm să consultați linkul către tabloul de bord aici.

primul grafic prezentat mai jos este sentimentul pozitiv, negativ și mediu (linia albastră) a fiecărei companii. Barele reprezintă sentimentul mediu pentru companie și nu este ponderat pentru numărul de tweet-uri. Acest sentiment neponderat nu oferă o comparație exactă între companii, deoarece nu ține cont de numărul de tweet-uri.

Lasă un răspuns

Adresa ta de email nu va fi publicată.