【问题标题】:Algorithm for searching the database搜索数据库的算法
【发布时间】:2020-07-09 12:54:12
【问题描述】:

我有一个包含大约 15000 个条目的数据库,我想为应用程序的前端部分实现搜索算法,但我不知道应该如何开始。 搜索算法应该对搜索结果进行排名,并且应该接受书面错误。 例子: 如果我搜索“Pordlnd”,结果应该是“Portland”。

它也不应该关心字符串的长度。 例子: 如果我搜索“new”,“New York”和“New Hampshire”的排名应该相同,因为它们都包含“new”这个词。

我想自己写,更多的是作为练习,所以如果你能指出我正确的方向,你的帮助将不胜感激!

【问题讨论】:

    标签: database string algorithm search search-engine


    【解决方案1】:

    您要查找的内容称为近似/模糊字符串搜索。这是一个非常广泛的主题,有很多不同的实现,但我最喜欢的初学者教程之一是:https://norvig.com/spell-correct.html(请注意,这并不完全符合您的要求,但仍然值得一读)。

    从根本上说,您的问题归结为:根据某些匹配标准,为字典中的所有单词打 0 - 1 分,并根据该分数返回前 N 个条目。 (当然,你必须很聪明地计算它,因为这需要大量的处理能力)。

    以下是有关如何给出该分数的一些介绍: 编辑距离/列文斯坦距离为您提供使用插入/删除/替换字符将一个字符串转换为另一个字符串的“最低成本”。您可以查看:https://en.wikipedia.org/wiki/Levenshtein_distance 或此 Youtube 教程 https://www.youtube.com/watch?v=Xxx0b7djCrs。您可能希望将字符的删除成本设为 0,因为您希望 New York/New Hampshire 在搜索 New 时具有相同的排名。这是一个关于如何将 Levenstein 距离与 BK 树一起使用的 youtube 小视频:https://www.youtube.com/watch?v=oIsPB2pqq_8

    余弦距离是衡量两个向量之间相似性的另一种方法,这里有一个很好的解释:https://blog.nishtahir.com/2015/09/19/fuzzy-string-matching-using-cosine-similarity/

    经过一番谷歌搜索,这是一个旧的 SO 答案:Fastest way to find most similar string to an input?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多