Ошибки TermDocumentMatrix в R

Я проработал множество онлайн-примеров пакета {tm} в R, пытаясь создать TermDocumentMatrix. Создание и очистка корпуса было довольно простым делом, но я постоянно сталкиваюсь с ошибкой, когда пытаюсь создать матрицу. Ошибка:

Ошибка в UseMethod ("meta", x): нет применимого метода для 'meta', примененного к объекту класса "character" Дополнительно: Предупреждение: в mclapply (unname (content (x)), termFreq, control): все запланированные ядра обнаружили ошибки в пользовательском коде

Например, вот код из примера анализа текста Джона Старквезера. Заранее извиняюсь за такой длинный код, но это дает воспроизводимый пример. Обратите внимание, что ошибка возникает в конце функции {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)

person Brian P    schedule 28.08.2014    source источник
comment
Я видел этот пост, и ваш вопрос напомнил мне об этом. Взгляните на эту ссылку. Это может быть полезно.   -  person jazzurro    schedule 28.08.2014
comment
@jazzurro - большое спасибо, что перенаправили меня на этот пост! добавление content_transformer к tolower в функции tm_map решило проблему   -  person Brian P    schedule 28.08.2014
comment
У меня была такая же проблема, и я видел этот пост. Я рад, что ваш сценарий сейчас работает.   -  person jazzurro    schedule 28.08.2014


Ответы (3)


Ссылка, предоставленная jazzurro, указывает на решение. Следующая строка кода

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

должен быть изменен на

 txt.corpus <- tm_map(txt.corpus, content_transformer(tolower))
person Brian P    schedule 28.08.2014

В версии tm v0.6 для этой проблемы есть 2 причины.

  1. Если вы выполняете преобразования на уровне терминов, такие как tolower и т. Д., tm_map возвращает вектор символов вместо PlainTextDocument.
    Решение: вызовите tolower через content_transformer или вызовите tm_map(corpus, PlainTextDocument) сразу после tolower
  2. Это также может произойти, если пакет SnowballC не установлен и вы пытаетесь заблокировать документы.
    Решение: install.packages('SnowballC')
person Gayatri Mahesh    schedule 16.04.2015

Нет необходимости применять content_transformer.

Создайте корпус таким образом:

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

Попытайся.

person Deepika Sharma    schedule 17.04.2017