Лучшая стратегия для разделения имен в английском стиле на имя и фамилию

У меня есть список имен, и мне нужно разделить их на имена и фамилии. Поскольку в некоторых именах есть 2-3 пробела, простое разделение на пробел не годится.

Какие эвристики люди используют для выполнения разделения?

Обратите внимание, что это не дубликат вопросов, которые фактически спрашивают, как разделить пробел; Я ищу эвристики и алгоритмы, а не реальную помощь по коду.

Обновление: я ограничиваю набор задач именами в английском стиле. Это все, что мне нужно решить, и, вероятно, все, что понадобится любому, кто подходит к этому (англоязычному) вопросу.


person David Pfeffer    schedule 03.11.2012    source источник
comment
Обычно это решается путем постоянного разделения данных имени и фамилии, потому что практически невозможно сделать это правильно для всех языков/стран/языков/и т. д. Не то, чтобы это помогло вам.   -  person Matt Ball    schedule 03.11.2012
comment
Это во многом зависит от языка: можете ли вы попробовать это со словарем имен? Я предполагаю, что это не на китайском или японском языке, верно?   -  person Sergey Kalinichenko    schedule 03.11.2012
comment
Самостоятельное разделение имен, как правило, кого-то разозлит. Как должны быть разделены имена Бобби де Лука или Бобби Ли Дженсен? Или Чоу Юнь-Фат, если уж на то пошло? (Чоу - его фамилия. Ну... это первое, но последнее. О, черт, вы поняли.)   -  person cHao    schedule 03.11.2012
comment
Если вы используете стратегию словаря, вы должны знать, что для некоторых языков имя также может быть фамилией. Как Patrick Robert и Robert Patrick   -  person Luc M    schedule 03.11.2012
comment
Однако в некоторых случаях вы должны указывать отдельные имена. API LinkedIn, например, требует, чтобы вы разделили имя, иначе они не позволят вам выполнять поиск вне сети.   -  person David Pfeffer    schedule 03.11.2012
comment
@MattBall В моем случае это окно поиска, где два ящика плохо пахнут. Хотя в целом согласен.   -  person David Pfeffer    schedule 04.11.2012


Ответы (4)


Я прочитал очень интересный и исчерпывающий пост на эту тему:

http://www.w3.org/International/questions/qa-personal-names

Он даже предлагает спросить себя, действительно ли вам нужны отдельные поля для имени и фамилии. Кажется, это зависит от целевого региона (ов) вашего приложения.

person fan711    schedule 03.11.2012
comment
Вы также можете найти kalzumeus.com/2010/06. /17/ интересно. - person rici; 03.11.2012

Два подхода могут помочь, хотя и не решают полностью эту проблему.

  1. Программно отделяйте простые, а те, которые непростые, помещаются в другой список, «оставшиеся для разделения». Отсортируйте этот список вручную. При ручной сортировке могут появиться некоторые эвристики, которые можно закодировать, что еще больше уменьшит размер оставшегося списка. Если это одноразовая вещь, а список не очень большой, это сделает работу.
  2. Тесно связанная проблема возникает, когда имя разделено, но вы не знаете, какое из них первое, а какое последнее. Некоторые системы обходят эту проблему, выполняя нечеткий поиск, так что если с первой попытки совпадений не найдено, нужно поменять местами имя и фамилию и повторить попытку. Вы не сказали, почему вам нужно разделить имена. Если это поиск по справочным данным, рассмотрите какую-то аналогичную эвристику нечеткого поиска, которая позволяет пробовать разные разбиения вместо того, чтобы пытаться получить правильное разбиение заранее.

Не совсем ответ, но в этом случае действительно нет идеального ответа.

person SporkInventor    schedule 03.11.2012

В разных странах и регионах используются разные форматы имен. Например, в Азии фамилия обычно стоит первой, а затем следуют имена. На Западе у вас есть соглашение об имени и фамилии, но все усложняется, когда люди делают двойную ставку или включают отчества. А то в некоторых регионах людям дают только одно имя.

Лично я не думаю, что есть один-единственный алгоритм, который может дать вам 100% точные результаты.

person Martin Bean    schedule 03.11.2012

Ниже приведены фамилии в английском стиле. Если это не так, обновите свой вопрос.

Обычно можно с уверенностью предположить, что последний символ пробела означает начало фамилии человека. Но поскольку есть исключения, одной из стратегий может быть составление большой базы данных известных фамилий, состоящих из нескольких слов, из какого-либо другого источника. Затем вы можете проверить эти фамилии и рассматривать их как исключения.

person j_random_hacker    schedule 03.11.2012