无法将语料库转换为 R 中的数据框

Unable to convert a Corpus to Data Frame in R

我查看了此处发布的其他类似问题(如 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 link

它们都产生以下错误:

Error in UseMethod("meta", x) : 
  no applicable method for 'meta' applied to an object of class "character"

如有任何帮助,我们将不胜感激。

我已经用 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) )

应该这样做:

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)

您必须将 corpus 转换为 plaintextdocument

myCorpus <- tm_map(myCorpus, PlainTextDocument)

另一个选项:

df <- as.data.frame(as.matrix(myCorpus))