Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除R中语料库上的stopwords和tolower函数slow_R_Performance_Text Mining_Tm - Fatal编程技术网

删除R中语料库上的stopwords和tolower函数slow

删除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的系统,运行一个本地数据库来读取输入数据 希望大家能提出建议,加快速度

我有大约75MB数据的语料库。我正在尝试使用以下命令

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包中的简单三元组矩阵)的对象,其中包含稀疏项文档矩阵或文档项矩阵。