A typical wordcloud
Nuage de mots avec R
As armas e os barões assinalados,
Que da ocidental praia Lusitana,
Por mares nunca de antes navegados,
Passaram ainda além da Taprobana,
Em perigos e guerras esforçados,
Mais do que prometia a força humana,
E entre gente remota edificaram
Novo Reino, que tanto sublimaram
Camões
Fouille de texte : Os Lusíadas
Dans ce petit tutoriel, on va voir comment créer un nuage de mots a partir du texte de Os Lusíadas («Les Lusiades»). Pour le nuage en question, j’utilise les extensions suivantes : dplyr
, readr
(qui sont trouvées dans l’extension tidyverse
), tidytext
, et wordcloud2
(qui génère le nuage de mots interactif).
Étape par étape
1. Chargez les extentions
2. Chargez le texte
book = read_lines("http://www.gutenberg.org/cache/epub/3333/pg3333.txt")
# Sélectionnez seulement les lignes pertinentes du poème
book = as.data.frame(book[30:(length(book)-374)])
names(book) = "verse"
book$verse = as.character(book$verse)
# Supprimer les virgules
book$verse = str_replace_all(book$verse, pattern = ",", replacement = "")
3. Préparez les mots
# Ajoutez le numéro de chant et de stance
book = book %>% mutate(line = row_number()) %>%
mutate(canto = cumsum(str_detect(string = verse, pattern = "^Canto "))) %>%
group_by(canto) %>%
mutate(stanza = cumsum(str_detect(string = verse, pattern = "[1-9]+"))) %>%
select(canto, stanza, line, verse) %>%
ungroup()
# Tokénisez le texte
tidy_book = book %>%
unnest_tokens(input = verse, output = word)
# Chargez les mots fonctionnelles (fichier CSV)
# Notez que cette liste n'est pas complète
stopwords = read_csv("stopword.csv")
names(stopwords) = "word"
# Supprimez «stopwords»
tidy_book = tidy_book %>%
anti_join(stopwords)
# Supprimez les numéros
tidy_book = tidy_book %>%
filter(!str_detect(word, "^\\d"))
4. L’input pour le nuage de mots
words = tidy_book %>%
group_by(word) %>%
summarise(freq = n()) %>%
arrange(desc(freq))
words = as.data.frame(words)
rownames(words) = words$word
Voyons les dix mots les plus fréquents:
word | freq |
---|---|
gente | 230 |
terra | 222 |
rei | 204 |
mar | 188 |
mundo | 101 |
reino | 86 |
céu | 83 |
forte | 79 |
ó | 78 |
peito | 76 |
5. Enfin, le nuage de mots
# Le code suivant génère la nuage de mots au sommet de la page
wordcloud2(data = words, size = .5,
shape = "oval",
rotateRatio = 0.5,
ellipticity = 0.9, color = "brown")
Copyright © 2023 Guilherme Duarte Garcia