【问题标题】:tm_map has parallel::mclapply error in R 3.0.1 on Mactm_map 在 Mac 上的 R 3.0.1 中有 parallel::mclapply 错误
【发布时间】:2013-08-17 10:55:25
【问题描述】:

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

有人知道解决办法吗?

【问题讨论】:

    标签: r parallel-processing tm mclapply


    【解决方案1】:

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

    stemDocument(crude[[1]])
    

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

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

    所以我继续安装 SnowballC 并且它工作正常。显然,SnowballC 应该是一个依赖项。

    【讨论】:

      【解决方案2】:

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

      1. 我有一行代码'rdevel

      2. 运行此程序会产生错误

      并行::mclapply(x, FUN, ...) : 所有计划的核心在用户代码中遇到错误
      1. 事实证明,'tm_map' 调用了一些'parallel' 代码,试图找出你有多少个内核。要查看它的想法,请输入
      > getOption("mc.cores", 2L) [1] 2 >
      1. 啊哈时刻!告诉“tm_map”调用只使用一个内核!
      > rdevel rdevel

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

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

      【讨论】:

        【解决方案3】:

        我在question 中找到了一个对我来说很成功的答案: Charles Copley 在他的 answer 中表示,他认为新的 tm 包需要明确定义 lazy = TRUE

        所以,你的代码应该是这样的

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

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

        【讨论】:

          【解决方案4】:

          我也遇到过同样的问题,但终于解决了。我的猜测是,如果我将语料库命名为“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")) 
          

          【讨论】:

            【解决方案5】:

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

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

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

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

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

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

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

                安装和加​​载包SnowballC 完全解决了这个问题。希望这会有所帮助。

                【讨论】:

                  【解决方案8】:

                  与这个问题略有相关,但对我来说是什么 库中的错误(SnowballC):没有名为“SnowballC”的包在 Windows 10 中以管理员身份执行 R 并重试安装,这次成功了

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2016-05-31
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-12-02
                    • 2013-06-25
                    • 1970-01-01
                    • 2022-08-04
                    • 1970-01-01
                    相关资源
                    最近更新 更多