文本挖掘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)