2013-04-16 151 views
3

我想找到一種方法來建立一個模糊搜索,其中文本數據庫和查詢可能有拼寫變體。特別是,文本數據庫材料從網上收集,可能不會從全文引擎的準備階段中受益(詞幹) 我能想象使用pg_trgm爲出發點,然後由萊文斯坦驗證命中。 但是,人們傾向於在音樂領域做前綴查詢E.g,我期望「貝多芬交響曲」是一個合理的搜索術語。那麼,是有人在輸入「betho交響曲」,是有一個合理的方式(使用PostgreSQL有可能是TCL或Perl腳本)來發現的「betho」部分應以「beetho」相比較(返回爲1的編輯距離)前綴相似性搜索

回答

0

您可以修改編輯距離算法以降低字符串的後部分的權重。例如:匹配(i,j)= 1/max(i,j)^ 2,而不是匹配(i,j)= 1,對於每個我來說都是如此。 (我和j是你正在比較的符號的位置)。

這樣做是:DIST( 'ABCD', 'ABCE')< DIST( 'ABCD', 'EBCD')。

+0

感謝的話了很多 - 這看起來很有希望。在postgresql的情況下,它可能需要加載修改後的代碼作爲擴展 – user1938139

1

我結束了什麼是常見算法的簡單修改:通常我只想拿起從矩陣或向量對最後一個值。參照http://en.wikipedia.org/wiki/Levenshtein_distance中的「迭代」算法,我將字符串作爲第一個參數進行探測,將查詢字符串作爲第二個參數。現在,當算法結束,在結果列中的最低值給出正確的結果

樣品結果: 查詢「fantas」,詞語的數據庫「幻想」,「神奇的」 => 0 查詢「fantas」, WOR數據庫「粉絲」 => 3

編輯距離的輸入是基於三元相似性的「最字」列表中選擇