with sentiment reilly library r text text-mining

sentiment - Bigrams en lugar de palabras sueltas en la matriz de documentos de documento usando R y Rweka



text mining with r pdf (2)

Inspirado por el comentario de Anthony, descubrí que puede especificar la cantidad de subprocesos que la biblioteca parallel usa de forma predeterminada (especifíquelo antes de llamar al NgramTokenizer ):

# Sets the default number of threads to use options(mc.cores=1)

Dado que el NGramTokenizer parece colgar en la llamada parallel::mclapply , el cambio del número de subprocesos parece funcionar a su alrededor.

He encontrado una forma de usar bigrams en lugar de tokens individuales en una matriz de documentos de término. La solución se ha planteado en stackoverflow aquí: findAssocs para múltiples términos en R

La idea es algo como esto:

library(tm) library(RWeka) data(crude) #Tokenizer for n-grams and passed on to the term-document matrix constructor BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2)) txtTdmBi <- TermDocumentMatrix(crude, control = list(tokenize = BigramTokenizer))

Sin embargo la línea final me da el error:

Error in rep(seq_along(x), sapply(tflist, length)) : invalid ''times'' argument In addition: Warning message: In is.na(x) : is.na() applied to non-(list or vector) of type ''NULL''

Si quito el tokenizer de la última línea, crea un tdm regular, así que supongo que el problema está en algún lugar de la función BigramTokenizer, aunque este es el mismo ejemplo que el sitio de Weka da aquí: http://tm.r-forge.r-project.org/faq.html#Bigrams .


Parece que hay problemas al usar RWeka con el paquete paralelo . He encontrado solución alternativa here.

El punto más importante es no cargar el paquete RWeka y usar el espacio de nombres en una función encapsulada.

Así que tu tokenizador debería verse como

BigramTokenizer <- function(x) {RWeka::NGramTokenizer(x, RWeka::Weka_control(min = 2, max = 2))}