(57)【要約】【課題】ルールベースフォーマッティングを使用したデータクレンジングのためのコンピュータ実行方法を提供する。【解決手段】方法は、第１入力データ及び第２入力データをトークン化及び構文解析するステップを含む。方法は、フォーマッティングルールにおける第１フォーマッティングルールコンポーネントが、前記第１トークン化入力データに対する第１有効インデックスである場合、第１出力データに第１トークンを含ませるステップをさらに含む。方法は、前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、前記第２トークン化入力データに対する第２有効インデックスである場合、第２出力データに第２トークンを含ませるステップをさらに含む。方法は、前記フォーマッティングルールに従って、前記第１出力データ及び前記第２出力データをフォーマットするステップをさらに含む。【選択図】図５
2010244539.tif 000002
【特許請求の範囲】
【請求項１】
ルールベースフォーマッティングを使用したデータクレンジングのコンピュータ実行方法であって、
第１データソースから第１入力データ、及び、第２データソースから第２入力データを取得するステップと、
ハードウェアサーバによって実施されるルールベース構文解析モジュールによって、所定の構文解析ルールを使用することで、前記第１入力データ及び前記第２入力データを構文解析するステップと、
フォーマッティングルールを取得するステップと、
前記フォーマッティングルールにおける第１フォーマッティングルールコンポーネントが、前記第１トークン化入力データに対する第１有効インデックスである場合、第１出力データに第１トークンを含ませるステップと、
前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、文字列リテラルである場合、前記第１出力データに第１文字列リテラルを含ませるステップと、
前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、前記第２トークン化入力データに対する第２有効インデックスである場合、第２出力データに第２トークンを含ませるステップと、
前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、文字列リテラルである場合、前記第２出力データに第２文字列リテラルを含ませるステップと、
前記ハードウェアサーバによって実施されるフォーマッティングモジュールによって、前記フォーマッティングルールに従って、前記第１出力データ及び前記第２出力データをフォーマットするステップと、
フォーマットされた前記第１出力データ及び前記第２出力データを出力するステップと
を具備し、
前記第１入力データはデータディクショナリに従ってトークン化され、前記第２入力データは前記データディクショナリに従ってトークン化され、
前記フォーマッティングルールは１又は複数のフォーマッティングルールコンポーネントを含み、
前記第１トークンは前記第１有効インデックスに関連付けられ、
前記第２トークンは前記第２有効インデックスに関連付けられることを特徴とする方法。
【請求項２】
出力された前記第１出力データ及び前記第２出力データを、ターゲットデータソースにおいて、格納するステップをさらに具備することを特徴とする請求項１に記載の方法。
【請求項３】
前記第１フォーマッティングルールコンポーネントの直接左に、第２フォーマッティングルールコンポーネントに関連付けられたトークンが存在する場合、
前記第１文字列リテラルは、前記第１出力データに含まれることを特徴とする請求項１に記載の方法。
【請求項４】
前記第１フォーマッティングルールコンポーネントの直接右に、第２フォーマッティングルールコンポーネントに関連付けられたトークンが存在する場合、
前記第１文字列リテラルは、前記第１出力データに含まれることを特徴とする請求項１に記載の方法。
【請求項５】
前記第１フォーマッティングルールコンポーネントの直接左に、第２フォーマッティングルールコンポーネントに関連付けられた第１トークン、及び、
前記第１フォーマッティングルールコンポーネントの直接左に、第３フォーマッティングルールコンポーネントに関連付けられた第２トークンが共に存在する場合、
前記第１文字列リテラルは、前記第１出力データに含まれることを特徴とする請求項１に記載の方法。
【請求項６】
前記第２フォーマッティングルールコンポーネントは、左向き条件フォーマットオペレータに対応し、かつ、
前記第３フォーマッティングルールコンポーネントは、右向き条件フォーマットオペレータに対応することを特徴とする請求項５に記載の方法。
【請求項７】
前記第１出力データに含まれた第１トークンはインデックスに関連付けられ、
前記第１出力データに含まれた第２トークンは前記インデックスに関連付けられることを特徴とする請求項１に記載の方法。
【請求項８】
前記第１出力データに含まれた前記第１トークンと、前記第１出力データに含まれた前記第２トークンとは、所定の文字列によって分離されることを特徴とする請求項７に記載の方法。
【請求項９】
ルールベースフォーマッティングを使用したデータクレンジングの方法を実行させるように、コンピュータシステムを制御するための命令を含む、コンピュータ読み取り可能な媒体であって、
前記方法は、
第１入力データ、及び、第２入力データを取得するステップと、
所定の構文解析ルールを使用することで、前記第１入力データ及び前記第２入力データを構文解析するステップと、
フォーマッティングルールを取得するステップと、
前記フォーマッティングルールにおける第１フォーマッティングルールコンポーネントが、前記第１トークン化入力データに対する第１有効インデックスである場合、第１出力データに第１トークンを含ませるステップと、
前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、文字列リテラルである場合、前記第１出力データに第１文字列リテラルを含ませるステップと、
前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、前記第２トークン化入力データに対する第２有効インデックスである場合、第２出力データに第２トークンを含ませるステップと、
前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、文字列リテラルである場合、前記第２出力データに第２文字列リテラルを含ませるステップと、
前記フォーマッティングルールに従って、前記第１出力データ及び前記第２出力データをフォーマットするステップと
を具備し、
前記第１入力データはデータディクショナリに従ってトークン化され、前記第２入力データは前記データディクショナリに従ってトークン化され、
前記フォーマッティングルールは、１又は複数のフォーマッティングルールコンポーネントを含み、
前記第１トークンは前記第１有効インデックスに関連付けられ、
前記第２トークンは前記第２有効インデックスに関連付けられることを特徴とするコンピュータ読み取り可能な媒体。
【請求項１０】
前記第１トークン化入力データは、第１データソースから取得され、かつ、
前記第２トークン化入力データは、第２データソースから取得されることを特徴とする請求項９に記載のコンピュータ読み取り可能な媒体。
【請求項１１】
ターゲットデータソースに、前記第１出力データを格納するステップと、
前記ターゲットデータソースに、前記第２出力データを格納するステップとをさらに具備することを特徴とする請求項９に記載のコンピュータ読み取り可能な媒体。
【請求項１２】
前記第１フォーマッティングルールコンポーネントの直接左に、第２フォーマッティングルールコンポーネントに関連付けられたトークンが存在する場合、
前記第１文字列リテラルは、前記第１出力データに含まれることを特徴とする請求項９に記載のコンピュータ読み取り可能な媒体。
【請求項１３】
前記第１フォーマッティングルールコンポーネントの直接右に、第２フォーマッティングルールコンポーネントに関連付けられたトークンが存在する場合、
前記第１文字列リテラルは、前記第１出力データに含まれることを特徴とする請求項９に記載のコンピュータ読み取り可能な媒体。
【請求項１４】
前記第１フォーマッティングルールコンポーネントの直接左に、第２フォーマッティングルールコンポーネントに関連付けられた第１トークン、及び、
前記第１フォーマッティングルールコンポーネントの直接左に、第３フォーマッティングルールコンポーネントに関連付けられた第２トークンが共に存在する場合、
前記第１文字列リテラルは、前記第１出力データに含まれることを特徴とする請求項９に記載のコンピュータ読み取り可能な媒体
【請求項１５】
前記第１出力データに含まれた第１トークンはインデックスに関連付けられ、
前記第１出力データに含まれた第２トークンは前記インデックスに関連付けられることを特徴とする請求項９に記載のコンピュータ読み取り可能な媒体。
【請求項１６】
前記第１出力データに含まれた前記第１トークンと、前記第１出力データに含まれた前記第２トークンとは、所定の文字列によって分離されることを特徴とする請求項１５に記載のコンピュータ読み取り可能な媒体。
【請求項１７】
ルールベースフォーマッティングを使用したデータクレンジングのためのシステムであって、
前記システムを実施するハードウェアサーバと、
前記ハードウェアサーバによって実施された、データディクショナリに従って第１入力データをトークン化し、かつ、前記データディクショナリに従って第２入力データをトークン化する、トークン化モジュールと、
前記ハードウェアサーバによって実施された、所定の構文解析ルールを使用することで、前記第１入力データ、及び、前記第２トークン化入力データを構文解析する、ルールベース構文解析モジュールと、
前記ハードウェアサーバによって実施された、前記第１トークン化入力データ、及び、前記第２トークン化入力データを受信する、フォーマッティングモジュールと、
前記第１入力データを格納する、第１データソースと、
前記第２入力データを格納する、第２データソースと、
前記第１出力データ及び前記第２出力データを格納する、第３データソースと
を備え、
フォーマッティングルールにおける第１フォーマッティングコンポーネントが、前記第１トークン化入力データに対する第１有効インデックスである場合、第１トークンは第１出力データに含まれ、
前記第１トークンは、前記第１有効インデックスに関連付けられ、
前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、文字列リテラルである場合、第１文字列リテラルは前記第１出力データに含まれ、
前記フォーマッティングルールにおける前記第１フォーマッティングコンポーネントが、前記第２トークン化入力データに対する第２有効インデックスである場合、第２トークンは第２出力データに含まれ、
前記第２トークンは、前記第２有効インデックスに関連付けられ、
前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、文字列リテラルである場合、第２文字列リテラルは前記第２出力データに含まれ、かつ、
前記第１出力データ及び前記第２出力データは、前記フォーマッティングルールに従ってフォーマットされることを特徴とするシステム。
【請求項１８】
前記フォーマッティングルール、及び、前記所定の構文解析ルールを格納する、ルールリポジトリをさらに備えることを特徴とする請求項１７に記載のシステム。
【請求項１９】
前記フォーマッティングルール、及び、前記所定の構文解析ルールのうちの少なくとも１つを格納する、メモリをさらに備えることを特徴とする請求項１８に記載のシステム。
【請求項２０】
前記データディクショナリを格納する、データディクショナリリポジトリをさらに備えることを特徴とする請求項１７に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データクレンジング（data cleansing）に関し、かつ、特に、ルールベースフォーマッティング（rule based formatting）を使用したデータクレンジングのシステム及び方法に関する。
【０００２】
抽出、変換、およびロード（ETL）は、データベースの管理の一部として実行されるいくつかのプロセスである。所望のデータのサブセットは、抽出コンポーネントの一部として、様々なデータソースから抽出される。変換コンポーネントは、抽出されたデータを適した状態に変換する。最終的に、ETLのロードコンポーネントは、例えば、別のデータベース、データ・マート、またはデータウェアハウスのようなターゲットデータソースに、変換されたデータを転送するステップを含んでいる。したがって、ETLによって、様々なデータソースから抽出されるデータを、一部の望ましいフォーマットに変換し、かつ、別のデータソースに転送することができる。
【０００３】
データクレンジングは、ETLの変換コンポーネントで実行されるプロセスである。データクレンジングは、間違ったデータの検出（その場合は、修正されるか、又は除去される）と、データのフォーマッティングとを含んでいる。そのうえ、データの検出は、一部の所定のルールに従って、データをトークン化し、かつ、データを構文解析する（parsing）ことによって達成される。データを構文解析する1つの方法は、ルール（即ち、ルールベース構文解析）を使用することである。出力データをフォーマットするとき、どのようにトークンが配列されるか、又は、どんな文字列がトークンを区切るかを制御するのが望ましい。したがって、データをトークン化し、かつ、構文解析することが望まれる。しかしながら、データを構文解析するのにルールベース構文解析方法を使用するとき、どのように構文解析されるコンポーネントが配列されるか、又は、どんな文字列が構文解析されるコンポーネントを区切るかを制御するのは難しい。
【０００４】
したがって、ルールベース構文解析が使用されるとき、出力データのフォーマッティングを制御することができる改良されたデータクレンジングが必要である。本発明は、ルールベースフォーマッティングを使用したデータクレンジングのシステム及び方法を提供することによって、これら及び他の問題を解決する。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明の態様は、出力データのフォーマッティングの制御を可能にすることによって、データクレンジングを改良する。１態様では、本発明は、ルールベースフォーマッティングを使用したデータクレンジングのためのコンピュータ実行方法を含んでいる。前記方法は、第１入力データ及び第２入力データを取得するステップを含み、前記第１入力データはデータディクショナリに従ってトークン化され、前記第２入力データは前記データディクショナリに従ってトークン化される。前記方法は、所定の構文解析ルールを使用することで、前記第１入力データ及び前記第２入力データを構文解析するステップをさらに含んでいる。前記方法は、フォーマッティングルールを取得するステップをさらに含み、前記フォーマッティングルールは１又は複数のフォーマッティングルールコンポーネントを含んでいる。前記方法は、前記フォーマッティングルールにおける第１フォーマッティングルールコンポーネントが、前記第１トークン化入力データに対する第１有効インデックスである場合、第１出力データに第１トークンを含ませるステップと、前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、文字列リテラルである場合、前記第１出力データに第１文字列リテラルを含ませるステップとをさらに含み、前記第１トークンは前記第１有効インデックスに関連付けられている。前記方法は、前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、前記第２トークン化入力データに対する第２有効インデックスである場合、第２出力データに第２トークンを含ませるステップと、前記フォーマッティングルールにおける前記第１フォーマッティングルールコンポーネントが、文字列リテラルである場合、前記第２出力データに第２文字列リテラルを含ませるステップとをにさらに含み、前記第２トークンは前記第２有効インデックスに関連付けられている。前記方法は、前記フォーマッティングルールに従って、前記第１出力データ及び前記第２出力データをフォーマットするステップをさらに含んでいる。
【０００６】
以下の詳細な説明及び添付図面は、本発明の本質および利点についてより良い理解をもたらす。
【図面の簡単な説明】
【０００７】
【図１Ａ】本発明の１実施例に従って、出力データをフォーマットする方法のフローチャートを図示している。
【図１Ｂ】本発明の１実施例に従って、出力データにトークンを条件付きで含むステップに対するプロセスの例を示しているフローチャートを図示している。
【図２Ａ】本発明の１実施例に従って、データディクショナリの例のエントリを図示している。
【図２Ｂ】本発明の１実施例に従って、例の構文解析ルール及びフォーマッティングルールを図示している。
【図３】本発明の１実施例に従って、例の入出力データの表を図示している。
【図４】本発明の１実施例に従って、離散的なフィールド入力フォーマッティングの例を図示している。
【図５】本発明の１実施例によるシステムを図示するブロック図である。
【図６】本発明の実施例を実行するための例のコンピュータシステム及びネットワークのブロック図である。
【発明を実施するための形態】
【０００８】
本明細書に説明されているのは、ルールベースフォーマッティングを使用したデータクレンジングのための方法である。以下の記述では、説明のため、多数の例及び特定の詳細が、本発明を完全に理解するために説明される。しかしながら、特許請求の範囲で定義される本発明は、これらの例だけの一部又は全ての特徴、又は、以下で説明される他の特徴を組み合わせて含んでもよく、かつ、さらに、本明細書に説明された特徴及び概念の変形例及び均等物を含んでもよいことが当業者には明白である。
【０００９】
図１Ａは、本発明の１実施例に従って、出力データをフォーマットする方法のフローチャートを図示している。方法は、ハードウェアシステム上で実行される１又は複数のコンピュータプログラムとして実施してもよい（その他の詳細に関しては図５を参照）。そのうえ、図１Ａの方法によって、どのようにフォーマットされるかに拘わらず、入力データを処理し、かつ、標準化フォーマットで柔軟に出力することができる。
【００１０】
ボックス101では、データはデータソースから取得される。データソースに格納されたデータは、種々の異なった値を有し、かつ、様々な情報の断片を含んでもよい。データの意味は、どのようにデータがデータのユーザによって定義されるかに依存してもよい。例えば、データソースは、［LOC 334 75 BEANS G-VG］の値で、農業に関する１つのデータを格納してもよく、建物75のプラント#334が“非常に良好”の品質レベルの豆を加工したことを意味するように定義してもよい。その結果、ユーザが表すためにデータを定義することに従って、１つのデータは様々な値をとることができる。ある実施例では、トークン化され、かつ、構文解析されたデータは１又は複数のデータソースから取得してもよい。
【００１１】
さらに、データはボックス101でトークン化される。トークンは、ディクショナリによって分類された、極めて小さいデータであってもよい。また、トークンは、それぞれの構文解析されたコンテキストのためのトークンテキストの標準版を含んでもよい（トークンが含まれる）。トークンの標準版及びコンテキストはユーザによって定義してもよい。その上、トークンはデータの字句解析の結果であってもよい。データは、選択された分割ストラテジ（breaking strategy）に基づいてデータをセグメント（即ち、トークン）に分割すること、及び、どのようにそれらがデータディクショナリによって分類されるかによって、トークン化してもよい。データディクショナリによる分類はユーザによって定義してもよい。分割ストラテジは、例えば、空白での分割、及び、句読点での分割を含んでいるが、これに限定されない。分割ストラテジはユーザによって指定してもよい（例えば、ユーザが分割キーを指定する）。上記した例に関して続けると（［LOC 334 75 BEANS G-VG］のデータ値）、適用される分割ストラテジが空白で分割することである場合、結果として生じるトークンは、LOCと、334と、75と、BEANSと、G-VGとであってもよい。
【００１２】
ボックス102では、データは、１又は複数の構文解析ルールを使用することで構文解析される。構文解析ルール（ユーザによって定義される）は、データディクショナリで定義された分類のパターンを指定して（例えば、トークン）、認識する（即ち、マッチ）ように定義してもよい。その結果、トークンの分類のうちの1つが構文解析ルールにおける指定された分類パターンの正しい条件を満たすとき、マッチが生じてもよい。さらに、トークン化されたデータが構文解析ルールを満たすとき、パーズ（parse）が結果的に生じてもよい（即ち、トークン化されたデータは、構文解析ルールにおける指定されたパターンの分類条件のすべてにマッチする）。したがって、データ（即ち、トークン）を構文解析するのは、データが予期されたフォームであるのを確実にする方法であってもよく、かつ、予期されたフォームは、構文解析ルールの定義（ユーザによって定義される）に基づいてもよい。ある実施例では、１又は複数の構文解析ルールをルールファイルに含んでもよい。
【００１３】
結果として生じたパーズのトークンは、ルールのフォーマット構文においてインデックスを使用することによって参照される。インデックスは、左から右にインデックス化された構文解析ルールの特定のコンポーネントを示してもよい。それに従って、所定のトークン化されたデータに対して、インデックスは、マッチしたトークン（構文解析ルールの特定のコンポーネントに関連付けられる）を参照してもよい。例えば、構文解析ルールが、２つの数及びもう２つの文字列が続いた文字列になるように定義された場合、上記の例（［LOC 334 75 BEANS G-VG］のデータ）のためのインデックスは、LOCのための1と、334のための2と、75のための3と、BEANSのための4と、G-VGのための5とであってもよい。
【００１４】
一部の実施例では、構文解析ルールは、*オペレータを使用して、１又は複数のトークン（特定のトークンの分類にマッチする）をマッチさせる。*オペレータを使用するとき、未知の数のマッチが存在するので、１又は複数のトークン（ルールの特定のパターン部分にマッチする）を個別にインデックス化することができない。その結果、１又は複数のトークン（ルールの特定のパターン部分にマッチする）は、1つのインデックスを有してもよい。例えば、構文解析ルールパターンが、１又は複数の数（即ち、*オペレータを使用する）及びもう２つの文字列が続いた文字列になるように定義された場合、例の［LOC 334 75 BEANS G-VG］データのためのインデックスは、LOCのための1と、334及び75のための2と、BEANSのための3と、G-VGのための4とであってもよい。本発明の他の実施例では、［ON * “何らかの文字列”］オペレータ（何らかの文字列は１つの文字列である）を使用して、何が１又は複数のトークン（特定の分類にマッチする）の間に挿入されるかを制御してもよい。例に関して続けると、１又は複数のトークン（数にマッチする）に対して実行された［ON* “”］オペレータが、33475の値を有するインデックス２を結果として生じてもよい（空の文字列がオペレータで指定されたので）。それに従って、［ON* “X”］オペレータが代わりに実行される場合、インデックス２は［334X75］の値を有してもよい。したがって、［ON * “何らかの文字列”］オペレータを使用して、存在する場合、どんな文字列が１又は複数のトークン（特定のルールパターン部分にマッチする）を区切るかを制御してもよい。
【００１５】
本発明のある実施例では、構文解析ルールは、“?”オペレータを使用して、特定のインデックスが任意であることを示してもよい。即ち、適用された“?”オペレータを有する特定のインデックスが、それに割り当てられたトークンを有していない場合、パーズ（即ち、構文解析ルールを満たすトークン化されたデータ）がさらに発生してもよい。例えば、構文解析ルールは、２つの数及び２つの文字列が続いた、任意の文字列（即ち、“?”オペレータを使用する）であってもよい。上記の例の［LOC 334 75 BEANS G-VG］を使用すれば、LOC、334、75、BEANS、およびG-VGの結果として生じるトークン化されたデータが、この構文解析ルールのパーズであってもよい。同様に、［334 75 BEANS G-VG］の例のバリエーションについて、334、75、BEANS、およびG-VGの結果として生じるトークン化されたデータも、第１文字列が任意であるので、この構文解析ルールのパーズであってもよい。
【００１６】
ボックス103では、フォーマッティングルールが取得される。フォーマッティングルールは、どのようにマッチするトークンインデックスが配列されるか、存在する場合、どんな文字列がインデックスを区切るのに使用されるか、及び、パーズのどの部分が出力データに含まれるかを定義してもよい。フォーマッティングルールは１又は複数のフォーマッティングルールコンポーネントを含んでもよい。１実施例では、フォーマッティングルールコンポーネントは、インデックスか、又は、文字列リテラル（string literal）であってもよい。文字列リテラルは二重引用符で囲んでもよい。例のフォーマッティングルールは、
【００１７】
【数１】
2010244539.tif 000003
【００１８】
である（第１フォーマッティングルールコンポーネントは文字列リテラルであり（即ち、“|”）、第２フォーマッティングルールコンポーネントはインデックスであり（即ち、3）、かつ、第３フォーマッティングルールコンポーネントは文字列リテラルである（即ち“:”）など）。フォーマッティングルールコンポーネントがインデックスである場合、フォーマッティングルールコンポーネントは、ボックス104に従って処理してもよい。フォーマッティングルールコンポーネントが文字列リテラルである場合、フォーマッティングルールコンポーネントは、ボックス105に従って処理してもよい。
【００１９】
ボックス104では、フォーマッティングルールコンポーネントがトークン化データに対する有効インデックスである場合、トークンは出力データに含まれる。トークン化データに対するインデックスが有効インデックスであってもよい（インデックスが構文解析ルールで指定される場合）。例えば、５つの連続文字列になるように定義される構文解析ルールは、５つの有効なインデックスを有してもよい（例えば、1−5）。この場合、６のインデックスは有効インデックスではなく、その結果、出力データに含まれない（構文解析ルールが５つの連続文字列（即ち、トークン）にマッチするように定義されるので）（図１Ｂに関連してボックス104の詳細が以下に提供される）。
【００２０】
ボックス105では、フォーマッティングルールコンポーネントが文字列リテラルである場合、文字列リテラルは出力データに含まれる。上記したように、文字列リテラルは二重引用符で囲んでもよい。
【００２１】
図１Ｂは、本発明の１実施例に従って、図１Ａのボックス104のさらに詳細を示したフローチャートを図示している。方法は、ハードウェアシステム上で実行される１又は複数のコンピュータプログラムとして実施してもよい（より詳細に関して図５を参照）。文字列リテラルを囲むトークンのうちの１又は両方がパーズで存在する場合、ユーザが文字列リテラルを含めることを望むケースがある。構文解析ルールがルールに任意のコンポーネントを有するとき（即ち、“?”オペレータを使用する）、これらのケースが起きる。これを扱うため、２つの条件フォーマットオペレータを使用して、文字列リテラルがパーズに含まれるケースを示してもよい。左向き条件フォーマットオペレータ“<”（“<”オペレータとも呼ばれる）は、左側が要求されることを示してもよい。右向き条件フォーマットオペレータ“>”（“>”オペレータとも呼ばれる）は、右側が要求されることを示してもよい。それに従って、オペレータは４つの潜在的条件を生成してもよい。これらは、図１Ｂに示された、４つの処理オペレーションのように扱われる（順不同に発生する）。
【００２２】
ボックス111では、文字列リテラルは出力データに含まれる。この条件は、構文解析ルールが“<”及び“>”オペレータを含んでいないときに発生してもよい。例えば、フォーマッティングルールは以下のように定義してもよい。
1 +“何らかの文字列”+2。
“<”及び“>”オペレータがフォーマッティングルールに含まれていないので、“何らかの文字列”の文字列リテラルは出力データに含まれる。
【００２３】
ボックス112では、“<”オペレータ（即ち、左向き条件フォーマットオペレータ）の直接左にトークンが存在する場合、文字列リテラルは出力データに含まれる。例えば、フォーマッティングルールは、以下のように定義してもよい。
1+<“何らかの文字列”+2
したがって、インデックス1（即ち、“<”オペレータの直接左のトークンに対するインデックス）が存在する場合、“何らかの文字列”は出力データに含まれる。構文解析ルールが、インデックス1が任意であることを（即ち、“?”オペレータを使用する）示し、かつ、特定のトークン化されたデータがインデックス1に割り当てられたトークンを有していない場合、“何らかの文字列”は出力データに含まれない。
【００２４】
ボックス113では、“>”オペレータ（即ち、右向き条件フォーマットオペレータ）の直接右にトークンが存在している場合、文字列リテラルは出力データに含まれる。例えば、フォーマッティングルールは、以下のように定義してもよい。
1+“何らかの文字列”>+2
したがって、インデックス2（即ち、“>”オペレータの直接右のトークンに対するインデックス）が存在する場合、“何らかの文字列”は出力データに含まれる。構文解析ルールが、インデックス2が任意であることを（即ち、“?”オペレータを使用する）示し、かつ、特定のトークン化されたデータがインデックス2に割り当てられたトークンを有していない場合、“何らかの文字列”は出力データに含まれない。
【００２５】
ボックス114では、“<”オペレータの直接左のトークン、及び、“>”オペレータの直接右のトークンが共に存在している場合、文字列リテラルは出力データに含まれる。例えば、フォーマッティングルールは、以下のように定義してもよい。
1+<“何らかの文字列”>+2
したがって、インデックス1（即ち、“<”オペレータの直接左右のトークンに対するインデックス）、及び、インデックス2（即ち、“>”オペレータの直接右のトークンに対するインデックス）が共に存在している場合、“何らかの文字列”は出力データに含まれる。構文解析ルールが、インデックス1及びインデックス2の両方が任意であることを（即ち、“?”オペレータを使用する）示し、かつ、特定のトークン化されたデータがインデックス1及びインデックス2に割り当てられたトークンを有していない場合、“何らかの文字列”は出力データに含まれない。
【００２６】
実行例
【００２７】
以下は、本発明の１実施例による実行例の詳細な説明である。実行例は、ハードウェアシステム上で実行される１又は複数のコンピュータプログラムとして実施してもよい（より詳細に関して図5を参照）。その上、実行例は、上で説明された図１Ａの方法及び図１Ｂの方法のすべて又は一部を実施してもよい。この例では、入力データが数個のプラント（農作物を加工する）からの生産情報を表し、各プラントは加工情報を記録するために異なった方法を有し、かつ、マスターデータウェアハウスのための単一の表現（例えば、カスタム分析ツールが予期するフォーマットであってもよい）が望まれていると仮定する。入力データは多くの異なった情報を含んでいるが、どこで作物が加工されたか（PROCESSING_FACILITY）、どういう作物であるか（PRODUCT）、及び、加工された作物の品質（QUALITY）が興味のある情報であると仮定される。説明のために、［LOC 334 75 BEANS G-VG］の値で、上で以前に使用された例の入力データが使用される。このデータは、建物75のプラント#334が品質レベル1（“非常に良い”）の豆を加工したことを表している。
【００２８】
入力データをトークン化するのに使用される選択されたスキームは、空白又は句読点で分割することである。例の入力データがトークン化された後に、結果として生じるトークンは以下の通りである。
LOC、334、75、BEANS、G、-、及び、VG
選択された構文解析ルール及びデータディクショナリは、トークン化された入力に適用されて、パーズが存在するか否かを決定してもよい。データディクショナリは、特定の分類のための可能な値を定義するエントリを含んでもよく、かつ、特定の分類のための可能な値が何であるかを表してもよい。図２Ａは、本発明の１実施例に従って、データディクショナリの例のエントリを図示している。図２Ｂは、本発明の１実施例に従って、例250（構文解析ルール及びフォーマッティングルール）を図示している。説明のために、図２Ａのデータディクショナリ、及び、図２Ｂの構文解析ルール252（即ち、“crop_rule”）が、例の入力データに適用されている。構文解析ルール252の第１インデックスはPLANT_ID分類を予期する（図２Ａのデータディクショナリに従って、“Plant”、“Pl”、“P”、“Plnt”、“Loc”、または“location”であってもよい）。この場合、第１トークンがLOCであるので、第１トークンはPLANT_ID分類にマッチする。第１トークンが第１インデックスにマッチするので、第１インデックスは“F”の値を有する（データディクショナリは、LOCの値を有するPLANT_IDの分類が“F”を表すことを示すので）。“?”オペレータが第１インデックスに適用されることに注意しなければならない。その結果、“?”オペレータが、インデックスが任意であることを示すので、第１トークンが第１インデックスにマッチしない場合でも、パーズがさらに発生してもよい。
【００２９】
構文解析ルール252の第２インデックスは“*”が適用されるNUMBER分類を予期する。したがって、データディクショナリによると、第２インデックスは、どんな数からでもなる１又は複数のトークンを予期する。次のトークンは334であり、第２インデックスにマッチする。同様に、第３トークンは75であり、また、第２インデックスにマッチする。しかしながら、第４トークンはBEANSであり、第２インデックスにマッチしない。したがって、第２インデックスはトークン334及び75を具備する。
【００３０】
構文解析ルール252の第３インデックスは、PRODUCT_ID分類を予期する。BEANSがPRODUCT_ID分類に含まれた値であるので、次のトークン（BEANS）は第３インデックスにマッチする。それに従って、BEANSがBEANを表すので、BEANが第３インデックスの値である。構文解析ルール252の第４インデックスはGRADE分類を予期する（その値が“G”、“grade”、“grd”、“qual”、及び“quality”であってもよい）。次のトークンはGであり、データディクショナリにおける“Q”を表す。したがって、第４インデックスは、“Q”の値を有する。構文解析ルール252の第５インデックスは、任意のPUNCTUATIONを予期する（“?”がそれに適用されるので）。この例では、次のトークンは-（句読点）である。したがって、第５インデックスは-の値を有する。最終的に、構文解析ルール252の第６、及び、最後のインデックスはGRADE_LEVEL分類を予期する。最後のトークンはVGの値を有し、データディクショナリによると、値“1”を表す。したがって、構文解析ルール252の第６インデックスは、“1”の値を有する。トークン化された入力データが構文解析ルール252を満たすので、この特定のトークン化された入力データがパーズである。
【００３１】
動作行254は、入力データにおける興味のある情報を示している。動作行254内で、以下の行が、本発明の１実施例に従って、ON*オペレータのアプリケーションを示している。
【００３２】
【数２】
2010244539.tif 000004
【００３３】
上で論じたように、“*”オペレータは第２インデックスに適用された。したがって、何が１又は複数のトークンマッチを区切るかを制御するために、ON*オペレータを使用してもよい。この場合、空白を使用して、第２インデックスに関連付けられた１又は複数のトークンマッチを区切ってもよい。上記したように、トークンマッチが334及び75であるので、ON*オペレータを適用した後、第２インデックスの値は“33475”である。
【００３４】
図２Ｂに示されたフォーマッティングルール256（例えば、“format=”）は、どのようにマッチするトークンインデックスが配列されるか、存在する場合、どんな文字列がインデックスを区切るのに使用されるか、および、パーズのどの部分が出力データに含まれるかを定義する。例えば、図２Ｂのフォーマッティングルール256の第１が以下のように定義される。
【００３５】
【数３】
2010244539.tif 000005
【００３６】
フォーマッティング行は、“format=”を指定することによって、開始してもよい。これは、フォーマッティングルールが続くことを示す。一部の実施例では、すべてのフォーマッティングルールが、ルールの動作セクションにおける最終行である。“format=”に続く“CROP”は、このフォーマッティングルールのためのトップレベルカテゴリが何であるかを示してもよい。他の実施例では、私たちの例のように、“CROP”はルールの動作タイプにマッチしてもよい。トップレベルカテゴリは、“：”が続いて、識別子の終わりを示してもよい。トップレベルカテゴリに続くのは、フォーマッティングルールが定義されるサブカテゴリである。トップレベルカテゴリフォーマッティングルールに対して、何がトップレベルカテゴリに続くかは、この例のように、前の識別子と同じであってもよい（即ち、“CROP”が“CROP：”に続く）。例を続けると、第１フォーマッティングルールが、“|”文字列リテラル（後に第３インデックスの値が続き、“：”文字列リテラルが続く、など）で開始するように、トップレベルカテゴリフォーマッティングを定義する。フォーマット行のこの部分は、このフォーマットのためのトップレベルカテゴリが何であるかをデータクレンザ（Data Cleanse）に通知する。上記した例の入力データによる結果として生じた出力は、| BEAN:F33475GRADE:1|である。同様に、図３は、この実行例に従って、例の入出力データの表を示している。
【００３７】
フォーマッティングルール256の第２は、PROCESSING_FACILITYサブカテゴリのためのフォーマットを定義する。同様に、フォーマッティングルール256の第３は、QUALITYカテゴリのためのフォーマットを定義する。１実施例では、サブカテゴリのためのフォーマッティングルールは、特定のサブカテゴリがアウトプットされ、かつ、トップレベルコンポーネントの構築に影響しないときに適用してもよい。サブカテゴリ識別子は、後に“：”が続いて、識別子の終わりを示してもよい。
【００３８】
離散的フィールド入力（Discrete field input）
【００３９】
本発明の１実施例では、離散的入力フィールドに関する入力データは、構文解析ルールによって構文解析されず、かつ、入力を標準化して、特定の出力フィールドを生成するように機能してもよい。離散的入力フィールドから結果として生じるパーズに関連付けられたルールが存在しないので、フォーマッティング情報は異なって指定してもよい。一部の実施例では、これは、新しいセクションをルールファイルに追加することによって、実施してもよい。セクションは、出力（離散的入力フィールドから生成される）がどのようにフォーマットされるか、及び、ON*が使用されるとき、入力の複数のトークンがどのように切り離されるかを制御してもよい。それに従って、フォーマッティングは、出力サブカテゴリを指定することによって、制御してもよい。構文は上で説明されたフォーマッティングルールと類似であってもよい。さらに、文字列リテラルは同じように機能してもよい（例えば、上で説明されたような文字列リテラルの条件包含）。
【００４０】
実行例
【００４１】
以下は、本発明の１実施例による離散的フィールド入力の実行例である。図４は、本発明の１実施例に従って、離散的フィールド入力フォーマッティングの例を図示している。例えば、実行例は、図２Ｂに示されたルールファイルのようなルールファイルの中のセクションであってもよい。図４の第１行の“discrete_parser_options_start;”は識別子（離散的入力フォーマッティングオプションが続くことを示すのに使用される）であってもよい。同様に、最後の行の“discrete_parser_option_end;”は識別子（離散的入力フォーマッティングオプションが終了されることを示すのに使用される）であってもよい。“DISCRETE_NAME_FORMAT”は、どんなフォーマットが、出力のために、離散的名前入力フィールドから生成されなければならないかを示す識別子であってもよい。出力サブカテゴリは、作成されたNAME出力の順序を調整するのに使用してもよい。文字列リテラル構文は、以前に説明されたフォーマッティングルールと同じであってもよい。“DISCRETE_NAME_ON*”は、どんな文字列が（存在する場合）、同じ離散的名前入力フィールドで発生する複数のトークンの間で、使用するかを示す識別子であってもよい。これは、上で論じられたON*オペレータと同様に機能してもよい。その上、“DISCRETE_FIRM_ON*”は、どんな文字列が（存在する場合）、同じ離散的ファーム入力フィールドで発生する複数のトークンの間で、使用するかを示す識別子であってもよい。“DISCRETE_FIRM_FORMAT”は、どんなフォーマットが、出力のために、離散的ファーム入力フィールドから生成されなければならないかを示す識別子であってもよい。出力サブカテゴリは、作成されたFIRM出力の順序を調整するのに使用してもよい。文字列リテラル構文は、以前に説明されたフォーマッティングルールと同じであってもよい。
【００４２】
図５は、本発明の１実施例に従ってシステムを図示したブロック図である。システム500は、データクレンザソフトウェアアプリケーション501と、データリポジトリ505（即ち、データソース1）と、データリポジトリ506（即ち、データソース2）と、データリポジトリ507（即ち、データターゲット3）と、データリポジトリ508（即ち、データディクショナリリポジトリ）と、データリポジトリ509（即ち、ルールリポジトリ）とを備えてもよい。データクレンザソフトウェアアプリケーション501は、データリポジトリ505及び506から入力データを取得し、データクレンザソフトウェアアプリケーションによって処理してもよい。それに従って、データリポジトリ505及び506は、入力データを格納するように構成され、かつ、例えば、１又は複数のデータベースをそれぞれ備えてもよい。データクレンザソフトウェアアプリケーション501は、データリポジトリ507に出力データを転送してもよい。したがって、データリポジトリ507は、出力データを格納するように構成され、かつ、例えば、１又は複数のデータベースを備えてもよい。例として、データリポジトリ507は、データリポジトリ505及び506のうちの１又は複数と同じ物理データベースに存在してもよい（クレンジングされたデータとして）。
【００４３】
本発明のある実施例では、データクレンザソフトウェアアプリケーション501は、トークン化モジュール502と、ルールベース構文解析モジュール503と、フォーマッティングモジュール504とを備えてもよい。トークン化モジュール502は、データをトークン化するように構成してもよい。例えば、トークン化モジュール502は、データリポジトリ505及び506からの入力データをトークン化してもよい。本発明の一部の実施例では、トークン化モジュール502は、データディクショナリに従って、入力データをトークン化してもよく、データディクショナリリポジトリ508に格納してもよい。さらに、ルールベース構文解析モジュール503は、入力データを構文解析するように構成してもよい。ルールベース構文解析モジュール503は入力データ（例えば、トークン化モジュール502によってトークン化された）を構文解析してもよい。１実施例によると、データリポジトリ508及びデータリポジトリ509のうちの１又は複数のコンテンツは、容易にプロセッサにアクセス可能なワーキングメモリに存在してもよい（図６を参照）。１実施例では、ルールベース構文解析モジュール503で使用される構文解析ルールは、ルールリポジトリ509に格納してもよい。フォーマッティングモジュール504は、データをフォーマットし、かつ、出力データを生成するように構成してもよい。例えば、フォーマッティングモジュール504は、トークン化モジュール502によってトークン化され、かつ、ルールベース構文解析モジュール503によって構文解析されたデータをフォーマットしてもよい。本発明の実施例では、フォーマッティングモジュール504で使用されるフォーマッティングルールは、ルールリポジトリ508に格納してもよい。一部の実施例では、データクレンザアプリケーション501は、図１Ａの方法及び図１Bの方法のすべて又は一部を実施してもよい。トークン化モジュール502は、上で説明されるように、図１Ａのボックス101のすべて又は一部を実施してもよい。ルールベース構文解析モジュール503は、図１Ａのボックス102のすべて又は一部を実施してもよい。さらに、フォーマットモジュール504は、図１Ａのボックス103-105、及び、図１Bのボックス111-114のすべて又は一部を実施してもよい。
【００４４】
図６は、本発明の実施例を実施するための例のコンピュータシステム及びネットワーク600のブロック図である。コンピュータシステム610は、バス605か、又は、情報を通信するための他の通信メカニズムと、処理情報のためにバス605に接続されたプロセッサ601とを備えている。また、コンピュータシステム610は、プロセッサ601によって実行される情報及び命令を格納するために、バス605に接続されたメモリ602を備え、上で説明された方法を実行するための情報及び命令を具備している。また、このメモリは、プロセッサ601によって実行される命令の実行の間に、変数及び他の中間的情報を格納するために使用してもよい。このメモリの可能な実施例は、ランダムアクセスメモリー（RAM）、リードオンリーメモリ（ROM）、又は両方を含んでいるが、これに限定されない。また、ストレージデバイス603が、情報及び命令を格納するために設けられている。一般的な形態のストレージデバイスは、例えば、ハードドライブ、磁気ディスク、光ディスク、CD-ROM、DVD、フラッシュメモリ、USBメモリカード、またはコンピュータが読み出すことができる他の媒体を含んでいる。ストレージデバイス603は、例えば、方法を実行するか又は上の構成を実施するために、ソースコード、2進コード、またはソフトウェアファイルを具備してもよい。
【００４５】
コンピュータシステム610は、コンピュータユーザに情報を表示するために、バス605を介して、出力デバイス（例えば、ディスプレイ612）（例えば、ブラウン管（CRT）又は液晶ディスプレイ（LCD））に接続してもよい。入力デバイス611（例えば、キーボード、及び／又は、マウス）は、ユーザからプロセッサ601に情報及びコマンド選択を通信するために、バス605に接続される。これらのコンポーネントの組み合わせで、ユーザはシステムと通信することができる。一部のシステムでは、バス605は、複数の専門化されたバスに分割してもよい。
【００４６】
また、コンピュータシステム610は、バス605に接続されたネットワークインターフェース604を備えている。ネットワークインターフェース604は、コンピュータシステム610とローカルネットワーク620との間に双方向データ通信をもたらしてもよい。ネットワークインターフェース604は、例えば、デジタル加入者線（DSL）、又は、電話回線の上でデータ通信接続を提供するためのモデムであってもよい。ネットワークインターフェースの別の例は、コンパチブルLANにデータ通信接続を提供するためのローカルエリアネットワーク（LAN）カードである。無線周波数通信を使用する無線リンクは別の例である。そのような実施例でも、ネットワークインターフェース604は、各種タイプの情報を表すデジタルデータストリームを運ぶ電気、電磁、又は光の信号を送受信する。
【００４７】
コンピュータシステム610は、イントラネット又はインターネット630に、ネットワークインターフェース604を通じて、情報（メッセージ又は他のインターフェースアクションを含む）を送信及び受信することができる。インターネットの例では、ソフトウェアコンポーネント又はサービスが、ネットワーク上の複数の異なったコンピュータシステム610又はサーバ631-635に存在してもよい。例えば、上で説明されたプロセスは、１又は複数のサーバで実施してもよい。サーバ631は、1つのコンポーネントから、インターネット630、ローカルネットワーク620、及びネットワークインターフェース604を通して、コンピュータシステム610上のコンポーネントに、アクション又はメッセージを転送してもよい。例えば、異なったプロセスは、どんなコンピュータシステム上で実施してもよく、かつ、ネットワークを介して情報を送信、及び／又は、受信してもよい。例えば、１実施例では、上で説明された方法は、１又は複数のサーバ631-635上のソフトウェアサービスで実施してもよい。例として、データソース505、506、および507と、データディクショナリリポジトリ508と、ルールリポジトリ509とは、サーバ631-635のうちの１又は複数で格納してもよい（例えば、それらの各メモリ（メモリ602に例える）、又は、ストレージデバイス（ストレージデバイス603に例える））。
【００４８】
１実施例によると、データクレンザソフトウェアアプリケーション501は、コンピュータシステム610によって実施してもよい。一部の実施例では、トークン化モジュール502と、ルールベース構文解析モジュール503と、フォーマッティングモジュール504とは、プロセッサ601と、メモリ602と、ストレージデバイス603とで実施してもよい。他の実施例では、データリポジトリ505はサーバ614によって実施し、かつ、データリポジトリ506はサーバ615によって実施し、かつ、データリポジトリ507はサーバ616によって実施してもよい。
【００４９】
別の実施例によると、図１Ａの方法のすべて又は一部はコンピュータシステム610によって実施してもよい。ボックス101のデータソースは、１又は複数のサーバ614-616に格納してもよい。ボックス101のデータのトークン化は、プロセッサ601及びメモリ602によって実施してもよい。ボックス102の構文解析は、プロセッサ601及びメモリ602（構文解析に使用される構文解析ルールがストレージデバイス603に格納される）によって実施してもよい。ボックス104及び105のデータ処理は、プロセッサ601及びメモリ602（データを処理するのに使用されるフォーマッティングルールがストレージデバイス603に格納される）によって実施してもよい。１実施例によると、図１Bの方法のすべて又は一部は、プロセッサ601及びメモリ602によって実施してもよい。メモリ602は、データディクショナリリポジトリ508又はルールリポジトリ509（図５を参照）を実施してもよい。
【００５０】
１実施例によると、農業情報をクレンジングしてもよい。また、他のタイプのデータもクレンジングしてもよい。名前情報をクレンジングしてもよい。住所情報をクレンジングしてもよい。非英語情報（例えば、日本語情報）をクレンジングしてもよい。一部の言語は、情報のコンポーネントを区切るのに、空間（又は、他のシンボル）を使用しない（例えば、日本語の住所及び名前情報）。本発明の実施例は、そのような情報を構文解析し、かつ、標準化するのに使用してもよい。
【００５１】
上の記述は、本発明の態様がどのように実行されるかについての例を伴って、本発明の様々な実施例を説明している。上記の例及び実施例を唯一の実施例であると考えてはならず、添付の特許請求の範囲で定義された本発明の柔軟性及び利点を説明するために提示されている。上記の開示と添付の特許請求の範囲に基づいて、他のアレンジメント、実施例、実行例、および均等物が当業者には明白であり、かつ、特許請求の範囲で定義された本発明の真の趣旨及び範囲から逸脱することなく利用される。
【符号の説明】
【００５２】
501  データクレンザソフトウェアアプリケーション
502  トークン化モジュール
503  ルールベース構文解析モジュール
504  フォーマッティングモジュール
505  データソース１
506  データソース２
507  データターゲット３
508  データディクショナリリポジトリ
509  ルールリポジトリ
602  メモリ
603  ストレージデバイス
604  ネットワークインターフェース
611  入力デバイス
612  ディスプレイ
614-635  サーバ
620  ローカルネットワーク
630  インターネット
【図１Ａ】
2010244539.tif 000006
【図１Ｂ】
2010244539.tif 000007
【図２Ａ】
2010244539.tif 000008
【図２Ｂ】
2010244539.tif 000009
【図３】
2010244539.tif 000010
【図４】
2010244539.tif 000011
【図５】
2010244539.tif 000012
【図６】
2010244539.tif 000013