Ошибки TermDocumentMatrix в R
Я работал с многочисленными онлайн-примерами пакета {tm} в R, пытаясь создать TermDocumentMatrix. Создание и очистка корпуса были довольно простыми, но я постоянно сталкиваюсь с ошибкой при попытке создать матрицу. Ошибка:
ошибка в UseMethod ("meta", x) : нет применимого метода для "meta", применяемого к объекту класса " character" Кроме того: предупреждение: В mclapply (unname (content (x)), termFreq, управление) : все запланированные ядра столкнулись с ошибками в коде пользователя
например, вот код из текстового майнинга Джона Старкуэзера пример. Заранее извиняюсь за такой длинный код, но это дает воспроизводимый пример. Обратите внимание, что ошибка возникает в конце функции {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 ответов
ссылка, предоставленная jazzurro, указывает на решение. Следующая строка кода
txt.corpus <- tm_map(txt.corpus, tolower)
необходимо изменить на
txt.corpus <- tm_map(txt.corpus, content_transformer(tolower))
есть 2 причины для этой проблемы в tm v0.6.
- если вы делаете преобразования уровня термина, такие как
tolower
etc.,tm_map
возвращает вектор символов вместоPlainTextDocument
.
решение: Calltolower
черезcontent_transformer
или позвонитеtm_map(corpus, PlainTextDocument)
сразу послеtolower
- если пакет SnowballC не установлен, и если вы пытаетесь остановить документы, то также это может произойти.
решение:install.packages('SnowballC')
нет необходимости применять content_transformer.
создайте корпус таким образом:
trainData_corpus <- Corpus((VectorSource(trainData$Comments)))
попробовать его.