Text mining et nuage de mots avec le logiciel R : 5 étapes simples à savoir




Le principe du nuage de mots est basé sur une méthode d’analyse de textes qui nous permet de mettre en évidence les mots-clés les plus fréquemment utilisés dans un paragraphe de textes. Le nuage de mots est également appelé word cloud ou tag cloud en anglais. La procédure de création d’un nuage de mots est très simple avec le logiciel R si vous connaissez les différentes étapes à exécuter. Le package tm (pour text mining) et le package wordcloud (pour générer le nuage de mots clés) sont disponibles dans R pour nous aider à analyser des textes et de visualiser rapidement les mots-clés en nuage de mots.

L’objectif de ce tutoriel est d’expliquer les différentes étapes pour générer un nuage de mots à partir du logiciel R.

Nuage de mots, word cloud et text mining, I have a dream speech de Martin luther king

3 raisons pour lesquelles vous devriez utiliser des nuages de mots pour présenter vos textes

  1. Le nuage de mots est une méthode puissante pour l’analyse de textes. Il ajoute de la simplicité et de la clarté. Les mots-clés les plus utilisés ressortent mieux dans un nuage de mots.
  2. Le nuage de mots est un outil de communication puissant. Il est facile à comprendre, à partager et est percutant
  3. Le nuage de mots est visuellement plus agréable qu’une table de données remplie de textes

Qui utilise les nuages de mots?

  • Les chercheurs: pour la présentation des données qualitatives
  • Les Marketers: pour mettre en évidence les besoins et les points d’insatisfaction des clients
  • Les enseignants: pour soutenir des sujets essentiels
  • Les politiciens et les journalistes
  • Les réseaux sociaux: pour collecter, analyser et partager les sentiments des utilisateurs

Les cinq principales étapes de la création d’un nuage de mots avec le logiciel R

Etape 1: Créez un fichier texte

Dans les exemples suivants, je vais analyser le discours de Martin Luther King (“I have a dream”), mais vous pouvez utiliser n’importe quel autre texte :

  • Copiez et collez le texte dans un fichier texte (par exemple: ml.txt)
  • Enregistrez le fichier

Notez que, le texte doit être enregistré dans un fichier au format texte simple (.txt) en utilisant votre éditeur de texte favori.

Etape 2: Installer et charger les packages nécessaires

Les packages text mining (tm) et wordcloud sont nécessaires.

Ils peuvent être installés et chargés en utilisant le code de R ci-dessous:

# Installer
install.packages("tm")  # pour le text mining
install.packages("SnowballC") # pour le text stemming
install.packages("wordcloud") # générateur de word-cloud 
install.packages("RColorBrewer") # Palettes de couleurs
# Charger
library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")

Etape 3 : Exploration de textes

Charger le texte

Le texte peut être chargé en utilisant la fonction Corpus() du package tm. Corpus est une liste de documents (dans notre cas, nous avons juste un seul fichier).

Dans l’exemple ci-dessous, j’ai chargé un fichier .txt disponible sur le site web STHDA. Vous pouvez utiliser n’importe quel fichier de votre ordinateur.

# Lire le fichier texte
filePath <- "http://www.sthda.com/sthda/RDoc/example-files/martin-luther-king-i-have-a-dream-speech.txt"
text <- readLines(filePath)
# Charger les données comme un corpus
docs <- Corpus(VectorSource(text))

La fonction VectorSource() se charge de la création du corpus de textes (ensemble de vecteurs de textes)

Le contenu du document peut être consulté comme suit:

inspect(docs)

La transformation du texte

La transformation du texte est effectuée en utilisant la fonction tm_map() pour remplacer, par exemple, des caractères spéciaux non utiles.

Remplacer “/”, “@” et “|” avec un espace

toSpace <- content_transformer(function (x , pattern ) gsub(pattern, " ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")

Nettoyage du texte

La fonction tm_map() est utilisée pour supprimer les espaces inutiles, pour convertir le texte en minuscules, supprimer les “mots vides” (stopwords en anglais). Il s’agit des mots très courants dans une langue comme “le”, “la”, “nous”, “et”, etc.

La valeur de l’information de ces “mots vides” est proche de zéro en raison du fait qu’ils sont si communs dans une langue. La suppression de ce genre de mots est utile avant de poursuivre une analyse plus approfondie.

Pour la suppression de ces mots vides, les langues supportées sont: danish, dutch, english, finnish, french, german, hungarian, italian, norwegian, portuguese, russian, spanish et swedish. Le nom des langues est sensible à la casse.

Je vais aussi vous montrer comment faire pour supprimer votre propre liste de mots du texte.

Vous pouvez également supprimer des chiffres et ponctuations avec les arguments removeNumbers et removePunctuation.

Une autre étape importante de préparation du texte est de faire du texte stemming. Ce processus consiste à réduire les mots à leurs racines. En d’autres termes, ce processus supprime les suffixes des mots pour les rendre simples et pour obtenir l’origine commune. Par exemple, le text stemming va réduire les mots “partir”, “partant”, “partons” à la racine “partir”.

Notez que le text stemming nécessite le package ‘SnowballC’.

Le code R ci-dessous peut être utilisé pour nettoyer le texte :

# Convertir le texte en minuscule
docs <- tm_map(docs, content_transformer(tolower))
# Supprimer les nombres
docs <- tm_map(docs, removeNumbers)
# Supprimer les mots vides anglais
docs <- tm_map(docs, removeWords, stopwords("english"))
# Supprimer votre propre liste de mots non désirés
docs <- tm_map(docs, removeWords, c("blabla1", "blabla2")) 
# Supprimer les ponctuations
docs <- tm_map(docs, removePunctuation)
# Supprimer les espaces vides supplémentaires
docs <- tm_map(docs, stripWhitespace)
# Text stemming
# docs <- tm_map(docs, stemDocument)

Etape 4: Construire la matrice des mots

La matrice des mots (term-documents matrix) est une table contenant la fréquence des mots. La fonction TermDocumentMatrix() du package text mining peut être utilisée comme suit :

dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)
             word freq
will         will   17
freedom   freedom   13
ring         ring   12
day           day   11
dream       dream   11
let           let   11
every       every    9
able         able    8
one           one    8
together together    7

Etape 5: Générer le nuage de mots

L’importance des mots peut être illustrée par un nuage de mots comme suit:

set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 1,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

nuage de mots, word cloud ettext mining, I have a dream speech from Martin Luther King

Le nuage de mots ci-dessus montre clairement que les mots “Will”, “freedom”, “dream”, “day” et “together” sont les cinq mots les plus importants dans le texte “I have a dream” de Martin Luther King.

Les arguments de la fonction wordcloud sont :


  • words : les mots à dessiner
  • freq : la fréquence des mots
  • min.freq : les mots avec une fréquence en dessous de min.freq ne seront pas illustrés
  • max.words : nombre maximum de mots à dessiner
  • random.order : dessine les mots dans un ordre aléatoire. Si false, ils seront dessinés par ordre décroissant de la fréquence
  • rot.per : la proportion de mots verticaux sur le graphe
  • colors : couleurs des mots du moins au plus fréquent. Utiliser par exemple, colors =“black” pour une couleur unique.


Allez plus loin

Explorer les mots fréquents ainsi que leurs associations

Vous pouvez voir les mots les plus fréquents comme suit. L’exemple, ci-dessous, montre les mots qui sont fréquents au moins 4 fois dans le texte :

findFreqTerms(dtm, lowfreq = 4)
 [1] "able"     "day"      "dream"    "every"    "faith"    "free"     "freedom"  "let"      "mountain" "nation"  
[11] "one"      "ring"     "shall"    "together" "will"    

Vous pouvez analyser l’association entre les mots (leur corrélation) en utilisant la fonction findAssocs(). Le code R ci-dessous identifie les mots qui sont le plus fréquemment associés à “freedom” dans le texte I have a dream :

findAssocs(dtm, terms = "freedom", corlimit = 0.3)
             freedom
let             0.89
ring            0.86
mississippi     0.34
mountainside    0.34
stone           0.34
every           0.32
mountain        0.32
state           0.32

Table de la fréquence des mots

head(d, 10)
             word freq
will         will   17
freedom   freedom   13
ring         ring   12
day           day   11
dream       dream   11
let           let   11
every       every    9
able         able    8
one           one    8
together together    7

Dessiner la fréquence des mots

La fréquence des 10 premiers mots est montré ci-dessous :

barplot(d[1:10,]$freq, las = 2, names.arg = d[1:10,]$word,
        col ="lightblue", main ="Most frequent words",
        ylab = "Word frequencies")

word cloud and text mining

Infos

Cette analyse a été réalisée avec le logiciel R (ver. 3.1.0).







Want to Learn More on R Programming and Data Science?

==> Subscribe to our Mailing List <==

* indicates required


 Get involved :
  Click to follow us on and Google+ :   
  Comment this article by clicking on "Discussion" button (top-right position of this page)
  Sign up as a member and post news and articles on STHDA web site.


Suggestions



Cette page a été vue 17578 fois
Licence - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions
Licence Creative Commons