17

我在平台上使用 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

有谁知道这个的解决方案?

4

8 回答 8

29

我怀疑您没有安装该SnowballC软件包,这似乎是必需的。tm_map应该stemDocument使用mclapply. 尝试只stemDocument在一个文档上运行该函数,这样您就可以提取错误:

stemDocument(crude[[1]])

对我来说,我得到了一个错误:

Error in loadNamespace(name) : there is no package called ‘SnowballC’

所以我只是继续安装SnowballC并且它有效。显然,SnowballC应该是一个依赖。

于 2013-08-17T11:40:30.610 回答
17

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

  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) 中的错误:找不到对象“asPlainTextDocument”
    > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=4)
    警告信息:
    并行::mclapply(x, FUN, ...) :
      所有计划的核心在用户代码中遇到错误
    >

所以......有多个核心,而不是给你错误消息,'并行'只是告诉你每个核心都有一个错误。没有帮助,并行!我忘了点——函数名应该是'as.PlainTextDocument'!

所以 - 如果您收到此错误,请将 'mc.cores=1' 添加到 'tm_map' 调用并再次运行它。

于 2013-12-12T23:23:14.000 回答
11

我在这个问题中找到了一个对我来说是成功的答案:Charles Copley 在他的回答中表示他认为新的 tm 包需要lazy = TRUE明确定义。

所以,你的代码看起来像这样

library(tm)
data('crude')
tm_map(crude, stemDocument, lazy = TRUE)

我也在没有 SnowballC 的情况下尝试过,看看它是否是这两个答案的组合。无论哪种方式,它似乎都不会影响结果。

于 2014-12-15T16:51:32.560 回答
3

我一直面临同样的问题,但终于解决了。我的猜测是,如果我将语料库命名为“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")) 
于 2014-04-11T04:37:18.233 回答
3

我在使用在 Mac OS X 10.10.5 上运行的 Intel 四核 I7 时遇到了同样的问题tm,并收到以下警告:

在 mclapply(content(x), FUN, ...) 调度核心 1 遇到用户代码错误,作业的所有值都会受到影响

下载 Twitter 数据后,我正在创建一个语料库。

Charles Copley 的解决方案也对我有用。我用过:tm_map(*filename*, stemDocument, lazy = TRUE)在创建我的语料库之后,然后 tm 工作正常。

于 2016-01-17T13:42:03.717 回答
1

我在使用 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 调用中看出。希望这可以帮助!

于 2015-11-15T16:30:14.297 回答
0

我正在处理 Twitter 数据并在原始问题中遇到相同的错误,而我正在尝试使用tm_map()函数将所有文本转换为更低

Warning message: In parallel::mclapply(x, FUN, ...) :   
all scheduled cores encountered errors in user code

安装和加载包SnowballC完全解决了这个问题。希望这可以帮助。

于 2015-11-28T11:35:51.073 回答
-1

与这个问题略有相关,但为我解决了库中的错误(SnowballC):没有名为“SnowballC”的包是在 Windows 10 中以管理员身份执行 R 并重试安装,这次它起作用了

于 2019-03-04T17:54:33.633 回答