Analyse des tweets à l’aide de la PNL

 Prajwal Shreyas
Prajwal Shreyas

Suivre

23 juil. 2019 * 9 min de lecture

Introduction

Ces derniers jours, avec l’explosion du Big Data, il existe une forte demande pour les organisations et les data scientists d’extraire des informations à l’aide de sources de données non traditionnelles. La recherche a montré que près de 80% des données existent sous forme de données textuelles non structurées, l’analyse de texte est donc fondamentale pour analyser la richesse des informations disponibles sur les transcriptions de chat, les publications sur les réseaux sociaux, les critiques, les fils d’actualités, etc.

Qu’est-ce que l’analyse de texte ?

L’analyse de texte est le processus de synthèse de données non structurées pour aider à découvrir des modèles et permettre la prise de décision. Jusqu’à ces dernières années, l’analyse de texte devait être effectuée à l’ancienne, c’est-à-dire une analyse visuelle et une catégorisation manuelle du texte, ce qui est inefficace et prend beaucoup de temps. Ce n’est pas non plus une solution pratique pour traiter des millions de documents tels que les données Twitter.

Les données Twitter (également connues sous le nom de tweets) sont une riche source d’informations sur un grand nombre de sujets. Ces données peuvent être utilisées pour trouver des tendances liées à un mot clé spécifique, mesurer le sentiment de la marque ou recueillir des commentaires sur les nouveaux produits et services. Cet article fournira un guide étape par étape pour l’analyse de texte sur les données Twitter.

Comment effectuer des analyses de texte sur les données Twitter?

Les étapes impliquées dans l’analyse de texte sont les suivantes:

Étape 1: Collecter des tweets

Étape 2: Tweets de pré-traitement

Étape 3: Appliquer l’analyse des sentiments

Étape 4: Appliquer la reconnaissance d’entité nommée

Étape 5: Tweets de cluster

Étape 6: Visualiser l’analyse

J’ai joint un bloc-notes jupyter qui effectue les étapes ci-dessus sur un échantillon de données Twitter ici.

Étape 1: Collecte des tweets

Les données des tweets peuvent être accédées par programmation de deux manières, à savoir l’API Rest Twitter ou l’API de streaming.

L’API Rest vous permet de collecter la liste de tous les tweets ou abonnés pour un utilisateur particulier. Vous pouvez également interroger le compte d’un utilisateur et même le modifier à condition de disposer des autorisations requises. Where as l’API de streaming vous permet de collecter des tweets en temps réel en fonction des termes de recherche, des identifiants d’utilisateur ou des emplacements.

Pour accéder à l’API, vous aurez besoin de 4 informations de Twitter, c’est-à-dire clé d’API, secret d’API, jeton d’accès et secret de jeton d’accès. Les étapes détaillées pour la configuration d’un compte et la connexion aux services API Twitter à l’aide de packages python sont décrites dans le blog ici.

Pour notre analyse, j’ai utilisé le service d’API de streaming twitter et collecté des tweets pour vingt entreprises du FTSE 100 sur une semaine à partir du 1er octobre 2016. Cela a donné lieu à un total de 37 313 tweets. La sortie de l’API de streaming doit être analysée dans un format approprié avant toute analyse. Dans la section suivante, nous couvrons les étapes du prétraitement des tweets.

Étape 2: Pré-Traiter les tweets

Nous analysons ici la réponse de l’API twitter dans une table structurée. La réponse des API de streaming Twitter est dans le format ci-dessous:

Le code détaillé pour analyser la sortie de l’API Twitter est ci-dessous. La sortie est structurée en champs clés tels que « doc_id », « nom d’utilisateur », « texte », etc. La réponse analysée peut être stockée dans une base de données ou un fichier 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

Étape 3: Analyse des sentiments

Les gens expriment leurs opinions via des tweets et ceux-ci ont généralement un sentiment associé, c’est-à-dire positif, négatif ou neutre. L’analyse de ce sentiment peut conduire à des informations utiles sur le sujet ou l’entreprise en discussion. Nous suggérons donc d’utiliser des algorithmes d’analyse des sentiments pour effectuer cette analyse. J’ai créé un blog séparé avec des détails sur l’analyse des sentiments à l’aide de l’algorithme d’apprentissage profond ici.

