我需要扫描大约150万个文本文档的语料库,并匹配长度在1到4之间的任何词组,而不是大约180万个词组的词汇。
从每个文本文件中提取单词n-gram不是问题,并且非常快;瓶颈在于对词汇的检查。
我的词汇表存储在MySQL表中,正确编入索引,我正在查询每个短语:
SELECT (1) FROM vocab WHERE phrase=%s;
整个事情慢慢地发展。任何优化想法?
谢谢!
答案 0 :(得分:2)
我的建议是将整个词汇量读入内存一次,然后你就可以很快地对它进行一些查询。您可以将其投放到set
或dict
,或者如果您感觉有点想象,您甚至可以使用布隆过滤器来检查是否包含。我对这一点有偏见,但如果你选择走这条路,我建议pybloomfiltermmap。
如果你使用布隆过滤器,一个优点是它比在内存中存储set
要紧凑得多,而且它们非常快。它们确实对假阳性率有一定的限制,并且在实践中可以控制在可接受的水平。