tweet analytics pomocí NLP

Prajwal Shreyas
Prajwal Shreyas

následovat

23. července 2019 * 9 min čtení

Úvod

v posledních dnech s explozí velkých dat existuje velká poptávka po organizacích a vědcích o datech, aby prováděli extrakci informací pomocí netradičních zdrojů dat. Výzkum ukázal, že téměř 80% dat existuje jako nestrukturovaná textová data, proto je analýza textu zásadní pro analýzu množství informací dostupných na přepisech chatu, příspěvcích na sociálních médiích, recenzích, zpravodajských kanálech atd.

co je to analýza textu?

Text analytics je proces syntézy nestrukturovaných dat, který pomáhá objevovat vzorce a umožňuje rozhodování. Až do posledních let musela být analýza textu prováděna postaru, tj. oční bulvy a manuální kategorizace textu, což je neefektivní a časově náročné. Také to není praktické řešení při jednání s miliony dokumentů, jako jsou data twitter.

Twitter data (také známý jako tweety) je bohatým zdrojem informací o velké sadě témat. Tato data lze použít k vyhledání trendů souvisejících s konkrétním klíčovým slovem, měření sentimentu značky nebo získání zpětné vazby o nových produktech a službách. Tento příspěvek poskytne průvodce krok za krokem pro analýzu textu na datech twitter.

jak provádět analýzu textu na datech twitter?

kroky zapojené do analýzy textu jsou:

Krok 1: Sbírejte tweety

Krok 2: Tweety před zpracováním

Krok 3: Použít analýzu sentimentu

Krok 4: použít rozpoznávání pojmenovaných entit

Krok 5: Tweety clusteru

Krok 6: vizualizovat analýzu

připojil jsem notebook jupyter, který provádí výše uvedené kroky na vzorku dat Twitteru zde.

Krok 1: Sbírejte tweety

data tweetu lze programově přistupovat dvěma způsoby, tj.

Rest API umožňuje shromažďovat seznam všech tweetů nebo následovníků pro konkrétního uživatele. Můžete také dotazovat uživatelský účet a dokonce je upravit za předpokladu, že máte požadovaná oprávnění. Kde jako Streaming API umožňuje shromažďovat tweety v reálném čase na základě vyhledávacích dotazů, ID uživatelů nebo umístění.

pro přístup k API budete potřebovat 4 informace z Twitteru, tj. Podrobné kroky pro nastavení účtu a připojení ke službám twitter API pomocí balíčků python jsou uvedeny v blogu zde.

pro naši analýzu jsem použil službu twitter streaming API a shromáždil tweety pro dvacet společností FTSE 100 za týden od 1. Října 2016. Výsledkem bylo celkem 37 313 tweetů. Výstup streamingového API musí být před jakoukoli analýzou analyzován do vhodného formátu. V další části se zabýváme kroky spojené s předběžným zpracováním tweetů.

Krok 2: Tweety před zpracováním

zde analyzujeme odpověď z rozhraní twitter API do strukturované tabulky. Odpověď od twitter streaming API je v níže uvedeném formátu:

podrobný kód pro analýzu výstupu z twitter API je níže. Výstup je strukturován do klíčových polí, jako je „doc_id“,“ uživatelské jméno“,“ text “ atd. Analyzovaná odpověď může být uložena v databázi nebo souboru 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: analýza sentimentu

lidé vyjadřují své názory prostřednictvím tweetů a obvykle s nimi mají sentiment spojený, tj. Analýza tohoto sentimentu může vést k užitečnému vhledu na diskutované téma nebo společnost. Proto doporučujeme použít algoritmy analýzy sentimentu k provedení této analýzy. Vytvořil jsem samostatný blog s podrobnostmi o provádění analýzy sentimentu pomocí algoritmu hlubokého učení zde.

sentiment je užitečným ukazatelem, nicméně tweety obsahují další informace, jako jsou jména lidí, míst a organizací. Získaná data mohou vést k velmi užitečným poznatkům o vašem produktu nebo společnosti. V dalším kroku se tedy zabýváme použitím algoritmů rozpoznávání pojmenovaných entit, které jsou navrženy tak, aby tyto informace extrahovaly.

Krok 4: Pojmenované rozpoznávání entit

algoritmus rozpoznávání pojmenované Entity identifikuje klíčové značky, jako jsou osoby, umístění nebo organizace obsažené v tweetech. Například, pokud je ve vašem tweetu zmínka o „Londýně“, algoritmus by to označil jako „umístění“. Protože však tweety obecně nedodržují standardní anglickou syntaxi, přesnost značek je kolem 60% až 70%.

můžete použít Stanford ner tagger k získání uznání entity pro tweety. V níže uvedeném příkladu jsem použil tweet 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: Shlukování podobných tweetů

počet tweetů je velmi podobný, může to být způsobeno tím, že lidé tweetují o stejném tématu, což způsobuje v datech hodně šumu. Proto, aby se snížil hluk, bylo by užitečné seskupit tweety do skupin na základě jejich podobnosti. To lze provést pomocí algoritmu shlukování.

vnitřní fungování algoritmů je založeno na konceptu strojového učení známém jako matice tf-idf (term frequency — Inverse document frequency). Zde je každý tweet považován za dokument (d) a slova v tweetu jako termín (t).

termín frekvence-inverzní frekvence dokumentu je numerická statistika, která ukazuje, jak důležité je slovo pro korpus.

termín frekvence je jen poměr Počet aktuálního slova k počtu všech slov v dokumentu / řetězec / atd.

vzorec frekvence výrazu

frekvence termínu t_i, kde n_t-počet t_i v aktuálním dokumentu / řetězci, součet n_k je počet všech termínů v aktuálním dokumentu / řetězci.

inverzní frekvence dokumentu je protokol poměru počtu všech dokumentů/řetězců v korpusu k počtu dokumentů s termínem t_i.

inverzní vzorec frekvence dokumentu

tf-idf (t, d, D) je součin tf (t, d) až idf (t,D). Další podrobnosti o tf-idf jsou k dispozici v blogu zde.

TF-IDF vzorec

v níže uvedeném kódu za účelem získání shlukování je kromě textového vstupu Jediným dalším parametrem, který je třeba zadat ve vstupu, práh podobnosti. Práh můžete nastavit ve funkci “ get_clusters (processedTweets, similarity_threshold)“. Proto všechny tweety, které jsou 80% podobné, budou seskupeny dohromady na základě míry podobnosti známé jako kosinusová podobnost.

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

výsledky budou obsahovat další sloupec „cluster_ref“. Cluster_ref bude seskupovat všechny podobné dokumenty do jedné skupiny, například pokud dokument 1 a dokument 2 jsou podobné, proto oba mají cluster_ref 1.

Krok 6: Vizualizace výsledků

vizualizace výše uvedených výsledků by pomohla nahlédnout do názoru spotřebitelů na produkt nebo společnost. V níže uvedené části budu používat tablo pro účely vizualizace. Viz odkaz na palubní desku zde.

první graf uvedený níže je pozitivní, negativní a průměrný sentiment (modrá čára) každé společnosti. Tyče představují průměrný sentiment společnosti a nejsou váženy pro počet tweetů. Tento nevážený sentiment neposkytuje přesné srovnání mezi společnostmi, protože nezohledňuje počet tweetů.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.