我想比较3或4位整数的字符串表示。我想将它们分组为“亲近”。也就是说,pc_dud[3]
应与dud[0]
配对。
dud = ['3433', '3467', '3551', '345', '345', '3613']
pc_dud = ['3401', '3402', '3430', '0342', '3584']
有没有人知道有一个很好的工具可以做到这一点(我以为自己也许像海蜇一样)?当然,另一种解决方案是使用算术差异作为“亲密度”的指标。有什么想法吗?
答案 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/
右下角的数字是最小编辑距离。
答案 3 :(得分:0)
如果按照Paul的建议去Levenshtein Distance路线,请看看Apache的PyLucene - 我相信lucene的FuzzyQuery就是基于此。