python计算字符串的接近程度

时间:2013-07-31 14:53:46

标签: python string-comparison

我想比较3或4位整数的字符串表示。我想将它们分组为“亲近”。也就是说,pc_dud[3]应与dud[0]配对。

dud = ['3433', '3467', '3551', '345', '345', '3613'] 
pc_dud = ['3401', '3402', '3430', '0342', '3584']

有没有人知道有一个很好的工具可以做到这一点(我以为自己也许像海蜇一样)?当然,另一种解决方案是使用算术差异作为“亲密度”的指标。有什么想法吗?

4 个答案:

答案 0 :(得分:2)

您可以使用difflib模块:

示例:

>>> 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']

答案 1 :(得分:1)

如果您正在寻找算术贴近度,那么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

答案 2 :(得分:0)

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

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

这是一个直观的例子,说明与levenshtein相比,数组中两个数字序列的样子。我用这个工具来制作截图。 http://www.let.rug.nl/kleiweg/lev/

http://imgur.com/OTJia7W

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

答案 3 :(得分:0)

如果按照Paul的建议去Levenshtein Distance路线,请看看Apache的PyLucene - 我相信lucene的FuzzyQuery就是基于此。