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).



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow