我有一个很大的列表(超过200,000)字符串,我想与给定的字符串进行比较。 给定的字符串由用户插入,因此可能稍微不正确。
我希望做的是在将每个字符串添加到列表中时为每个字符串创建一些预先计算的哈希值。此哈希将包含诸如字符串长度,添加所有字符等信息。
我的问题是,这样的事情已经存在吗?当然会有一些东西让我避免在列表中的每个字符串上运行Levenshtein distance?
或许还有第三种选择,我还没有想到呢?
答案 0 :(得分:3)
听起来你想要使用某种模糊散列。有很多哈希函数可以做这样的事情。经典的旧“SOUNDEX”算法甚至可能有用。
另一个想法 - 如果你估计错误输入的概率很低,那么你可能实际上很好地直接命中99.9%的时间,回到SOUNDEX,这可能会捕获90%的剩余病例然后在剩余的0.01%的时间内搜索整个列表。
还值得检查一下这个讨论: How to find best fuzzy match for a string in a large string database