Pymongo和n-gram搜索

时间:2013-08-23 20:19:57

标签: python mongodb dictionary reduce database

我在mongo db中有一组文档。我正在使用Pymongo访问并插入此集合。我想做的是:

在python中,使用map reduce可以有效地查询整个语料库中使用n -gram短语的次数。

我知道如何为单个单词做这个,但努力将它扩展到n-gram。我不想做的是使用NLTK库进行标记,然后运行map reduce。我相信这会从解决方案中提高效率。谢谢。

1 个答案:

答案 0 :(得分:1)

如果你想要一个高效的系统,你需要提前分解n-gram并索引它们。当我写5-Gram Experiment时(不幸的是后端现在离线,因为我不得不放弃硬件),我创建了一个word => integer id的地图,然后在MongoDB中存储了一个hex id序列。文档集合的关键字段(例如,[10, 2] => "a:2")。然后,将~3.5亿5克随机分发到10台运行MongoDB的机器,为整个数据集提供亚秒级查询时间。

你可以采用类似的方案。使用如下文档:

{_id: "a:2", seen: [docId1, docId2, ...]}

您将能够找到找到给定n-gram的位置。

更新:实际上,一个小小的修正:在上线的系统中我最终使用相同的方案,但是以二进制格式编码n-gram密钥以提高空间效率(~350M是一个很多的5克!),但其他机制都是一样的。