2014-08-28 66 views
12

我一直在研究R中許多在線的{tm}包的示例,試圖創建TermDocumentMatrix。創建和清理語料庫非常簡單,但是當我嘗試創建矩陣時,我總是遇到錯誤。錯誤是:R中的TermDocumentMatrix錯誤

錯誤UseMethod(「元」,X): 應用於類「字符」 另外的一個目的爲「元」不適用方法:警告消息: 在mclapply(unname (含量(x)),termFreq,控制): 所有預定的核心用戶代碼

例如遇到錯誤,這裏是喬恩斯塔克韋瑟的文本挖掘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) 
+1

我看過這篇文章,你的問題讓我想起了那個。看看[這個鏈接](http://stackoverflow.com/questions/24771165/r-project-no-applicable-method-for-meta-applied-to-an-object-of-class-charact)。這可能是有用的。 – jazzurro 2014-08-28 14:56:17

+0

@jazzurro - 非常感謝將我重定向到這篇文章!在tm_map函數中添加content_transformer到tolower解決了這個問題 – 2014-08-28 15:02:11

+1

我實際上遇到了同樣的問題並且看到了這個帖子。我很高興你的腳本現在正在工作。 – jazzurro 2014-08-28 15:10:09

回答

27

jazzurro提供的鏈接指向解決方案。代碼

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

以下行必須改變,以

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

有2個原因,這個問題在TM V0.6。

  1. 如果你是做長期水平轉換像tolower等,tm_map收益特徵向量,而不是PlainTextDocument
    解決方案:呼叫tolower通過content_transformer或者如果沒有安裝SnowballC包後tolower
  2. 立即打電話tm_map(corpus, PlainTextDocument),如果你正在試圖阻止的文件,然後也可能發生這種情況。
    解決方案install.packages('SnowballC')
1

沒有必要申請content_transformer。

以這種方式創建語料庫:

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

試試吧。