Création de graphique sous la forme de nuage de mots avec le package wordcloud
À partir d’une chaîne de caractères
Préparation du texte
Soit le texte suivant:
TexteOrig <- "L'objectif de ce site est d'aider la communauté d'utilisateurs R à obtenir
plus facilement de l'information et de l'aide sur ce logiciel et à mutualiser les
connaissances et pratiques quant à son utilisation.
La rubrique Sites référencés contient une sélection de liens relatifs à R que nous
avons jugés utiles et pertinents.
Chaque SITE comporte une description plus ou moins détaillée et quelques mots-clés
permettant une recherche ciblée.
La rubrique Fiches techniques contient un ensemble de fiches PRATIQUES plus
spécifiques, rédigées par nous-mêmes ou librement disponibles sur des sites
extérieurs. Là aussi, des mots-clés aident à la recherche.
La rubrique Tutoriels fournit une liste de DOCUMENTS pédagogiques accessibles sur
notre site. La rubrique FAQ contient les trucs et astuces ainsi que des réponses
courtes à des questions posées précises.
Les réponses peuvent aussi, être des liens vers des fiches techniques."
Ce texte contient 943 caractères. On commencer par homogénéiser/épurer le texte.
On transforme le texte pour n’avoir que des caractères minuscules, avec la fonction base::tolower()
TexteMod <- tolower(TexteOrig) # en minuscules
cat(TexteMod)
## l'objectif de ce site est d'aider la communauté d'utilisateurs r à obtenir
## plus facilement de l'information et de l'aide sur ce logiciel et à mutualiser les
## connaissances et pratiques quant à son utilisation.
## la rubrique sites référencés contient une sélection de liens relatifs à r que nous
## avons jugés utiles et pertinents.
## chaque site comporte une description plus ou moins détaillée et quelques mots-clés
## permettant une recherche ciblée.
## la rubrique fiches techniques contient un ensemble de fiches pratiques plus
## spécifiques, rédigées par nous-mêmes ou librement disponibles sur des sites
## extérieurs. là aussi, des mots-clés aident à la recherche.
##
## la rubrique tutoriels fournit une liste de documents pédagogiques accessibles sur
## notre site. la rubrique faq contient les trucs et astuces ainsi que des réponses
## courtes à des questions posées précises.
## les réponses peuvent aussi, être des liens vers des fiches techniques.
On supprime les mots non signifiants avec la fonction removeWords()
contenue dans le package tm. La liste de ces mots est fournie sous la forme d’un vecteur de type character
. Ici, on va utiliser la liste proposée par la fonction stopwords()
pour le français.
library("tm")
## Loading required package: NLP
stopwords(kind = "french")[1:40]
## [1] "au" "aux" "avec" "ce" "ces" "dans" "de" "des"
## [9] "du" "elle" "en" "et" "eux" "il" "je" "la"
## [17] "le" "leur" "lui" "ma" "mais" "me" "même" "mes"
## [25] "moi" "mon" "ne" "nos" "notre" "nous" "on" "ou"
## [33] "par" "pas" "pour" "qu" "que" "qui" "sa" "se"
Danss cette liste, on trouve en plus des articles, conjonctions de coordination, adjectifs possessifs, …, les différentes formes du verbe être et du verbe avoir. On peut aussi utiliser sa propre liste de mots.
TexteMod <- removeWords(TexteMod, stopwords("french")) # supprimer certains 'petits mots'
cat(TexteMod)
## 'objectif site 'aider communauté 'utilisateurs r obtenir
## plus facilement 'information 'aide logiciel mutualiser
## connaissances pratiques quant utilisation.
## rubrique sites référencés contient sélection liens relatifs r
## jugés utiles pertinents.
## chaque site comporte description plus moins détaillée quelques mots-clés
## permettant recherche ciblée.
## rubrique fiches techniques contient ensemble fiches pratiques plus
## spécifiques, rédigées -mêmes librement disponibles sites
## extérieurs. là aussi, mots-clés aident recherche.
##
## rubrique tutoriels fournit liste documents pédagogiques accessibles
## site. rubrique faq contient trucs astuces ainsi réponses
## courtes questions posées précises.
## réponses peuvent aussi, être liens vers fiches techniques.
On enlève les signes de ponctuation avec la fonction removePonctuation()
:
TexteMod <- removePunctuation(TexteMod) # supprimer la ponctuation
cat(TexteMod)
## objectif site aider communauté utilisateurs r obtenir
## plus facilement information aide logiciel mutualiser
## connaissances pratiques quant utilisation
## rubrique sites référencés contient sélection liens relatifs r
## jugés utiles pertinents
## chaque site comporte description plus moins détaillée quelques motsclés
## permettant recherche ciblée
## rubrique fiches techniques contient ensemble fiches pratiques plus
## spécifiques rédigées mêmes librement disponibles sites
## extérieurs là aussi motsclés aident recherche
##
## rubrique tutoriels fournit liste documents pédagogiques accessibles
## site rubrique faq contient trucs astuces ainsi réponses
## courtes questions posées précises
## réponses peuvent aussi être liens vers fiches techniques
Enfin, on supprime les espaces excédentaires avec la fonction stripWhitespace()
contenue dans le package tm.
TexteMod <- stripWhitespace(TexteMod) # supprimer les espaces
On a réduit notre texte de 943 à 717 caractères
Construction du nuage de mots
Pour réaliser le nuage de mots, on va utiliser le package wordcloud et construire le nuage de mots avec la fonction wordcloud()
.
library("wordcloud")
## Loading required package: RColorBrewer
formatR::usage(FUN = wordcloud, width = 70, tidy = TRUE)
## wordcloud(words, freq, scale = c(4, 0.5), min.freq = 3,
## max.words = Inf, random.order = TRUE, random.color = FALSE,
## rot.per = 0.1, colors = "black", ordered.colors = FALSE,
## use.r.layout = FALSE, fixed.asp = TRUE, ...)
Le choix des mots à conserver pour le graphique se fait sur la fréquence avec l’argument min.freq=
et leur positionnement avec l’argument random.order=
et l’amplitude avec l’argument scale=
.
Pour afficher tous les mots dont la fréquence est au moins égale à 1:
# scale : pour gérer l'amplitude des tailles des mots
wordcloud(TexteMod, min.freq = 1, scale = c(2.5, 0.5))
et pour faire apparaître les mots les plus fréquents au centre
wordcloud(TexteMod, min.freq = 1, random.order = FALSE, scale = c(2.5,
0.5))
On peut aussi colorer les mots en fonction de leur fréquence (colors=
et random.color=FALSE
).
pal <- brewer.pal(6, "Dark2") # choix de la palette de couleurs
pal <- pal[-(1)]
set.seed(98) # pour répéter exactement le wordle (même tirage au sort)
# rot.per : proportion de mots avec rotation à 90 degrés
wordcloud(TexteMod, min.freq = 1, scale = c(3, 0.2), colors = pal, random.color = TRUE,
rot.per = 0.2, random.order = TRUE)
À partir d’une collection de fichiers
Pour cela, il faut créer un corpus, c’est à-dire une collection de documents que l’on va regrouper dans un répertoire. Ici, l’exemple utilise 6 fables de La Fontaine stockées dans 6 fichiers dans le dossier LaFontaine.
Fables <- Corpus(DirSource("LaFontaine", encoding = "UTF-8", mode = "text"))
Fables
## <<SimpleCorpus>>
## Metadata: corpus specific: 1, document level (indexed): 0
## Content: documents: 6
La préparation du corpus, utilise les mêmes opérations que précédemment, mais on utilise la fonction tm_map()
.
Fables <- tm_map(Fables, content_transformer(tolower))
Fables <- tm_map(Fables, removeWords, stopwords("french"))
Fables <- tm_map(Fables, removePunctuation)
Fables <- tm_map(Fables, removeNumbers)
Fables <- tm_map(Fables, stripWhitespace)
On peut ensuite faire la représentation:
set.seed(8)
wordcloud(Fables, min.freq = 2, scale = c(4, 0.5), random.order = FALSE,
random.color = TRUE, rot.per = 0.1, colors = brewer.pal(8, "Dark2"))