2015-07-04 84 views
2

我有一個Postgres數據庫語句的表。該表被稱爲sentences和保存了一句每一行的列稱爲sentencePostgres的選擇有個匹配行,排序百分比

如何將句子與給定句子進行比較,並返回其中包含60%的單詞(或甚至更好的單詞根部)匹配的單詞,然後根據匹配的質量對結果進行排序?

理想情況下,90%的匹配會來之前70%的匹配和50%的比賽不會顯示在所有。

理想的情況下,將不包括標點符號爲好,但這不是必須的。

+1

我會用一些真正的編程語言來做,而不是SQL。這種任務會導致長時間不可讀的SQL查詢。 –

+0

@IlyaKogan我需要查詢postgresql數據庫,但我不想每次查詢時都下載整個表 – maxhud

回答

2

退房的fuzzystrmatch模塊,尤其是levenshtein功能。這將計算兩個字符串之間的「距離」,較低的值表示它們更類似。它通常在兩個單詞之間使用,但只要句子不太長(每個參數的最大字符串長度爲255個字節),也可以將它們與句子一起使用。

然後你會被levenshtein功能上升的輸出進行排序,對結果從最要至少相似。

如果要排除標點符號,請使用正則表達式在字符串上調用regexp_replace以刪除所需的所有字符,並用空字符串替換它,然後將這些返回值用作參數levenshtein

+0

工作得很好!謝謝。 – maxhud

+0

當然,沒問題。 – khampson