2013-07-30 106 views
0

我正在使用python和mysql。這裏是我的代碼使用Difflib從字符串列表中刪除幾乎重複的字符串

cur.execute("SELECT distinct product_type FROM cloth_table") 
Product_type_list = cur.fetchall() 

現在Product_type_list描述的是這樣

product_type_list =['T_shirts', 'T_shirt', 'T-shirt', 'Jeans', 'Jean', 'Formal Shirt' 'Shirt'] 

在這裏,在product_type_list的產品類型的字符串列表有對T恤和每個牛仔褲和襯衫3重複條目2 。

現在我想我的Product_type_list是這樣

Product_type_list=['T_shirt' , 'Jeans', 'Shirt'] 

我覺得可以用Difflib.Sequencematcher的速動比率。但如何做到這一點

回答

0

我對Difflib.Sequencematcher軟件包瞭解不多。但是對於這樣的模糊匹配將通過使用MySql全文搜索概念來完成。

嘗試獲取FTS匹配邏輯並解決此問題。還有一些Soundex概念在DB和Python中都有。

使用FTS,我們可以得到比較分數,就像排名一樣,根據排名我們會過濾我們的列表。我使用SQL Server FTS完成了類似的任務。

+0

感謝您的回答,但我對Fts匹配邏輯沒有任何認識。你能給我提供一些鏈接,我可以得到知識 –

+0

雅,正如已經說過的,我在SQL Server中的工作就像一個任務。找到這個鏈接它可能會給出一些FTS等級和soundex邏輯。 http://msdn.microsoft.com/en-us/library/cc879245.aspx,http://msdn.microsoft.com/en-us/library/ms187384.aspx –

0

我認爲,你可以定義你自己的算法來解決這個問題,因爲大部分的東西都是域依賴於而你的產品類型並不是那麼大,我猜。例如,正式襯衫上的正式襯衫應按照您的要求予以忽略,而其他領域可能並非如此。因此,首先定義您自己的停用詞(產品名稱中可以忽略的詞)並刪除結尾的''並修剪空格和' - ','_'種非字母並轉換爲大寫。鑑於此,你可以建立自己的匹配算法來解決這個問題。我遇到過這樣的問題,在嘗試了幾個現有的庫之後,用我自己的實現來解決它。

你應該繼續改進算法,因爲它基於啓發式和假設。

+0

感謝您的答案@karthikeyan但解決方案是建議像修剪的'''''''或空間不是永久性的解決方案,因爲在這裏我已經給你了product_type的樣本列表,以更好的方式理解我的問題,但是在生產中有許多記錄和那時候我可能不知道兩個不同的字符串有什麼不同,但在英文中有相似的含義 –

+0

鑑於這一點,我會建議像Lucene這樣的文本處理引擎,在那裏你可以適應我提出的想法。如果你不得不使用NLP的東西來識別相似或相同的含義的話。這也不簡單:) – Karthikeyan