米国の電話番号を分割

このテンプレートでは、米国の電話番号をコンポーネントにパースする方法を示します。パーシング ルールに従って [PhoneNumber] フィールド内の各トークンを分割し、それらを [CountryCode][AreaCode][Exchange][Number] の 4 つのフィールドにコピーします。

ビジネス シナリオ

サービス提供エリアを広げつつある、あるワイヤレス サービス プロバイダは、ユーザからかかってくる電話番号データを分析するプロジェクトを発足しました。

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



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

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

Read from File

このステージでは、パースする電話番号が記録されているファイルの名前、格納場所、およびレイアウトを識別します。

Open Parser

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

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

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

  • %Tokenize は、None に設定されています。TokenizeNone に設定する場合、パーシング グラマー ルールは、ルール定義内に空白などのトークン区切り文字を含む必要があります。
  • %InputField は、[PhoneNumber] フィールドから入力データを取得してパースするように設定されています。
  • %OutputFields は、パースしたデータを [CountryCode][AreaCode][Exchange][Number] の 4 つのフィールドにコピーするように設定されています。
  • <root> 式では、パースするトークンのパターンが定義され、OR 文 (|) が使用されます。以下のような電話番号が有効です。
  • [CountryCode][AreaCode][Exchange]、および [Number] または
  • [AreaCode][Exchange]、および [Number] または
  • [Exchange] および [Number]

パーシング グラマーでは、正規表現とリテラル文字を組み合わせて使い、電話番号のパターンを作成します。このパーシング グラマーでは、二重引用符に囲まれた文字は、リテラル文字列または正規表現として扱われます。

<root> コマンドで使われるプラス記号 (+) は、引用符で囲まれているのでリテラル文字として定義されます。一重引用符または二重引用符は、リテラル文字を示すために使用できます。プラス記号を引用符で囲まずに使うと、その前にある式が 1 回以上繰り返して出現できるという意味になります。

電話番号ドメイン ルールは、以下の文字パターンにマッチするように定義されています。

  • "+" 文字の 0 回または 1 回の出現。
  • CountryCode ルール。これは 0 ~ 9 の 1 文字を意味します。
  • 左丸括弧、ハイフン、またはスペース文字の 0 回または 1 回の出現。これらの文字のいずれかが 2 つ並んで出現すると、非マッチとなります。つまり、無効な電話番号と判定されます。
  • AreaCode ルール。これは 0 ~ 9 の数字が 3 つ並ぶことを意味します。
  • 左丸括弧、ハイフン、またはスペース文字の 0 回または 1 回の出現。これらの文字のいずれかが 2 つ並んで出現すると、非マッチとなります。つまり、無効な電話番号と判定されます。
  • Exchange ルール。これは 0 ~ 9 の数字が 3 つ並ぶことを意味します。
  • 左丸括弧、ハイフン、またはスペース文字の 0 回または 1 回の出現。これらの文字のいずれかが 2 つ並んで出現すると、非マッチとなります。つまり、無効な電話番号と判定されます。
  • Number ルール。これは 0 ~ 9 の数字が 4 つ並ぶことを意味します。

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

正規表現と式の数量詞

パーシング グラマーでは、正規表現と式の数量詞を組み合わせて使い、米国の電話番号のパターンを作成します。パーシング グラマーでは次の特殊な文字を使用します。

  • "?" 文字は、その位置に正規表現が 0 回または 1 回出現できることを意味します。
  • (|) 文字は、OR 条件を示します。
  • ";" 文字は、ルールの終了を意味します。

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

[プレビュー] タブの使用

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



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

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

Write to File

このテンプレートには、1 つの Write to File が含まれます。入力フィールドだけでなく、出力ファイルにも [CountryCode][AreaCode][Exchange][Number] の各フィールドが含まれます。