【问题标题】:approximate search in a database数据库中的近似搜索
【发布时间】:2011-10-12 13:47:18
【问题描述】:

我有一个包含机构列表(大学、医院等)的大型数据库。机构的名称来自不同的来源,同一机构的拼写可能不同。例如,它们可能拼写错误,或者单词可能被缩短(“uni”、“univ”或“university”)

给定一个我需要插入到数据库中的名称,是否有一种实用的方法来查找该机构是否已经在数据库中?这不是一个研究项目,所以我正在寻找一个相当快的解决方案。

我正在使用 django 和 postgresql,但我想没关系。

【问题讨论】:

  • 你运行的是什么版本的 PostgreSQL?
  • 我可以安装任何版本。所以,我想是最新的。

标签: python database django postgresql fuzzy-search


【解决方案1】:

这是record linkage的问题。许多数据库为此提供了基本方法,例如字符级 n-gram 匹配,其中将“大学”之类的术语扩展为

["uni", "niv", "ive", "ver", "ers", ...]

for n = 3。数据库将索引所有此类 n-gram,并允许使用某种加权匹配进行搜索。 pg_trgm 似乎正是这样做的,试试看。

【讨论】:

    【解决方案2】:

    您可能应该考虑使用专门的搜索引擎。 Django-haystack 使您能够轻松将 Solr、Whoosh 或 Xapian 等搜索引擎添加到您的项目中。

    【讨论】:

      【解决方案3】:

      听起来你想在数据库中找到一个与你给出的值有小的词汇距离的值。查找带有前缀的东西相当简单,但拼写错误的单词更难。您可能想阅读Peter Norvig's post on spell correctors

      【讨论】:

      • 如果 Norvig 的算法不那么天真,那就太好了。加权 Levenshtein 自动机(可能是 trie 形式)可以使其工作,但仍必须在数据库端实现,以防止每次模糊搜索的访问次数过多。祝你好运......
      猜你喜欢
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-09
      • 2012-09-08
      • 1970-01-01
      • 2011-01-09
      相关资源
      最近更新 更多