我已经查看了此处发布的其他类似问题(例如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"
非常感谢任何帮助。
答案 0 :(得分:12)
应该这样做:
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)
答案 1 :(得分:2)
我已经使用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) )
答案 2 :(得分:1)
另一种选择:
df <- as.data.frame(as.matrix(myCorpus))
答案 3 :(得分:0)
您必须将corpus
转换为plaintextdocument
。
myCorpus <- tm_map(myCorpus, PlainTextDocument)