为什么来自R中的tm包的VCorpus()会产生不合理的大尺寸对象?

时间:2016-02-03 21:05:04

标签: r text-mining tm

'语料库的大小'使用&t;< tm'创建的对象与原始textVector对象相比,R中的包不成比例地膨胀。有没有办法压缩语料库'尺寸?从data.frame创建的文本向量有1800万行。

textVector <-
sapply(df, as.character)) #df contains one 'character' column with 18M rows
system.time(corpus <- VCorpus(VectorSource(textVector)))
object.size(textVector) # 601 MB
object.size(corpus)     #69.9GB

任何提示都表示赞赏。谢谢。

System info 

 [1] "x86_64, linux-gnu"; $version.string [1] "R version 3.1.2 (2014-10-31)"
   $Session info: [1] tm_0.6-2 

1 个答案:

答案 0 :(得分:0)

语料库对象的内存大小是预期的,因为您有18 M行。当您为df的每一行创建虚拟文本文档时,它应具有这么大的大小(6.9 GB)。下面是一个简化的例子。当您inspect语料库时,您可以看到每个向量都保存为包含文本信息的单独文档集合。

当我们处理多个文件进行文本处理时,

Vcorpus通常用于创建易失性对象。您的目标尚不清楚为什么要为每行创建语料库。如果您可以分享有关您要执行的操作的更多详细信息,我相信其他人可以为您提供有关如何使用VCorpus的更多信息。

x <- c("hello","hi","What does Corups do ?")
df <- as.data.frame(x)
textVector <-
  sapply(df, as.character)
system.time(corpus <- VCorpus(VectorSource(textVector)))
object.size(textVector)
object.size(corpus)
inspect(corpus)