tm中使用Perl正则表达式秒杀stopwords

来源:转载


文本挖掘tm包中提供的removeWords函数可以清除stopwords,比如wordcloud包wordcloud函数说明档中的例子:

data(crude)crude <- tm_map(crude, removePunctuation)crude <- tm_map(crude, function(x)removeWords(x,stopwords()))

但如果文献内容很长,10M吧,运行时间会相当长。在应用tm_map之前使用Perl正则表达式能快速解决这个问题。

命令可以整合到R语句中,ifile 是要清理stopwords的文件:

library('tm')stw <- paste(stopwords(), collapse = "|")cmd <- paste0('/usr/bin/perl -p -i -e "s///b(([^a-z]+)|', stw, ')//b/ /gi" ', ifile)system(cmd)

10M的文件一般1~2秒内就可以清理完成,秒杀。

清理完成后再制作词料库只需要去掉标点符号就可以,这一步tm提供的函数速度不慢,不用改:

crude <- paste(readLines(ifile), collapse = " ")crude <- VCorpus(VectorSource(crude), readerControl = list(reader=readPlain, language="en", load=TRUE))crude <- tm_map(crude, removePunctuation)





分享给朋友:
您可能感兴趣的文章:
随机阅读: