在大型数据集中查找类似的字符串

时间:2014-08-10 01:51:40

标签: string algorithm similarity levenshtein-distance

我使用levenshtein距离从列表中检索类似的字符串。目前该列表只有几千件商品,但我们需要支持至少10万件商品。

我试图提高效率,我想出的一种技术就是只计算长度相近的琴弦的levenshtein距离。我虽然也对初始字符进行了过滤,即如果要搜索的字符串以b开头,那么我只对以b开头的字符串运行计算。但是,我不确定我是否可以认为这一直都可以使用。

我想知道你们是否有更好的方法来完成这项工作?

由于

1 个答案:

答案 0 :(得分:0)

一种方法是希望具有较小编辑距离的匹配在其中具有短的精确匹配。如果你假设这个,那么,给定字符串ABCDEF,检索包含ABC,BCD,CDE或DEF的所有字符串,并计算它们的编辑距离。你甚至可能发现它们之间的最佳匹配是如此接近以至于任何更接近的匹配必须在其中有一个短匹配,所以你已经找到它了。你必须接受,如果你运气不好,你可能会错过一些好的比赛,或者被迫一个接一个地完成所有的可能性。

作为构建子字符串数据库的替代方法,您可以从通过连接所有存储的字符串获得的字符串构建http://en.wikipedia.org/wiki/Suffix_array和LCP数组,并使用未使用的标记字符将它们分开。这需要输入大小的时间和空间线性。然后,您将通过查找从ABCDEF,BCDEF,CDEF和DEF开始的后缀数组中的字符串来搜索完全匹配。