我已经看过这里发布的其他类似问题(比如this),但问题仍然存在。
我有一个文本数据的数据框,我需要阻止它。因此,我将其转换为语料库,然后将其转换为词干,然后完成词干中的单词,然后尝试将文本数据框作为输出。
myCorpus <- Corpus(VectorSource(textDf$text))
myCorpus <- tm_map(myCorpus, removeWords, stopwords('english'))
myCorpus <- tm_map(myCorpus, content_transformer(tolower))
myCorpus <- tm_map(myCorpus, removePunctuation)
dictCorpus <- myCorpus
myCorpus <- tm_map(myCorpus, stemDocument)
myCorpus <- tm_map(myCorpus, stemCompletion, dictionary=dictCorpus)
现在我正试图从这个语料库中获取一个数据帧,所以我尝试了以下命令。
dataframe<-data.frame(text=unlist(sapply(myCorpus, '[', "content")),
stringsAsFactors=F)
和
dataframe<-data.frame(text=unlist(sapply(myCorpus,
[)), stringsAsFactors=F)
并且
dataframe <-
data.frame(id=sapply(corpus, meta, "id"),
text=unlist(lapply(sapply(corpus, '[', "content"),paste,collapse="\n")),
stringsAsFactors=FALSE)
来自this链接
所有这些都会产生以下错误:
Error in UseMethod("meta", x) :
no applicable method for 'meta' applied to an object of class "character"
任何帮助将不胜感激。
这应该这样做:
data.frame(text = sapply(myCorpus, as.character), stringsAsFactors = FALSE)
用工作解决方案编辑,以crude
为例
这里的问题是你不能将stemCompletion
用作转换。
getTransformations()
## [1] "removeNumbers" "removePunctuation" "removeWords" "stemDocument" "stripWhitespace"
不包括stemCompletion
,它将带有标记的标记的向量作为输入。
所以这应该这样做:首先提取转换后的文本并标记它们,然后完成词干,然后再粘贴在一起。在这里,我使用内置的crude
语料库说明了解决方案。
data(crude)
myCorpus <- crude
myCorpus <- tm_map(myCorpus, removeWords, stopwords('english'))
myCorpus <- tm_map(myCorpus, content_transformer(tolower))
myCorpus <- tm_map(myCorpus, removePunctuation)
dictCorpus <- myCorpus
myCorpus <- tm_map(myCorpus, stemDocument)
# tokenize the corpus
myCorpusTokenized <- lapply(myCorpus, scan_tokenizer)
# stem complete each token vector
myTokensStemCompleted <- lapply(myCorpusTokenized, stemCompletion, dictCorpus)
# concatenate tokens by document, create data frame
myDf <- data.frame(text = sapply(myTokensStemCompleted, paste, collapse = " "), stringsAsFactors = FALSE)
我正在用magrittr重做你早期的一些代码,原因就在于此。
library(dplyr)
library(tm)
dictCorpus =
c("I love my cat", "Cullen bae is bae", "4ever alone :(") %>%
VectorSource %>%
Corpus %>%
tm_map(removeWords, stopwords('english')) %>%
tm_map(content_transformer(tolower)) %>%
tm_map(removePunctuation)
myCorpus =
dictCorpus %>%
tm_map(stemDocument) %>%
tm_map(stemCompletion, dictionary=dictCorpus)
data =
data_frame(object =
myCorpus %>%
`class<-`("list") %>%
use_series(content) ) %>%
rowwise %>%
mutate(content =
object %>%
names %>%
extract(1) )
另外一个选项:
df <- as.data.frame(as.matrix(myCorpus))
你必须将corpus
转换为plaintextdocument
。
myCorpus <- tm_map(myCorpus, PlainTextDocument)