Le sentiment est un indicateur utile, cependant les tweets contiennent des informations supplémentaires telles que les noms de personnes, de lieux et d’organisations. Les données extraites peuvent conduire à des informations très utiles sur votre produit ou votre entreprise. Ainsi, dans l’étape suivante, nous couvrons l’utilisation d’algorithmes de reconnaissance d’entités nommées, conçus pour extraire ces informations.

Étape 4: Reconnaissance d’entité nommée

L’algorithme de reconnaissance d’entité nommée identifiera les balises clés telles que les personnes, les emplacements ou les organisations contenus dans les tweets. Par exemple, s’il y a une mention de « Londres » dans votre tweet, l’algorithme étiquetterait cela comme « Emplacement ». Cependant, comme les tweets ne suivent généralement pas la syntaxe anglaise standard, la précision des balises est d’environ 60% à 70%.

Vous pouvez utiliser le tagger Stanford NER pour obtenir la reconnaissance d’entité pour les tweets. Dans l’exemple ci-dessous, j’ai utilisé 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)

Étape 5: Regroupement de tweets similaires

Un certain nombre de tweets sont très similaires les uns aux autres, cela peut être dû au fait que des personnes tweetent sur le même sujet, ce qui provoque beaucoup de bruit dans les données. Par conséquent, afin de réduire le bruit, il serait utile de regrouper les tweets en groupes en fonction de leur similitude. Cela peut être fait en utilisant l’algorithme de clustering.

Le fonctionnement interne des algorithmes est basé sur un concept d’apprentissage automatique connu sous le nom de matrice tf-idf (term frequency —Inverse document frequency). Ici, chaque tweet est traité comme un document (d) et les mots du tweet comme un terme (t).

Fréquence du terme – La fréquence du document inverse est une statistique numérique qui démontre l’importance d’un mot pour un corpus.

La fréquence du terme est juste le rapport entre le nombre de mots actuels et le nombre de tous les mots dans le document / chaîne / etc.

Formule de fréquence de terme

Fréquence du terme t_i, où n_t – le nombre de t_i dans le document /chaîne en cours, la somme de n_k est le nombre de tous les termes dans le document / chaîne en cours.

La fréquence de document inverse est un journal du rapport entre le nombre de tous les documents / chaîne du corpus et le nombre de documents avec le terme t_i.

Formule de fréquence de document inverse

tf-idf(t, d, D) est le produit tf(t, d) en idf(t, D). Des détails supplémentaires sur tf-idf sont disponibles dans le blog ici.

Formule TF-IDF

Dans le code ci-dessous afin d’obtenir le clustering, en dehors de l’entrée de texte, le seul paramètre supplémentaire qui doit être spécifié dans l’entrée est le seuil de similarité. Vous pouvez définir le seuil dans la fonction « get_clusters(processedTweets, similarity_threshold) ». Par conséquent, tous les tweets, qui sont similaires à 80%, seront regroupés en fonction d’une mesure de similarité connue sous le nom de similarité 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

Les résultats contiendront une colonne supplémentaire « cluster_ref ». Le cluster_ref regroupera tous les documents similaires en un seul groupe, par exemple si le document 1 et le document 2 sont similaires, donc les deux ont cluster_ref de 1.

Étape 6: Visualisation des résultats

La visualisation des résultats ci-dessus aiderait à éclairer l’opinion des consommateurs sur le produit ou l’entreprise. Dans la section ci-dessous, j’utiliserai Tableau à des fins de visualisation. Veuillez consulter le lien vers le tableau de bord ici.

Le premier graphique ci-dessous est le sentiment positif, négatif et moyen (ligne bleue) de chaque entreprise. Les barres représentent le sentiment moyen pour l’entreprise et ne sont pas pondérées pour le nombre de tweets. Ce sentiment non pondéré ne fournit pas une comparaison précise entre les entreprises car il ne prend pas en compte le nombre de tweets.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.