删除R中语料库上的stopwords和tolower函数slow
我有大约75MB数据的语料库。我正在尝试使用以下命令删除R中语料库上的stopwords和tolower函数slow,r,performance,text-mining,tm,R,Performance,Text Mining,Tm,我有大约75MB数据的语料库。我正在尝试使用以下命令 tm_map(doc.corpus, removeWords, stopwords("english")) tm_map(doc.corpus, tolower) 这两个单独的功能运行至少需要40分钟。我在为我的模型使用tdm矩阵时,希望加快流程 我经常尝试像gc()和memory.limit(10000000)这样的命令,但我无法加快进程速度 我有一个带有4GBRAM的系统,运行一个本地数据库来读取输入数据 希望大家能提出建议,加快速度
tm_map(doc.corpus, removeWords, stopwords("english"))
tm_map(doc.corpus, tolower)
这两个单独的功能运行至少需要40分钟。我在为我的模型使用tdm
矩阵时,希望加快流程
我经常尝试像gc()
和memory.limit(10000000)
这样的命令,但我无法加快进程速度
我有一个带有4GB
RAM的系统,运行一个本地数据库来读取输入数据
希望大家能提出建议,加快速度 首先我要试试
tm_map(doc.corpus, content_transformer(tolower))
因为
tolower()
不在getTransformations()
列表中,也许您可以试试quanteda
library(stringi)
library(tm)
library(quanteda)
txt <- stri_rand_lipsum(100000L)
print(object.size(txt), units = "Mb")
# 63.4 Mb
system.time(
dfm <- dfm(txt, toLower = TRUE, ignoredFeatures = stopwords("en"))
)
# Elapsed time: 12.3 seconds.
# User System verstrichen
# 11.61 0.36 12.30
system.time(
dtm <- DocumentTermMatrix(
Corpus(VectorSource(txt)),
control = list(tolower = TRUE, stopwords = stopwords("en"))
)
)
# User System verstrichen
# 157.16 0.38 158.69
库(stringi)
图书馆(tm)
图书馆(quanteda)
并行计算?把你的文本分成20 MB的块,在不同的内核上运行。我相信你会没事的,因为删除停止字只是一项字典任务,而且与上下文无关。同样,R对于这些事情来说是非常缓慢的,所以如果速度对你来说是至关重要的考虑重写它,比如C.@人工微风,我能在R中并行化吗?我很乐意与R一起工作,以减少时间延迟!因此,我通常1)使用<代码>并行< /COD>包,这是相当好的,并且有自己的类似于<代码>应用< /C++ >,或者2)通过代码<编译器> <代码>和<代码>内联< /COD>包重新编码内嵌的C或C++中的代码的某些部分。我想你应该先看一下并行程序包。为了稍微扩展一下,我建议把你的语料库分成n-1个块,其中n-1是你有多少个核心。然后,编写一个类似于parallel=function(corpusPart)tm_map(corpusPart,removeWords,stopwords(“英语”)
的函数。现在,您可以将parallel()
馈送到parlappy()
方法。@ShivaPrakash抱歉,我现在不能这样做,但我可能会在以后有时间发布一个。基本上,您将把任务分成几个步骤:lappy(c(“parallel”、“tm”)、require、character.only=TRUE)没有人尝试过上述语法!但是性能没有提高,你可以展示你是如何创建一个语料库的,因为我没有遇到过这样的问题,因为语料库超过100mb,处理时间<2min,是的,我的RAM是4倍大,但我很确定这不应该是一个案例语料库。我用了quanteda
似乎更快。我不确定两个tdm
是否相同quanteda
给出了一个稀疏矩阵
是否与tm
中生成的矩阵相同?dfmSparse类是dfm类的稀疏矩阵版本,从矩阵包继承dgCMatrix类。它是当特征计数是感兴趣的对象时创建的默认对象类型,因为典型的基于文本的特征计数往往包含许多零。只要dfm的后续变换保留计数为零的单元,dfm就应该保持稀疏。tm为您提供了一个类TermDocumentMatrix或类DocumentTermMatrix(两者都继承自slam包中的简单三元组矩阵)的对象,其中包含稀疏项文档矩阵或文档项矩阵。