2013-03-24 6 views
1

Разделение полного имени на имя и фамилию является неразрешимой проблемой, потому что 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.
  • Код не должен быть особенно чувствительным к языку пользователя.

ответ

0

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

Это похоже на более легкое решение IMHO.

+0

Мне было бы легче оставить эту работу пользователю. К сожалению, это не является частью одноразового процесса регистрации пользователей или чего-то подобного; это то, что пользователь может делать пять или десять раз подряд, и тяжелый пользователь может делать это три или четыре раза в день. Это могло бы действительно использовать удобство. –

+1

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

+0

Несколько причин. 1: В то время как будут некоторые тяжелые пользователи, также будет много случайных пользователей (по одной книге каждые несколько месяцев), кто будет более естественным называть имя. 2: Если пользователь не понимает, что означает «имя подачи», автозаполнение покажет их, даже если имя с автозаполнением неверно. 3: Имя записи содержит больше структурной информации, но имя фактически содержит больше информации об именах. Например, имя «Преподобный д-р Мартин Лютер Кинг-младший» имеет название подачи «King, Martin Luther, Jr.» - названия переводятся в переводе. –