Python 使用Difflib从字符串列表中删除几乎重复的字符串
我正在使用python和mysql。这是我的密码Python 使用Difflib从字符串列表中删除几乎重复的字符串,python,difflib,Python,Difflib,我正在使用python和mysql。这是我的密码 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' 'S
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_shirt' , 'Jeans', 'Shirt']
在产品类型列表中,t恤有3个重复条目,牛仔裤和衬衫各有2个重复条目
现在我希望我的产品类型列表如下
product_type_list =['T_shirts', 'T_shirt', 'T-shirt', 'Jeans', 'Jean', 'Formal Shirt' 'Shirt']
Product_type_list=['T_shirt' , 'Jeans', 'Shirt']
我想我们可以使用Difflib.Sequencematcher的quickratio。但是如何做到这一点,我对Difflib.Sequencematcher包知之甚少。但对于这种模糊匹配,将使用MySql全文搜索概念来完成 尝试获取FTS匹配逻辑并解决此问题。DB和Python中也有一些Soundex概念
使用FTS,我们可以获得类似排名的比较分数,根据排名我们将筛选列表。我使用SQL Server FTS完成了类似的任务。我认为,您可以定义自己的算法来解决这个问题,因为大多数内容都依赖于域,我认为您的产品类型没有那么大。例如,根据您的要求,您的正式衬衫中的正式内容将被忽略,而在其他领域中可能并非如此。因此,首先定义您自己的停止词(在产品名称中可以忽略的词),删除结尾的“s”,并修剪空格和“-”、“"”类非字母,然后转换为大写。鉴于此,您可以构建自己的匹配算法来解决此问题。我遇到了这样一个问题,在尝试了几个现有的库之后,我用自己的实现解决了这个问题
你应该继续改进你的算法,因为它是基于启发式和假设的 感谢您的回答@karthikeyan,但您建议的解决方案,如triming's'.''-'或space,并不是永久的解决方案,因为这里我给了您产品类型的示例列表,以便更好地理解我的问题,但在制作过程中,有成千上万的记录,当时我可能不知道两个不同的字符串有什么不同,但在英语中有相似的含义。请注意,我建议使用Lucene这样的文本处理引擎,您可以在其中融入我提出的想法。如果你需要使用NLP来识别相似或相同的单词。这也不简单:)谢谢你的回答,但我对Fts匹配逻辑一无所知。你能给我提供一些我可以获得知识的链接吗?如前所述,我在SQL Server中像一个任务一样工作。找到这个链接,它可能会给出一些FTS等级和soundex逻辑,