【发布时间】:2015-11-27 00:23:16
【问题描述】:
我希望创建一个模糊搜索算法。 然而,经过数小时的研究,我真的很挣扎。
我想创建一个算法,对学校名称列表执行模糊搜索。
这是我目前看到的:
我的大部分研究都指向 Google 和 Stackoverflow 上的“字符串指标”,例如:
- Levenshtein 距离
- Damerau-Levenshtein 距离
- Needleman-Wunsch 算法
但是,这只是给出了 相似 2 个字符串的分数。我能想到将其实现为搜索算法的唯一方法是执行线性搜索并为每个字符串执行字符串度量算法并返回分数高于某个阈值的字符串。 (最初我将字符串存储在 trie 树中,但这显然对我没有帮助!)
虽然这对于小型列表来说不是一个坏主意,但对于具有 100,000 个名称并且用户执行了许多查询的列表来说,这将是一个问题。
我研究的另一种算法是拼写检查方法,您只需搜索所有可能的拼写错误。然而,这也是非常低效的,因为它需要超过 75,000 个字,长度为 7 的字和错误计数仅为 2。
我需要什么?
谁能给我推荐一个高效的模糊搜索算法。与:
- 算法名称
- 工作原理或工作原理链接
- 优缺点以及最佳使用时间(可选)
我了解所有算法都有其优缺点,没有最佳算法。
【问题讨论】:
-
看看这个,看看有没有帮助:stackoverflow.com/questions/491148/…
-
好的实现很复杂,所以您可能需要考虑像 Lucene 这样的现成实现。
-
可能使用搜索方法创建三叉树,该搜索方法在运行中从树中计算编辑距离。这并不容易,但我以前做过一个,它可以工作。
标签: string algorithm search levenshtein-distance fuzzy-search