tm ou tidytext ? Introduction au text-mining avec R

what if i told you you could do data mining with text ? (mème)
Auteur : Colin Fay
Tags : Actualités, Ressources
Date :

Des chiffres, des chiffres, toujours des chiffres ? Eh non, pas que ! La science des données passe également par l’analyse de contenus textuels : une spécialisation appelée “fouille de texte” (si vous êtes d’humeur franco-française), mais plus connue sous le nom de “text-mining”.


Aujourd’hui, premier volet de notre série de billets sur le text-mining.

Le text-mining, qu’est-ce que c’est ?

Discipline liée au data mining (vous l’auriez deviné), le text-mining regroupe l’ensemble des méthodes qui permettent d’analyser un texte avec des méthodes statistiques. L’objectif ? Faire émerger du sens d’une suite de mots : livres, discours, tweets… Et tout commence par “quels sont les mots le plus utilisés”, pour se diriger, à terme, vers des questions bien plus complexes.

Car oui, vaste sujet que celui du text-mining : on entre par la porte de l’analyse fréquentielle, et l’on navigue jusqu’à l’intelligence artificielle. Cependant, puisqu’il faut bien commencer quelque part, commençons par une introduction au text-mining avec R. Dans ce billet, nous vous présenterons deux méthodes : la méthode “classique”, avec le package tm, et la méthode du tidy text-mining, inspirée des travaux d’Hadley Wickham (eh oui, encore lui !).

Première étape, donc : installer les packages, et trouver un texte à fouiller. Pour notre corpus, nous utiliserons le package gutenbergr, qui permet de télécharger le contenu d’un livre accessible sur le Projet Gutenberg. Penchons-nous, à tout hasard, sur le livre : “The philosophy of mathematics“.

[pastacode lang=”R” manual=”install.packages(c(%22tm%22%2C%20%22tidytext%22%2C%20%22gutenbergr%22))%0Alapply(X%20%3D%20c(%22tm%22%2C%20%22tidytext%22%2C%20%22gutenbergr%22%2C%20%22magrittr%22%2C%20%22ggplot2%22%2C%20%22dplyr%22)%2C%20FUN%20%3Dlibrary%2C%20character.only%20%3D%20TRUE)%0Abook%20%3C-%20gutenberg_works(title%20%3D%3D%20%22The%20philosophy%20of%20mathematics%22)%24gutenberg_id%20%25%3E%25%0A%20%20gutenberg_download()%20%25%3E%25%20%0A%20%20gutenberg_strip()” message=”” highlight=”” provider=”manual”/]

Text-mining, la méthode “classique”

Pourquoi parle-t-on de méthode classique ? C’est très simple : parce que tm est le package de text-mining historique : sa première version a été publiée sur le CRAN le 13 janvier 2007… il y a donc dix ans. tidytext, de son côté, date d’avril 2016.

Nous l’avions dit plus haut, ce billet se concentrera sur la première étape du text-mining : analyser la fréquence d’apparition des mots dans notre ouvrage. Un processus qui demande une première phase de transformation des données :
– d’abord en transformant notre texte en corpus,
– en le débarrassant du superflu grâce à la fonction tm_map,
– en transformant notre corpus en Term-Document Matrix,
– puis enfin en data.frame.

[pastacode lang=”R” manual=”booktm%20%3C-%20book%20%25%3E%25%0A%20%20%23Transformer%20en%20corpus%0A%20%20VectorSource()%20%25%3E%25%0A%20%20Corpus()%20%25%3E%25%20%0A%20%20%23Nettoyer%20le%20corpus%0A%20%20tm_map(content_transformer(tolower))%20%25%3E%25%0A%20%20tm_map(stripWhitespace)%20%25%3E%25%0A%20%20tm_map(removeNumbers)%20%25%3E%25%0A%20%20tm_map(removePunctuation)%20%25%3E%25%0A%20%20tm_map(removeWords%2C%20stopwords(%22english%22))%20%25%3E%25%20%0A%20%20%23Transformer%20en%20matrice%20%0A%20%20TermDocumentMatrix()%20%25%3E%25%0A%20%20as.data.frame.matrix()%20%25%3E%25%0A%20%20mutate(name%20%3D%20row.names(.))%20%25%3E%25%0A%20%20arrange(desc(%601%60))” message=”” highlight=”” provider=”manual”/]

Nous voici donc avec un premier data.frame contenant une liste de fréquence d’apparition des mots dans le texte. Ce qui donne, si nous le visualisons avec ggplot :

