首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取大型文本文件(100 MB)

读取大型文本文件(100 MB)
EN

Stack Overflow用户
提问于 2018-08-26 15:49:35
回答 1查看 121关注 0票数 0

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

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

下面是我使用的代码。除移除停止字外,一切都很顺利。

代码语言:javascript
复制
# 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"))
EN

回答 1

Stack Overflow用户

发布于 2018-08-26 21:29:02

如果语料库中有很多单词,R将需要很长时间来删除停用词。tm removeWords基本上是一个巨大的gsub,它的工作原理如下:

代码语言:javascript
复制
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代码,看看这样做是否会更好一些:

代码语言:javascript
复制
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会话将因内存消耗过多而崩溃。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52024251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档