6

人間の名前がたくさんあります。それらはすべて「西洋」の名前であり、アメリカの慣習/略語のみが必要です (たとえば、セニョールの Sr. ではなく Mr.)。残念ながら、私が物を送る相手は自分の名前を入力していないので、何と呼ばれたいか尋ねることができません. 各人の性別とフルネームは知っていますが、より具体的に解析したことはありません.

いくつかの例:

  1. ジョンスミス
  2. ジョン・スミス・ジュニア
  3. ジョン・スミス・ジュニア
  4. ジョン・スミス14世
  5. ジョン・スミス博士、Ph.D.

各名前の一部を解析できるようにしたいと思います。

name = Name.new("John Smith Jr.")
name.first_name # <= John
name.greeting   # <= Mr. Smith

「あいさつ」を探している場合 (おそらく最適な用語ではありません)、ここで必要なのは、1 ~ 4 の「Mr. Smith」です。5 なら、スミス博士がいいと思いますが、スミスさんに落ち着きます。

これには Ruby gem が理想的です。時間を非常に人間らしい方法で処理する Ruby の宝石である Chronic から、このような奇妙なものを求めるようになりました。「先週の火曜日」と正しく伝えることができ、適切な方法を考え出すことができます。コーナーケースの。

私は、プログラマーが名前について信じている虚偽で提示された問題のいくつかに対処しようとしています

4

6 に答える 6

7

あなたは西洋風の名前に限定されているので、いくつかのルールがあなたをそこに導くと思います:

  1. カンマが表示された場合は、一番左のカンマ以降をすべて削除します。
  2. 単語を最初から削除し続け、小文字に変換してピリオドを削除した後、それらはセットに属し、{ mr mrs miss ms rev dr prof }さらに考えられるものに属します。タイトルの「スコア」の表を使用して (たとえば[mr=1, mrs=1, rev=2, dr=3, prof=4]、好きなように並べ替えてください)、削除された最高スコアのタイトルを記録します。
  3. 単語がセットに属している間、{ jr phd }または値がおよそ 50 以下のローマ数字である間、最後から単語を削除し続けます (/[XVI]+/おそらく十分な正規表現です)。
  4. ステップ 2 でスコアが 0 以外のタイトルが 1 つ以上削除された場合は、スコアが最も高いタイトルを使用します。それ以外の場合は、「Mr.」を使用します。または「ミセス」指定された性別に従って。
  5. 姓として、最後の単語を使用します。

すべてのダブルバレル姓がハイフンを使用しているわけではないため、「John Baxter Smith」のような名前が正しく解析されることを保証することはできません。「バクスター・スミス」は苗字ですか?それとも「バクスター」はミドルネームですか?ミドル ネームは、ダブル バレルでハイフンなしの姓よりも比較的一般的であると想定しても問題ないと思います。つまり、デフォルトで最後の単語を姓として報告する方がよいということです。ただし、一般的な二重バレルの姓のリストをコンパイルして、これと照合することもできます.

于 2013-07-03T18:54:30.497 に答える
2

ルフトハンザのページを見てください。彼らは、どのような「称号」を使いたいか尋ねます。私はそのようなより良いアイデアを見たことがありません。

この場合、gem などを使用することはお勧めしません。英語/スペイン語/フランス語/.... 性別の違いがあるため、自分で発見しようとすると、成功することはできません。

お役に立てれば幸いです

于 2013-07-03T18:40:41.060 に答える
1

Ruby gem Name を試しました?

ほとんどの西洋の名前をうまく処理する必要があり、トリッキーなシナリオ用のいくつかの構成オプションが付属しています (複数の姓、リスト内の名前と名前の部分を区切るためにコンマを使用)。そうは言っても、これは決定論的パーサー (この文法を使用) であり、カバーしない場合もあります。

これがあなたの例です:

require('namae')

Namae.parse 'John Smith and John Smith, Jr. and John Smith Jr and John Smith XIV'
#=> [
  #<Name family="Smith" given="John">,
  #<Name family="Smith" given="John" suffix="Jr.">,
  #<Name family="Smith" given="John" suffix="Jr">,
  #<Name family="Smith" given="John" suffix="XIV">
]

医師の肩書きに苦労していますが、それは修正できる可能性があります。

于 2014-08-29T11:01:01.340 に答える