读取大文本文件(100 MB)

时间:2018-08-26 07:49:35

标签: r tm

我正在使用R进行文本挖掘项目。文件大小超过100 MB。我设法读取了文件并进行了一些文本处理,但是,当我要删除停用词时,RStudio崩溃了。请问什么是最好的解决方案?

在应用任何分析之前,我应该将文件拆分为2个文件还是3个文件,进行处理,然后再次合并?任何人都有要拆分的代码。我尝试了几种在线可用的选项,但它们似乎都不起作用。

这是我使用的代码。除了删除停用词以外,一切都工作顺利

# Install
install.packages("tm")  # for text mining
install.packages("SnowballC") # for text stemming
install.packages("wordcloud") # word-cloud generator 
install.packages("RColorBrewer") # color palettes

# Load
library("tm")
library("SnowballC")
library("wordcloud")
library("RColorBrewer")

library(readr)
doc <- read_csv(file.choose())

docs <- Corpus(VectorSource(doc))
docs

# Convert the text to lower case
docs <- tm_map(docs, content_transformer(tolower))

# Remove numbers
docs <- tm_map(docs, removeNumbers)

# Remove english common stopwords
docs <- tm_map(docs, removeWords, stopwords("english"))

1 个答案:

答案 0 :(得分:1)

如果语料库中有很多单词,R将花费很长时间删除停用词。 tm removeWords本质上是一个巨大的gsub,其工作方式如下:

gsub(sprintf("(*UCP)\\b(%s)\\b", paste(sort(words, decreasing = TRUE), 
                                       collapse = "|")), "", x, perl = TRUE)

由于正在检查停用词上的语料库中的每个单词(x),并且一个100MB的文件包含很多单词,Rstudio可能会崩溃,因为它暂时没有收到R的回复。我不确定RStudio是否内置了超时功能。

现在您可以在R控制台中运行此代码;这不会崩溃,但是您可能要等待很长时间。完成该过程后,您可以使用包beepr来创建声音。

如果可能的话,我的建议是切换到quanteda软件包,因为它将与tm并行运行,具有更好的文档记录,更好的支持和utf-8问题。至少那是我的经验。

但是您也可以尝试像下面的代码一样并行运行tm代码,看看效果是否更好:

library(tm)

# your code reading in files

library(parallel)
cores <- detectCores()

# use cores-1 if you want to do anything while the code is running.
cl <- makeCluster(cores)   
tm_parLapply_engine(cl)

docs <- Corpus(VectorSource(doc))

# Convert the text to lower case, remove numbers and stopwords
docs <- tm_map(docs, content_transformer(tolower))
docs <- tm_map(docs, removeNumbers)
docs <- tm_map(docs, removeWords, stopwords("english"))

# rest of tm code if needed

tm_parLapply_engine(NULL)
stopCluster(cl)

如果要对包含大量单词的大型文档术语矩阵进行计算,请确保使用slam软件包(安装tm时安装)中的函数。这些功能使文档术语矩阵保持稀疏形式。否则,您的文档术语矩阵可能会转换为密集矩阵,并且由于过多的内存消耗,您的R会话将崩溃。