電子メールアドレスの分割

このテンプレートでは、電子メール アドレスをコンポーネントにパースする方法を示します。パーシング ルールに従って [電子メール] フィールド内の各トークンを分割し、それらを [Local-Part][DomainName][DomainExtension] の 3 つのフィールドにコピーするように設定されています。Local-Part は、電子メール アドレスのドメイン名部分を表し、DomainName は電子メール アドレスのドメイン名を表します。DomainExtension は、電子メール アドレスのドメイン拡張子を表します。例えば、pb.com の場合、"pb" はドメイン名、"com" はドメイン拡張子です。

オープンなパーシング作業に役立つパブリック ドメイン情報の入手先として、インターネットはとても便利です。この例では、電子メールのフォーマット情報をインターネット上の複数のソースから取得し、テーブル管理ツールにインポートしてドメイン値のテーブルを作成しました。このテンプレートで実行するドメイン拡張子の操作は、この方法が非常に役立つことを具体的に示すものです。

また、このテンプレートを利用すると、テーブル管理ツールにロードしたテーブル データを使って、テーブル検索をパーシング作業の一環として効果的に実行する方法を習得できます。

ビジネス シナリオ

ある保険会社が、電子メールによるマーケティング キャンペーンを初めて実施するために準備しています。顧客の電子メール アドレスを格納したデータベースがあり、ここに収められた電子メール アドレスが有効な SMTP フォーマットになっていることを確認する必要があります。

このデータフローを作成する前に、テーブル管理ツールを使って有効なドメイン名拡張子のテーブルをロードして、検証プロセスの一環としてドメイン名拡張子を検索できるようにする必要があります。

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



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

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

ドメイン拡張子テーブルの作成

最初の作業として、テーブル管理ツールを使って、電子メール アドレスに含まれるドメイン拡張子が有効かどうかをチェックするために使う Open Parser テーブルを作成します。

  1. [ツール] メニューの [テーブル管理] を選択します。
  2. [タイプ] リストで [Open Parser] を選択します。
  3. [新規] をクリックします。
  4. [ユーザ定義テーブルの追加] ダイアログ ボックスで [テーブル名] フィールドに "EmailDomains" と入力し、[コピー元] リストで "None" が選択されていることを確認してから、[OK] をクリックします。
  5. [名前] リストに "EmailDomains" が表示されている状態で、[インポート] をクリックします。
  6. [インポート] ダイアログ ボックスで [参照] をクリックし、テーブルのソース ファイルを選択します。デフォルトの場所は次のとおりです。<drive>:\Program Files\Pitney Bowes\Spectrum\server\modules\coretemplates\data\ Email_Domains.txtテーブル管理ツールには、インポート ファイルに含まれるテキストがプレビュー表示されます。
  7. [OK] をクリックします。テーブル管理ツールにソース ファイルがインポートされ、インターネット ドメイン拡張子のリストが表示されます。
  8. [閉じる] をクリックします。EmailDomains テーブルが作成されます。次に、ParseEmail テンプレートを使ってデータフローを作成します。

Read from File

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

Open Parser

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

  • %Tokenize は、None に設定されています。TokenizeNone に設定する場合、パーシング グラマー ルールは、ルール定義内に空白などのトークン区切り文字を含む必要があります。
  • %InputField は、[Email_Address] フィールドから入力データを取得してパースするように設定されています。
  • %OutputFields は、パースしたデータを [Local-Part][DomainName][DomainExtension] の 3 つのフィールドにコピーするように設定されています。
  • root 式は、パースするトークンのパターンを定義します。
<root> = <Local-Part>"@"<DomainName>"."<DomainExtension>;

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

  • パーシング グラマーの残りの部分では、各ルール変数を式で定義します。
<Local-Part> = (<alphanum> ".")* <alphanum> | (<alphanum> "_")* <alphanum> ;
<DomainName> = (<alphanum> ".")? <alphanum>;
<DomainExtension> = @Table("EmailDomains")* "."? @Table("EmailDomains");
<alphanum>=@RegEx("[A-Za-z0-9]+");

<Local-Part> 変数は、<alphanum> 変数、ピリオド文字、および他の <alphanum> 変数をを含む文字列として定義されます。

<alphanum> 変数定義は A ~ Z、a ~ z、および 0 ~ 9 の文字からなる文字列を意味する正規表現です。<alphanum> 変数は、このパーシング グラマーの全体を通して使用され、パーシング グラマーの最後の行で定義されます。

パーシング グラマーでは、正規表現とリテラル文字を組み合わせて使い、電子メール アドレスのパターンを作成します。このパーシング グラマーでは、二重引用符で囲まれた文字は、リテラル文字、検索に使うテーブルの名前、または正規表現として扱われます。パーシング グラマーでは次の特殊な文字を使用します。

  • "+" 文字は、その位置に正規表現が 1 回以上出現できることを意味します。
  • "?" 文字は、その位置に正規表現が 0 回または 1 回出現できることを意味します。
  • "|" 文字は、変数に OR 条件が適用されることを意味します。
  • ";" 文字は、ルールの終了を意味します。

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

パーシング グラマーをテストするには、[プレビュー] タブをクリックします。以下に示した電子メール アドレスを [電子メール アドレス] フィールドに入力してから、[プレビュー] をクリックします。



また、他の電子メール アドレスを入力して、入力データがどのようにパースされるのかを確認することもできます。

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

[トレース詳細] にマッチング結果が表示されます。マッチしたトークンをパーシング グラマーで各式と比較します。



また、トレース機能は、非マッチ結果を参照する目的にも使えます。次の図は、非マッチ結果を示しています。マッチしたトークンをパーシング グラマーで各式と比較します。この入力データ (Abc.example.com) がマッチしなかった理由は、マッチすると認識されるために必要なトークンが揃っていないからです。つまり、Local- Part トークンと Domain トークンを区切る @ 文字が欠けています。



Write to File

このテンプレートには、1 つの Write to File が含まれます。入力フィールドだけでなく、出力ファイルにも [Local-Part][DomainName][DomainExtension][IsParsed][ParserScore] の各フィールドがあります。