2013-07-30 102 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