【问题标题】:How to find best fuzzy match for a string in a large string database如何在大型字符串数据库中找到字符串的最佳模糊匹配
【发布时间】:2010-09-23 11:52:31
【问题描述】:

我有一个字符串数据库(任意长度),其中包含超过一百万项(可能更多)。

我需要将用户提供的字符串与整个数据库进行比较,并检索相同的字符串(如果存在)或返回最接近的模糊匹配(60% 相似度或更高)。理想情况下,搜索时间应低于 1 秒。

我的想法是在根据长度缩小数据库中的候选者后,使用编辑距离将每个数据库字符串与搜索字符串进行比较。

但是,由于我需要经常执行此操作,因此我正在考虑构建数据库字符串的索引以保存在内存中并查询索引,而不是直接查询数据库。

关于如何以不同方式解决此问题或如何构建内存索引的任何想法?

【问题讨论】:

标签: fuzzy-search string-search


【解决方案1】:

This paper seems to describe exactly what you want.

Lucene (http://lucene.apache.org/) 也实现了 Levenshtein 编辑距离。

【讨论】:

  • 第一个链接似乎已经消失了。 :-/
  • 我给一个联系人发了电子邮件,看看我们能否找到 zarawesome 并修复这个链接。不幸的是,没有提供直接电子邮件,所以..
  • 抱歉,是的,我不记得那篇论文是关于什么的了。我建议你搜索“Levenshtein 编辑距离”,看看会出现什么。
  • 这篇论文是 Klaus U. Schulz 和 Stoyan Mihov 的“Levenshtein-Automata 的快速字符串校正”。 CiteSeerx 链接如下。 citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.26.2940
【解决方案2】:

您没有提及您的数据库系统,但对于 PostrgreSQL,您可以使用以下 contrib 模块:trgm - Trigram matching for PostgreSQL

pg_trgm contrib 模块提供函数和索引类,用于根据三元组匹配确定文本的相似性。

【讨论】:

    【解决方案3】:

    如果您的数据库支持,您应该使用全文搜索。否则,您可以使用诸如 lucene 之类的索引器及其各种实现。

    【讨论】:

      【解决方案4】:

      计算 SOUNDEX 哈希(内置在许多 SQL 数据库引擎中)并按它索引。

      SOUNDEX 是基于单词发音的哈希值,因此同一个单词的拼写错误很可能具有相同的 SOUNDEX 哈希值。

      然后找到搜索字符串的 SOUNDEX 哈希,并在其上匹配。

      【讨论】:

      • Soundex 无法看穿许多拼写错误或其他变体。它适用于名称,但不适用于任意字符串。
      • 有趣。我不知道它专注于名字。我知道 NYIIS 是。 (en.wikipedia.org/wiki/…)
      【解决方案5】:

      由于数据量很大,在插入记录时,我会计算语音算法的值并将其存储在索引列中,然后将我的选择查询约束(WHERE 子句)在该列的某个范围内。

      【讨论】:

        【解决方案6】:

        Dan Gusfield字符串、树和序列的算法:计算机科学和计算生物学一书中对相关算法进行了非常广泛的解释。

        【讨论】:

          【解决方案7】:

          https://en.wikipedia.org/wiki/Levenshtein_distance

          Levenshtein 算法已在一些 DBMS 中实现

          (例如 PostgreSql:http://www.postgresql.org/docs/9.1/static/fuzzystrmatch.html

          【讨论】:

            猜你喜欢
            • 2016-08-17
            • 2011-05-21
            • 2015-02-07
            • 2017-08-03
            • 1970-01-01
            • 2012-02-14
            • 2014-11-02
            • 2020-10-12
            • 1970-01-01
            相关资源
            最近更新 更多