0

我有一堆与他们各自的识别号码相关的人名(例如社会安全号码/国民身份证/护照号码)。但由于重复,一个身份号码最多可以有 100 个名称,这些名称可能相似或完全不同。例如,ID 221 可能有名称Richard Parker, Mary Parker, Aunt May, Parker Richard, M@rrrrryy Richard等。一些拼写错误,但一些完全不同的名称。

最初,我只想显示与其他名称尽可能不同的 3 个(或类似的少量)名称,以提醒查看者多个名称可能不是拼写错误,甚至可能是身份盗用的情况或疏忽数据捕获或其他任何事情!

我已经阅读了一种检测相似性的算法,目前正在研究这个算法,它可以让你计算一个分数,分数为 1 表示两个字符串相同,而分数较低表示它们不同。在我的用例中,我怎样才能说出 100 个名称并显示最不相似的 3 个?那个算法只是让我忘记了,因为我觉得我需要一个起点,然后在所有其他人之间进行查找和比较,然后再次循环等等

4

1 回答 1

2

正如您提到的,从https://stackoverflow.com/a/14631287/1082673获取函数并遍历列表中的所有组合。如果您没有那么多条目,这将起作用,否则计算时间会很快增加......</p>

以下是如何为给定列表生成对:

import itertools

persons = ['person1', 'person2', 'person3']

for p1, p2 in itertools.combinations(persons, 2):
    print "Compare", p1, "and", p2
于 2013-09-08T22:12:48.657 回答