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 à partir du texte d’Os Lusíadas (« Les Lusiades »). L’œuvre en question est un poème épique. Considérée comme l’œuvre littéraire la plus importante en portugais, elle est l’équivalent en littérature portugaise de l’Énéide de Virgile, par exemple. Le poème a été écrit par Luís de Camões en 1572. L’œuvre se compose de dix parties (Cantos). Pour le nuage en question, j’utilise les extensions suivantes : dplyr
et readr
, 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 | 100 |
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 © 2024 Guilherme Duarte Garcia