#r #tm
#r #tm
Вопрос:
Я пытаюсь добавить пользовательские функции в tm_map
функцию пакета tm
, однако он преобразует данные в другой формат, из которого я не могу продолжить.
Например, я использую
library(tm)
library(qdapRegex)
docs <- data.frame(doc_id = c("doc_1", "doc_2"),
text = c("This is a text. With some more text, www.yahoo.com", "This another one. with some different text www.google.com"),
dmeta1 = 1:2, dmeta2 = letters[1:2],
stringsAsFactors = FALSE)
docs = VCorpus(DataframeSource(docs))
content(docs[[1]])
docs <- tm_map(docs, content_transformer(tolower)) # This Works fine
content(docs[[1]])
nchar_rm <- function(x){
gsub(" *\b[[:alpha:]]{1,2}\b *", " ", x)
} # Custom function to remove characters less than 2
docs <- tm_map(docs, nchar_rm) # implement custom function
content(docs[[1]]) # returns an error.
Ошибка:
Error in UseMethod("content", x) :
no applicable method for 'content' applied to an object of class "character"
Также при docs <- tm_map(docs, rm_url)
использовании функции rm_url
из qdapRegex
пакета возвращается ошибка.
Ответ №1:
Использовать content_transformer
таким же образом
library(tm)
docs <- tm_map(docs, content_transformer(nchar_rm))
content(docs[[1]])
#[1] "This text. With some more text, www.yahoo.com"
Он также будет работать с rm_url
library(qdapRegex)
docs <- tm_map(docs, content_transformer(rm_url))
content(docs[[1]])
#[1] "This is a text. With some more text,"
Однако, возможно, вы знаете, что вы можете сделать это вообще без использования tm
функции, используя lapply
/ sapply
/ map
etc .
lapply(docs$text, rm_url)
lapply(docs$text, nchar_rm)
Комментарии:
1. Спасибо! это работает. Как вы думаете, что лучше? для очистки текстовых данных внутри
tm
пакета или с использованием базового R? — Вtm
пакете есть полезные функцииremoveNumbers
,removePunctuation
,removeWords
и т. Д., А затем легко просто поместить данные в DTM.2. @user8959427 У меня нет опыта работы с
tm
пакетом, поэтому я, возможно, не тот человек, который должен комментировать, но я предпочитаю сохранять как можно меньше зависимостей. Поэтому, когда что-то не работает, его легко отладить. Например, рассмотрим вашуnchar_rm
функцию vsrm_url
, если обе они не работают, вы знаете, что находится «внутри»nchar_rm
и как это работает, но это не то же самое сrm_url
.