[pastacode lang=”R” manual=”tkrtheme%20%3C-%20theme(plot.title%3Delement_text(margin%3Dmargin(0%2C0%2C20%2C0)%2C%20size%3D20%2C%20hjust%20%3D%200.5)%2C%0A%20%20%20%20%20%20%20%20plot.subtitle%20%3D%20element_text(margin%3Dmargin(0%2C0%2C20%2C0)%2C%20size%20%3D%2015%2C%20hjust%20%3D%200.5)%2C%0A%20%20%20%20%20%20%20%20panel.background%20%3D%20element_rect(fill%20%3D%20%22white%22)%2C%20%0A%20%20%20%20%20%20%20%20panel.grid.major%20%3D%20element_line(colour%20%3D%20%22grey%22)%2C%20%0A%20%20%20%20%20%20%20%20plot.margin%20%3D%20margin(20%2C50%2C20%2C50))%20%0Acapt%20%3C-%20%22www.thinkr.fr%22%0A%0Aggplot(booktm%5B1%3A25%2C%5D%2C%20aes(reorder(name%2C%20%601%60)%2C%20%601%60))%20%2B%20%0A%20%20geom_bar(stat%20%3D%20%22identity%22%2C%20fill%20%3D%20%22%23E3693E%22)%20%2B%0A%20%20geom_text(aes(label%3D%20as.character(%601%60))%2C%20check_overlap%20%3D%20TRUE%2C%20size%20%3D%204)%20%2B%20%0A%20%20coord_flip()%20%2B%20%0A%20%20xlab(%22%20%22)%20%2B%20%0A%20%20ylab(%22Volume%22)%20%2B%20%0A%20%20labs(title%20%3D%20%2225%20mots%20les%20plus%20r%C3%A9currents%20avec%20le%20package%20tm%22%2C%0A%20%20%20%20%20%20%20caption%20%3D%20capt)%20%2B%20%0A%20%20tkrtheme” message=”” highlight=”” provider=”manual”/]

tm-mining

Tidy text-mining

Approche plus récente popularisée par Julia Silge et David Robinson, la méthode du tidy text-mining étend la philosophie des tidy data d’Hadley Wickham, et l’applique à l’analyse textuelle. Voici donc la version “new school” de l’analyse de fréquence d’un texte :

[pastacode lang=”R” manual=”%23Pour%20commencer%2C%20cr%C3%A9eons%20un%20data_frame%0Atidytext%20%3C-%20data_frame(line%20%3D%201%3Anrow(book)%2C%20text%20%3D%20book%24text)%20%0A%23Analyse%20de%20fr%C3%A9quence%20%0Atidytext%20%3C-%20tidytext%20%25%3E%25%0A%20%20unnest_tokens(word%2C%20text)%20%25%3E%25%0A%20%20anti_join(stop_words)%20%25%3E%25%0A%20%20count(word%2C%20sort%20%3D%20TRUE)%20%0A%0Aggplot(tidytext%5B1%3A25%2C%5D%2C%20aes(reorder(word%2C%20n)%2C%20n))%20%2B%20%0A%20%20geom_bar(stat%20%3D%20%22identity%22%2C%20fill%20%3D%20%22%23E3693E%22)%20%2B%0A%20%20geom_text(aes(label%3D%20as.character(n))%2C%20check_overlap%20%3D%20TRUE%2C%20size%20%3D%204)%20%2B%20%0A%20%20coord_flip()%20%2B%20%0A%20%20xlab(%22%20%22)%20%2B%20%0A%20%20ylab(%22Volume%22)%20%2B%20%0A%20%20labs(title%20%3D%20%2225%20mots%20les%20plus%20r%C3%A9currents%20avec%20le%20package%20tidytext%22%2C%0A%20%20%20%20%20%20%20caption%20%3D%20capt)%20%2B%20%0A%20%20tkrtheme” message=”” highlight=”” provider=”manual”/]

tidy text mining

Comment choisir ?

Bonne question… Et sur ce point, vous vous confronterez à deux écoles : celle des adeptes/habitués des méthodes classiques, et l’école de l’ordocosme. Si l’on s’attarde sur les résultats, on constate également une différence de volume : le nettoyage par le package tm conserve 517 unités, là où tidytext en conserve 407… ce qui n’est pas sans changer le contenu des 25 mots les plus récurrents : on remarque par exemple que tm conserve two et three, là où ils disparaissent avec notre seconde méthode. Un paramètre qui dépend notamment de la liste de “mots-vides” contenue dans chaque package.

Le point fort de la méthode tidytext ? Tout d’abord : beaucoup moins de lignes de code. Ensuite, un package qui a été pensé pour fonctionner avec tous les autres outils du tidyverse, notamment tidyr et dplyr. Maintenant, ne vous reste qu’à choisir votre camps… et peut-être que nos prochains billets vous aideront à trancher 😉 !


Commentaires

2 réponses à “tm ou tidytext ? Introduction au text-mining avec R”

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


À lire également

Nos formations Certifiantes à R sont finançables à 100% via le CPF

Nos formations disponibles via moncompteformation.gouv.fr permettent de délivrer des Certificats reconnues par l’état, enregistrées au répertoire spécifique de France Compétences. 3 niveaux de certifications existent :

Contactez-nous pour en savoir plus.

Calendrier

23/05/2023

09/05/2023

09/05/2023