Алгоритм сравнения имен людей для выявления идентичности - PullRequest
2 голосов
/ 17 мая 2010

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

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

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

Ответы [ 4 ]

3 голосов
/ 17 мая 2010

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

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

2 голосов
/ 17 мая 2010

Вы должны смотреть на алгоритмы сравнения строк, такие как Левенштейн или Смит-Уотерман. Вот отличная библиотека , чтобы вы начали

1 голос
/ 17 мая 2010

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

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

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

Я написал некоторый PHP-код для этого: см. имя (см. Функцию Similarityto ()), textfuzzy , вероятность .

1 голос
/ 17 мая 2010

Чтобы действительно получить такие случаи, вам может понадобиться таблица псевдонимов, но я думаю, что Soundex приблизит вас.

http://commons.apache.org/codec/apidocs/org/apache/commons/codec/language/Soundex.html

...