アラブ系の名前の分割

このテンプレートでは、西洋式のアラブ系の名前をコンポーネントにパースする方法を示します。パーシング ルールに従って [名前] フィールド内の各トークンを分割し、それらを [Kunya][Ism][Laqab][Nasab]、および [Nisba] の 5 つのフィールドにコピーします。これらの出力フィールドは、アラブ系の名前を構成する 5 つの要素を表します。詳細については、ビジネス シナリオで説明します。

ビジネス シナリオ

ある銀行では、アラビア語を母語とする顧客に提供するカスタマー サービスをより充実させるために、アラブ系の氏名のしくみを理解しようと取り組んでいます。複数の顧客から、利用明細に記載された氏名の表記が正しくないと苦情が寄せられました。あなたが所属するマーケティング グループでは、顧客との連絡を密にするために、アラビア語を母語とする顧客を対象としたマーケティング キャンペーンと電話サポートの強化を進めています。

アラブ系の氏名表記を理解するために、インターネット上に資料を探したところ、次のサイトにアラブ系の名前について解説されていました。

アラブ系の氏名の表記規則は、Ism、Kunya、Nasab、Laqab、および Nisba という名前要素で構成されます。

  • Ism は、アラブ系のメインの名前であり、個人の "名" に相当します。
  • 多くのケースで、個人の最初に生まれた男児の名前を示す Kunya が Ism の代わりに使われます。
  • Nasab は、父系の血統を表す名前です。息子を意味する "イブン" または "ビン" または娘を意味する "ビント" という単語を使って、個人の血統を示します。
  • Laqab は、個人の特徴を表すために使用されます。例えば、"al-Rashid" は正直者、正しく導かれた者を意味し、"al-Jamil" は美しいことを意味します。
  • Nisba は、個人の職業、出身地、または一族 (部族、家系など) を表します。この名前は、数世代の家族に受け継がれます。アラブ系の名前要素のなかで、Nisba は西洋式の "姓" に最も近いものと言えるでしょう。例えば、"al-Filistin" はパレスティナ人を意味します。

以下のデータフローは、このビジネス シナリオの解決策を示しています。



このデータフロー テンプレートは Enterprise Designer で使用できます。[ファイル] > [新規作成] > [データフロー] > [テンプレートから作成] に移動し、[ParseArabicNames] を選択します。このデータフローでは、Data Normalization モジュールが必要です。

このデータフローでは、データをファイルから読み取り、Open Parser ステージで処理します。入力ファイルの各データ行に対し、このデータフローで以下の操作が行われます。

Read from File

このステージでは、パースする名前が記録されているファイルの名前、格納場所、およびレイアウトを識別します。ファイルには、男性と女性の両方の名前が含まれています。

Open Parser

このステージでは、ドメインエディタで作成されたカルチャー固有ドメイン グラマーを使うか、ドメインに依存しないグラマーを使うかを定義します。ドメインエディタで作成したカルチャー固有のパーシング グラマーは、カルチャーとドメインに関連付けられた、検証済みのパーシング グラマーです。Open Parser で作成したカルチャーに依存しないパーシング グラマーは、カルチャーとドメインに関連付けられていない、検証済みのパーシング グラマーです。

このテンプレートでは、パーシング グラマーはドメインに依存しないグラマーとして定義されています。

Open Parser ステージでは、次のようにコマンドと式が定義されたパーシング グラマーを使用します。

  • %Tokenize は、スペース文字 (\s) に設定されています。これは、Open Parser が入力フィールドをトークンに分割するときにスペース文字で区切ることを意味します。例えば、Abu Mohammed al-Rahim ibn Salamah という名前に含まれるトークンは、Abu、Mohammed、al-Rahim、ibn、Salamah の 5 つです。
  • %InputField は、[名前] フィールドから入力データを取得してパースするように設定されています。
  • %OutputFields は、パースしたデータを、[Kunya][Ism][Laqab][Nasab][Nisba] の 5 つのフィールドにコピーするように設定されています。
  • <root> 式には、アラブ系の名前のパターンが以下のように定義されています。
  • 0 または 1 つの Kunya が含まれる
  • 厳密に 1 つまたは 2 つの Ism が含まれる
  • 0 または 1 つの Laqab が含まれる
  • 0 または 1 つの Nasab が含まれる
  • 0 以上の Nisba が含まれる

ドメインを定義するルール変数では、必須の OutputFields コマンドで定義された出力フィールドと同じ名前を使う必要があります。

パーシング グラマーでは、正規表現と式の数量詞を組み合わせて使い、アラブ系の名前パターンを作成します。パーシング グラマーでは次の特殊な文字を使用します。

  • "?" 文字は、その位置に正規表現が 0 回または 1 回出現できることを意味します。
  • "*" 文字は、その位置に正規表現が 0 回以上出現できることを意味します。
  • ";" 文字は、ルールの終了を意味します。

[コマンド] タブでは、パーシング グラマーで使用できるその他の特殊な記号にマウス ポインターを重ねると、その記号の説明が表示されます。

デフォルトでは、数量詞は Greedy な動作を行います。Greedy な動作とは、式が、マッチを成立させつつ、できる限り多くのトークンを消費しようとすることを意味します。この動作は、'?' を付加することによって Reluctant なマッチングに、'+' を付加することによって Possessive なマッチングに変更することができます。Reluctant なマッチングとは、式が、マッチを成立させつつ、できる限り少なくトークンを消費しようとすることを意味します。Possessive なマッチングとは、マッチの成立が妨げられる場合であっても、できる限り多くのトークンを消費しようとすることを意味します。

パーシング グラマーをテストするには、[プレビュー] タブをクリックします。以下に示す名前を [名前] フィールドに入力し、[プレビュー] をクリックします。



また、他の有効または無効な名前を入力して、入力データがどのようにパースされるのかを確認することもできます。

トレース機能を使うと、最終的なパース結果やパーシング過程をグラフィカルな表示で確認できます。[トレース] 列のリンクをクリックして、そのデータ行の [トレース詳細] を表示します。

Write to File

このテンプレートには、1 つの Write to File が含まれます。入力フィールドだけでなく、出力ファイルにも [Kunya][Ism][Laqab][Nasab]および [Nisba] の各フィールドが含まれます。