2015-10-18 89 views
5

我已经查看了此处发布的其他类似问题(如this),但问题仍然存在。无法将语料库转换为R中的数据框

我有一个文本数据的数据框,我需要干。所以我将它转换成一个语料库,然后完成它,然后完成词干的单词,然后尝试获取文本的数据框作为输出。

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" 

任何帮助将不胜感激。

+1

你能举一些例子说明数据? – bramtayl

+0

'textDf $ text'是一个充满推文的字符向量。 – wrahool

回答

8

这应该做到这一点:

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

谢谢!这工作。 – wrahool

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)) 
0

您必须将corpus转换为plaintextdocument

myCorpus <- tm_map(myCorpus, PlainTextDocument) 
1

另一种选择:

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