Разделение полного имени на имя и фамилию является неразрешимой проблемой, потому что names are really, really complicated. В результате моя модель, которая представляет авторов и других участников книги, включает как поля name
, так и filingName
, где filingName
обычно должен быть «Last, First» (для западных имен).Эвристика для расщепления полных имен
Однако, для удобства пользователей, я хотел бы, чтобы мое приложение разумно угадывало имя записи, когда пользователь заполняет обычное имя. Пользователь может редактировать имя записи, если, конечно, неправильно, но если я правильно понял, я бы сэкономил их некоторое время. В настоящее время я просто предполагая, что последний разделенных пробелами «слова» фамилию и перемещение его на фронт с запятой:
NSMutableArray * parts = [self.name componentsSeparatedByCharactersInSet:NSCharacterSet.whitespaceCharacterSet].mutableCopy;
if(parts.count < 2) {
return self.name;
}
NSString * lastName = parts.lastObject;
[parts removeLastObject];
return [NSString stringWithFormat:@"%@, %@", lastName, [parts componentsJoinedByString:@" "]];
я могу сразу думать об одном случае, когда это приведет меня в заблуждение: суффиксы как «младший». Но я уверен, что есть много других. Есть ли хорошие ресурсы, объясняющие общие предостережения о присвоении имен или хорошие примеры кода для решения этой проблемы, которые я могу использовать для улучшения моей эвристики? Я использую Objective-C на Mac (если есть какой-то непонятный уголок фреймворка, который мог бы мне помочь), но я готов учиться на коде, написанном на любом языке.
Такого рода вопрос имеет beenaskedbefore, но большинство ответов либо сосредоточиться на механике расщепления строки, или превратятся в «дизайне вашей модели иначе». Я проектирую свою модель по-разному; Я просто хочу, чтобы компьютер делал для них большую часть работы моих пользователей.
Как я уже говорил, этот код в основном обрабатывает имена авторов и других авторов книг. Некоторые из конкретных последствий этого включают:
- Должно быть только одно имя в
name
, потому что я поддерживаю прикрепление нескольких авторов к книге. - Большинство названий не имеют названий, но профессиональные названия, такие как «Dr.», может появиться. В идеале они будут отброшены, а не рассматриваться как часть первого имени.
- Имена обычно бывают людей, но иногда могут быть из организаций. Я абсолютно готов рискнуть назвать имена организаций, чтобы улучшить управление именами пользователей.
- Я ожидаю, что в основном буду обращаться с европейскими именами, хотя обнаруживаю орфографию имени should not be difficult.
- Код не должен быть особенно чувствительным к языку пользователя.
Мне было бы легче оставить эту работу пользователю. К сожалению, это не является частью одноразового процесса регистрации пользователей или чего-то подобного; это то, что пользователь может делать пять или десять раз подряд, и тяжелый пользователь может делать это три или четыре раза в день. Это могло бы действительно использовать удобство. –
Я вижу. Как насчет противоположности? Я имею в виду, спросите имя подачи и выведите имя вместо этого, это, вероятно, будет проще. Я полагаю, что те тяжелые пользователи, которых вы упомянули, должны будут набирать любой из них в любом случае ... – clapas
Несколько причин. 1: В то время как будут некоторые тяжелые пользователи, также будет много случайных пользователей (по одной книге каждые несколько месяцев), кто будет более естественным называть имя. 2: Если пользователь не понимает, что означает «имя подачи», автозаполнение покажет их, даже если имя с автозаполнением неверно. 3: Имя записи содержит больше структурной информации, но имя фактически содержит больше информации об именах. Например, имя «Преподобный д-р Мартин Лютер Кинг-младший» имеет название подачи «King, Martin Luther, Jr.» - названия переводятся в переводе. –