Простой способ разобрать имя человека на составные части? - PullRequest
30 голосов
/ 19 сентября 2008

Многие программы управления контактами делают это - вы вводите имя (, например, , "Джон В. Смит"), и оно автоматически разбивает его на:

Имя: Джон
Отчество: З.
Фамилия: Смит

Точно так же выясняются такие вещи, как «Миссис Джейн В. Смит» и «Доктор Джон Доу-младший». также правильно (при условии, что вы допускаете поля типа «префикс» и «суффикс» в именах).

Я предполагаю, что это довольно распространенные вещи, которые люди хотели бы делать ... поэтому вопрос ... как бы вы это сделали? Есть ли простой алгоритм для этого? Может быть, регулярное выражение?

Я за решением .NET, но я не придирчив.

Обновление: Я ценю, что не существует простого решения для этого, которое охватывало бы ВСЕ крайние случаи и культуры ... но, скажем, ради аргумента, что вам нужно имя по частям (заполнение форм - как, скажем, в налоговых или других государственных формах - это один случай, когда вы обязаны ввести имя в фиксированные поля, нравится вам это или нет), но вы не обязательно заставляете пользователя вводить свое имя в дискретные поля (меньше ввода = легче для начинающих пользователей).

Вы бы хотели, чтобы программа «угадала» (насколько это возможно), что будет первым, средним, последним и т. Д. Если вы можете, посмотрите, как Microsoft Outlook делает это для контактов - она ​​позволяет вам ввести имя, но если вам нужно уточнить, есть дополнительное маленькое окно, которое вы можете открыть. Я бы сделал то же самое - предоставил бы пользователю окно на тот случай, если он захочет ввести имя в виде отдельных частей, - но при этом можно будет ввести имя в одном поле и сделать «наилучшее предположение», охватывающее большинство общие имена.

Ответы [ 22 ]

0 голосов
/ 19 сентября 2008

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

Например:

Фамилия Гидо ван Россума - ван Россум.

Миядзаки Имя Хаяо - Хаяо.

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

Несмотря на это, самое простое решение - просто сохранить полное имя или отдельно запросить имя и фамилию.

0 голосов
/ 19 сентября 2008

Конечно, есть простое решение - разбить строку на пробелы, подсчитать количество токенов, если их 2, интерпретировать их как ПЕРВЫЕ и ПОСЛЕДНЕЕ имя, если есть 3, интерпретировать как ПЕРВЫЕ, СРЕДНИЕ, и ПОСЛЕДНИЕ.

Проблема в том, что простое решение не будет на 100% правильным решением - кто-то всегда может ввести имя с большим количеством токенов или включить в него заголовки, фамилии с пробелом (возможно ли это?) И т. Д. . Вы можете найти решение, которое работает для большинства имен большую часть времени, но не является абсолютным решением.

Я бы следовал рекомендации Шэда для разделения полей ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...