2013-09-08 2 views
0

У меня есть группа имен людей, привязанных к их соответствующим идентификационным номерам (например, номер социального страхования/национальный идентификационный номер/номер паспорта). Однако из-за дублирования один идентификационный номер может содержать до 100 имен, которые могут быть похожими или совершенно разными. Например. ID 221 может иметь имена Richard Parker, Mary Parker, Aunt May, Parker Richard, [email protected] Richard и т. Д. Некоторые опечатки, но некоторые совершенно разные имена.Сравнение сходства между несколькими строками со случайной начальной точкой

Первоначально я хочу отображать только 3 (или аналогичное небольшое число) имен, которые могут быть как можно более отличающимися от остальных, чтобы предупредить этого зрителя о том, что множественные имена не могут быть опечатками, но могут быть даже случай кражи идентификационной информации или небрежного захвата данных или чего-либо еще!

Я прочитал алгоритм обнаружения сходства, и в настоящее время я смотрю на этот one, который позволит вам вычислить оценку, а оценка 1 означает, что две строки одинаковы, а нижний балл означает, что они отличаются друг от друга , В моем случае использования, как я могу пройти через 100 имен и отобразить 3, которые являются самыми разными? Алгоритм для этого просто ускользает от моего разума, так как я чувствую, что мне нужна начальная точка, а затем смотри и сравнивайся со всеми остальными и снова зацикливайся и т. Д. И т. Д.

ответ

2

Возьмите функцию от https://stackoverflow.com/a/14631287/1082673, как вы упомянули, и выполните итерацию по всем комбинациям в вашем списке , Это будет работать, если вы не имеете, что много записей, в противном случае время вычисления может увеличить довольно быстро ...

Вот как генерировать пар для данного списка:

import itertools 

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

for p1, p2 in itertools.combinations(persons, 2): 
    print "Compare", p1, "and", p2 
+0

именно то, что я искал. Благодарю. – lukik

+0

Привет. У меня есть дополнительный вопрос, исходящий из вашего ответа о сортировке словаря с помощью itertools. Я не спрашивал об этом здесь, поэтому было бы непрактично отредактировать вопрос. Новый вопрос можно увидеть здесь (http://stackoverflow.com/q/18699961/1082673). Спасибо за вашу помощь. – lukik