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

Figure générée par DALL•E 3Dans 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).


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