フルネームをファーストネームとラストネームに分割することは、名前が非常に複雑であるため、解決できない問題です。その結果、本への著者やその他の寄稿者を表す私のモデルには、フィールドname
とfilingName
フィールドの両方が含まれています。filingName
通常は「最後、最初」(欧米の名前の場合) になります。
ただし、ユーザーの利便性を考えて、ユーザーが通常の名前を入力するときに、アプリにファイル名を合理的に推測させたいと考えています。もちろん、推測が間違っていれば、ユーザーはファイリング名を編集できますが、私の推測が正しければ、時間を節約できます。現在、最後のスペースで区切られた「単語」が姓であり、コンマで前に移動していると単純に想定しています。
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:@" "]];
これが私を迷わせる 1 つのケースをすぐに思いつくことができます: "Jr" のようなサフィックスです。しかし、他にもたくさんいると確信しています。ヒューリスティックを改善するために使用できる、一般的な命名上の注意事項、またはこの問題に取り組むコードの良い例を説明する良いリソースはありますか? 私は Mac で Objective-C を使用しています (フレームワークのあいまいな部分が役に立ちそうな場合に備えて) が、どの言語で書かれたコードからでも学びたいと思っています。
この種の質問は以前 に尋ねられ ましたが、ほとんどの回答は、文字列を分割するメカニズムに焦点を当てているか、「モデルを別の方法で設計する」に発展しています。モデルを別の方法で設計しています。私は、ユーザーの作業のほとんどをコンピュータに任せたいと考えています。
前述したように、このコードは主に、書籍の著者やその他の寄稿者の名前を処理しています。その特定の影響のいくつかは次のとおりです。
name
1冊の本に複数の著者を添付することをサポートしているため、 には名前を 1 つだけ指定する必要があります。- ほとんどの名前には肩書きはありませんが、「博士」などの専門的な肩書きはありません。現れるかもしれません。理想的には、これらは破棄され、名の一部として扱われません。
- 通常、名前は人の名前になりますが、組織の名前になることもあります。個人名の取り扱いを改善するために、組織名を改変する危険を冒すことはまったく問題ありません。
- 名前の正書法を検出することは難しくないはずですが、主にヨーロッパの名前を扱うことになると思います。
- コードは、ユーザーのロケールに特に敏感であってはなりません。