>我在平台上使用 R 3.0.1:x86_64-apple-darwin10.8.0(64 位(
我正在尝试使用 tm 库中的tm_map。但是当我执行此代码时
library(tm)
data('crude')
tm_map(crude, stemDocument)
我收到此错误:
Warning message:
In parallel::mclapply(x, FUN, ...) :
all scheduled cores encountered errors in user code
有谁知道解决方案?
我怀疑您没有安装SnowballC
软件包,这似乎是必需的。 tm_map
应该使用 mclapply
对所有文档运行stemDocument
。尝试只在一个文档上运行 stemDocument
函数,以便提取错误:
stemDocument(crude[[1]])
对我来说,我得到了一个错误:
Error in loadNamespace(name) : there is no package called ‘SnowballC’
所以我只是继续安装SnowballC
它工作了。显然,SnowballC
应该是一种依赖关系。
我刚刚遇到了这个。我花了一点挖掘,但我发现了发生了什么。
-
我有一行代码'rdevel <- tm_map(rdevel, asPlainTextDocument('
-
运行此操作会产生错误
并行::mclapply(x, FUN, ...( : 所有计划内核在用户代码中都遇到错误
- 事实证明,"tm_map"在"并行"中调用一些代码,试图找出你有多少个内核。要查看它在想什么,请键入
> getOption("mc.cores", 2L( [1] 2 >
- 啊哈时刻!告诉"tm_map"调用只使用一个内核!
> rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=1( match.fun(FUN( 中的错误:找不到对象"作为纯文本文档" > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=4( 警告消息: 并行::mclapply(x, FUN, ...( : 所有计划内核在用户代码中都遇到错误 >
所以。。。对于多个内核,"并行"不会给您错误消息,而是告诉您每个内核中都有一个错误。没有帮助,并行!我忘记了点 - 函数名称应该是'as。纯文本文档'!
因此 - 如果您收到此错误,请将"mc.cores=1"添加到"tm_map"调用并再次运行它。
我在这个问题上找到了一个成功的答案:Charles Copley在他的回答中表示,他认为新的tm包需要明确定义lazy = TRUE
。
所以,你的代码看起来像这样
library(tm)
data('crude')
tm_map(crude, stemDocument, lazy = TRUE)
我也在没有 SnowballC 的情况下尝试了它,看看它是否是这两个答案的组合。 无论哪种方式,它似乎都没有影响结果。
面临同样的问题,但最终得到了修复。我的猜测是,如果我将语料库命名为"longName"或"companyNewsCorpus",我就会遇到问题,但是如果我使用语料库值作为"a",它就会很好地工作。真的很奇怪。
下面的代码给出了与此线程中提到的相同错误消息
companyNewsCorpus <-Corpus(DirSource("SourceDirectory"),
readerControl = list(language="english"))
companyNewsCorpus <- tm_map(companyNewsCorpus,
removeWords, stopwords("english"))
但是如果我在下面转换它,它可以毫无问题地工作。
a <-Corpus(DirSource("SourceDirectory"),
readerControl = list(language="english"))
a <- tm_map(a, removeWords, stopwords("english"))
我在tm
使用在Mac OS X 10.10.5上运行的英特尔四核I7时遇到了同样的问题,并收到以下警告:
在 mclapply(content(x(, FUN, ...( 调度核心 1 中,用户代码中遇到错误,作业的所有值都将受到影响
我在下载Twitter数据后创建了一个语料库。
查尔斯·科普利的解决方案也对我有用。我使用:tm_map(*filename*, stemDocument, lazy = TRUE)
创建我的语料库后,然后 tm 工作正常。
我在使用 tm 库的 removeWords 函数时也遇到了同样的问题。 其他一些答案(例如将核心数设置为 1(确实可以删除英语停用词集,但是我还想从我的语料库中删除名字和姓氏的自定义列表,这些列表每个长度超过 100,000 个单词。
其他建议都无济于事,事实证明,通过一些反复试验,removeWords 似乎在向量中限制为 1000 个单词。 所以我写了这个函数,为我解决了这个问题:
# Let x be a corpus
# Let y be a vector containing words to remove
removeManyWords <- function (x, y) {
n <- ceiling(length(y)/1000)
s <- 1
e <- 1000
for (i in 1:n) {
x <- tm_map(x, content_transformer(removeWords), y[s:e])
s <- s + 1000
e <- e + 1000
}
x
}
这个函数本质上是计算我要删除的单词向量中有多少个单词,然后将其除以 1000 并四舍五入到最接近的整数 n。 然后,我们遍历单词向量以删除 n 次。 使用这种方法,我不需要使用 lazy = TRUE 或更改要使用的内核数,从函数中实际的 removeWords 调用中可以看出。 希望这有帮助!
我正在处理 Twitter 数据,当我尝试使用 tm_map()
函数将所有文本转换为较低文本时,我在原始问题中遇到了相同的错误
Warning message: In parallel::mclapply(x, FUN, ...) :
all scheduled cores encountered errors in user code
安装和加载包SnowballC
完全解决了问题。希望这有帮助。
与这个问题略有相关,但对我来说是什么解决了库中的错误(SnowballC(:没有名为"SnowballC"的软件包是在Windows 10中以管理员身份执行R并重试安装,这次它起作用了