2011-10-12 57 views
5

我有一个庞大的数据库与机构(大学,医院等)列表。机构的名称来自不同的来源,对于同一机构可能会有不同的拼写。例如,它们可能拼错,或者单词可以缩短(“uni”,或“univ”或“university”)在数据库中近似搜索

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

我正在使用Django和postgresql,但它并不重要,我想。

+0

你运行的是哪个版本的PostgreSQL? – Kuberchaun

+0

我可以安装任何版本。所以,我想最新的。 – akonsu

回答

5

这是record linkage的问题。许多数据库提供此如字符级Ñ -gram匹配,其中类似的“大学”一术语扩展成

[“单向”,“NIV”,“IVE”,“版本”基本方法, “ERS”,...]

ň = 3,该数据库将指数所有这些ñ -grams,并允许以某种加权匹配的搜索。 pg_trgm似乎正是这样做,试试看。

0

这听起来像你想要在数据库中找到一个与给定值相距小的词法距离的值。用前缀查找东西相当直接,但拼写错误的单词更难。您可能需要阅读Peter Norvig's post on spell correctors

+0

如果Norvig的算法不会那么天真,这将会很好。加权Levenshtein自动机(可能以一种特里形式)将使其工作,但仍然必须在数据库端实施,以防止每次模糊搜索的访问次数过多。祝你好运... –

1

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