python计算字符串的贴近度

python计算字符串的贴近度,python,string-comparison,Python,String Comparison,我想比较3位或4位整数的字符串表示形式。我想把他们分成几对“亲密”。也就是说,pc\u dud[3]应该与dud[0]配对 dud = ['3433', '3467', '3551', '345', '345', '3613'] pc_dud = ['3401', '3402', '3430', '0342', '3584'] 有人知道有什么好工具可以做这件事吗(我想我自己可能有点像水母)?当然,另一个解决方案是使用算术差异作为“接近度”的指标。有什么想法吗 您可以使用该模块: 例如: &g

我想比较3位或4位整数的字符串表示形式。我想把他们分成几对“亲密”。也就是说,
pc\u dud[3]
应该与
dud[0]
配对

dud = ['3433', '3467', '3551', '345', '345', '3613'] 
pc_dud = ['3401', '3402', '3430', '0342', '3584']
有人知道有什么好工具可以做这件事吗(我想我自己可能有点像水母)?当然,另一个解决方案是使用算术差异作为“接近度”的指标。有什么想法吗

您可以使用该模块:

例如:

>>> import difflib
>>> dud = ['3433', '3467', '3551', '345', '345', '3613'] 
>>> pc_dud = ['3401', '3402', '3430', '0342', '3584']
>>> difflib.get_close_matches(dud[0], pc_dud)
['3430']

您可以采用的一种方法是计算dud中每个整数字符串与pc_dud中每个整数字符串之间的距离。此算法将生成每个数字序列之间的编辑距离。编辑距离数表示将给定序列转换为另一序列所需的最小步骤数。它考虑插入、删除和替换

您将需要一个数据结构来存储编辑距离结果,该结果与它所比较的序列相关。然后可以调查哪个编辑距离最小,然后将它们成对分组

下面是一个直观的示例,说明了与levenshtein相比,数组中的两个数字序列会是什么样子。我用这个工具来制作截图


右下角的数字是最小编辑距离。

如果按照Paul的建议选择Levenshtein距离路线,请查看Apache的
-我相信lucene的模糊查询就是基于此。

如果你在寻找算术上的接近度,那么pc_dud[3]将不会与dud[0]匹配

如果只想保留唯一对,请使用以下选项:

dud_ = dud[:]
pc_dud_ = pc_dud[:]

while dud_:
    d1, d2 = min(itertools.product(dud, pc_dud), key=lambda d1,d2: abs(int(d1) - int(d2)))
    dud_.remove(d1)
    pc_dud_.remove(d2)
    print d1, d2

区别会更容易,因为它们只是数字。如果它们是字母数字字符串,那么你就要做等效的levenshtein距离。这取决于你到底想如何将差异最小化,比如牺牲一对让所有其他的距离都更近是可以的。。。如果不是的话,我会对列表进行排序,并将两者压缩。但是列表的长度并不相等。或者,您可能希望最小化平均差异,最大差异。。。有很多方法,取决于你想用它做什么。事实上,我最初并没有抓住算术差的重点。这可能不是最好的解决方案,但可能是一个很好的替代方案。