Faculté des sciences Ain Chock
Casablanca
Text Mining
TP 1
L’objectif du TP est d’explorer les packages de R dédiés pour le Text Mining.
Prérequis :
Installation de R
Installation des packages suivants :
Tm : pour le text mining
SnowballC : pour le text stemming
Wordcloud : générateur de word-cloud
RColorBrewer : Palettes de couleurs
Proxy : calcul statistiques
Etape 1 : Texte analysé
Cette étape concerne la collecte des documents. Dans ce premier TP, nous allons travailler sur
un seul document « text mining.txt » extrait de Wikipedia et qui se trouve dans le répertoire
TP1.
Etape 2 : Chargement des packages
Ouvrir une console R et charger les packages nécessaire pour réaliser le TP :
library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")
library("proxy")
Etape 3: Exploration des textes
Chargement du texte :
Lecture du fichier texte
filePath <- "chemin vers text mining.txt"
text <- readLines(filePath)
Charger les données comme un corpus : on utilise la fonction corpus()
docs <- Corpus(VectorSource(text))
Pour visualiser le contenu chargé du texte, on utilise la commande :
inspect(docs)
Prétraitement du texte :
Utiliser de la fonction fonction tm_map() pour nettoyer le texte et la commande
inspect(docs)
Pour visualiser le document après chaque transformation
Remplacer les caractères spéciaux non utiles. Par exemple : remplacer “/”, “@” et “|”
avec un espace
toSpace <- content_transformer(function (x ,pattern) gsub(pattern," ", x))
docs <- tm_map(docs, toSpace, "/")
docs <- tm_map(docs, toSpace, "@")
docs <- tm_map(docs, toSpace, "\\|")
Convertir le texte en minuscule
docs <- tm_map(docs, content_transformer(tolower))
Supprimer les nombres
docs <- tm_map(docs, removeNumbers)
Supprimer les mots vides anglais
docs <- tm_map(docs, removeWords, stopwords("english"))
Supprimer des stop-words
docs <- tm_map(docs, removeWords, c("[Ll]e", "[Uu]n"))
Supprimer des stop-words à partir d’une liste personnalisée
mystopwords <- c(stopwords(‘french’), "les", "tout", "avoir", "être", "de")
Faculté des sciences Ain Chock
Casablanca
docs <- tm_map(docs, removeWords, mystopwords)
Supprimer les ponctuations
docs <- tm_map(docs, removePunctuation)
Supprimer les espaces vides supplémentaires
docs <- tm_map(docs, stripWhitespace)
Etape 4: Construction de la matrice des mots par documents
Utiliser la fonction TermDocumentMatrix()
dtm <- TermDocumentMatrix(docs)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)
head(d, 20)
head(d, 30)
Etape 5 : Exploration de la fréquence des mots
Afficher les mots dont la fréquence d’apparition dans le texte est supérieurs à 4
findFreqTerms(dtm, lowfreq = 4)
Afficher la liste des mots qui sont associés au mot « fouille » avec un taux de
corrélation supérieurs à 0.35
findAssocs(dtm, terms = "fouille", corlimit = 0.3)
Représenter par un graphe les fréquences des 10 mots les plus fréquents
barplot(d[1:10,]$freq, las = 2, names.arg = d[1:10,]$word, col ="lightblue", main
="Mots les plus fréquents", ylab = "Fréquence par mot")
Etape 6: Génération du nuage des mots
Illustrer la matrice par un nuage des mots où la taille et la couleur de fonte de chaque
mot varie son importance dans la matrice
wordcloud(words = d$word, freq = d$freq, min.freq = 1, max.words=200,
random.order=FALSE, rot.per=0.35, colors=brewer.pal(8, "Dark2"))
Avec :
words : les mots à dessiner
freq : la fréquence des mots
min.freq : les mots avec une fréquence en dessous de min.freq ne seront pas illustrés
max.words : nombre maximum de mots à dessiner
random.order : dessine les mots dans un ordre aléatoire. Si false, ils seront dessinés par
ordre décroissant de la fréquence
rot.per : la proportion de mots verticaux sur le graphe
colors : couleurs des mots du moins au plus fréquent. Utiliser par exemple, colors
=“black” pour une couleur unique.
Etape 7 : Stemming
Utiliser les stems comme unité linguistique au lieu des mots. Reprendre le TP on a
joutant à la fin de l’tape 2 la commande :
docs <- tm_map(docs, stemDocument)
Etape 8 : Calcul de similarité
Fonction pour Normaliser les vecteurs des documents :
normalize <- function(x) { return (x / sqrt(sum(x^2))) }
Normalisation des colonnes de la dtm matrix (m)
m_normalized <- apply(m, 2, normalize)
Calculer et afficher la similarité entre deux documents donnés
doc1 <- tdm_matrix_normalized[,1]
doc2 <- tdm_matrix_normalized[,2]
Faculté des sciences Ain Chock
Casablanca
cosine_similarity <- sum(doc1 * doc2)
print(cosine_similarity)
Fonction pour Normaliser les vecteurs des documents en prenant en considération les
vecteurs de valeurs 0:
normalize <- function(x) {
norm <- sqrt(sum(x^2))
if (norm == 0) {
return(rep(0, length(x))) }
else {
return (x / norm) }
Référence :
1. http://www.sthda.com/french/wiki/text-mining-et-nuage-de-mots-avec-le-logiciel-r-5-
etapes-simples-a-savoir
2. https://rstudio-pubs-
static.s3.amazonaws.com/163802_0f005a14bcfb4c4b8ee17ac8a8e6c3e9.html