Bloomfilter很好很强大

来源:互联网 发布:neural style java 编辑:程序博客网 时间:2024/05/15 13:31

在文本预处理阶段,想要实现去停用词和去掉只出现一次的词这两个功能

版本一:

使用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版本。