Tweet analytics met behulp van NLP

Prajwal Shreyas
Prajwal Shreyas

Volg

Jul 23, 2019 · 9 min lezen

Inleiding

In de afgelopen dagen met de explosie van Big Data is er een grote vraag naar organisaties en gegevens wetenschappers voor het uitvoeren van informatie-extractie met behulp van niet-traditionele bronnen van de gegevens. Onderzoek heeft aangetoond dat bijna 80% van de gegevens bestaat als ongestructureerde tekstgegevens, vandaar text analytics is fundamenteel voor het analyseren van de schat aan informatie beschikbaar op Chat transcripten, social media berichten, beoordelingen, nieuwsfeeds etc.

Wat is tekstanalyse?

Text analytics is de processen van het synthetiseren van ongestructureerde gegevens om patronen te helpen ontdekken en besluitvorming mogelijk te maken. Tot de laatste jaren moest tekstanalyse op de ouderwetse manier worden uitgevoerd, namelijk het bekijken en handmatig categoriseren van tekst, wat inefficiënt en tijdrovend is. Ook dit is niet een praktijk oplossing bij het omgaan met miljoenen documenten zoals twitter-gegevens.

Twitter-gegevens (ook bekend als tweets) zijn een rijke bron van informatie over een grote reeks onderwerpen. Deze gegevens kunnen worden gebruikt om trends gerelateerd aan een specifiek trefwoord te vinden, merksentiment te meten of feedback te verzamelen over nieuwe producten en diensten. Dit bericht zal een stap voor stap handleiding voor text analytics op twitter data.

hoe text analytics uitvoeren op twitter-gegevens?

de stappen bij text analytics zijn:

Stap 1: Verzamel tweets

Stap 2: Vooraf verwerken van tweets

Stap 3: sentimentanalyse

Stap 4: erkenning met naam

toepassen Stap 5: Clustertweets

Stap 6: analyse visualiseren

Ik heb hier een jupyter-notebook bijgevoegd die de bovenstaande stappen uitvoert op een voorbeeld van twitter-gegevens.

Stap 1: Verzamel tweets

de tweet-gegevens kunnen op twee manieren programmatisch worden benaderd, namelijk Twitter Rest API of Streaming API.

met de Rest API kun je de lijst van alle tweets of volgers voor een bepaalde gebruiker verzamelen. U kunt ook een gebruikersaccount opvragen en zelfs wijzigen als u over de vereiste machtigingen beschikt. Waar als de Streaming API kunt u tweets te verzamelen op een real-time basis op basis van zoektermen, gebruikers-ID ‘ s of locaties.

om toegang te krijgen tot de API, heb je 4 stukjes informatie van Twitter nodig, namelijk API key, API secret, Access token en Access token secret. De gedetailleerde stappen voor het opzetten van een account en verbinding maken met de twitter API-diensten met behulp van python-pakketten worden behandeld in de blog hier.

voor onze Analyse heb ik gebruik gemaakt van de twitter streaming API service en verzamelde tweets voor twintig FTSE 100 bedrijven meer dan een week vanaf 1 oktober 2016. Dit heeft geresulteerd in een totaal van 37.313 tweets. De output van de streaming API moet worden ontleed in een geschikt formaat voor elke analyse. In het volgende gedeelte gaan we in op de stappen die betrokken zijn bij de voorbehandeling van tweets.

Stap 2: Pre-Process tweets

hier ontleden we de reactie van de twitter API in een gestructureerde tabel. Het antwoord van twitter streaming API ‘ s is in het onderstaande formaat:

de gedetailleerde code voor het ontleden van de uitvoer van de twitter API staat hieronder. De uitvoer is gestructureerd in belangrijke velden zoals” doc_id”,” gebruikersnaam”,” tekst ” etc. De ontleed antwoord kan worden opgeslagen in een database of een JSON-bestand.

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

Stap 3: sentimentanalyse

mensen uiten hun mening via tweets en deze hebben er meestal sentiment mee geassocieerd, d.w.z. positief, negatief of neutraal. Analyse van dit sentiment kan leiden tot een aantal nuttige inzichten over het onderwerp of bedrijf dat wordt besproken. Daarom stellen we voor om sentimentanalyse algoritmen te gebruiken om deze analyse uit te voeren. Ik heb een aparte blog met details over het uitvoeren van sentiment analytics met behulp van de deep learning algoritme hier gemaakt.

het sentiment is een nuttige indicator, maar tweets bevatten aanvullende informatie zoals namen van mensen, plaatsen en organisaties. De data wanneer geëxtraheerd kan leiden tot zeer nuttige inzichten over uw product of bedrijf. Dus in de volgende stap behandelen we het gebruik van benoemde entiteit herkenningsalgoritmen, die is ontworpen om deze informatie te extraheren.

Stap 4: Named Entity Recognition

het algoritme Named Entity Recognition identificeert belangrijke tags zoals personen, locaties of organisaties in de tweets. Bijvoorbeeld, als er een vermelding van “Londen “in uw tweet het algoritme zou dat taggen als”locatie”. Maar omdat tweets over het algemeen niet de standaard Engelse syntaxis volgen, is de nauwkeurigheid van de tags ongeveer 60% tot 70%.

je kunt de Stanford NER tagger gebruiken om de entity recognition voor de tweets te verkrijgen. In het voorbeeld hieronder heb ik een tweet van Donald Trump gebruikt.

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

Stap 5: Clustering van vergelijkbare tweets

een aantal tweets lijken erg op elkaar, dit kan te wijten zijn aan mensen die over hetzelfde onderwerp twitteren, dit veroorzaakt veel ruis in de gegevens. Om de ruis te verminderen zou het daarom nuttig zijn om de tweets te groeperen in groepen op basis van hun gelijkenis. Dit kan worden gedaan met behulp van het clustering algoritme.

de interne werking van de algoritmen is gebaseerd op een machine learning concept bekend als TF-idf (term frequency — Inverse document frequency) matrix. Hier wordt elke tweet behandeld als een document (d) en de woorden in de tweet als term (t).

Term Frequency-Inverse document Frequency is een numerieke statistiek die aantoont hoe belangrijk een woord is voor een corpus.

Term frequentie is gewoon verhouding aantal huidige woord tot het aantal van alle woorden in document / string / etc.

Term Frequency Formula

frequentie van term t_i, waarbij n_t — het aantal t_i in het huidige document / tekenreeks, de som van n_k het aantal van alle termen in het huidige document/tekenreeks is.

Inverse document Frequency is een log van de verhouding tussen het aantal documenten/tekenreeks in het corpus en het aantal documenten met term t_i.

Inverse Document Frequency Formula

tf-idf(t, d, D) is het product tf(t, d) tot idf (t, D). Meer informatie over tf-idf is beschikbaar in de blog hier.

TF-IDF formule

in de onderstaande code om de clustering te verkrijgen, behalve de tekstinvoer, is de enige extra parameter die in de invoer moet worden gespecificeerd de gelijkheidsdrempel. U kunt de drempelwaarde instellen in de functie ” get_clusters (processedTweets, similarity_threshold)”. Daarom zullen alle tweets, die 80% gelijk zijn, samen geclusterd worden op basis van de mate van gelijkenis die bekend staat als cosinus gelijkenis.

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

de resultaten zullen een extra kolom “cluster_ref”bevatten. De cluster_ref groepeert alle soortgelijke documenten in een enkele groep, bijvoorbeeld als document 1 en document 2 vergelijkbaar zijn, dus beide hebben cluster_ref van 1.

Stap 6: Visualisatie van resultaten

de visualisatie van de bovenstaande resultaten zou helpen inzicht te krijgen in de mening van de consument over het product of bedrijf. In het onderstaande gedeelte zal ik Tableau gebruiken voor visualisatiedoeleinden. Zie de link naar het dashboard hier.

de eerste grafiek hieronder is het positieve, negatieve en gemiddelde sentiment (blauwe lijn) van elk bedrijf. De balken vertegenwoordigen het gemiddelde sentiment voor het bedrijf en wordt niet gewogen voor het aantal tweets. Dit ongewogen sentiment biedt geen nauwkeurige vergelijking tussen bedrijven omdat er geen rekening wordt gehouden met het aantal tweets.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.