2014-08-28 37 views
12

R에서 {tm} 패키지의 수많은 온라인 예제를 통해 TermDocumentMatrix를 만들려고했습니다. 코퍼스를 생성하고 정리하는 작업은 매우 간단하지만 행렬을 만들 때 일관되게 오류가 발생합니다. 오류 : UseMethod에서TermDocumentMatrix에서 오류가 발생했습니다.

오류 ("메타", x)를 '메타'에 대한 적용 방법은 클래스 "문자"또한 의 객체에 적용되지 : 경고 메시지 : 를 mclapply에서 (unname (컨텐츠 (X)), termFreq, 제어) : 예약 된 모든 코어는 여기에 존 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) 
+1

나는이 게시물을 보았고 귀하의 질문은 저에게 상기시켜주었습니다. [this link] (http://stackoverflow.com/questions/24771165/r-project-no-applicable-method-for-meta-applied-to-an-object-of-class-charact)를보십시오. 유용 할 수 있습니다. – jazzurro

+0

@ jazzurro -이 게시물로 리디렉션 해 주셔서 감사합니다. tm_map 함수에서 tolower에 content_transformer를 추가하면 문제가 해결되었습니다. –

+1

실제로 동일한 문제가있어서 해당 게시물을 보았습니다. 나는 당신 스크립트가 지금 일하고있어서 다행이다. – jazzurro

답변

27

jazzurro가 제공하는 링크는 솔루션을 가리 킵니다. 코드

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

의 다음 줄은 TM의 v0.6에서이 문제에 대한 두 가지 이유가 있습니다

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

로 변경해야합니다. 대신 PlainTextDocument

  1. 당신이 등 tolower 같은 기간 수준 변환을 수행하는 경우, tm_map 반환 문자 벡터.
    솔루션 : content_transformer을 통해 tolower 전화 또는 SnowballC 패키지가 설치되어 있지 않은 경우 tolower
  2. 직후 tm_map(corpus, PlainTextDocument)를 호출하고 문서를 막기 위해 시도하는 경우 다음이 발생할 수 있습니다.
    솔루션 : install.packages('SnowballC')
1

content_transformer을 적용 할 필요가 없습니다.

이 방법으로 신체를 만들기 :

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

그것을보십시오.