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