tm_map在 Mac 上的 R 3.0.1 中有 parallel::mclapply 错误



>我在平台上使用 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应该是一种依赖关系。

我刚刚遇到了这个。我花了一点挖掘,但我发现了发生了什么。

  1. 我有一行代码'rdevel <- tm_map(rdevel, asPlainTextDocument('

  2. 运行此操作会产生错误

   并行::mclapply(x, FUN, ...( :      所有计划内核在用户代码中都遇到错误
  1. 事实证明,"tm_map"在"并行"中调用一些代码,试图找出你有多少个内核。要查看它在想什么,请键入
  > getOption("mc.cores", 2L(    [1] 2   >
  1. 啊哈时刻!告诉"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并重试安装,这次它起作用了

最新更新