Générer des graphes de mot avec R.temis

Analyse textuelle
Auteur·rice
Affiliation

Coralie Cottet

Ensai-Ined

Date de publication

25 juillet 2023

Résumé

Pour réaliser un nuage ou un graphe de mots avec R, l’utilisation des packages R.temis, dplyr et tibble s’avèrent particulièrement utiles. Le package R.temis fournit des fonctions pour les traitements de statistiques textuelles comme la création d’un tableau lexical ou le calcul d’occurences des mots). De son côté, dplyr fournit des fonctions pour la manipulation de données, telles que la sélection de colonnes, le filtrage de données et l’agrégation de données, qui sont utilisées dans le code pour nettoyer et préparer les données textuelles. Enfin, tibble fournit une classe de données pour stocker des données tabulaires, qui est plus efficace que la classe de données par défaut de R. Cette classe de données est utilisée dans le code pour stocker les données textuelles nettoyées et préparées.

Documentation:

install.packages(R.temis)
install.packages(dplyr) # ou (tidyverse)
install.packages(tibble) # ou (tidyverse)
Chargement des packages (à installer si besoin)

Concernant le choix du corpus, nous avons sélectionné les voeux prononcés par François Hollande de 2013 à 2017. Les textes retranscrits dans des fichiers de type texte (.txt) et placé dans un seul dossier nommé dossier_de_texte.

corpus1 <- import_corpus("dossier_de_texte", format="txt", language ="fr")
corpus<-split_documents(corpus1, 5, preserveMetadata = TRUE)
1
Importation des textes avec la fonction import_corpus
2
Découpage en unités textuelles de 5 paragraphes pour un meilleur rendu

Les stop words (ou mots vides) sont des mots très courants d’une langue comme les prépositions, les articles, les pronoms, etc., qui sont souvent omis lors de l’analyse car en général ils ne portent pas de sens important pour la compréhension globale du texte. La fonction build_dtm est utilisée pour construire une matrice de termes-document (ou tableau lexical) à partir d’un corpus de textes. La matrice de termes-document (ou Tableau Lexical) est une représentation quantitative d’un corpus de textes, où chaque colonne représente un terme et chaque ligne représente un document. Ici les documents sont les unités textuelles (composées de 5) paragraphes.

On choisit de supprimer les mots vides.

On passe maintenant à la création du tableau lexical (dtm) sans mots outils et avec les mots d’au moins 1 lettre.

dtm <-build_dtm(corpus, remove_stopwords = T, min_length = 1)
frequent_terms(dtm) 
             Global occ.  Global %
france                66 1.9446081
a                     54 1.5910430
plus                  48 1.4142605
année                 33 0.9723041
être                  29 0.8544490
aussi                 28 0.8249853
pays                  24 0.7071302
tous                  24 0.7071302
tout                  24 0.7071302
contre                19 0.5598114
compatriotes          18 0.5303477
faire                 18 0.5303477
doit                  17 0.5008839
face                  16 0.4714202
toutes                16 0.4714202
chers                 15 0.4419564
veux                  15 0.4419564
europe                14 0.4124926
comme                 13 0.3830289
emploi                13 0.3830289
monde                 13 0.3830289
confiance             12 0.3535651
parce                 12 0.3535651
république            12 0.3535651
ceux                  11 0.3241014
  1. On crée le tableau lexical avec la fonction build_dtm
  2. Calcul des occurrences des mots dans le corpus de textes

Le mot france est prononcé 66 fois dans l’ensemble des 5 discours et représente 1,95% des occurences totales.

On va maintenant affiner l’analyse.

On aimerait aussi retirer les mots a et plus et rassembler sous un même mot les termes tout, toutes et tous en tous.tes à titre d’exemple.

On crée le dictionnaire qui affiche les mots initiaux et les racines des mots (Term). Il va servir à lemmatiser le corpus.

La lemmatisation consiste à remplacer les mots initiaux par des termes: la racine des mots ou une forme personnalisée (comme c’est le cas ici)

dic <-dictionary(dtm)

dic2 = dic %>%
  rownames_to_column(var="word") %>% 
  mutate(Term = word)

row.names(dic2) <- dic2$word

# Remplacer les mots spécifiés par tous.tes
dic2$Term[dic2$word == "toutes"] <- "tous.tes"
dic2$Term[dic2$word == "tout"] <- "tous.tes"
dic2$Term[dic2$word == "tous"] <- "tous.tes"

dtmlem <-combine_terms(dtm, dic2)

mots_a_retirer <- c("a", "plus")

dtm2<-dtmlem[, !colnames(dtmlem) %in% mots_a_retirer]


frequent_terms(dtm2)
1
Création d’un dictionnaire de mot.
2
Remplacer les mots spécifiés par tous.tes.
3
Lemmatisation.
4
Suppression de mots dans le tableau lexical.
             Global occ.  Global %
france                66 2.0048603
tous.tes              64 1.9441069
année                 33 1.0024301
être                  29 0.8809235
aussi                 28 0.8505468
pays                  24 0.7290401
contre                19 0.5771567
compatriotes          18 0.5467801
faire                 18 0.5467801
doit                  17 0.5164034
face                  16 0.4860267
chers                 15 0.4556501
veux                  15 0.4556501
europe                14 0.4252734
comme                 13 0.3948967
emploi                13 0.3948967
monde                 13 0.3948967
confiance             12 0.3645200
parce                 12 0.3645200
république            12 0.3645200
ceux                  11 0.3341434
entre                 11 0.3341434
entreprises           11 0.3341434
là                    11 0.3341434
soir                  11 0.3341434

On voit que les occurences du “tous.tes” (64) correspondent bien à la somme des occurences de tout (24), tous(24) et toutes(16).

On passe à l’affichage du Nuage de mot

Ce graphique permet de visualiser les mots les plus occurents d’un corpus de textes.

50 mots maximum - au moins un mot
cloud<-word_cloud(dtm2, color= 'black', min.freq=1,n =50) 
title(main = ""2013-2017: mots les plus fréquents dans les discours de F.Hollande")


La taille de la police est proportionelle à l’occurence du mot: France (66), année (33) et entreprise (11).

Et pour finir, l’affichage d’un graphe de mots

La fonction terms_graph du package R.temis permet de générer un réseau de mots qui est affiché dans une fenêtre interactive igraph. Les termes ou mots sont représentés par des sommets (ou nœuds) du graphe, les liens représentent les cooccurrences entre les mots les plus fréquents. Leur placement dans l’espace graphique est déterminé par un algorithme d’énergie.

graphique d'analyse des co-occurrences
Tree<-terms_graph(dtm2, min_occ = 10, interactive = T,
            vertex.size = 0.01, vertex.color = "lightblue",
            label.cex = 0.1)