使用NGramTokenizer时为什么R会挂起?

时间:2013-09-26 09:48:05

标签: r text text-mining

我尝试从语料库构建一个Document-Term Meatrix。我使用的命令是:

library(parallel)
library(tm)
library(RWeka)
library(topicmodels)
library(RTextTools)
cl=makeCluster(detectCores())
invisible(clusterEvalQ(cl, library(tm)))
invisible(clusterEvalQ(cl, library(RWeka))) 
invisible(clusterEvalQ(cl, library(topicmodels)))
invisible(clusterEvalQ(cl, library(RTextTools)))
myCorpus <-Corpus(DirSource("/home/neeph/Test/DMOZ_Business"), encoding="UTF-8", readerControl=list(reader=readPlain))
removeURL <- function(x) gsub("http[[:alnum:]]*", "", x)
myCorpus <- tm_map(myCorpus, removeURL)
removeAmp <- function(x) gsub("&amp;", "", x)
myCorpus <- tm_map(myCorpus, removeAmp)
removeWWW <- function(x) gsub("www[[:alnum:]]*", "", x)
myCorpus <- tm_map(myCorpus, removeWWW)
myCorpus <- tm_map(myCorpus, tolower)
myCorpus <- tm_map(myCorpus, removeNumbers)
myCorpus <- tm_map(myCorpus, removePunctuation)
myCorpus <- tm_map(myCorpus, removeWords, stopwords("english"))
myCorpus <- tm_map(myCorpus, removeWords, stopwords("SMART"))
myCorpus <- tm_map(myCorpus, stripWhitespace)
summary(myCorpus)      

包含696个文本文档的语料库

元数据由2个标签值对和一个数据框组成 可用标签是:   create_date创建者 数据框中的可用变量是:   MetaID

myDtm <- DocumentTermMatrix(myCorpus, control = list(wordLengths = c(1,Inf))) 

如果我不包括令牌化,那么在此阶段一切正常。但是,当我使用以下更改运行代码时:

dictCorpus <- myCorpus
myDtm <- DocumentTermMatrix(myCorpus, control = list(wordlengths=c(1,Inf),tokenize=NGramTokenizer, dictionary=dictCorpus))
它挂起了。我让它一夜之间运行,但没有结果。任何帮助将非常感激。

更新

summary(myDtm)      
Error in order(list(i = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,  : 
   unimplemented type 'list' in 'orderVector1'

这个错误是什么意思?

2 个答案:

答案 0 :(得分:4)

Neep Hazarika的解决方案并没有解决我的挂起问题。我通过指定默认线程数来解决这个问题:

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

由于NGramTokenizer似乎挂在parallel::mclapply调用上,因此更改线程数似乎可以解决它。

答案 1 :(得分:0)

找到解决方案。

只需在调用RWeka例程之前初始化JVM。所以从:

开始

库(rJava) .jinit(参数= “ - Xmx128g”)

在加载RWeka库之前。