Tweet analytics using NLP

Prajwal Shreyas
Prajwal Szreyas

Obserwuj

lip 23, 2019 · 9 min czytać

wprowadzenie

w ostatnich dniach wraz z eksplozją Big Data istnieje duże zapotrzebowanie na organizacje i analityków danych do wykonywania ekstrakcji informacji przy użyciu nietradycyjnych źródeł danych. Badania wykazały, że prawie 80% danych istnieje jako nieustrukturyzowane dane tekstowe, dlatego analiza tekstu jest fundamentalna w celu analizy bogactwa informacji dostępnych na transkrypcjach czatu, postach w mediach społecznościowych, recenzjach, kanałach informacyjnych itp.

co to jest analiza tekstu?

analiza tekstu to procesy syntezy nieustrukturyzowanych danych, które pomagają odkryć wzorce i umożliwić podejmowanie decyzji. Jeszcze w ostatnich latach analiza tekstu musiała być wykonywana w staromodny sposób, tj. przeglądanie i ręczna Kategoryzacja tekstu, co jest nieefektywne i czasochłonne. Nie jest to również praktyczne rozwiązanie w przypadku milionów dokumentów, takich jak dane z Twittera.

dane na Twitterze (znane również jako tweety) są bogatym źródłem informacji na duży zestaw tematów. Dane te mogą być wykorzystywane do wyszukiwania trendów związanych z konkretnym słowem kluczowym, pomiaru nastrojów marki lub zbierania opinii na temat nowych produktów i usług. Ten post dostarczy przewodnik krok po kroku dla analizy tekstu na Twitterze danych.

jak przeprowadzić analizę tekstu na danych Twittera?

kroki związane z analizą tekstu to:

Krok 1: Zbieraj tweety

Krok 2: Posty wstępne

Krok 3: Zastosuj analizę nastrojów

Krok 4: Zastosuj rozpoznawanie nazwanych jednostek

Krok 5: Tweety klastra

Krok 6: Analiza wizualizacji

dołączam notatnik jupyter, który wykonuje powyższe kroki na próbce danych z Twittera tutaj.

Krok 1: Zbieraj tweety

dostęp do danych tweetów można programowo uzyskać na dwa sposoby, np.

Rest API umożliwia zebranie listy wszystkich tweetów lub obserwujących dla danego użytkownika. Możesz również wysłać zapytanie do konta użytkownika, a nawet zmodyfikować je, pod warunkiem, że masz wymagane uprawnienia. Gdzie jako Streaming API pozwala zbierać tweety w czasie rzeczywistym na podstawie wyszukiwanych haseł, identyfikatorów użytkowników lub lokalizacji.

aby uzyskać dostęp do API, będziesz potrzebować 4 informacji z Twittera, tj. klucza API, klucza API, tokena dostępu i klucza dostępu. Szczegółowe kroki dotyczące zakładania konta i łączenia się z usługami API Twittera przy użyciu pakietów Pythona są opisane na blogu tutaj.

do naszej analizy użyłem usługi twitter streaming API i zebrałem tweety dla dwudziestu firm FTSE 100 w ciągu tygodnia, począwszy od 1 października 2016. W sumie 37 313 tweetów. Dane wyjściowe interfejsu API streamingu muszą zostać przetworzone do odpowiedniego formatu przed jakąkolwiek analizą. W następnej sekcji omówimy kroki związane z wstępnym przetwarzaniem tweetów.

Krok 2: wstępne przetwarzanie tweetów

tutaj analizujemy odpowiedź z interfejsu API Twittera do strukturalnej tabeli. Odpowiedź z twitter streaming API jest w poniższym formacie:

szczegółowy kod do parsowania danych wyjściowych z interfejsu API Twittera znajduje się poniżej. Dane wyjściowe są podzielone na kluczowe pola, takie jak” doc_id”,” username”,” text ” itp. Przetworzona odpowiedź może być przechowywana w bazie danych lub pliku 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

Krok 3: Analiza nastrojów

ludzie wyrażają swoje opinie za pośrednictwem tweetów i zwykle mają z tym związane sentymenty, tj. pozytywne, negatywne lub neutralne. Analiza tego sentymentu może prowadzić do pewnego przydatnego wglądu w omawiany temat lub firmę. Dlatego proponujemy wykorzystanie algorytmów analizy nastrojów do przeprowadzenia tej analizy. Stworzyłem osobny blog ze szczegółami na temat wykonywania analizy nastrojów przy użyciu algorytmu deep learning tutaj.

