我在 mongo db 中有一组文档。我正在使用 Pymongo 访问并插入此集合。我想做的是:
在 python 中,使用 map reduce 可以有效地查询一个 -gram 短语在整个语料库中的使用次数。
我知道如何对单个单词执行此操作,但很难将其扩展到 n-gram。我不想做的是使用 NLTK 库进行标记,然后运行 map reduce。我相信这将提高解决方案的效率。谢谢。
我在 mongo db 中有一组文档。我正在使用 Pymongo 访问并插入此集合。我想做的是:
在 python 中,使用 map reduce 可以有效地查询一个 -gram 短语在整个语料库中的使用次数。
我知道如何对单个单词执行此操作,但很难将其扩展到 n-gram。我不想做的是使用 NLTK 库进行标记,然后运行 map reduce。我相信这将提高解决方案的效率。谢谢。
如果您想要一个高效的系统,您需要提前分解 n-gram 并将它们编入索引。当我编写5-Gram 实验时(不幸的是,由于我不得不归还硬件,后端现在处于离线状态),我创建了一个 的映射word => integer id
,然后将一个十六进制 id 序列存储在 MongoDB 中的一个集合的文档键字段中(例如,[10, 2] => "a:2"
)。然后,将大约 3.5 亿个 5 克随机分配到 10 台运行 MongoDB 的机器上,为整个数据集提供了亚秒级的查询时间。
你可以采用类似的方案。使用以下文件:
{_id: "a:2", seen: [docId1, docId2, ...]}
您将能够找到找到给定 n-gram 的位置。
更新:实际上,一个小的更正:在上线的系统中,我最终使用了相同的方案,但是为了空间效率将 n-gram 键编码为二进制格式(~350M 是很多5-gram!),但是否则机制都是一样的。