Buscar..


Introducción

El procesamiento del lenguaje natural (PNL) es el campo de las ciencias de la computación que se enfoca en recuperar información a partir de datos textuales generados por seres humanos.

Crear una matriz de frecuencia de término

El enfoque más simple del problema (y el más utilizado hasta ahora) es dividir las oraciones en tokens . Simplificando, las palabras tienen significados abstractos y subjetivos para las personas que las usan y reciben, los tokens tienen una interpretación objetiva: una secuencia ordenada de caracteres (o bytes). Una vez que las oraciones se dividen, el orden del token se ignora. Este acercamiento al problema se conoce como modelo de bolsa de palabras .

Un término frecuencia es un diccionario, en el que a cada token se le asigna un peso . En el primer ejemplo, construimos un término matriz de frecuencia a partir de un corpus corpus (una colección de documentos ) con el paquete 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))

En este ejemplo, creamos un corpus de clase Corpus definido por el paquete tm con dos funciones Corpus y VectorSource , que devuelve un objeto VectorSource de un vector de caracteres. El objeto tm_corpus es una lista de nuestros documentos con metadatos adicionales (y opcionales) para describir cada documento.

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]

Una vez que tengamos un Corpus , podemos proceder a preprocesar las fichas contenidas en el Corpus para mejorar la calidad de la salida final (el término matriz de frecuencia). Para ello utilizamos el tm función tm_map , que de manera similar al apply familia de funciones, transformar los documentos en el corpus mediante la aplicación de una función a cada documento.

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)

Siguiendo estas transformaciones, finalmente creamos el término matriz de frecuencia con

tdm <- TermDocumentMatrix(tm_corpus)

lo que da una

<<TermDocumentMatrix (terms: 8, documents: 4)>>
Non-/sparse entries: 12/20
Sparsity           : 62%
Maximal term length: 9
Weighting          : term frequency (tf)

que podemos ver al transformarlo en una matriz

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

Cada fila representa la frecuencia de cada ficha - que a medida que se han dado cuenta de tallo (por ejemplo, environment a environ ) - en cada documento (4 documentos, 4 columnas).

En las líneas anteriores, hemos ponderado cada par de token / documento con la frecuencia absoluta (es decir, el número de instancias del token que aparecen en el documento).



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow