我有一套约7百万个短语可与大约3亿个查询匹配。
查询可以是子字符串,也可以包含短语本身。基本上我想要衡量两个短语之间的“相似性”[不一定是编辑距离]
有人可以指出有效的算法来做到这一点。我更喜欢分布式算法,因为我将使用python通过流式传输在Hadoop上执行此操作。
答案 0 :(得分:2)
B ed 树看起来很有趣
Bed-Tree: An All-Purpose Index Structure for String Similarity Search Based on Edit Distance(演讲文稿)
答案 1 :(得分:1)
这至少不是很微不足道,因为你在一方面拥有非常多的数据,而在另一方面则更多。
最简单的方法是7百万的lucene指数。短语,让hadoop作业查询索引。不太确定你是否需要一个solr服务器,或者python中的任何类似实现
映射器应该写出短语id或linenumber,无论你需要识别它。或者至少是短语本身,以及匹配核心。
在缩小步骤中,您可以缩小短语键并用分数写出所有相关短语。 (或任何你想要的)
有关相似性,您可以在此处进一步阅读:
Similarity of Apache Lucene
Apache Lucene itself