(57)【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサおよびシステム・メモリを含むコンピュータ・システムにおいて、有向非循環グラフで複数の正規表現を表現する方法であって、
コンピュータ・システムが、第１の正規表現から分解された１つまたは複数のキーワード・グラフにアクセスする動作であって、１つまたは複数のキーワード・グラフの各々はルート・ノード、１つまたは複数の中間ノード、および葉ノードを有し、前記１つまたは複数の中間ノードの各々および前記葉ノードが、前記第１の正規表現に部分的にマッチする文字パターンを特定し、前記ルート・ノードおよび前記１つまたは複数の中間ノードの各々は単一の対応する子ノードを有し、前記中間ノードの１つは前記葉ノードを前記対応する子ノードとして有し、各前記葉ノードは前記第１の正規表現のマッチ状態としてラベルが付される、動作と、
前記コンピュータ・システムが、第２の正規表現の少なくとも一部を表現する第２のグラフにアクセスする動作であって、前記第２のグラフはルート・ノード、１つまたは複数の中間ノード、および１つまたは複数の葉ノードを有し、前記１つまたは複数の中間ノードおよび前記１つまたは複数の葉ノードの各々が、前記第２の正規表現に部分的にマッチする文字パターンを特定する、動作と、
前記コンピュータ・システムが、前記１つまたは複数のキーワード・グラフおよび前記第２のグラフを、前記第１の正規表現および前記第２の正規表現の両方を集合的に表現する有向非循環グラフにマージする動作であって、
少なくとも部分的に重複する文字パターンを有する、前記１つまたは複数のキーワード・グラフおよび前記第２のグラフ内の任意の同様に配置された中間ノードを特定する動作と、
同様に配置され、部分的にのみ重複する文字パターンを有する、前記選択されたキーワード・グラフ内の任意の特定された中間ノードおよび前記第２のグラフ内の任意の特定の中間ノードに対して、
前記部分的に重複する文字パターンを排除するために、前記特定された中間ノードのうちの少なくとも１つの中間ノードの文字パターンを変更する動作と、
前記特定された中間ノードのうちの前記少なくとも１つの中間ノードの前記文字パターンの変更に対して補償をするために、前記キーワード・グラフと前記第２のグラフとの間にエッジを追加する動作と、
同様に配置され、完全に重複する文字パターンを有する、キーワード・グラフ内の任意の特定された中間ノードおよび前記第２のグラフ内の特定された中間ノードに対して、
前記キーワード・グラフ内の中間ノードおよび前記第２のグラフ内の中間ノードを前記完全に重複する文字パターンを表現する単一のノードへと結合することにより、前記キーワード・グラフおよび前記第２のグラフを結合する動作と
を含む、動作と
を含むことを特徴とする方法。
【請求項２】
少なくとも部分的に重複する文字パターンを有する、前記選択されたキーワード・グラフおよび前記第２のグラフ内の任意の同様に配置された中間ノードを特定する前記動作は、完全に重複する、前記選択されたキーワード・グラフ内の中間ノードおよび前記第２のグラフ内の中間ノードを特定する動作を含むことを特徴とする請求項１に記載の方法。
【請求項３】
少なくとも部分的に重複する文字パターンを有する、前記選択されたキーワード・グラフおよび前記第２のグラフ内の任意の同様に配置された中間ノードを特定する前記動作は、部分的に重複する、前記選択されたキーワード・グラフ内の中間ノードおよび前記第２のグラフ内の中間ノードを特定する動作を含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記コンピュータ・システムが、前記第１の正規表現を表現する第１のグラフにアクセスする動作と、
前記コンピュータ・システムが、前記第１のグラフを前記１つまたは複数のキーワード・グラフへと分解する動作と
をさらに含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記コンピュータ・システムが、前記１つまたは複数のキーワード・グラフのうちの各々のキーワード・グラフの前記葉ノードを、前記第１の正規表現に対するマッチ状態としてラベル付けする動作をさらに含むことを特徴とする請求項４に記載の方法。
【請求項６】
前記コンピュータ・システムが、前記第２のグラフ内の各終端ノードを前記第２の正規表現に対するマッチ状態としてラベル付けする動作をさらに含み、前記終端ノードは前記１つまたは複数の中間ノートおよび前記１つまたは複数の葉ノードの中から選択されることを特徴とする請求項１に記載の方法。
【請求項７】
前記コンピュータ・システムが、前記有向非循環グラフをテキストの一部に対して状態機械として実行して、前記テキストの一部が、前記第１の正規表現および前記第２の正規表現のうちの１つまたは複数にマッチするかどうかを判定する動作をさらに含むことを特徴とする請求項１に記載の方法。
【請求項８】
前記第２のグラフは前記第２の正規表現から分解されたキーワード・グラフであることを特徴とする請求項１に記載の方法。
【請求項９】
コンピュータ・システムで使用するためのコンピュータ実行可能命令を格納した１つまたは複数のコンピュータ読み取り可能な記憶媒体であって、有向非循環グラフで複数の正規表現を表現するための方法を実装し、当該コンピュータ実行可能命令は、プロセッサで実行されると、前記コンピュータ・システムに、
第１の正規表現から分解された１つまたは複数のキーワード・グラフにアクセスするステップであって、前記１つまたは複数のキーワード・グラフの各々はルート・ノード、１つまたは複数の中間ノード、および葉ノードを有し、前記１つまたは複数の中間ノードの各々および前記葉ノードが、前記第１の正規表現に部分的にマッチする文字パターンを特定し、前記ルート・ノードおよび前記１つまたは複数の中間ノードの各々は単一の対応する子ノードを有し、前記中間ノードの１つは前記葉ノードを前記対応する子ノードとして有し、各前記葉ノードは前記第１の正規表現のマッチ状態としてラベルが付される、ステップと、
第２の正規表現を表現する第２のグラフにアクセスするステップであって、前記第２のグラフはルート・ノード、１つまたは複数の中間ノード、および１つまたは複数の葉ノードを有し、前記１つまたは複数の中間ノードおよび前記１つまたは複数の葉ノードの各々が、前記第２の正規表現に部分的にマッチする文字パターンを特定する、ステップと、
前記１つまたは複数のキーワード・グラフおよび前記第２のグラフを、前記第１の正規表現および前記第２の正規表現の両方を集合的に表現する有向非循環グラフにマージするステップであって、
少なくとも部分的に重複する文字パターンを有する、前記１つまたは複数のキーワード・グラフおよび前記第２のグラフ内の任意の同様に配置された中間ノードを特定するステップと、
同様に配置され、部分的にのみ重複する文字パターンを有する、キーワード・グラフ内の任意の特定された中間ノードおよび前記第２のグラフ内の任意の特定された中間ノードに対して、
前記部分的に重複する文字パターンを排除するために、前記特定された中間ノードのうちの少なくとも１つの中間ノードの文字パターンを変更するステップと、
前記特定された中間ノードのうちの前記少なくとも１つの中間ノードの前記文字パターンの変更に対して補償をするために、前記キーワード・グラフと前記第２のグラフとの間にエッジを追加するステップと、
同様に配置され、完全に重複する文字パターンを有する、キーワード・グラフ内の任意の特定された中間ノードおよび前記第２のグラフ内の特定された中間ノードに対して、
前記キーワード・グラフ内の中間ノードおよび前記第２のグラフ内の中間ノードを前記完全に重複する文字パターンを表現する単一のノードへと結合することにより、前記キーワード・グラフおよび前記第２のグラフを結合するステップと
を含む、ステップと、
を含む前記方法を実施させることを特徴とする１つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項１０】
実行されると、前記コンピュータ・システムに、少なくとも部分的に重複する文字パターンを有する、前記１つまたは複数のキーワード・グラフおよび前記第２のグラフ内の任意の同様に配置された中間ノードを特定させるコンピューター実行可能命令は、実行されると、前記コンピュータ・システムに、完全に重複する、キーワード・グラフ内の中間ノードおよび前記第２のグラフ内の中間ノードを特定させるコンピュータ実行可能命令を含むことを特徴とする請求項９に記載の１つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項１１】
実行されると、前記コンピュータ・システムに、少なくとも部分的に重複する文字パターンを有する、前記１つまたは複数のキーワード・グラフおよび前記第２のグラフ内の任意の同様に配置された中間ノードを特定させるコンピューター実行可能命令は、実行されると、前記コンピュータ・システムに、部分的に重複する、キーワード・グラフ内の中間ノードおよび前記第２のグラフ内の中間ノードを特定させるコンピュータ実行可能命令を含むことを特徴とする請求項９に記載の１つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項１２】
実行されると、前記コンピュータ・システムに、前記１つまたは複数のキーワード・グラフのうちの各々のキーワード・グラフの前記葉ノードを、前記第１の正規表現に対するマッチ状態としてラベル付けさせるコンピュータ実行可能命令をさらに含むことを特徴とする請求項９に記載の１つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項１３】
実行されると、前記コンピュータ・システムに、前記第２のグラフ内の各終端ノードを前記第２の正規表現に対するマッチ状態としてラベル付けさせるコンピュータ実行可能命令をさらに含むことを特徴とする請求項９に記載の１つまたは複数のコンピュータ読み取り可能な記憶媒体。
【請求項１４】
コンピュータ・システムであって、
１つまたは複数のプロセッサと、
システム・メモリと
を備え、前記システム・メモリは、前記１つまたは複数のプロセッサで実行されると、前記コンピュータ・システムに、有向非循環グラフで複数の正規表現を表現する方法を実行させるコンピュータ実行可能命令を格納し、前記方法は、、
第１の正規表現から分解された１つまたは複数のキーワード・グラフにアクセスする動作であって、１つまたは複数のキーワード・グラフの各々はルート・ノード、１つまたは複数の中間ノード、および葉ノードを有し、前記１つまたは複数の中間ノードの各々および前記葉ノードが、前記第１の正規表現に部分的にマッチする文字パターンを特定し、前記ルート・ノードおよび前記１つまたは複数の中間ノードの各々は単一の対応する子ノードを有し、前記中間ノードの１つは前記葉ノードを前記対応する子ノードとして有し、各前記葉ノードは前記第１の正規表現のマッチ状態としてラベルが付される、動作と、
第２の正規表現を表現する第２のグラフにアクセスする動作であって、前記第２のグラフはルート・ノード、１つまたは複数の中間ノード、および１つまたは複数の葉ノードを有し、前記１つまたは複数の中間ノードおよび前記１つまたは複数の葉ノードの各々が、前記第２の正規表現に部分的にマッチする文字パターンを特定し、前記第２のグラフは前記第２の正規表現のマッチ状態としてラベルが付された１つまたは複数の終端ノードを有する、動作と、
前記１つまたは複数のキーワード・グラフおよび前記第２のグラフを、前記第１の正規表現および前記第２の正規表現の両方を集合的に表現する有向非循環グラフにマージする動作であって、
少なくとも部分的に重複する文字パターンを有する、前記１つまたは複数のキーワード・グラフおよび前記第２のグラフ内の任意の同様に配置された中間ノードを特定する動作と、
同様に配置され、部分的にのみ重複する文字パターンを有する、キーワード・グラフ内の任意の特定された中間ノードおよび前記第２のグラフ内の任意の特定された中間ノードに対して、
前記特定された中間ノードのうちの少なくとも１つの中間ノードの前記文字パターンを変更して前記部分的に重複する文字パターンを削除する動作と、
前記キーワード・グラフと前記第２のグラフとの間にエッジを追加して、前記特定された中間ノードのうちの前記少なくとも１つの中間ノードの前記文字パターンの変更を補償する動作と、
同様に配置され、完全に重複する文字パターンを有する、キーワード・グラフ内の任意の特定された中間ノードおよび前記第２のグラフ内の任意の特定された中間ノードに対して、
前記キーワード・グラフ内の前記中間ノードおよび前記第２のグラフ内の前記中間ノードを前記完全に重複する文字パターンを表現する単一のノードへと結合することによって、前記キーワード・グラフおよび前記第２のグラフを結合する動作と、
を含む、動作と、
を含むことを特徴とするコンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、正規表現に関する。
【背景技術】
【０００２】
コンピュータ・システムおよびその関連技術は社会の多数の側面に影響を及ぼしている。実際、コンピュータ・システムの情報処理能力により、我々の生活の仕方や仕事の仕方は変化した。コンピュータ・システムは今や一般に、コンピュータ・システムが出現する以前は手動で行われていた大量のタスク（例えば、文書処理、スケジューリング、会計、等）を処理する。近年では、コンピュータ・システムは互いにおよび他の電子装置に接続され、有線および無線の両方のコンピュータ・ネットワークを形成している。これらのコンピュータ・ネットワークを介して、コンピュータ・システムおよび他の電子装置が電子データを送信することができる。ゆえに、多数のコンピューティング・タスクの実施は、幾つかの異なるコンピュータ・システムおよび／または幾つかの異なるコンピューティング環境に分散されている。
【０００３】
一部のコンピューティング環境では、例えば特定の文字、単語、または文字パターンのようなテキスト文字列にマッチするように正規表現が使用されている。正規表現を、正規表現プロセッサにより解釈できる形式言語で書くことができる。正規表現プロセッサは、構文解析器生成器の役割を果たすか、または、テキストを調べて与えられた仕様にマッチする部分を特定するプログラムである。
【０００４】
正規表現は、パターンに基づいてテキストを検索し操作するために、多数のテキスト・エディタ、ユーティリティ、およびプログラミング言語によって用いられる。例えば、アンチスパム・サービスは、正規表現を利用して、ＳＰＡＭを示すとして知られているテキスト文字列が電子メッセージに含まれるかどうかを判定することができる。同様に、データ漏洩保護サービスは、正規表現を利用して、機密情報の不正な使用および送信を検出し防止することができる。
【０００５】
正規表現を利用する環境では、大規模な正規表現の集合が逐次的に実行されるのは珍しいことではない。例えば、アンチスパム・サービスは、電子メッセージがＳＰＡＭを含むかどうかを判定するときに、何万もの正規表現を使用することができる。１組の正規表現における正規表現を、受け取った電子メッセージそれぞれに対して逐次的に実行することができる。正規表現の逐次実行は、スケーラビリティを制限し、マッチのためにチェックされている正規表現および／またはテキスト部分の数が増大すると大量のリソースを消費する可能性がある。
【発明の概要】
【０００６】
本発明は、正規表現を分解しマージするための方法、システム、およびコンピュータ・プログラム製品に関する。１つまたは複数のキーワード・グラフにアクセスする。１つまたは複数のキーワード・グラフは第１の正規表現を分解したものである。１つまたは複数のキーワード・グラフの各々は、１つのルート・ノード、１つまたは複数の中間ノード、および１つの葉ノードを有する。１つまたは複数の中間ノードの各々および葉ノードが、第１の正規表現に部分的にマッチする文字パターンを特定する。ルート・ノードおよび１つまたは複数の中間ノードの各々は、単一の子ノードを有する。中間ノードの１つは、葉ノードを子ノードとして有する。各葉ノードは、第１の正規表現のマッチ状態（matching state）としてラベルが付される。
【０００７】
第２のグラフにアクセスする。第２のグラフは、第２の正規表現を表現する。第２のグラフは、１つのルート・ノード、１つまたは複数の中間ノード、および１つまたは複数の葉ノードを有する。１つまたは複数の中間ノードおよび１つまたは複数の葉ノードの各々が、第２の正規表現に部分的にマッチする文字パターンを特定する。第２のグラフは、第２の正規表現のマッチ状態としてラベルが付された１つまたは複数の終端ノードを有する。
【０００８】
１つまたは複数のキーワード・グラフおよび第２のグラフを、第１の正規表現および第２の正規表現の両方を集合的に表現する有向非循環グラフ（directed acyclic graph）にマージする。マージには、少なくとも部分的に重複する文字パターンを有する、１つまたは複数のキーワード・グラフおよび第２のグラフ内の任意の同様に配置された中間ノードを特定することを含む。部分的に重複する文字パターンを有する任意の特定された中間ノードに対して、少なくとも１つの特定された中間ノードの文字パターンを変更して、部分的に重複する文字パターンを排除する。キーワード・グラフと第２のグラフとの間にエッジを追加して、少なくとも１つの特定された中間ノードの文字パターンの変更に対して補償する。完全に重複する文字パターンを有する任意の特定された中間ノードに対して、キーワード・グラフ内の中間ノードおよび第２のグラフ内の中間ノードを、完全に重複する文字パターンを表現する単一のノードへと結合する。
【０００９】
本概要は、選択された概念を簡潔な形で導入するために提供されるものであり、当該概念は、下記の発明を実施するための形態でさらに説明される。本概要は、特許請求される主題の主要な特徴または本質的な特徴を特定しようとするものではなく、特許請求される主題の範囲を決定する際の助けとして使用されることを意図したものでもない。
【００１０】
本発明のさらなる特徴および利点は、下記の記載にて説明され、当該記載から部分的に明らかになろう。または、当該特徴および利点は、本発明を実践することにより理解されるであろう。本発明の特徴および利点は、添付の特許請求の範囲で特に指摘される手段および組合せにより実現され取得されうる。本発明のこれらおよび他の特徴は、下記の記載および添付の特許請求の範囲からより完全に理解されよう。または、本発明のこれらおよび他の特徴は、以降で説明する本発明を実践することにより理解されるであろう。
【図面の簡単な説明】
【００１１】
本発明の上述の、ならびに他の利点および特徴を取得可能な方法を説明するために、以上で簡潔に説明した本発明のより具体的な説明は、添付図面で示される本発明の具体的な実施形態を参照して示される。これらの図面は本発明の典型的な実施形態を示すにすぎず、したがって、本発明の範囲を限定するとは考えるべきではないことを理解されたく、本発明を、添付図面を用いてさらに具体的かつ詳細に記載および説明する。
【図１】正規表現の分解およびマージを容易にする例示的なコンピュータ・アーキテクチャの図である。
【図２】正規表現を表現するグラフを分解する例を示す図である。
【図３】異なる正規表現を表現するグラフをマージする例を示す図である。
【図４】正規表現を表現するグラフを分解する別の例を示す図である。
【図５】異なる正規表現を表現するグラフをマージする別の例を示す図である。
【図６Ａ】正規表現を分解しマージするための例示的な方法の流れ図である。
【図６Ｂ】正規表現を分解しマージするための例示的な方法の流れ図である。
【発明を実施するための形態】
【００１２】
本発明は、正規表現を分解しマージするための方法、システム、およびコンピュータ・プログラム製品に関する。１つまたは複数のキーワード・グラフにアクセスする。１つまたは複数のキーワード・グラフは第１の正規表現を分解したものである。１つまたは複数のキーワード・グラフの各々は、１つのルート・ノード、１つまたは複数の中間ノード、および１つの葉ノードを有する。１つまたは複数の中間ノードの各々および葉ノードが、第１の正規表現に部分的にマッチする文字パターンを特定する。ルート・ノードおよび１つまたは複数の中間ノードの各々は、単一の子ノードを有する。中間ノードの１つは、葉ノードを子ノードとして有する。各葉ノードは、第１の正規表現のマッチ状態としてラベルが付される。
【００１３】
第２のグラフにアクセスする。第２のグラフは、第２の正規表現を表現する。第２のグラフは、１つのルート・ノード、１つまたは複数の中間ノード、および１つまたは複数の葉ノードを有する。１つまたは複数の中間ノードおよび１つまたは複数の葉ノードの各々が、第２の正規表現に部分的にマッチする文字パターンを特定する。第２のグラフは、第２の正規表現のマッチ状態としてラベルが付された１つまたは複数の終端ノードを有する。
【００１４】
１つまたは複数のキーワード・グラフおよび第２のグラフを、第１の正規表現および第２の正規表現の両方を集合的に表現する有向非循環グラフにマージする。マージには、少なくとも部分的に重複する文字パターンを有する、１つまたは複数のキーワード・グラフおよび第２のグラフ内の任意の同様に配置された中間ノードを特定することを含む。部分的に重複する文字パターンを有する任意の特定された中間ノードに対して、少なくとも１つの特定された中間ノードの文字パターンを変更して、部分的に重複する文字パターンを排除する。キーワード・グラフと第２のグラフとの間にエッジを追加して、少なくとも１つの特定された中間ノードの文字パターンの変更に対して補償する。完全に重複する文字パターンを有する任意の特定された中間ノードに対して、キーワード・グラフ内の中間ノードおよび第２のグラフ内の中間ノードを、完全に重複する文字パターンを表現する単一のノードへと結合する。
【００１５】
本発明の諸実施形態が、特殊目的または汎用目的のコンピュータを備えるかまたは利用してもよい。当該コンピュータには、下記でさらに詳細に論ずるように、例えば１つまたは複数のプロセッサおよびシステム・メモリのようなコンピュータ・ハードウェアが含まれる。本発明の範囲内の諸実施形態はまた、コンピュータ実行可能命令および／またはデータ構造を伝送または格納するための物理的なおよび他のコンピュータ読取可能媒体を備える。かかるコンピュータ読取可能媒体は、汎用目的または特殊目的のコンピュータ・システムがアクセスできる任意の利用可能な媒体であってよい。コンピュータ実行可能命令を格納するコンピュータ読取可能媒体は、コンピュータ記憶媒体（装置）である。コンピュータ実行可能命令を伝送するコンピュータ読取可能媒体は、送信媒体である。したがって、限定ではなく例として、本発明の諸実施形態は、少なくとも２つの明らかに相違なる種類のコンピュータ読取可能媒体、即ち、コンピュータ記憶媒体（装置）および送信媒体を備えることができる。
【００１６】
コンピュータ記憶媒体（装置）には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶装置、または、コンピュータ実行可能命令またはデータ構造の形で所望のプログラム・コード手段を格納するのに使用でき、汎用目的または特殊目的のコンピュータがアクセスできる他の任意の媒体が含まれる。
【００１７】
「ネットワーク」は、コンピュータ・システムおよび／またはモジュールおよび／または他の電子装置間で電子データの送信を可能とする１つまたは複数のデータ・リンクとして定義される。情報がネットワークまたは別の通信接続（ハードワイヤード、無線、またはハードワイヤードもしくは無線の組合せのいずれか）を介してコンピュータに転送または提供されるとき、当該コンピュータは当該接続を正しく送信媒体とみなす。送信媒体には、コンピュータ実行可能命令またはデータ構造の形で所望のプログラム・コード手段を伝送するのに使用でき汎用目的または特殊目的のコンピュータがアクセスできる、ネットワークおよび／またはデータ・リンクを含めることができる。上記を組み合わせたものも、コンピュータ読取可能媒体の範囲に含まれるべきである。
【００１８】
さらに、様々なコンピュータ・システムのコンポーネントに到達すると、コンピュータ実行可能命令またはデータ構造の形のプログラム・コード手段を送信媒体からコンピュータ記憶媒体（装置）に自動的に転送することができる（逆も可能）。例えば、ネットワークまたはデータ・リンクを介して受信したコンピュータ実行可能命令またはデータ構造を、ネットワーク・インタフェース・モジュール（例えば、「ＮＩＣ」）内のＲＡＭにバッファし、最終的にコンピュータ・システムのＲＡＭおよび／またはコンピュータ・システムにある揮発性の低いコンピュータ記憶媒体（装置）に転送することができる。したがって、コンピュータ記憶媒体（装置）を、追加的に（または主に）送信媒体を利用するコンピュータ・システムのコンポーネントに含めることができることは理解されよう。
【００１９】
コンピュータ実行可能命令は、例えば、プロセッサで実行されたときに汎用目的のコンピュータ、特殊目的のコンピュータ、または特殊目的の処理装置に一定の機能または機能群を実行させる命令およびデータを備える。コンピュータ実行可能命令は、例えばバイナリ、アセンブリ言語のような中間形式の命令、または、ソース・コードであってもよい。本発明を構造的特徴および／または方法論的動作に固有な言葉で説明したが、添付の特許請求の範囲で定義した本発明は必ずしも説明した特徴または上述の動作に限定されないことは理解されよう。むしろ、説明した特徴および動作は諸請求項を実装する例示的な形態として開示されている。
【００２０】
本発明を多種類のコンピュータ・システム構成を有するネットワーク・コンピューティング環境で実践してもよいことは、当業者には理解されよう。当該構成には、パーソナル・コンピュータ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、メッセージ・プロセッサ、ハンドヘルド装置、マルチプロセッサ・システム、マイクロプロセッサ・ベースのまたはプログラム可能な家庭用電化製品、ネットワークＰＣ、ミニコンピュータ、メインフレーム・コンピュータ、携帯電話、ＰＤＡ、ページャ、ルータ、スイッチ、等が含まれる。本発明を分散システム環境で実践してもよい。この場合、ローカルおよびリモートのコンピュータ・システムが、（ハードワイヤードのデータ・リンク、無線データ・リンクによって、またはハードワイヤードのデータ・リンクおよび無線データ・リンクの組合せによって）ネットワークを介して接続され、両方ともタスクを実施する。分散システム環境では、プログラム・モジュールをローカルおよびリモートの両方のメモリ記憶装置に配置してもよい。
【００２１】
本明細書および添付の特許請求の範囲においては、「正規表現」とは、例えば特定の文字、単語、または文字パターンのようなテキスト文字列にマッチするよう用いられる構造体である。幾つかの実施形態では、正規表現は有限のアルファベットを有する。正規表現は、正規表現プロセッサにより解釈できる形式言語で記述することができる。正規表現プロセッサは、構文解析器生成器としての役割を果たすか、または、テキストを調べて所与の正規表現にマッチするテキストの部分を特定する。
【００２２】
一般に、グラフを用いて正規表現およびそのマッチ状態を表現することができる。例えば、図２を簡単に参照すると、グラフ２０１が正規表現「（＼ｄ＼ｄ）｜（ａ（ｂ｜ｃ））」を表現している。同様に、図４を簡単に参照すると、グラフ４０１が正規表現「（［ａ，ｂ，ｃ］x）｜（＼ｄ（ｃｄ｜［１，３，５］（［ａ，ｃ，ｄ］｜ｅａ）））」を表現している。グラフを、入力テキストで状態機械を実行することにより「実行」することができ、これによりグラフの並列化が可能になる。
【００２３】
図１は、正規表現の分解およびマージを容易にする例示的なコンピュータ・アーキテクチャ１００を示す。図１を参照すると、コンピュータ・アーキテクチャ１００は、分解モジュール１０１、ラベリング・モジュール１０２、およびマージ・モジュール１４１を備える。図示したコンポーネントの各々を、例えばＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、およびインターネットのようなネットワーク（またはその一部）を介して互いに接続することができる。したがって、図示したコメントならびに他の任意の接続されたコンピュータ・システムおよびそのコンポーネントが、ネットワークを介してメッセージ関連データ（例えば、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）データグラム、および、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）、ＳＭＴＰ（Ｓｉｍｐｌｅ  Ｍａｉｌ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）、等のような、ＩＰデータグラムを利用する他の上位層プロトコル）を作成し交換することができる。
【００２４】
一般に、分解を用いて、正規表現を表現する１組の単純なグラフを、当該正規表現を表現するより複雑なグラフから生成することができる。したがって、分解モジュール１０１は、例えば正規表現を表現するグラフのようなグラフを、対応する複数のキーワード・グラフに分解するように構成される。分解モジュール１０１は、基本的には、より複雑な正規表現の選択的な部分（ｄｉｓｊｕｎｃｔｉｖｅ  ｐｏｒｔｉｏｎ）を除去して、当該より複雑な正規表現を複数のより単純な正規表現に分解することができる。各キーワード・グラフの葉ノードは、より複雑なグラフの最終状態（当該より複雑なグラフ内の中間ノードまたは葉ノードにおけるものであってもよい）を表現する。分解モジュール１０１は、ラベル付きグラフまたはラベルなしグラフを分解することができる。
【００２５】
ラベリング・モジュール１０２は、グラフまたはキーワード・グラフのノードにラベルを付して、表現された正規表現のマッチ状態を示すように構成される。ラベリング・モジュール１０２は、分解の前または後で、ノードにラベルを付すことができる。
【００２６】
再度図２を参照すると、図２は、正規表現を表現するグラフを分解する例を示す。図示したように、分解モジュール１０１はグラフ２０１を入力として受け取る。グラフ２０１には、正規表現「（＼ｄ＼ｄ）｜（ａ（ｂ｜ｃ））」のマッチ状態を示すために予めラベルを付してある（斜線の網掛けで表す）。分解モジュール１０１は、グラフ２０１を分解してキーワード・グラフ２０２を出力する。グラフ２０１内のラベルはキーワード・グラフ２０２に受け継がれる。したがって、テキストをグラフ２０１、または、キーワード・グラフ２０２の何れかと比較（これらに対して実行）すると、任意のマッチが「（＼ｄ＼ｄ）｜（ａ（ｂ｜ｃ））」に対するマッチとして示される。
【００２７】
再度図４を参照すると、図４は、正規表現を表現するグラフを分解する別の例を示す。図示したように、分解モジュール１０１はグラフ４０１を入力として受け取る。グラフ４０１には、正規表現「（［ａ，ｂ，ｃ］x）｜（＼ｄ（ｃｄ｜［１，３，５］（［ａ，ｃ，ｄ］｜ｅａ）））」のマッチ状態を示すために予めラベルを付してある（斜線の網掛けで表す）。分解モジュール１０１は、グラフ４０１を分解してキーワード・グラフ４０２を出力する。グラフ４０１内のラベルはキーワード・グラフ４０２に受け継がれる。したがって、テキストをグラフ４０１、または、キーワード・グラフ４０２の何れかと比較（これらに対して実行）すると、任意のマッチが「（［ａ，ｂ，ｃ］x）｜（＼ｄ（ｃｄ｜［１，３，５］（［ａ，ｃ，ｄ］｜ｅａ）））」に対するマッチとして示される。
【００２８】
幾つかの実施形態では、グラフは以下のアルゴリズムに従ってキーワード・グラフに分解される。
ルート・ノードから開始する。
ルート・ノードの全ての子ノードを特定する。
これらのノードごとに、
ａ．当該ノード（これを「ｐｒｅｆｉｘ．ｉ」と称する）より上の親ノードをコピーする。
ｂ．当該ノードおよびその部分木を「ｐｒｅｆｉｘ．ｉ」の子として追加する。
ｃ．現在のノードのルート・ノードとしての使用を除き、（２）から再度実行する。
【００２９】
当該アルゴリズムにより、当該グラフを表現するキーワード・グラフの集合（例えば、ＤＡＧ）を生成することができる。各キーワード・グラフは、葉ノードである単一の終端ノードを有する。各グラフにおいて、各ノードは単一の子ノードを有する。
【００３０】
一般に、マージを使用して、正規表現の集合を表現する単一の有向非循環グラフ（「ＤＡＧ」）を生成することができる。したがって、マージ・モジュール１０１は、２つのグラフを入力として受け取って、当該２つのグラフを、２つの入力グラフのマッチ状態を集合的に表現する単一のＤＡＧにマージするように構成される。処理の冗長性を排除するために、マージ・モジュール１０１は、２つの入力グラフ内の同様に配置されたノードにある重複する文字パターンを、単一のＤＡＧ内の単一のノードへと結合することができる。文字パターンが部分的に重複するとき、マージ・モジュール１０１は一方の入力グラフ内のノードにある当該文字パターンを変更することができる。マージ・モジュール１０１は次いで、当該ノードともう一方の入力グラフ内の対応するノードとの間に追加のエッジを加えることにより、補償することができる。追加のエッジを加えることで、２つの入力グラフと単一のＤＡＧとの間のマッチ状態における等価性が促進される。
【００３１】
幾つかの実施形態では、マージ・モジュール１４１が２つのキーワード・グラフを単一のＤＡＧにマージする。他の諸実施形態では、マージ・モジュール１４１はキーワード・グラフおよび別のグラフを単一のＤＡＧにマージする。マージ・モジュール１４１の機能を必要に応じて再利用して、数組の大規模なグラフを共にマージすることができる。
【００３２】
図３を参照すると、マージ・モジュール１４１はキーワード・グラフ３０１（例えば、別のグラフから前もって分解したもの）およびグラフ３０２を有向非循環グラフ３０４にマージする。マージ・モジュール１４１はグラフ３０２およびキーワード・グラフ３０１Ａを入力として利用する。マージ・モジュール１４１はグラフ３０２およびキーワード・グラフ３０１Ａを中間グラフ３０３にマージする。続いて、マージ・モジュール１４１は中間グラフ３３０およびキーワード・グラフ３０１Ｂを利用する。マージ・モジュール１４１は中間グラフ３０３およびキーワード・グラフ３０１Ｂを有向非循環グラフ３０４にマージする。文字パターンのノード３１２および３１３が重複するので、ノード３１２および３１３は有向非循環グラフ３０４内の単一のノード３１４にマージされる。
【００３３】
（異なる斜線の罫線で示された）ラベルは、マージ処理にわたって保持される。したがって、終端ノードはマッチした正規表現を示す。ノード３１６および３１７は、正規表現「＼ｄ＼ｄ｜ｕｍ」（ノード３１６および３１７がそこから分解された正規表現）に対するマッチを示し、ノード３１８は、正規表現「ｕｎ」に対するマッチを示す。
【００３４】
図３で示したように、マージ・モジュール１４１への入力は外部にある。他の実施形態では、マージ・モジュール１４１は１組のグラフを入力として受け取ってＤＡＧを出力する。処理の最中は、中間グラフがマージ・モジュール１４１内部で保持され処理される。
【００３５】
図示したように、マージ・モジュール１４１は位置検出器１４２、重複検出器１４３、および重複補償器１４４を備える。マージ位置にある間は、位置検出器１４２は、別のグラフにおいて同様に配置されたノードを特定するように構成される。同様に配置されたノードを、ルート・ノードからの距離に基づいて特定することができる。例えば、図３では、ノード３１２および３１３が同様に配置されている。マージの最中は、重複検出器１４３は、別のノードの文字パターンが少なくとも部分的に重複するかどうかを検出するように構成されている。例えば、文字パターン［１，３，５］は文字パターン＼ｄに部分的にマッチする。他方、文字パターン［ａ，ｂ，ｃ］および文字パターン［ａ，ｂ，ｃ］は完全に重複している。マージの最中は、重複補償器１４４は、部分的に重複する文字パターンを有するノードが単一のノードにマージされるときに補償するように構成されている。補償には、マージされている入力グラフ間にエッジを追加することを含むことができる。追加のエッジにより、入力グラフのマッチ状態と結果のＤＡＧのマッチ状態との間の等価性が促進される。
【００３６】
図５は、異なる正規表現を表現するグラフをマージする別の例を示す。キーワード・グラフ５０１およびグラフ５０２を、入力として（例えば、マージ・モジュール１４１で）受け取ることができる。位置検出器１４２は、ノード５１１およびノード５１２がそれぞれキーワード・グラフ５０１およびグラフ５０２の中で同様に配置されていることを検出することができる。重複検出器１４３は、部分的に重複するパターン５０３（または共通エッジ）を特定することができる。即ち、文字パターン＼ｄは文字パターン［２，３］と部分的に重複する。重複補償器１４４は、ノード５１１の文字パターンを「＼ｄ−［２，３］」に変更することによって、この部分的な重複を削除（共通エッジを削除）することができる。重複補償器はまた、ノード５１２からノード５１３へエッジ５１４を追加することができる。マージ・モジュール１１４は次いで、ルート・ノードを結合して、（変更した）キーワード・グラフ５０１をグラフ５０２に追加することができる。重複補償により、マージすべきグラフが、依然として等価なマッチ状態を表現することが可能になる。例えば、テキスト文字列「２ｃｄ」は、比較がノード５１２で行われて（ノード５１１が回避されて）いる場合でも、依然としてキーワード・グラフ５０１にマッチする。
【００３７】
図示したように、終端ノード内部の異なる罫線が、それぞれキーワード・グラフ５０１およびグラフ５０２のマッチ状態を示す。
【００３８】
幾つかの実施形態では、グラフは以下のアルゴリズムに従ってマージされる。
ルート・ノードのみを有する空のＤＡＧを作成し、これにＦｉｎａｌ．ＤＡＧとしてラベルを付す。
集合内のＤＡＧ（ｉ．ＤＡＧ）ごとに、以下を行う。
ａ．ｉ．ノードをｉ．ＤＡＧのルート・ノードに設定する。
ｂ．ｆｉｎａｌ．ノードをＦｉｎａｌ．ＤＡＧのルート・ノードに設定する。
ｃ．ｆｉｎａｌ．ノードが厳密に同一のエッジを有する限り、ｉ．ノードからｆｉｎａｌ．ノードまで繰り返す。
ｄ．ｉ．ノードのエッジがｆｉｎａｌ．ノードのエッジのスーパーセットである場合は、
ｉ．ｉ．ノードとｆｉｎａｌ．ノードとの間の共通でない文字を表現するエッジを追加する。このエッジはｉ．ノードの子を指す。
ｉｉ．共通の（エッジ、ノード）ごとに
１．ｆｉｎａｌ．ノードおよびｉ．ノードが厳密に同一のエッジを有する限り、それらについて繰り返す。
２．終端ノードに到達した場合は、それにｉ．ＤＡＧの終端としてラベルを付す。
３．そうでない場合は、ｆｉｎａｌ．ノードからｉ．ノードの子へのエッジを追加する。
ｅ．ｆｉｎａｌ．ノードのエッジがｉ．ノードのエッジのスーパーセットである場合は、
ｉ．ｉ．ノードとｆｉｎａｌ．ノードとの間の共通でない文字を表現するエッジを追加する。このエッジはｆｉｎａｌ．ノードの子を指す。
ｉｉ．共通の（エッジ、ノード）ごとに
１．ｆｉｎａｌ．ノードおよびｉ．ノードが厳密に同一のエッジを有する限り、それらについて繰り返す。
２．終端ノードに到達した場合は、それにｆｉｎａｌ．ＤＡＧの終端としてラベルを付す。
３．そうでない場合は、ｉ．ノードからｆｉｎａｌ．ノードの子へのエッジを追加する。
【００３９】
図６Ａ、図６Ｂは、正規表現を分解しマージするための例示的な方法６００の流れ図を示す。方法６００を、コンピュータ・アーキテクチャ１００のコンポーネントおよびデータに関して、かつ、図３および図５を一部参照して、説明する。
【００４０】
方法６００は、第１の正規表現を表現するグラフにアクセスする動作を含む（動作６０１）。例えば、分解モジュール１０１は、正規表現１１１を表現するグラフ１１２にアクセスすることができる。方法６００は、グラフを１つまたは複数のキーワード・グラフに分解する動作を含む。１つまたは複数のキーワード・グラフの各々は、１つのルート・ノード、１つまたは複数の中間ノード、および１つの葉ノードを有し、１つまたは複数の中間ノードの各々および葉ノードは、第１の正規表現に部分的にマッチする文字パターンを特定し、ルート・ノードおよび１つまたは複数の中間ノードの各々は、単一の子ノードを有し、中間ノードの１つは、葉ノードを子ノードとして有する（動作６０２）。例えば、分解モジュール１０１は、グラフ１１２をキーワード・グラフ１１３（例えば、１１３Ａ、１１３Ｂ、１１３Ｃ、等）に分解することができる。
【００４１】
方法６００は、１つまたは複数のキーワード・グラフの各々の葉ノードに、第１の正規表現のマッチ状態としてラベルを付す動作を含む（動作６０３）。例えば、ラベリング・モジュール１０２は、キーワード・グラフ１１３の葉ノードにラベルを付して、ラベル付きのキーワード・グラフ１１３ＡＬ、１１３ＢＬ、１１３ＢＬ、等を生成することができる。
【００４２】
方法６００は、第２の正規表現を表現する第２のグラフにアクセスする動作を含む。第２のグラフは、１つのルート・ノード、１つまたは複数の中間ノード、および１つまたは複数の葉ノードを有し、１つまたは複数の中間ノードおよび１つまたは複数の葉ノードの各々は、第２の正規表現に部分的にマッチする文字パターンを特定する（動作６０４）。例えば、ラベリング・モジュール１０２は、正規表現１２１を表現するグラフ１２３にアクセスすることができる。方法６００は、第２のグラフ内の１つまたは複数の終端ノードに、第２の正規表現のマッチ状態としてラベルを付す動作を含む（動作６０５）。例えば、ラベリング・モジュール１０２は、グラフ１２３の終端ノードにラベルを付して、ラベル付きのグラフ１２３Ｌを生成することができる。
【００４３】
方法６００は、１つまたは複数のキーワード・グラフおよび第２のグラフを、第１の正規表現および第２の正規表現の両方を集合的に表現する有向非循環グラフにマージする動作を含む（動作６０６）。例えば、マージ・モジュール１４１は、ラベル付きキーワード・グラフ１１３Ｌおよびラベル付きグラフ１２３Ｌを有向非循環グラフ１３４にマージすることができる。有向非循環グラフ１３４は、正規表現１１１および正規表現１２１を集合的に表現する。
【００４４】
動作６０６は、少なくとも部分的に重複する文字パターンを有する、１つまたは複数のキーワード・グラフおよび第２のグラフ内の任意の同様に配置された中間ノードを特定する動作の動作を含む（動作６０７）。例えば、位置検出器１４２は、もう１つのラベル付きキーワード・グラフ１１３Ｌおよびラベル付きグラフ１２３Ｌ内の同様に配置された中間ノードを特定することができる。同様に配置されたノードは、そのルート・ノードから等距離のノードであることができる。例えば、図３を参照すると、ノード３１２および３１３は同様に配置されている（両方とも、その対応するルート・ノードから１つのエッジのところにある）。同様に、図５では、ノード５１１および５１２が同様に配置されている。ノード５１３および５１４も図５において同様に配置されている。
【００４５】
同様に配置された中間ノードにおいて、重複検出器１４３は、ノードが少なくとも部分的に重複する文字パターンを有する場合を検出することができる。図３では、ノード３１２および３１３は完全に重複している。図５では、ノード５１１および５１２が部分的に重複し、ノード５１３および５１４は重複していない。
【００４６】
同様に配置され、部分的に重複する文字パターンを有する、キーワード・グラフ内の任意の特定された中間ノードおよび第２のグラフ内の任意の特定された中間ノードに対して、動作６０６は、少なくとも１つの特定された中間ノードの文字パターンを変更して、部分的に重複する文字パターンを排除する動作を含む（動作６０８）。例えば、重複補償器１４４は、中間ノードにおける文字パターンを変更して別のノードとの部分的な重複を排除することができる。図５を参照すると、ノード５１１にある文字パターン「＼ｄ」を（［０，１，４，５，６，７，８，９］と等価である）「＼ｄ−［２，３］」に変更してノード５１２との部分的な重複を排除することができる。
【００４７】
同様に配置され、部分的に重複する文字パターンを有する、キーワード・グラフ内の任意の特定された中間ノードおよび第２のグラフ内の任意の特定された中間ノードに対して、動作６０６は、キーワード・グラフと第２のグラフとの間にエッジを追加して、少なくとも１つの特定された中間ノードの文字パターンの変更を補償する動作を含む（動作６０９）。例えば、重複補償器１４４は、変更されていないノードから変更されたノードより下のノードへエッジを追加して、変更されたノードの文字パターンの変更を補償することができる。図５を参照すると、エッジ５１４をノード５１２からノード５１３に追加して、ノード５１１の文字パターンの変更を補償することができる。
【００４８】
同様に配置され、完全に重複する文字パターンを有する、キーワード・グラフ内の任意の特定された中間ノードおよび第２のグラフ内の任意の特定された中間ノードに対して、動作６０６は、キーワード・グラフおよび第２のグラフを、キーワード・グラフ内の中間ノードおよび第２のグラフ内の中間ノードを完全に重複する文字パターンを表現する単一のノードへと結合することによって結合する動作を含む（動作６１０）。例えば、重複補償器１４４は、ラベル付きのキーワード・グラフ１１３Ｌの中間ノードおよびラベル付きのグラフ１２３Ｌの中間ノードを結合することができる。図３を参照すると、ノード３１２およびノード３１３をノード３１４に結合することができる。
【００４９】
ＤＡＧの作成に続いて、ＤＡＧを状態機械上でテキストの一部に対して実行して、テキストの一部がＤＡＧで表現した任意の正規表現にマッチするかどうかを判定することができる。
【００５０】
幾つかの実施形態では、マージ・グラフを正規表現の他のパスと結合して、拡張正規表現構文（例えば、＊、＋、または数字集合）を容易にする。例えば、ＤＡＧを構築して正規表現を表現するとき、正規表現の全体をＤＡＧによって表現できないこともありうる。例えば、正規表現は、？：のような文字、または入れ子の＊演算子を含みうる。
【００５１】
さらに複雑な状態機械を構築してこれらの種類の演算子を扱うことができる。別の代替手段は、実際の正規表現とモノリシックなＤＡＧを含む複数の「テキスト・プロセッサ」を作成することである。次いで以下のアルゴリズムを使用して正規表現をマージすることができる。即ち、
正規表現を、複雑なＤＡＧとして表現できるコンポーネントおよび複雑なＤＡＧとして表現できないコンポーネントに分解する。
ａ．１２３＼ｄ＼ｄ＼ｄ（５．＊３）＊＼ｄ＼ｄ＼ｄ＼ｄを考える。
ｂ．これにより、以下のコンポーネントを生成することができる。即ち、
ｉ．ＤＡＧ：１２３＼ｄ＼ｄ＼ｄ｜＼ｄ＼ｄ＼ｄ＼ｄ
ｉｉ．正規表現：（５．＊３）＊
正規表現および単一のＤＡＧに対して全ての「テキスト・プロセッサ」を実行する。
【００５２】
これらのテキスト・プロセッサが見つかったテキスト内の位置（ＤＡＧ／Ｒｅｇｅｘにより保証されるように、既にソートされている）を収集する。
【００５３】
元の正規表現を、ＤＡＧおよびその正規表現の結果に基づいて再構築し、それが発見されたかどうかを判定する。
【００５４】
ステップ（３）の結果がヒープ集合（例えば、フィボナッチ・ヒープ）に格納されている場合は、このステップはＯ（ｎ）で束縛される。
【００５５】
したがって、生成されたＤＡＧを正規表現エンジンとともに使用して、正規表現のアルファベット全体について結果を生成することができる。マルチパスのアプローチにより、インプレースの後方トラッキングまたは前方トラッキングのない先読みまたは後読みの正規表現を実行することができ、これによりシステムの複雑度を軽減し、性能を支援する。
【００５６】
したがって、本発明の諸実施形態では、正規表現を複数の単純なキーワード・グラフに分解し、これらのキーワード・グラフを単純かつ効率的にマージし、簡略化された正規表現のアルファベットを実行できる有向非循環グラフ（ＤＡＧ）を生成する。これらの正規表現のＤＡＧの幾つかを共にマージして、正規表現の集合全体を表現する単一のＤＡＧを生成することができる。他のテキスト処理アルゴリズムおよびヒープ集合に従うＤＡＧを、マルチパスのアプローチで結合して正規表現のアルファベットを拡張することができる。
【００５７】
本発明を、その趣旨または本質的な特徴から逸脱しない他の特定の形で具体化してもよい。説明した諸実施形態は、全ての点において限定ではなく例として考えるべきである。したがって、本発明の範囲は、以上の記載ではなく添付の特許請求の範囲により示される。特許請求の範囲の意味および均等の範囲にある全ての変更は、その範囲に含まれるべきである。
【図１】
0005865918.tif 000002
【図２】
0005865918.tif 000003
【図３】
0005865918.tif 000004
【図４】
0005865918.tif 000005
【図５】
0005865918.tif 000006
【図６Ａ】
0005865918.tif 000007
【図６Ｂ】
0005865918.tif 000008