#vider la mémoire rm(list=ls()) ################## #Exercices 3 à 7 # ################## #répertoire de travail setwd("C:/cours/tm/td1") library(XML) #charger le document document <- htmlParse(file="brel-vesoul.html") print(document) #Exploration arborescente du document ##################################### #récupération de la racine du document racine <- xmlRoot(document) #nom de la structure #c'est un document HTML, balisée par ... nom <- xmlName(racine) print(nom) #nombre de "branches" #racine est une structure de liste nb <- xmlSize(racine) print(nb) #accéder à la première branche qui est
... ####################################################### b1 <- racine[[1]] print(b1) #les enfants de b1 childs.b1 <- xmlChildren(b1) print(xmlSize(childs.b1)) #afficher le contenu detextes <- xpathApply(b2,path="p",xmlValue) print(textes) #transformer en vecteur vec.textes <- unlist(textes) print(vec.textes) #récupérer la liste des lignes lignes <- strsplit(vec.textes,"\r\n") print(length(lignes)) #transformer en vecteur vec.lignes <- unlist(lignes) #tout mettre en minuscule vec.lignes <- tolower(vec.lignes) #décomposer les lignes en mots mots <- strsplit(vec.lignes," ") print(length(mots)) #mettre en un seul vecteur les mots vec.mots <- unlist(mots) print(vec.mots) #récupérer la liste des mots uniques mondico <- unique(vec.mots) #puis la trier mondico <- sort(mondico) print(mondico) #compter l'occurence de chaque mot table.mots <- table(vec.mots) print(table.mots) #trier par ordre décroissant table.mots <- sort(table.mots,decreasing=T) print(table.mots) ############## # EXERCICE 8 # ############## #charger wiki <- htmlParse("http://en.wikipedia.org/wiki/Text_mining") #récupérer le contenu wiki.text <- xpathSApply(wiki,"//div[contains(@class, 'mw-content-ltr')]/p", xmlValue) #nettoyer wiki.text <- gsub("[,;'():=-]"," ",wiki.text) wiki.text <- gsub("\\.", " ", wiki.text) wiki.text <- gsub("\\["," ",wiki.text) wiki.text <- gsub("\\]"," ",wiki.text) wiki.text <- gsub("[0-9]"," ",wiki.text) wiki.lignes <- tolower(wiki.text) #décomposer les lignes en mots wiki.mots <- strsplit(wiki.lignes," ") print(length(wiki.mots)) #mettre en un seul vecteur les mots wiki.mots <- unlist(wiki.mots) print(wiki.mots) #récupérer la liste des mots uniques wiki.mondico <- unique(wiki.mots) wiki.mondico <- sort(wiki.mondico) print(wiki.mondico) #compter l'occurence de chaque mot wiki.table.mots <- table(wiki.mots) print(wiki.table.mots) #trier par ordre déecroissant wiki.table.mots <- sort(wiki.table.mots,decreasing=T) print(wiki.table.mots) ############## # EXERCICE 9 # ############## #chargement des données news <- htmlParse("http://www.guardian.co.uk/global/blog/2011/dec/13/belgium-attack-grenades-thrown-at-bus-stop-in-liege-live-updates") news <- xpathSApply(news, "//div[contains(@id, 'article-body-blocks')]/p", xmlValue) #pré-traitements habituels news <- gsub("[,;'():=-]"," ",news) news <- gsub("\\.", " ",news) news <- gsub("\\["," ",news) news <- gsub("\\]"," ",news) news <- gsub("[0-9]"," ",news) news <- tolower(news) news.mots <- sort(unique(unlist(strsplit(news," ")))) #définition de quelques mots-outils mystopwords <- c(" a ", " an ", " the ", " and ", " of ", " on ", " in ", " pm ", " yet ", " still ") #suppression de l'ensemble des mots outils #remplacement par un espace for (sw in mystopwords){ news <- gsub(sw, " ", news) } print(news) ############### # EXERCICE 10 # ############### #docs représente la totalité des lignes du texte #i le numéro de la ligne à traiter #vocab est le dictionnaire des mots #renvoie un vecteur avec : pour chaque mot #de la ligne i de docs, son numéro dans #le dictionnaire vocab vectorize <- function(docs, i, vocab){ la.ligne <- docs[i] vec.mots.ligne <- unlist(strsplit(la.ligne," ")) #print(la.ligne) corresp <- match(vec.mots.ligne,vocab) #print(corresp) return(corresp) } #exemple d'appel sur la chanson de Jacques Brel res <- vectorize(docs=vec.lignes,i=114,vocab=mondico) mondico[26] ############### # EXERCICE 11 # ############### #transforme un vecteur "présence des mots dans la ligne" - vecdoc #en un vecteur de fréquences sparsify <- function(vecdoc,taille){ #vecteur initialisé à 0 retour <- rep(0,times=taille) #pour chaque valeur dans vecdoc for (v in vecdoc){ retour[v] = retour[v] + 1 } return(retour) } #sparsify sans passer par les boucles sparsify.bis <- function(vecdoc,taille){ #vecteur initialisé à 0 retour <- rep(0,times=taille) names(retour) <- seq(from=1,to=taille,by=1) #compter l'apparition de chaque valeur compte <- table(vecdoc) #affectation retour[names(compte)] <- compte return(retour) } #application sur la ligne n°114 de la chanson de Jacques Brel res.freq <- sparsify(res,length(mondico)) print(res.freq) #autre essai sur la ligne 103 res.103 <- vectorize(vec.lignes,103,mondico) res.freq.103 <- sparsify(res.103,length(mondico)) print(res.freq.103) res.freq.103.bis <- sparsify.bis(res.103,length(mondico)) print(res.freq.103.bis) #création d'une matrice de fréquences à partir de la chanson de Jacques Brel nbmots <- length(mondico) nbdocs <- length(vec.lignes) data <-matrix(0, nbdocs, nbmots) for(i in 1:nbdocs){ res <- vectorize(vec.lignes,i,mondico) data[i,] <- sparsify.bis(res,length(mondico)) } print(data)