2015-05-01 87 views
1

我有大量的字符串包含產品名稱和一些其他屬性(大小,體積,年齡等)。但字符串根本不是標準化的。產品名稱可能拼寫錯誤,音量可能不同(0.5l,1/2升,500ml等)。雖然變化的數量是有限的,但例如只有幾百種產品。我可以使用哪些工具分析每個字符串並告訴我它是否包含某些令牌?我的猜測是某種學習機制會很有用,但我不確定哪些工具可以提供這種功能。我已經看過ElasticSearch,但我不確定這是否應該走。我所有的數據目前都在PostgreSQL數據庫中,我也查看過pg_grm。再次,不知道這是否符合我的需要。模糊字符串匹配:哪個工具?

我一直在考慮的一個解決方案是維護一個正確的關鍵字列表,並根據每個字符串查看該字符串是否包含任何關鍵字。我不知道這是否會工作,如果它願意,如何切實有效地實現它在PostgreSQL的

編輯 這裏是我試圖從提取關鍵詞幾個示例行:

wine Bardolo red 1L 12b 12% 
La Tulipe, 13* box 3 bottles, 2005 
Great Johnny Walker 7CL 22% red label 
Wisky Jonny Walken .7 Red limited editon 

我已經做了相當多的搜索,但現在還沒有找到正確的方法來解決這個問題。

+0

也許使用'ngram'標記器將整個字符串分析爲一個ngram對Elasticsearch有用嗎?它將允許子詞模糊匹配。 –

+0

也許,但我想我需要子串模糊匹配而不是子詞模糊匹配。這樣也能工作嗎? –

回答

0

我已經使用pg_trgm擴展進行類似的任務(我比較拼寫錯誤的地址行和公司名稱)以及聚類算法(可能不需要您的情況)。

它完成了一些數據準備工作(正則表達式替換)。 可能不是很容易,但我相信也可以解決你的問題。 pg_trgm中的索引支持非常好。

+0

謝謝,但地址有點類似「單詞」的順序。在我的情況下,我正在尋找的'令牌'可能在字符串中的任何地方(並且拼寫錯誤)。 –