Premiers pas en text-mining avec R – Partie 1

Appelé "Fouille de textes" dans la langue de Molière, le text-mining désigne le traitement d'un texte en vue d'en faire émerger des informations. Comment le réaliser avec R ?

Note — Ce billet fait partie d'une série de billets sur le text-mining avec R. Nous vous invitons à les consulter dans l'ordre :
- Premiers pas en text-mining avec R – Partie 1
- Premiers pas en text-mining avec R – Partie 2
Premiers pas en text-mining avec R – Partie 3
- Premiers pas en text-mining avec R - Partie 4

Le text-mining, c'est quoi ?

Discipline au croisement de la linguistique, de l'informatique et des statistiques, le text-mining permet l'analyse automatique d'un corpus de textes, afin d'en faire émerger des patterns, des tendances et des singularités. Une technique que nous croisons tous les jours — prenez par exemple le traitement des spams : en analysant les contenus textuels des messages que vous recevez, l'algorithme est en mesure de trier et de détecter si oui ou non un nouveau mail vous intéresse.

En text-mining, on distingue deux étapes : d'abord, l'analyse, permettant de reconnaître automatiquement les mots, leur type, leur rôle, mais également leur fréquence et leur relation. Ensuite, l'interprétation, visant à faire émerger du sens de l'analyse. Dans le cas de la détection de spam, l'algorithme analyse dans un premier temps le contenu, avant d'opérer un tri dans votre boîte de réception après avoir interprété les résultats de l'analyse.

Premiers pas en text-mining : l'analyse fréquentielle

Comme son nom l'indique, l'analyse fréquentielle permet de définir la fréquence d'apparition d'une unité au sein du corpus global. Autrement dit, une fois cette opération effectuée, vous serez en mesure de définir quels sont les mots les plus utilisés dans un texte.

Pourquoi calculer la fréquence ? Dans les faits, c'est une technique riche en information. Prenons l'exemple d'un corpus de livres d'un même auteur : l'analyse de fréquence vous permet d'avoir une liste complète des thématiques abordées dans la bibliographie  de l'écrivain, via les mots les plus utilisés dans l’œuvre.

Afin de nettoyer le corpus, il est indispensable de passer par la suppression des "stopwords" ou mots vides, qui sont des mots extrêmement communs, et qui n'apportent aucune information valable à votre interprétation. Concrètement, vous retrouvez dans cette liste les mots comme "le", "du", "ce" (pour la langue française), et bien d'autres de la famille des articles, des pronoms et des prépositions. Attention, cette liste n'est pas universelle : une sélection de mots vides pour un corpus se fait en fonction du but poursuivi, de la question à laquelle répond l'analyse — la fréquence d'apparition du "je" peut être une information pertinente à certaines analyses et ne pas l'être pour d'autres, il ne s'agit donc pas de s'en séparer trop vite !

Text-mining avec R, quelques lignes de code

Pour exemplifier le fonctionnement du text-mining avec le logiciel R, nous avons choisi d'analyser l'oeuvre de Proust "À la recherche du temps perdu", disponible dans le package {proustr}.

Dans ce billet, nous allons vous présenter deux méthodes de text-mining — la "classique", et celle du tidytext. Commençons par charger les packages.

library("tm")
library("tidytext")
library("proustr")
library("tidyverse")
devtools::install_github("ThinkRstat/stopwords")
library("stopwords")

Étape 0  : Chargement du document

books <- proust_books()

Méthode 1.1  : Tidytext

Nous commençons par utiliser la méthode du tidytext, décrite dans l'ouvrage "Tidy Text-mining with R".

books_tidy <- proust_books() %>%
   mutate(text = stringr::str_replace_all(.$text, "’", " ")) %>% 
   unnest_tokens(word, text) %>%
   filter(!word %in% stopwords_iso$fr) %>%
   count(word, sort = TRUE) %>%
   head(10)

Méthode 1.2  : Visualisation

barplot(height=books_tidy$n, names.arg= books_tidy$word, xlab="Mots", ylab="Fréquence", col="#973232", main="À la recherche du temps perdu")


Tidy text mining avec R

Méthode 2.1 : Méthode classique

Pour travailler avec cette méthode, il faut commencer par transformer le texte en corpus.

corpus <- proust_books() %>%
   mutate(text = stringr::str_replace_all(.$text, "’", " ")) %>% 
   .$text %>% 
   VectorSource()%>%
   VCorpus()

Étape 2.2 : Nettoyage du corpus

corpus <- corpus %>%
   tm_map(content_transformer(tolower))%>%
   tm_map(stripWhitespace) %>%
   tm_map(removeNumbers)%>%
   tm_map(removePunctuation)%>%
   tm_map(removeWords, stopwords("french"))

Cette étape permet de nettoyer le corpus des différentes mises en forme qui pourraient interférer à notre analyse : d'abord, une mise en minuscule de tous les mots (rappelons que R est sensible à la casse), puis une suppression des espaces vides, enfin, une suppression des mots vides.

Vous pouvez également retirer des mots précis :

corpus <- tm_map(corpus, removeWords, c("mot1", "mot2"...))

Étape 3 : Création d'une matrice des fréquences

TDM <- corpus %>%
   TermDocumentMatrix() %>%
   as.matrix()
TDM <- sort(rowSums(TDM),decreasing=TRUE)
TDM <- data.frame(word = names(TDM),freq=TDM)

Ces commandes renvoient les termes les plus fréquents dans notre corpus.

Étape 4 : Visualisation des 10 mots les plus fréquents

barplot(height=head(TDM,10)$freq, names.arg=head(TDM,10)$word, xlab="Mots", ylab="Fréquence", col="#973232", main="À la recherche du temps perdu")

tm text mining R

Code complet

Retrouvez le code complet sur notre Github

En lire plus :

Text Mining With R: A Tidy Approach
Text Mining: A Guidebook for the Social Sciences
Mining Text Data
Text Mining
Mastering Text Mining with R
Text Mining in Practice With R
Text Mining: From Ontology Learning to Automated Text Processing Applications
Text Mining: Classification, Clustering, and Applications
Phrase Mining from Massive Text and Its Applications
Text Mining: Applications and Theory

Colin FAY

Rédigé par: Colin FAY

Créateur et rédacteur en chef de Data Bzh.