在R中的TermDocumentMatrix出现错误

12

我一直在尝试使用R中的{tm}包创建一个TermDocumentMatrix,并通过许多在线示例进行学习。创建和清理语料库相对简单,但是每次尝试创建矩阵时我都会遇到错误。错误信息如下:

Error in UseMethod("meta", x) : no applicable method for 'meta' applied to an object of class "character" In addition: Warning message: In mclapply(unname(content(x)), termFreq, control) : all scheduled cores encountered errors in user code

例如,这里是Jon Starkweather的文本挖掘示例代码(链接)。抱歉代码比较长,但是它可以产生可重现的示例。请注意,错误出现在{tdm}函数的末尾。

#Read in data
policy.HTML.page <- readLines("http://policy.unt.edu/policy/3-5")

#Obtain text and remove mark-up
policy.HTML.page[186:202]
id.1 <- 3 + which(policy.HTML.page == "                    TOTAL UNIVERSITY        </div>")
id.2 <- id.1 + 5
text.data <- policy.HTML.page[id.1:id.2]
td.1 <- gsub(pattern = "<p>", replacement = "", x = text.data, 
     ignore.case = TRUE, perl = FALSE, fixed = FALSE, useBytes = FALSE)

td.2 <- gsub(pattern = "</p>", replacement = "", x = td.1, ignore.case = TRUE,
     perl = FALSE, fixed = FALSE, useBytes = FALSE)

text.d <- td.2; rm(text.data, td.1, td.2)

#Create corpus and clean 
library(tm)
library(SnowballC)
txt <- VectorSource(text.d); rm(text.d)
txt.corpus <- Corpus(txt)
txt.corpus <- tm_map(txt.corpus, tolower)
txt.corpus <- tm_map(txt.corpus, removeNumbers)
txt.corpus <- tm_map(txt.corpus, removePunctuation)
txt.corpus <- tm_map(txt.corpus, removeWords, stopwords("english"))
txt.corpus <- tm_map(txt.corpus, stripWhitespace); #inspect(docs[1])
txt.corpus <- tm_map(txt.corpus, stemDocument)

# NOTE ERROR WHEN CREATING TDM
tdm <- TermDocumentMatrix(txt.corpus)

1
我看到了这篇文章,而你的问题让我想起了那个。查看一下这个链接:https://dev59.com/fGAf5IYBdhLWcg3wVxYp 这可能会有帮助。 - jazzurro
@jazzurro -- 非常感谢您将我重定向到这篇文章!在tm_map函数中添加content_transformer到tolower中解决了问题。 - Brian P
1
我之前也遇到了同样的问题,看到了那篇帖子。很高兴你的脚本现在能够正常工作了。 - jazzurro
3个回答

26

jazzurro提供的链接指向解决方案。以下代码行

 txt.corpus <- tm_map(txt.corpus, tolower)

必须更改为

 txt.corpus <- tm_map(txt.corpus, content_transformer(tolower))

5
这个问题在tm v0.6中有两个原因。
  1. 如果您正在进行词汇级别的转换,例如 tolower,那么tm_map返回字符向量而不是PlainTextDocument
    解决方法: 通过content_transformer调用tolower,或在tolower之后立即调用tm_map(corpus, PlainTextDocument)
  2. 如果未安装SnowballC软件包,并且您试图对文档进行词干提取,则也可能出现此问题。
    解决方法: install.packages('SnowballC')

2

无需应用content_transformer。

可以按照以下方式创建语料库:

trainData_corpus <- Corpus((VectorSource(trainData$Comments)))

尝试一下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接