R Language
Traitement du langage naturel
Recherche…
Introduction
Le traitement du langage naturel (NLP) est le domaine des sciences informatiques axé sur la récupération d'informations à partir d'intrants textuels générés par des êtres humains.
Créer un terme matrice de fréquence
L'approche la plus simple du problème (et le plus couramment utilisé jusqu'à présent) consiste à diviser les phrases en jetons . En simplifiant, les mots ont des significations abstraites et subjectives pour les personnes qui les utilisent et les reçoivent. Les jetons ont une interprétation objective: une séquence ordonnée de caractères (ou octets). Une fois les phrases divisées, l'ordre du jeton est ignoré. Cette approche du problème est connue sous le nom de modèle de sac de mots .
Un terme de fréquence est un dictionnaire dans lequel un poids est attribué à chaque jeton. Dans le premier exemple, nous construisons une matrice de fréquences à partir d'un corpus de corpus (une collection de documents ) avec le package R tm
.
require(tm)
doc1 <- "drugs hospitals doctors"
doc2 <- "smog pollution environment"
doc3 <- "doctors hospitals healthcare"
doc4 <- "pollution environment water"
corpus <- c(doc1, doc2, doc3, doc4)
tm_corpus <- Corpus(VectorSource(corpus))
Dans cet exemple, nous avons créé un corpus de classe Corpus
défini par le package tm
avec deux fonctions Corpus
et VectorSource
, qui renvoie un objet VectorSource
partir d’un vecteur de caractère. L'objet tm_corpus
est une liste de nos documents avec des métadonnées supplémentaires (et facultatives) pour décrire chaque document.
str(tm_corpus)
List of 4
$ 1:List of 2
..$ content: chr "drugs hospitals doctors"
..$ meta :List of 7
.. ..$ author : chr(0)
.. ..$ datetimestamp: POSIXlt[1:1], format: "2017-06-03 00:31:34"
.. ..$ description : chr(0)
.. ..$ heading : chr(0)
.. ..$ id : chr "1"
.. ..$ language : chr "en"
.. ..$ origin : chr(0)
.. ..- attr(*, "class")= chr "TextDocumentMeta"
..- attr(*, "class")= chr [1:2] "PlainTextDocument" "TextDocument"
[truncated]
Une fois que nous avons un Corpus
, nous pouvons procéder au prétraitement des jetons contenus dans le Corpus
afin d’améliorer la qualité du résultat final (le terme de matrice de fréquence). Pour ce faire, nous utilisons la fonction tm
tm_map
, qui, comme la famille de fonctions apply
, transforme les documents du corpus en appliquant une fonction à chaque document.
tm_corpus <- tm_map(tm_corpus, tolower)
tm_corpus <- tm_map(tm_corpus, removeWords, stopwords("english"))
tm_corpus <- tm_map(tm_corpus, removeNumbers)
tm_corpus <- tm_map(tm_corpus, PlainTextDocument)
tm_corpus <- tm_map(tm_corpus, stemDocument, language="english")
tm_corpus <- tm_map(tm_corpus, stripWhitespace)
tm_corpus <- tm_map(tm_corpus, PlainTextDocument)
Suite à ces transformations, nous créons enfin le terme matrice de fréquence avec
tdm <- TermDocumentMatrix(tm_corpus)
ce qui donne un
<<TermDocumentMatrix (terms: 8, documents: 4)>>
Non-/sparse entries: 12/20
Sparsity : 62%
Maximal term length: 9
Weighting : term frequency (tf)
que nous pouvons voir en le transformant en une matrice
as.matrix(tdm)
Docs
Terms character(0) character(0) character(0) character(0)
doctor 1 0 1 0
drug 1 0 0 0
environ 0 1 0 1
healthcar 0 0 1 0
hospit 1 0 1 0
pollut 0 1 0 1
smog 0 1 0 0
water 0 0 0 1
Chaque ligne représente la fréquence de chaque jeton - que vous avez remarqué, comme par exemple l' environment
à environ
- dans chaque document (4 documents, 4 colonnes).
Dans les lignes précédentes, nous avons pondéré chaque jeton / document de la paire avec la fréquence absolue (c'est-à-dire le nombre d'instances du jeton apparaissant dans le document).