2010-05-16 6 views
1

Я работаю над алгоритмом синхронизации адресной книги. Я хотел бы повторно использовать код, если он существует, но пока не нашел его.Алгоритм сравнения имен людей для определения идентичности

Кто-нибудь знает об алгоритме, который будет указывать мне в числах/float/procent, сколько двух имен одинаково. Расстояние Левенштейна в этом подходе не очень хорошо, так как имена и наши книги adddress соответствуют началу каждого из разделов имен.

John Smith должен соответствовать
Smith Jon, Jonathan Smith, Johnny Smith

ответ

1

Посмотрите также на алгоритм Jaro Winkler. Это хорошо для имен. http://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance

Если у вас есть имя, вопросы фамилии, то вы можете просто сортировать их, чтобы убедиться, что Смит Джон сохраняются как Джон Смит

+0

Я выбираю этот ответ, как вы прямо указывали на алгоритм, хота другого ответа ранее были представлены с той же ссылкой на сайт. – Pentium10

2

Вы должны смотреть на алгоритмы сравнения строк, таких как Левенштейн или Smith-Waterman. Вот a great library, чтобы вы начали

1

Для имен я придумал алгоритм, похожий на metaphone.

Вам также потребуется некоторая логика, чтобы разбить строку на фамилию, данные имена, название и т. Д. Это может усложниться.

Имеются кромки. Если у кого-то есть титул «Профессор», вы не хотите, чтобы это интерпретировалось как первое имя. И если у них есть «Господь» в начале, это может быть либо их имя (много людей называют Господом), либо их название. И так далее. Лучше всего, если у вас есть свое имя уже в стандартной форме, где вы знаете, какова их фамилия, данные имена и название.

Я написал код PHP для этого: см. name (см. Функцию сходства to()), textfuzzy, probability.

Смежные вопросы