在文本预处理阶段,想要实现去停用词和去掉只出现一次的词这两个功能
版本一:
使用gensim上的python语句,基本上是遍历文本集了,两个阶段分别用1分钟和大于30分钟的时间(1800篇文章)
实现是这样写的:首先建立停用词list,然后遍历语料中的文本,判断是否是停用词,第三遍历语料文本,计算词出现的次数,最后遍历语料文本,判断是否是出现一次的词
版本二:
在版本一的基础上,改进了去停用词代码,使用bloomfilter生成停用词表,其他步骤不变
效果:停用词阶段大概不到20s的时间,去只出现一次的词用了大概30分钟时间(1800篇文章)
版本三:
在版本二的基础上,重写了去只出现一次的词的部分,在去停用词的阶段建一个bloomfiter存储出现一次的词,用list存储多次出现的词(对每个词判断,如果出现在bloomfilter中,就说明出现了多次,存到list里)
效果:
加上了time.clock()时间计算后,两个阶段时间分别为12.23s和1770.2s
版本四:
忽然发现版本三中的一个可以改进的地方,为啥不再加一个bloomfilter代替list呢?
效果:两个阶段时间分别为17.13s和5.84s。之所以第一阶段时间长了,是因为在去停用词的时候顺便建两个bloomfilter,可以减少一遍语料库的遍历
综上所述,bloomfilter效果确实很强大,但是响应的也会付出空间的代价(具体我没有计算,因为我的空间不值钱),还有精确度的代价(也可以忽略不计)
关于bloomfilter原理介绍有很多,可以百度或者google,我使用的版本是github里的pybloomfiltermmap版本。