R中的TermDocumentMatrix错误

时间:2014-08-28 14:36:26

标签: r text-mining tm corpus term-document-matrix

我一直在研究R中{tm}包的许多在线示例,试图创建一个TermDocumentMatrix。创建和清理语料库非常简单,但是当我尝试创建矩阵时,我一直遇到错误。错误是:

  

UseMethod(“meta”,x)中的错误:     没有适用于'meta'的方法应用于类“character”的对象   另外:警告信息:   在mclapply(unname(content(x)),termFreq,control):     所有计划的核心在用户代码中遇到错误

例如,这里是Jon Starkweather的文本挖掘example的代码。为这么长的代码提前道歉,但这确实产生了一个可重复的例子。请注意,错误在{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)

3 个答案:

答案 0 :(得分:27)

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

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

必须更改为

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

答案 1 :(得分:5)

在tm v0.6中出现此问题有两个原因。

  1. 如果你正在进行tolower等术语等级转换,tm_map会返回字符向量而不是PlainTextDocument
    解决方案:通过tolower致电content_transformer或在tm_map(corpus, PlainTextDocument)
  2. 之后立即致电tolower
  3. 如果没有安装SnowballC软件包,并且您试图阻止文件,那么也可能发生这种情况 解决方案install.packages('SnowballC')

答案 2 :(得分:1)

无需应用content_transformer。

以这种方式创建语料库:

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

试试吧。