2011-10-12 77 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等搜索引擎添加到您的項目中。