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).


A typical wordcloud


É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