Test – Peut-on détecter les sentiments d’un tweet en français avec R ?

Alors que la fronde des gilets jaunes continue dans notre si beau pays, je me suis demandé comment était perçu les tweets sur cet événement. 

Est ce que l’on pourrait ressentir la peur, la joie, la tristesse ou même la négativité. 
Je me suis donc dit, tiens je ressortais mon vieux R Studio et que je me lançais dans l’élaboration d’un code pour analyser les sentiments des tweets. 

En fouillant un peu sur le net, on remarque qu’il existe déjà des travaux réalisés à ce sujet. Je prends le parti d’utiliser ce code et de l’adapter à mon besoin. 
Je décide d’analyser les sentiments sur le hashtag “GiletJaune”. Pendant toute cette tempête médiatique, il y a forcément de la data à analyser. Ce projet est initialement pour la langue anglaise. C’est pourquoi j’ai tenté l’expérience avec la langue française.

Je récupère 10000 tweets grâce à l’API de tweeter, en langue française, et commence le traitement.

library("NLP")
library("twitteR")
library("syuzhet")
library("tm")
library("SnowballC")
library("stringi")
library("topicmodels")
library("ROAuth")
library("ggplot2")
consumer_key <- 'XXXXXX'
consumer_secret <- 'XXXXXX'
access_token <- 'XXXXXX'
access_secret <- 'XXXXXX'
setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret)

#on définit le mot clé à recherche sur Twitter, le nombre de Tweets à récupérer ainsi que la langue à utiliser. Ici le français.

tweets_giletjaune <- searchTwitter("#giletJaune", n=1000,lang = "fr")
gilet_jaune_tweets <- twListToDF(tweets_giletjaune)
View(gilet_jaune_tweets)

Procédons maintenant aux nettoyages des datas récupérées.

#convert all text to lower case
gilet_jaune_text<- tolower(gilet_jaune_text)

#Replace blank space (“rt”)
gilet_jaune_text <- gsub("rt", "", gilet_jaune_text)

#Replace @UserName
gilet_jaune_text <- gsub("@w+", "", gilet_jaune_text)

#Remove punctuation
gilet_jaune_text <- gsub("[[:punct:]]", "", gilet_jaune_text)

#Remove links
gilet_jaune_text <- gsub("httpw+", "", gilet_jaune_text)

#Remove tabs
gilet_jaune_text <- gsub("[ |t]{2,}", "", gilet_jaune_text)

#Remove blank spaces at the beginning
gilet_jaune_text <- gsub("^ ", "", gilet_jaune_text)

#Remove blank spaces at the end
gilet_jaune_text <- gsub(" $", "", gilet_jaune_text)

Une fois que nous avons nettoyé les éléments récupérés via le code précédent, nous allons lancé des analyses sur le contenu en lui même. A l’aide de R, on va regarder s’il s’agit de sentiments de type : 

  • Joie
  • Peur
  • Tristesse
  • Colère
  • Etc.
#create corpus
gilet_jaune_tweets.text.corpus <- Corpus(VectorSource(gilet_jaune_text))


#clean up by removing stop words
gilet_jaune_tweets.text.corpus <- tm_map(gilet_jaune_tweets.text.corpus, function(x)removeWords(x,stopwords()))
library("wordcloud")


#générer un nuage de mots clés
wordcloud(gilet_jaune_tweets.text.corpus,min.freq = 10,colors=brewer.pal(8, "Dark2"),random.color = TRUE,max.words = 500)

#getting emotions using in-built function
mysentiment_tech<-get_nrc_sentiment((gilet_jaune_text))


#calculationg total score for each sentiment
Sentimentscores_tech<-data.frame(colSums(mysentiment_tech[,]))
names(Sentimentscores_tech)<-"Score"
Sentimentscores_tech<-cbind("sentiment"=rownames(Sentimentscores_tech),Sentimentscores_tech)
rownames(Sentimentscores_tech)<-NULL
p<- ggplot(data=Sentimentscores_tech,aes(x=sentiment,y=Score))+geom_bar(aes(fill=sentiment),stat = "identity")+
theme(legend.position="none")+
xlab("Sentiments")+ylab("scores")+ggtitle("Sentiments of people behind the tweets on tech as a whole")
print(p)

 

On peut ainsi voir que sur la thématique des “Gilets Jaune”, les sentiments détectés sont partagés entre un esprit positif ou négatif. 

Bien entendu, la langue française peut avoir des subtilités et qui pourrait légèrement tromper les résultats. Je peux en conclure que le test est à perfectionner car les données ne sont pas très précises. Cependant, la version anglaise retourne des résultats satisfaisants.

Nous pourrions utiliser ce procédé dans le cadre d’études sur le réseau pour votre image de marque. Par exemple, on pourrait regarder dans un temps 1 ce qu’il se dit sur votre marque. Après un travail sur la communication, on pourrait comparer dans un temps 2 les résultats. 

Il s’agit ici d’un test, les données & les résultats ne nous permettent pas d’en tirer des conclusions plus précises.

Au préalable, il vous faudra créer vos accès à l’API twitter. 

 

Laisser un commentaire