私はRの{tm}パッケージの多数のオンライン例を調べて、TermDocumentMatrixを作成しようとしています。コーパスの作成とクリーニングは非常に簡単ですが、マトリックスを作成しようとすると、常にエラーが発生します。エラーは次のとおりです。
UseMethod( "meta"、x)のエラー:クラス "character"のオブジェクトに適用される 'meta'に適用可能なメソッドがありませんさらに:警告メッセージ:mclapply(unname(content(x))、termFreq、control):allスケジュールされたコアでユーザーコードでエラーが発生しました
たとえば、これは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)
Jazzurroが提供するリンクは、ソリューションを示しています。次のコード行
txt.corpus <- tm_map(txt.corpus, tolower)
に変更する必要があります
txt.corpus <- tm_map(txt.corpus, content_transformer(tolower))
Tmv0.6でこの問題が発生する理由は2つあります。
tolower
などの用語レベルの変換を行う場合、_tm_map
_はPlainTextDocument
の代わりに文字ベクトルを返します。tolower
から_content_transformer
_を呼び出すか、tolower
の直後にtm_map(corpus, PlainTextDocument)
を呼び出しますinstall.packages('SnowballC')
Content_transformerを適用する必要はありません。
この方法でコーパスを作成します。
trainData_corpus <- Corpus((VectorSource(trainData$Comments)))
それを試してみてください。