我正在与R的文本挖掘项目工作。文件大小超过100MB。我设法读取了文件并进行了一些文本处理,然而,当我要删除停用词时,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"))发布于 2018-08-26 21:29:02
如果语料库中有很多单词,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会话将因内存消耗过多而崩溃。
https://stackoverflow.com/questions/52024251
复制相似问题