1

フルネームをファーストネームとラストネームに分割することは、名前が非常に複雑であるため、解決できない問題です。その結果、本への著者やその他の寄稿者を表す私のモデルには、フィールドnamefilingNameフィールドの両方が含まれています。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 を使用しています (フレームワークのあいまいな部分が役に立ちそうな場合に備えて) が、どの言語で書かれたコードからでも学びたいと思っています。

この種の質問は以前 尋ねられ ましたが、ほとんどの回答は、文字列を分割するメカニズムに焦点を当てているか、「モデルを別の方法で設計する」に発展しています。モデルを別の方法で設計しています。私は、ユーザーの作業のほとんどをコンピュータに任せたいと考えています。

前述したように、このコードは主に、書籍の著者やその他の寄稿者の名前を処理しています。その特定の影響のいくつかは次のとおりです。

  • name1冊の本に複数の著者を添付することをサポートしているため、 には名前を 1 つだけ指定する必要があります。
  • ほとんどの名前には肩書きはありませんが、「博士」などの専門的な肩書きはありません。現れるかもしれません。理想的には、これらは破棄され、名の一部として扱われません。
  • 通常、名前は人の名前になりますが、組織の名前になることもあります。個人名の取り扱いを改善するために、組織名を改変する危険を冒すことはまったく問題ありません。
  • 名前の正書法を検出することは難しくないはずですが、主にヨーロッパの名前を扱うことになると思います。
  • コードは、ユーザーのロケールに特に敏感であってはなりません。
4

1 に答える 1

0

ソフトウェアシステムを構築するとき、多くの時間を費やす深刻な問題が常にあります。世界的な命名規則や規則がないため、これにとらわれることはありません。ユーザーにファイリング名を入力するように求めることは面倒ではないと思います

それは私見のより簡単な解決策のようです。

于 2013-03-24T11:28:56.307 に答える