R tm package vcorpus:将语料库转换为数据帧时出错

时间:2014-07-11 18:11:12

标签: r tm corpus

我使用tm包使用以下代码清理一些数据:

mycorpus <- Corpus(VectorSource(x))
mycorpus <- tm_map(mycorpus, removePunctuation)

然后我想将语料库转换回数据框,以便导出包含数据帧原始格式的数据的文本文件。我尝试过以下方法:

dataframe <- as.data.frame(mycorpus)

但这会返回错误:

  

&#34; as.data.frame.default中出错。(mycorpus):无法强制上课&#34; c(vcorpus,&gt; corpus&#34;)&#34;到data.frame

如何将语料库转换为数据框?

6 个答案:

答案 0 :(得分:22)

你的语料库实际上只是一个带有一些额外属性的字符向量。因此最好将其转换为字符,然后您可以将其保存到data.frame,如下所示:

library(tm)
x <- c("Hello. Sir!","Tacos? On Tuesday?!?")
mycorpus <- Corpus(VectorSource(x))
mycorpus <- tm_map(mycorpus, removePunctuation)

dataframe <- data.frame(text=unlist(sapply(mycorpus, `[`, "content")), 
    stringsAsFactors=F)

返回

              text
1        Hello Sir
2 Tacos On Tuesday

更新:对于较新版本的tm,他们似乎更新了使用as.list.SimpleCorpussapply的{​​{1}}方法。现在我想你必须使用

lapply

答案 1 :(得分:4)

被提出异议的语料库有一个content属性可通过get访问:

library("tm")

x <- c("Hello. Sir!","Tacos? On Tuesday?!?")
mycorpus <- Corpus(VectorSource(x))
mycorpus <- tm_map(mycorpus, removePunctuation)

attributes(mycorpus)
# $names
# [1] "content" "meta"    "dmeta"  
# 
# $class
# [1] "SimpleCorpus" "Corpus"      
# 

df <- data.frame(text = get("content", mycorpus))

head(df)
#               text
# 1        Hello Sir
# 2 Tacos On Tuesday

答案 2 :(得分:3)

您可以转换为data.frame,对最常用的单词进行排序并在wordcloud中绘图!

library(tm)
library("wordcloud")
library("RColorBrewer")

x <- c("Hello. Sir!","Tacos? On Tuesday?!?", "Hello")
mycorpus <- Corpus(VectorSource(x))
mycorpus <- tm_map(mycorpus, removePunctuation)

dtm <- TermDocumentMatrix(mycorpus)
m <- as.matrix(dtm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)

#           word freq
#hello     hello    2
#sir         sir    1
#tacos     tacos    1
#tuesday tuesday    1

#plot in a wordcloud
set.seed(1234)
wordcloud(words = d$word, freq = d$freq, min.freq = 1,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"))

enter image description here

答案 3 :(得分:2)

MrFlick发布的旧答案仅适用于之前版本的tm,我可以通过删除公式中的内容来修复它。

dataframe<-data.frame(text=unlist(sapply(mycorpus, `[`)), stringsAsFactors=F)

答案 4 :(得分:0)

这是我在自己的文本分析工作中使用的另一种方法。基本上,在将文档术语矩阵转换为数据框时,您将其称为矩阵 - 之后您可以运行一个额外的行,使您的变量名称R-友好。

数据库&lt; - as.data.frame(as.matrix(mycorpus))

colnames(database)&lt; - make.names(colnames(database))

我不确定这种方法在输出方面与其他答案有何不同(或者是否有所不同),但我发现这种语法更直接,更简单。希望这有帮助!

答案 5 :(得分:0)

现在有一个名为textreg的软件包,它对此具有很好的功能:

library(textreg)
df <- data.frame(text = convert.tm.to.character(mycorpus))