sentyment jest przydatnym wskaźnikiem, jednak tweety zawierają dodatkowe informacje, takie jak nazwiska osób, miejscowości i organizacji. Wyodrębnione dane mogą prowadzić do bardzo przydatnych informacji na temat Twojego produktu lub firmy. Tak więc w następnym kroku omówimy użycie nazwanych algorytmów rozpoznawania jednostek, które mają na celu wyodrębnienie tych informacji.

Krok 4: Rozpoznawanie nazwanych jednostek

algorytm rozpoznawania nazwanych jednostek identyfikuje kluczowe znaczniki, takie jak osoby, lokalizacje lub organizacje zawarte w tweetach. Na przykład, jeśli w tweecie jest wzmianka o „Londynie”, algorytm oznaczałby to jako „lokalizacja”. Jednak ponieważ tweety na ogół nie są zgodne ze standardową składnią angielską, dokładność tagów wynosi około 60% do 70%.

możesz użyć znacznika Stanford NER, aby uzyskać rozpoznawanie encji dla tweetów. W poniższym przykładzie użyłem tweeta Donalda Trumpa.

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

Krok 5: Grupowanie podobnych tweetów

wiele tweetów jest do siebie bardzo podobnych, może to być spowodowane tym, że ludzie tweetują na ten sam temat, co powoduje wiele szumów w danych. Dlatego w celu zmniejszenia szumu przydatne byłoby zgrupowanie tweetów w grupy oparte na ich podobieństwie. Można to zrobić za pomocą algorytmu klastrowania.

wewnętrzne działanie algorytmów opiera się na koncepcji uczenia maszynowego znanej jako macierz TF-idf (term frequency — Inverse document frequency). Tutaj każdy tweet jest traktowany jako dokument (d), A Słowa w tweecie jako termin (t).

Term Frequency-odwrotna Częstotliwość dokumentu jest liczbową statystyką, która pokazuje, jak ważne jest słowo dla korpusu.

Częstotliwość pojęć to po prostu stosunek liczby bieżącego słowa do liczby wszystkich słów w dokumencie/łańcuchu/itd.

Term Frequency Formula_7248>

Frequency of term T_i, gdzie n_t-liczba t_i w bieżącym dokumencie / łańcuchu, suma n_k jest liczbą wszystkich terminów w bieżącym dokumencie/łańcuchu.

Częstotliwość odwrotnego dokumentu jest logiem stosunku liczby wszystkich dokumentów/ciągów znaków w korpusie do liczby dokumentów z wyrażeniem t_i.

wzór odwrotnej częstotliwości dokumentu

tf-idf(T, d, D) jest produktem tf(T, d) do idf(T, D). Dodatkowe informacje na temat tf-idf są dostępne na blogu tutaj.

wzór TF-IDF

w poniższym kodzie w celu uzyskania klastrowania, oprócz wprowadzania tekstu, jedynym dodatkowym parametrem, który musi zostać określony na wejściu, jest próg podobieństwa. Próg można ustawić w funkcji”get_clusters(processedTweets, similarity_threshold)”. Stąd wszystkie tweety, które są w 80% podobne, będą grupowane w oparciu o miarę podobieństwa znaną jako podobieństwo cosinusowe.

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

wyniki będą zawierały dodatkową kolumnę „cluster_ref”. Cluster_ref grupuje wszystkie podobne dokumenty w jedną grupę, na przykład jeśli dokument 1 i dokument 2 są podobne, dlatego oba mają cluster_ref od 1.

Krok 6: Wizualizacja wyników

wizualizacja powyższych wyników pomoże uzyskać wgląd w Opinię konsumentów na temat produktu lub firmy. W poniższej sekcji będę używać Tableau do celów wizualizacji. Proszę zobaczyć link do Pulpitu nawigacyjnego tutaj.

pierwszy wykres poniżej przedstawia pozytywne, negatywne i średnie nastroje (Niebieska linia) każdej firmy. Słupki reprezentują średnie nastroje dla firmy i nie są ważone liczbą tweetów. Ten nieważny sentyment nie zapewnia dokładnego porównania między firmami, ponieważ nie bierze pod uwagę liczby tweetów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.