От вектора символов обратно к VCorpus

У меня есть VCorpus, который извлекается следующим образом:

corp <- VCorpus(DirSource("//Filepath"))

Затем я хотел удалить определенные строки из моих файлов в Корпусе, которые содержали определенное слово. Для этого я преобразовал свой Корпус в as.character:

corp <- sapply(corp, as.character)

а затем удалил все строки, включая слово ФАЙЛ:

for(j in seq(corp)) {
  corp[[j]] <- corp[[j]][!grepl("FILE", corp[[j]], ignore.case = FALSE)]
}

Теперь я хочу вернуться к классу «VCorpus», чтобы использовать tm_map для выполнения задач по очистке корпуса, таких как:

corp <- tm_map(corp, content_transformer(tolower))
corp <- tm_map(corp, removeWords, stopwords("english"))
corp <- tm_map(corp, removePunctuation)
corp <- tm_map(corp, removeNumbers)

Но я получаю следующее сообщение об ошибке:

Ошибка в UseMethod("tm_map", x): нет применимого метода для 'tm_map', примененного к объекту класса "список"

Я пробовал несколько вещей, но я получаю сообщения об ошибках, такие как:

Ошибка в UseMethod("as.VCorpus"): нет применимого метода для 'as.VCorpus', примененного к объекту класса "character"

Любые идеи, как я могу вернуться к VCorpus и выполнять задачи tm_map?


person ymbrouwer    schedule 23.05.2017    source источник


Ответы (1)


Я не думаю, что вам следует устанавливать для корпуса значение as.character, так как это уничтожает метаданные, которые делают его корпусом. Текст для элемента i вашего корпуса уже содержится в corp[[i]]$content, поэтому вам лучше просто работать с ним напрямую.

Рабочий процесс, который работает для меня, будет...

corp <- VCorpus(DirSource("//Filepath"))

for(j in seq(corp)) {
    corp[[j]]$content <- corp[[j]]$content[!grepl("FILE", corp[[j]]$content,ignore.case = FALSE)]
}

corp <- tm_map(corp, content_transformer(tolower))
...etc
person Andrew Gustar    schedule 23.05.2017
comment
Спасибо, Андрей, это было именно то, что мне было нужно! - person ymbrouwer; 24.05.2017