(57)【特許請求の範囲】
【請求項１】
単一のイベントの第１パターン、複数のイベントのうち順不同で全てのイベントが発生する第２パターン、または、複数のイベントのうちいずれかのイベントが発生する第３パターンを含み、第１パターン、第２パターン、第３パターンの発生順序を示すイベントパターンに基づいて、前記イベントに対応するイベントノードと、前記第２パターンのイベント間の関係を示す積演算ノードと、前記第３パターンのイベント間の関係を示す和演算ノードとを木構造状に関連付けた解析木を生成する解析木生成部と、
前記解析木を辿り、前記積演算ノードの子ノードを並列に前記積演算ノードに接続する処理、および、前記和演算ノードの子ノードを並列に前記和演算ノードに接続する処理を行うことで、オートマトンを生成するオートマトン生成部と、
複数のイベントの発生順序を含むイベントストリームと、前記オートマトンとを順次比較し、前記オートマトンの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させ、前記オートマトンの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させることで、前記イベントストリームに前記イベントパターンが含まれているか否かを照合する照合部と
を有することを特徴とする照合装置。
【請求項２】
前記照合部は、遷移の開始したイベントストリームの開始時刻を特定し、前記オートマトンにおいてノード間の遷移が発生する度に、遷移先のノードのイベント集合に前記開始時刻を順次記憶していき、前記オートマトンの最終状態に到達した場合には、前記最終状態に遷移する前記イベントストリームの終了時刻と、前記開始時刻とを対応づけて出力することを特徴とする請求項１に記載の照合装置。
【請求項３】
前記照合部は、前記イベントストリームの前記開始時刻に対応するイベントと、前記終了時刻に対応するイベントとの間に含まれるイベント数が閾値未満の場合に、前記開始時刻と前記終了時刻とを出力することを特徴とする請求項２に記載の照合装置。
【請求項４】
前記照合部は、前記オートマトンの異なるノードから前記積演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が小さい方の開始時刻を、前記積演算ノードのイベント集合に記憶することを特徴とする請求項２または３に記載の照合装置。
【請求項５】
前記照合部は、前記オートマトンの異なるノードから前記和演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が大きい方の開始時刻を、前記和演算ノードのイベント集合に記憶することを特徴とする請求項２、３または４に記載の照合装置。
【請求項６】
コンピュータに、
単一のイベントの第１パターン、複数のイベントのうち順不同で全てのイベントが発生する第２パターン、または、複数のイベントのうちいずれかのイベントが発生する第３パターンを含み、第１パターン、第２パターン、第３パターンの発生順序を示すイベントパターンに基づいて、前記イベントに対応するイベントノードと、前記第２パターンのイベント間の関係を示す積演算ノードと、前記第３パターンのイベント間の関係を示す和演算ノードとを木構造状に関連付けた解析木を生成して記憶装置に記憶し、
前記記憶装置に記憶された前記解析木を辿り、前記積演算ノードの子ノードを並列に前記積演算ノードに接続する処理、および、前記和演算ノードの子ノードを並列に前記和演算ノードに接続する処理を行うことで、オートマトンを生成して記憶装置に記憶し、
複数のイベントの発生順序を含むイベントストリームと、前記オートマトンとを順次比較し、前記オートマトンの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させ、前記オートマトンの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させることで、前記イベントストリームに前記イベントパターンが含まれているか否かを照合する
各処理を実行させることを特徴とする照合プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、照合装置等に関する。
【背景技術】
【０００２】
ネットワーク技術やセンサー技術の発達と普及にともない、時々刻々と大量に発生するイベントの系列を、リアルタイムに処理することを目的としたイベントストリーム処理が注目されている。以下において、イベントの系列をイベントストリームと表記する。イベントストリームを処理する分野において、イベント到着順序のパターンを検出するイベントパターン照合技術が重要視されており、様々な手法が提案されている。
【０００３】
イベントパターン照合には、例えば、以下に示す３つの性質が求められる。１つ目の性質について説明する。イベントパターン照合では、イベントストリームの途中に混じったノイズイベントを無視して照合を行うことが求められる。ここで、ノイズイベントは、照合対象となるイベント以外のイベントに対応するものである。
【０００４】
２つ目の性質について説明する。イベントパターン照合では、並列パターンや選択パターン等の各種のパターン表現に対する効率のよい照合を行うことが求められる。例えば、イベントＡとイベントＢとの並列パターンは「Ａ＆Ｂ」と表される。イベントストリームに順不同で、イベントＡ、Ｂの双方が含まれていれば「Ａ＆Ｂ」は照合完了となる。これに対して、イベントＡとイベントＢとの選択パターンは、「Ａ∨Ｂ」と表される。イベントストリームに、イベントＡまたはイベントＢのどちらか一方が含まれていれば「Ａ∨Ｂ」は照合完了となる。
【０００５】
３つ目の性質について説明する。イベントパターン照合では、イベントストリーム上のイベントパターンの照合完了時刻だけでなく、照合開始時刻もリアルタイムで検出することが求められる。
【０００６】
次に、イベントパターンを照合する従来技術の一例について説明する。図２６は、従来技術を説明するための図である。図２６に示すように、イベントストリーム１０は、イベントａ、ｂ、ｃ、ｄ、ｅ、ｘ、ｙ、ｚを含む。図２７は、イベントとイベントの説明とを対応づけた図である。図２７に示すように、イベントａは担当者の起票を示し、イベントｂは担当部長Ｂの承認を示し、イベントｃは担当部長Ｃの承認を示し、イベントｄは部長Ｄの承認を示す。また、イベントｅは取締役Ｅの承認を示し、イベントｘは課長Ｘの承認を示し、イベントｙはユーザのログイン要求を示し、イベントｚはその他の処理を示す。
【０００７】
ここでは、正しい処理手順を経た伝票のみをリアルタイムに検出し、社長に即時決済を仰ぐようなシステムを考える。正しい処理手順を、イベントパターンＰ＝（ａ，（（ｂ＆ｃ）∨ｄ），ｅ）とする。このイベントパターンＰは、下記のパターン１、２、３が順番に実行されるものに等しい。ただし、パターン１、２、３の間にノイズイベントが含まれていてもよい。
【０００８】
パターン１は、担当者が起票するものである。パターン１は、イベントパターンＰの「ａ」に対応する。
【０００９】
パターン２は、下記の部分パターン１、２のうち少なくとも一方の処理が行われるものである。部分パターン１は、順不同で、担当部長Ｂおよび担当部長Ｃが共に承認するものである。部分パターン２は、部長Ｄが承認するものである。パターン２は、イベントパターンＰの「（ｂ＆ｃ）∨ｄ」に対応する。
【００１０】
パターン３は、取締役Ｅが承認するものである。パターン３は、イベントパターンＰの「ｅ」に対応する。
【００１１】
従来技術では、イベントパターンＰと図２６に示したイベントストリーム１０とを比較する。そうすると、イベントストリーム１０の位置１０ａでイベントａが照合され、位置１０ｂでイベントｃが照合される。また、位置１０ｃでイベントｂが照合され、位置１０ｄでイベントｅが照合され、イベントパターンＰの照合が完了する。従来技術では、照合が完了した場合に、社長に決済依頼通知を送信する。
【００１２】
ところで、従来技術では、イベントパターンとイベントストリームを比較する場合に、イベントパターンに対応する非決定性有限オートマトン（NFA:Nondeterministic  Finite  Automaton）を生成して利用する。以下において、非決定性有限オートマトンを、オートマトンと略記する。図２８は、イベントパターンから生成される従来のオートマトンを示す図である。図２８に示すオートマトン２０は、イベントパターンＰ＝（ａ，（ｂ＆ｃ＆ｄ），ｅ）に対応するオートマトンである。
【００１３】
オートマトン２０は、ノード２１、２２、２３ａ〜２３ｆ、２４ａ〜２４ｆ、２５ａ〜２５ｆ、２６ａ〜２６ｆ、２７、２８をそれぞれ接続する。従来技術では、イベントパターンＰの並列パターン「ｂ＆ｃ＆ｄ」に対応するべく、「ｂ、ｃ、ｄ」の発生順序の全ての組み合わせをノード２３ａ〜２３ｆ、２４ａ〜２４ｆ、２５ａ〜２５ｆ、２６ａ〜２６ｆで表現する。なお、オートマトン２０のノードの遷移は、矢印上のイベントが発生した場合に発動する。例えば、イベントストリームのイベントａの位置に到達した場合に、ノード２１からノード２２への遷移が発動する。
【００１４】
なお、オートマトン２０の「ε」はε遷移を表す。例えば、ノード２１からノード２２への遷移が発動した場合には、ノード２２からノード２３ａ〜２３ｆへのε遷移が発動する。
【００１５】
例えば、イベントストリームを「ａ、ｂ、ｃ、ｄ、ｅ」とすると、オートマトン２０のノード２１、２２、２３ａ、２４ａ、２５ａ、２６ａ、２７、２８の順に遷移し、照合が完了する。
【先行技術文献】
【非特許文献】
【００１６】
【非特許文献１】A.Demers,et  al."Cayuga:A  General  Purpose  Event  Monitoring  System,"Proc.CIDR'07
【非特許文献２】J.Agrawal,et  al."Efficient  Pattern  Matching  over  Event  Streams"Proc.SIGMOD'08
【発明の概要】
【発明が解決しようとする課題】
【００１７】
しかしながら、上述した従来技術では、オートマトンを利用してイベントパターンを効率的に照合することができないという問題があった。
【００１８】
イベントパターンに並列パターンが存在すると、図２８に示したように並列パターンに含まれるイベントの発生順序の全ての組み合わせをオートマトンに含めることとなり、非効率である。例えば、並列パターンにイベントがｍ個存在する場合には、ノード数がＯ（ｍ！）個となる。
【００１９】
開示の技術は、上記に鑑みてなされたものであって、オートマトンを利用してイベントパターンを効率的に照合することができる照合装置および照合プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２０】
開示の照合装置は、解析木生成部、オートマトン生成部、照合部を有する。解析木生成部は、イベントパターンに基づいて、積演算ノードと和演算ノードとを木構造状に関連付けた解析木を生成する。オートマトン生成部は、解析木を辿り、積演算ノードの子ノードを並列に前記積演算ノードに接続する処理、および、和演算ノードの子ノードを並列に和演算ノードに接続する処理を行うことで、オートマトンを生成する。照合部は、イベントストリームとオートマトンとを順次比較し、イベントストリームにイベントパターンが含まれているか否かを照合する。照合部は、オートマトンの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させ、オートマトンの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させる。
【発明の効果】
【００２１】
本願の開示する照合装置の一つの態様によれば、オートマトンを利用してイベントパターンを効率的に照合することができるという効果を奏する。
【図面の簡単な説明】
【００２２】
【図１】図１は、本実施例にかかる照合システムの構成を示す図である。
【図２】図２は、本実施例にかかる照合装置の構成を示す機能ブロック図である。
【図３】図３は、イベントストリームのデータ構造の一例を示す図である。
【図４】図４は、解析木の一例を示す図である。
【図５】図５は、オートマトン生成部のオートマトン構築法を説明するための図（１）である。
【図６】図６は、オートマトン生成部のオートマトン構築法を説明するための図（２）である。
【図７】図７は、オートマトン生成部のオートマトン構築法を説明するための図（３）である。
【図８】図８は、オートマトン生成部のオートマトン構築法を説明するための図（４）である。
【図９】図９は、オートマトンを生成する処理を説明する図である。
【図１０】図１０は、ノードのデータ構造の一例を示す図である。
【図１１】図１１は、照合部の処理を説明するための図（１）である。
【図１２】図１２は、照合部の処理を説明するための図（２）である。
【図１３】図１３は、照合部の処理を説明するための図（３）である。
【図１４】図１４は、照合部の処理を説明するための図（４）である。
【図１５】図１５は、照合部の処理を説明するための図（５）である。
【図１６】図１６は、照合部の処理を説明するための図（６）である。
【図１７】図１７は、照合部の処理を説明するための図（７）である。
【図１８】図１８は、照合部の処理を説明するための図（８）である。
【図１９】図１９は、照合部の処理を説明するための図（９）である。
【図２０】図２０は、照合装置の処理手順を示すフローチャートである。
【図２１】図２１は、通常遷移を発動する処理の処理手順を示すフローチャートである。
【図２２】図２２は、ε遷移、ε＆遷移、ε∨遷移を発動する処理の処理手順を示すフローチャートである。
【図２３】図２３は、ε遷移関連処理の処理手順を示すフローチャートである。
【図２４】図２４は、時間計算量および領域計算量の比較結果を示す図である。
【図２５】図２５は、照合プログラムを実行するコンピュータの一例を示す図である。
【図２６】図２６は、従来技術を説明するための図である。
【図２７】図２７は、イベントとイベントの説明とを対応づけた図である。
【図２８】図２８は、イベントパターンから生成される従来のオートマトンを示す図である。
【発明を実施するための形態】
【００２３】
以下に、本願の開示する照合装置および照合プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００２４】
本実施例にかかる照合システムの構成に一例について説明する。図１は、本実施例にかかる照合システムの構成を示す図である。図１に示すように、この照合システムは、イベントストリーム発生装置４０、ユーザ端末５０、照合装置１００を有する。照合装置１００は、ネットワーク３０を介して、イベントストリーム発生装置４０、ユーザ端末５０に接続される。
【００２５】
イベントストリーム発生装置４０は、複数のイベントの系列を含むイベントストリームを発生する装置である。イベントストリーム発生装置４０は、イベントストリームの情報を、照合装置１００に送信する。
【００２６】
ユーザ端末５０は、照合装置１００にイベントパターンを送信し、照合装置１００から照合結果を受信する装置である。
【００２７】
照合装置１００は、イベントパターンがイベントストリームに含まれるか否かを照合する装置である。照合装置１００は、照合結果をユーザ端末５０に送信する。
【００２８】
図１に示した照合装置１００の構成について説明する。図２は、本実施例にかかる照合装置の構成を示す機能ブロック図である。図２に示すように、この照合装置１００は、通信部１１０、入力部１２０、表示部１３０、記憶部１４０、制御部１５０を有する。
【００２９】
通信部１１０は、ネットワーク３０を介して、イベントストリーム発生装置４０、ユーザ端末５０とデータ通信を行う処理部である。後述する制御部１５０は、通信部１１０を介して、イベントストリームやイベントパターンの情報を受信する。通信部１１０は、所定の通信プロトコルを用いてデータ通信を行う通信装置、通信カードなどに対応する。
【００３０】
入力部１２０は、ユーザが各種の情報を照合装置１００に入力するための入力装置である。例えば、入力部１２０は、キーボード、マウス、タッチパネルに対応する。表示部１３０は、各種の情報を表示する表示装置である。例えば、表示部１３０は、ディスプレイ、タッチパネルに対応する。
【００３１】
記憶部１４０は、イベントパターン１４０ａ、解析木１４０ｂ、オートマトン１４０ｃ、イベントストリーム１４０ｄを記憶する。記憶部１４０は、例えば、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
【００３２】
イベントパターン１４０ａは、イベントストリーム１４０ｄの照合に用いられるイベントパターンである。本実施例では一例として、イベントパターン１４０ａを「Ｐ＝ａ，（（ｂ＆ｃ）∨ｄ），ｅ」とする。このイベントパターンのａ、ｂ、ｃ、ｄ、ｅは、それぞれイベントａ、ｂ、ｃ、ｄ、ｅに対応する。
【００３３】
イベントパターンの「＆」は、順不同で該当するイベントを全て照合することを示す記号である。例えば、「Ａ＆Ｂ」は、順不同でイベントＡ、Ｂの双方を照合する並列パターンである。「∨」は、少なくとも該当するイベントの片方を照合することを示す記号である。例えば、「Ａ∨Ｂ」は、イベントＡ、Ｂのうちどちらか一方を照合する選択パターンである。
【００３４】
イベントパターンの「，」はパターンの区切りを示す。イベントパターンは、左側のパターンから順に照合する。例えば、イベントパターンが「Ｐ＝ａ，（（ｂ＆ｃ）∨ｄ），ｅ」の場合には、「ａ」、「（ｂ＆ｃ）∨ｄ」、「ｅ」の順に照合される。
【００３５】
解析木１４０ｂは、イベントパターン１４０ａを基にして生成される解析木である。オートマトン１４０ｃは、解析木を基に生成される非決定性有限オートマトンである。
【００３６】
イベントストリーム１４０ｄは、複数のイベントの系列を含むデータである。図３は、イベントストリームのデータ構造の一例を示す図である。図３に示すように、このイベントストリーム１４０ｄは、イベントの系列を示すイベントストリームと、各イベントが発生した時刻とを対応づけて記憶する。
【００３７】
制御部１５０は、データ取得部１５０ａ、解析木生成部１５０ｂ、オートマトン生成部１５０ｃ、照合部１５０ｄを有する。例えば、制御部１５０は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）や、ＦＰＧＡ（Field  Programmable  Gate  Array）などの集積装置に対応する。また、制御部１５０は、例えば、ＣＰＵやＭＰＵ（Micro  Processing  Unit）等の電子回路に対応する。
【００３８】
データ取得部１５０ａは、イベントストリーム発生装置４０から、イベントストリームを取得し、ユーザ端末５０からイベントパターンを取得する処理部である。データ取得部１５０ａは、イベントパターンおよびイベントストリームを、イベントパターン１４０ａ、イベントストリーム１４０ｄとして記憶部１４０に記憶させる。
【００３９】
解析木生成部１５０ｂは、イベントパターン１４０ａを基にして、解析木１４０ｂを生成する処理部である。解析木生成部１５０ｂは、生成した解析木１４０ｂを記憶部１４０に記憶させる。
【００４０】
解析木生成部１５０ｂは、イベントパターンを「Ｐ＝（ａ，（（ｂ＆ｃ）∨ｄ），ｅ）」とすると、図４に示す解析木を生成する。図４は、解析木の一例を示す図である。図４に示すように、この解析木１４０ｂは、ノード６１〜６９を有する。このうち、ノード６１〜６５は、イベントパターンの「ａ、ｂ、ｃ、ｄ、ｅ」にそれぞれ対応するイベントノードである。ノード６６〜６９は、イベントパターンの「，、，、∨、＆」にそれぞれ対応する演算ノードである。
【００４１】
例えば、解析木生成部１５０ｂは、イベントパターン１４０ａを辿り、演算ノードを解析木の節に設定し、対応するイベントノードを演算ノードに接続することで、解析木１４０ｂを生成する。解析木生成部１５０ｂは、如何なる従来技術を利用して、イベントパターン１４０ａから解析木１４０ｂを生成してもよい。
【００４２】
オートマトン生成部１５０ｃは、解析木１４０ｂを基にして、オートマトン１４０ｃを生成する処理部である。オートマトン生成部１５０ｃは、生成したオートマトン１４０ｃを記憶部１４０に記憶させる。
【００４３】
例えば、オートマトン生成部１５０ｃは、従来技術「G.Navarro  and  M.Raffinot,"Flexible  Pattern  Matching  in  Strings,"Cambridge  University  Press.(2002)」（第５章）に記載された「Thompson  Automation」の構築手法を利用して、オートマトン１４０ｃを生成する。ここで、オートマトン生成部１５０ｃのオートマトン構築法について説明する。図５〜図８は、オートマトン生成部のオートマトン構築法を説明するための図である。
【００４４】
単一のイベントに対するオートマトンは、図５に示すものとなる。図５は、単一イベント「Ｐ＝ａ」に対応するオートマトンを示す。オートマトン生成部１５０ｃは、ノード１ａとノード１ｂとを結び、イベントａによりノード１ａからノード１ｂに遷移するオートマトンを生成する。
【００４５】
非連続直列パターンに対するオートマトンは、図６に示すものとなる。この非連続直列パターンは、複数のイベントを含むイベントパターンに、ノイズイベントが含まれるものである。図６は、非連続直列パターンＰ＝（Ｐ１，Ｐ２）に対応するオートマトンを示す。オートマトン生成部１５０ｃは、パターンＰ１に対応するオートマトンＡ１と、パターンＰ２に対応するオートマトンＡ２を、図６のようにノード２ｂで連結する。そして、オートマトン生成部１５０ｃは、イベントＰ１によりノード２ａからノード２ｂに遷移し、イベントＰ２によりノード２ｂからノード２ｃに遷移するオートマトンを生成する。
【００４６】
図６に示すオートマトンは、非連続照合を行うオートマトンである。すなわち、このオートマトンは、Ｐ１の照合の後、任意のイベント列の出現を得てからＰ２を照合したとしても、Ｐ＝（Ｐ１，Ｐ２）の照合を認めるものである。
【００４７】
選択パターンに対するオートマトンは、図７に示すものとなる。図７は、選択パターンＰ＝（Ｐ１∨Ｐ２）に対応するオートマトンを示す。オートマトン生成部１５０ｃは、ノード３ａとノード３ｂとを結び、ノード３ａとノード３ｄとを結ぶ。オートマトン生成部１５０ｃは、パターンＰ１に対応するオートマトンＡ１と、パターンＰ２に対応するオートマトンＡ２を、ノード３ａの後のε遷移と、ノード３ｆの手前のε∨遷移によって連結する。
【００４８】
図７において、ノード３ａからノード３ｂへの遷移およびノード３ａからノード３ｄへの遷移をε遷移とする。例えば、あるノードからノード３ａに遷移した場合に、ノード３ａからノード３ｂへの遷移およびノード３ａからノード３ｄへの遷移が発動する。
【００４９】
図７において、ノード３ｃからノード３ｆへの遷移およびノード３ｅからノード３ｆへの遷移をε∨遷移とする。例えば、イベントＰ１によりノード３ｂからノード３ｃに遷移した場合には、ノード３ｃからノード３ｆにε∨遷移が発動する。また、イベントＰ２によりノード３ｄからノード３ｅに遷移した場合には、ノード３ｅからノード３ｆにε∨遷移が発動する。ノード３ｆは、ノード３ｃからのε∨遷移、または、ノード３ｅからのε∨遷移のうち、どちらかのε∨遷移を受けた後に、遷移を開始するノードである。このようなノード３ｆを、和演算ノードとする。
【００５０】
並列パターンに対するオートマトンは、図８に示すものとなる。図８は、並列パターンＰ＝（Ｐ１＆Ｐ２）に対応するオートマトンを示す。オートマトン生成部１５０ｃは、ノード４ａとノード４ｂとを結び、ノード４ａとノード４ｄとを結ぶ。オートマトン生成部１５０ｃは、パターンＰ１に対応するオートマトンＡ１と、パターンＰ２に対応するオートマトンＡ２を、ノード４ａの後のε遷移と、ノード４ｆ手前のε＆遷移によって連結する。
【００５１】
図８において、ノード４ａからノード４ｂへの遷移およびノード４ａからノード４ｄへの遷移をε遷移とする。ε遷移に関する説明は、図７のものと同様である。
【００５２】
図８において、ノード４ｃからノード４ｆへの遷移およびノード４ｅからノード４ｆへの遷移をε＆遷移とする。例えば、イベントＰ１によりノード４ｂからノード４ｃに遷移した場合には、ノード４ｃからノード４ｆにε＆遷移が発動する。また、イベントＰ２によりノード４ｄからノード４ｅに遷移した場合には、ノード４ｅからノード４ｆにε＆遷移が発動する。ノード４ｆは、ノード４ｃからのε＆遷移、および、ノード４ｅからのε＆遷移のうち、双方からのε＆遷移を受けた後に、遷移を開始するノードである。このようなノード４ｆを、積演算ノードとする。
【００５３】
次に、図５〜図８に示したオートマトンの構築法を用いて、オートマトン生成部１５０ｃが、解析木１４０ｂからオートマトン１４０ｄを生成する処理の一例について説明する。図９は、オートマトンを生成する処理を説明する図である。なお、オートマトンの作成に利用する解析木１４０ｂのデータ構造を、図４に示すものとする。
【００５４】
オートマトン生成部１５０ａは、解析木の演算ノードのうち、この演算ノードの子ノードが共にイベントノードであるものに対して、オートマトンを作成する処理を、解析木を下から上に辿りながら、上記処理を再帰的に実行する。ただし、オートマトンを作成した部分は、イベントノードとみなす。
【００５５】
具体的に、図４、図９を用いて説明する。図４の解析木１４０ｂにおいて、演算ノードの子ノードが共にイベントノードとなるものは、ノード６９、６２、６３となる。ノード６９は「＆」の演算ノードであるため、ノード６２、６３、６９に対応するパターンは、並列パターンＰ＝（ｂ＆ｃ）である。このため、オートマトン生成部１５０ｃは、並列パターンＰ＝（ｂ＆ｃ）のオートマトン５を生成する。
【００５６】
図９の１段目に示すように、オートマトン生成部１５０ｃは、ノード５ａとノード５ｂとを結び、ノード５ａとノード５ｄとを結ぶ。オートマトン生成部１５０ｃは、ノード５ｂとノード５ｃを結び、ノード５ｄとノード５ｅを結ぶ。オートマトン生成部１５０ｃは、ノード５ｃとノード５ｆとを結び、ノード５ｅとノード５ｆとを結ぶ。そして、オートマトン生成部１５０ｃは、イベントｂによりノード５ｂからノード５ｃに遷移し、イベントｃによりノード５ｄからノード５ｅに遷移するオートマトン５を生成する。
【００５７】
オートマトン生成部１５０ｃは、オートマトン５において、ノード５ａからノード５ｂへの遷移およびノード５ａからノード５ｄへの遷移をε遷移とする。オートマトン生成部１５０ｃは、ノード５ｃから５ｆへの遷移およびノード５ｅからノード５ｆへの遷移をε＆遷移とする。また、オートマトン生成部１５０ｃは、ノード５ｆを、積演算ノードとする。
【００５８】
オートマトン生成部１５０ｃがオートマトン５を生成した後の処理を説明する。図４の解析木１４０ｂにおいて、演算ノードの子ノードが共にイベントノードとなるものは、オートマトン５に対応するノード群と、ノード６４、６８となる。ノード６８は「∨」の演算ノードであるため、オートマトン５に対応するノード群と、ノード６４、６８に対応するパターンは、選択パターンＰ＝（Ｐ５∨ｄ）となる。Ｐ５は、オートマトン５のノード６２、６３、６９に対応する。オートマトン生成部１５０ｃは、選択パターンＰ＝（Ｐ５∨ｄ）のオートマトン６を生成する。
【００５９】
図９の２段目に示すように、オートマトン生成部１５０ｃは、ノード６ａとノード５ａとを結び、ノード６ａとノード６ｂとを結び、ノード６ｂとノード６ｃとを結ぶ。また、オートマトン生成部１５０ｃは、ノード５ｆとノード６ｄとを結び、ノード６ｃとノード６ｄとを結ぶ。そして、オートマトン生成部１５０ｃは、イベントｄによりノード６ｂからノード６ｃに遷移するオートマトン６を生成する。なお、オートマトン６に含まれるオートマト５に関する説明は、上記のものと同様である。
【００６０】
オートマトン生成部１５０ｃは、オートマトン６において、ノード６ａからノード５ａへの遷移およびノード６ａからノード６ｂへの遷移をε遷移とする。オートマトン生成部１５０ｃは、ノード５ｆから６ｄへの遷移およびノード６ｃからノード６ｄへの遷移をε∨遷移とする。また、オートマトン生成部１５０ｃは、ノード６ｄを、和演算ノードとする。
【００６１】
オートマトン生成部１５０ｃがオートマトン６を生成した後の処理を説明する。図４の解析木１４０ｂにおいて、演算ノードの子ノードが共にイベントノードとなるものは、オートマトン６に対応するノード群と、ノード６５、６７となる。ノード６７は「，」の演算ノードであるため、オートマトン６に対応するノード群と、ノード６５、６７に対応するパターンは、非連続直列パターンＰ＝（Ｐ６，ｅ）となる。Ｐ６は、オートマトン６のノード６２、６３、６４、６８、６９に対応する。オートマトン生成部１５０ｃは、非連続直列パターンＰ＝（Ｐ６，ｅ）のオートマトン７を生成する。
【００６２】
図９の３段目に示すように、オートマトン生成部１５０ｃは、ノート６ｄとノード７ａとを結ぶ。そして、オートマトン生成部１５０ｃは、イベントｅによりノード６ｄからノード７ａに遷移するオートマトン７を生成する。なお、オートマトン７に含まれるオートマトン６に関する説明は、上記のものと同様である。
【００６３】
オートマトン生成部１５０ｃがオートマトン７を生成した後の処理を説明する。図４の解析木１４０ｂにおいて、演算ノードの子ノードが共にイベントノードとなるものは、オートマトン７に対応するノード群と、ノード６１、６６となる。ノード６６は「，」の演算ノードであるため、オートマトン７に対応するノード群と、ノード６１、６６に対応するパターンは、非連続直列パターンＰ＝（Ｐ７，ａ）となる。Ｐ７は、オートマトン７のノード６２、６３、６４、６５、６７、６８、６９に対応する。オートマトン生成部１５０ｃは、非連続直列パターンＰ＝（Ｐ７，ｅ）のオートマトン８を生成する。
【００６４】
図９の４段目に示すように、オートマトン生成部１５０ｃは、ノード８ａとノード６ａとを結ぶ。そして、オートマトン生成部１５０ｃは、イベントａによりノード８ａからノード６ａに遷移するオートマトン８を生成する。なお、オートマトン８に含まれるオートマトン７に関する説明は、上記のものと同様である。
【００６５】
オートマトン生成部１５０ｃがオートマトン８を生成した後の処理を説明する。オートマトン生成部１５０ｃは、オートマトン８の開始ノードとなるノード８ａを、初期状態に指定する。また、オートマトン生成部１５０ｃは、オートマトン８の最終ノートとなるノード７ａを最終状態に指定する。
【００６６】
また、オートマトン生成部１５０ｃは、オートマトン８の各ノード５ａ〜５ｆ、６ａ〜６ｄ、７ａ、８ａに、状態番号を付与する。オートマトン生成部１５０ｃは、初期状態から最終状態に至る任意の経路上において、昇順となるように状態番号を割り当てる。図９の５段目に示す例では、オートマトン生成部１５０ｃは、ノード８ａ、６ａ、５ａ、５ｂ、５ｃの状態番号を１、２、３、４、５とする。オートマトン生成部１５０ｃは、ノード５ｄ、５ｅ、５ｆの状態番号を６、７、８とする。オートマトン生成部１５０ｃは、ノード６ｂ、６ｃ、６ｄ、７ａの状態番号を９、１０、１１、１２とする。
【００６７】
上述したように、オートマトン生成部１５０ｃは、図９に示す処理を実行することで、解析木１４０ｂからオートマトン１４０ｃを生成する。
【００６８】
ここで、図９に示したオートマトン１４０ｃに含まれるノードのデータ構造の一例について説明する。図１０は、ノードのデータ構造の一例を示す図である。図１０に示すように、ノードは、状態番号、状態種別、遷移種別、遷移先ノードへのポインタ、イベント集合を有する。なお、遷移先のノードが複数の場合には、遷移先ノードへのポインタは複数存在する。
【００６９】
状態番号は、各ノードに割り振られるユニークな番号である。状態種別は、ノードの状態の種別に対応する。例えば、状態種別には、ノードに応じて、初期状態、最終状態、＆合流状態、∨合流状態が格納される。ここで、＆合流状態は、該当ノードが積演算ノードである旨を示す。∨合流状態は、該当ノードが和演算ノードである旨を示す。
【００７０】
遷移種別には、ノードに応じて、遷移するイベントの種別、ε遷移、ε＆遷移、ε∨遷移が格納される。遷移先ノードへの各ポインタはそれぞれ、遷移先のノードの位置情報を格納する。イベント集合は、初期状態のノードの遷移が発動した時点での、イベントストリームの時刻を格納する。このイベント集合には、後述の照合部１５０ｄによって時刻が格納される。
【００７１】
図１０に示すものは、図９のノード８ａに対応するノードのデータ構造である。ノード８ａの状態番号は「１」であり、状態種別は「初期状態」である。ノード８ａは、イベントａで遷移が発動するため、遷移種別は「イベントａ」である。また、ノード８ａの遷移先のノードの状態番号は「２」であるため、遷移先ノードへのポインタは「状態番号２のノードの位置情報」である。
【００７２】
図２の説明に戻る。照合部１５０ｄは、オートマトン１４０ｃを利用して、イベントストリーム１４０ｄを照合する処理部である。照合部１５０ｄは、照合結果をユーザ端末５０に通知する。例えば、照合結果には、イベントストリーム１４０ｄ上のイベントパターン１４０ａの開始時刻と、終了時刻とが含まれる。
【００７３】
具体的に、照合部１５０ｄの処理について説明する。照合部１５０ｄは、イベントストリーム１４０ｄの各イベントを順に辿り、オートマトン１４０ｃの各ノードと比較し、イベントに応じて通常遷移、ε遷移、ε＆遷移、ε∨遷移を発動させる。照合部１５０ｄは、初期状態からの遷移が開始した時点での、イベントストリーム１４０ｄの時刻を初期状態のイベント集合に登録する。照合部１５０ｄは、通常遷移、ε＆遷移、ε∨遷移を発動する度に、遷移先のイベント集合に遷移元のイベント集合を上書きする。
【００７４】
なお、照合部１５０ｄは、オートマトン１４０ｃの積演算ノードに関しては、全てのε＆遷移が発動した後に、遷移を開始させる。また、照合部１５０ｄは、ε＆遷移の遷移元の各ノードのイベント集合に共通する値を、積演算ノードのイベント集合に上書きする。
【００７５】
また、オートマトン１４０ｃの和演算ノードに関しては、いずれか一つのε∨遷移が発動した後に、遷移を開始させる。また、照合部１５０ｄは、ε∨遷移の遷移元の各ノードのイベント集合のいずれか少なくとも一つに含まれる値を全て、和演算ノードのイベント集合に上書きする。
【００７６】
照合部１５０ｄは、最終状態への遷移が発動した時点で、照合完了とし、開始時刻と終了時刻とを出力する。
【００７７】
次に、図を用いて照合部１５０ｄの処理を説明する。図１１〜図１９は、照合部の処理を説明するための図である。なお、図１１〜図１９の説明では、状態番号によって、各ノードを区別して説明する。以下では、状態番号１〜１２のノードを、状態１〜１２として説明する。また、オートマトン１４０ｃと比較するイベントストリーム１４０ｄを、図３に示すものとする。
【００７８】
図１１について説明する。照合部１５０ｄは、状態１〜１２のイベント集合として、空集合を付与する。図１１において「｛｝」は、各状態に対応するイベント集合を示す。図１１に示すように、各イベント集合は、空集合となっている。
【００７９】
図３および図１２の説明に移行する。照合部１５０ｄは、イベントストリーム１４０ｄから時刻１のイベント「ｙ」を取得する。オートマトン１４０ｃには「ｙ」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部１５０ｄは、ε遷移、ε＆遷移、ε遷移が発動させる。各状態のイベント集合は空集合であるため、各状態のイベント集合は空集合のままとなる。
【００８０】
照合部１５０ｄは、イベントストリーム１４０ｄから時刻２のイベント「ｚ」を取得する。オートマトン１４０ｃには「ｚ」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部１５０ｄは、ε遷移、ε＆遷移、ε遷移が発動させる。各状態のイベント集合は空集合であるため、各状態のイベント集合は空集合のままとなる。
【００８１】
図３および図１３の説明に移行する。照合部１５０ｄは、イベントストリーム１４０ｄから時刻３のイベント「ａ」を取得する。イベント「ａ」によって通常遷移が起こるのは状態１である。照合部１５０ｄは、状態１のイベント集合に「３」を設定する。また、イベントａにより通常遷移が発生し、状態２のイベント集合に「３」を設定する。
【００８２】
また、照合部１５０ｄは、状態２からのε遷移により、状態３、９のイベント集合に、状態２のイベント集合の値「３」を上書きする。同様にして、照合部１５０ｄは、状態３からのε遷移により、状態４、６のイベント集合に、状態３のイベント集合「３」を上書きする。
【００８３】
図３および図１４の説明に移行する。照合部１５０ｄは、イベントストリーム１４０ｄから、時刻４、５、６、７のイベント「ｚ、ｙ、ｘ、ｚ」を順次取得する。オートマトン１４０ｃには「ｚ、ｙ、ｘ、ｚ」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部１５０ｄは、ε遷移、ε＆遷移、ε遷移を発動させる。各状態５、７、８、１０のイベント集合は空集合であるため、状態１１、１２のイベント集合は空集合のままとなる。
【００８４】
図３および図１５の説明に移行する。照合部１５０ｄは、イベントストリーム１４０ｄから、時刻８のイベントｃを取得する。イベント「ｃ」によって通常遷移が起こるのは状態６である。照合部１５０ｄは、状態７のイベント集合に、状態６のイベント集合「３」を上書きする。
【００８５】
また、照合部１５０ｄは、状態５のイベント集合と、状態７のイベント集合との積集合を計算し、計算結果を状態８に上書きする。状態５のイベント集合と、状態７のイベント集合との積集合は、空集合であるため、状態８のイベント集合は、空集合のままとなる。また、状態１０、１１、１２のイベント集合も空集合のままとなる。
【００８６】
図３および図１６の説明に移行する。照合部１５０ｄは、イベントストリーム１４０ｄから、時刻９、１０のイベント「ｚ、ｚ」を順次取得する。オートマトン１４０ｃには「ｚ、ｚ」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部１５０ｄは、ε遷移、ε＆遷移、ε遷移を発動させる。状態５のイベント集合と、状態７のイベント集合との積集合は、空集合であるため、状態８のイベント集合は、空集合のままとなる。また、状態１０、１１、１２のイベント集合も空集合のままとなる。
【００８７】
図３および図１７の説明に移行する。照合部１５０ｄは、イベントストリーム１４０ｄから、時刻１１のイベントｂを取得する。イベント「ｂ」によって通常遷移が起こるのは状態４である。照合部１５０ｄは、状態５のイベント集合に、状態４のイベント集合「３」を上書きする。
【００８８】
また、照合部１５０ｄは、状態５のイベント集合と、状態７のイベント集合との積集合を計算し、計算結果を状態８に上書きする。状態５のイベント集合と、状態７のイベント集合との積集合は「３」である。このため、照合部１５０ｄは、状態８のイベント集合に「３」を上書きする。
【００８９】
また、照合部１５０ｄは、状態８のイベント集合と、状態９のイベント集合との和集合を計算し、計算結果を状態１１に上書きする。状態８のイベント集合と、状態１０のイベント集合との和集合は「３」である。このため、照合部１５０ｄは、状態１１のイベント集合に「３」を上書きする。なお、状態１０、１２のイベント集合は、空集合のままとなる。
【００９０】
図３および図１８の説明に移行する。照合部１５０ｄは、イベントストリーム１４０ｄから、時刻１２のイベントｅを取得する。イベント「ｅ」によって通常遷移が起こるのは状態１１である。照合部１５０ｄは、状態１２のイベント集合に、状態１１のイベント集合「３」を上書きする。
【００９１】
照合部１５０ｄは、最終状態１１に対する通常遷移が発生したので、照合結果を出力する。照合結果の開始時刻は、状態１１のイベント集合の値「３」とし、終了時刻は、状態１１への通常遷移が発生した時刻「１２」とする。なお、照合部１５０ｄは、ε遷移、ε＆遷移、ε∨遷移を発動させるが、他の状態のイベント集合に変化はない。
【００９２】
図３および図１９の説明に移行する。照合部１５０ｄは、イベントストリーム１４０ｄから、時刻１３、１４のイベント「ｚ、ｙ」を順次取得する。オートマトン１４０ｃには「ｚ、ｙ」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部１５０ｄは、ε遷移、ε＆遷移、ε遷移を発動させるが、各状態のイベント集合に変化はない。
【００９３】
照合部１５０ｄは、上述した図１１〜図１９に示す処理を実行することにより、オートマトン１４０ｃを利用して、イベントストリーム１４０ｄを照合する。照合部１５０ｄは、照合結果をユーザ端末５０に通知する。なお、照合部１５０ｄは、照合結果を表示部１３０に表示させてもよい。
【００９４】
次に、図２に示した照合装置１００の処理手順について説明する。図２０は、照合装置の処理手順を示すフローチャートである。例えば、図２０に示す処理は、イベントパターン１４０ａとイベントストリーム１４０ｄとを取得した後に、オートマトン１４０ｃを生成したことを契機にして実行される。
【００９５】
図２０に示すように、照合装置１００は、ｉの値を１に設定し（ステップＳ１０１）、イベントＳ［ｉ］が存在するか否かを判定する（ステップＳ１０２）。ここで、イベントＳ［ｉ］は、イベントストリーム１４０ｄの時刻ｉのイベントに対応する。
【００９６】
照合装置１００は、イベントＳ［ｉ］が存在しない場合には（ステップＳ１０２，Ｎｏ）、処理を終了する。一方、照合装置１００は、イベントＳ［ｉ］が存在する場合には（ステップＳ１０２，Ｙｅｓ）、イベントＳ［ｉ］を読み込む（ステップＳ１０３）。
【００９７】
照合装置１００は、イベントＳ［ｉ］に関するオートマトンＮ（Ｐ）の全ての通常遷移を発動する（ステップＳ１０４）。ここで、オートマトンＮ（Ｐ）は、オートマトン１４０ｃに対応する。
【００９８】
照合装置１００は、オートマトンＮ（Ｐ）の全てのε遷移、ε＆遷移、ε∨遷移を発動する（ステップＳ１０５）。照合装置１００は、ｉに１を加算し（ステップＳ１０６）、ステップＳ１０２に移行する。
【００９９】
次に、図２０のステップＳ１０４に示した通常遷移を発動する処理について説明する。図２１は、通常遷移を発動する処理の処理手順を示すフローチャートである。図２１に示すように、照合装置１００は、ｊの値に１を設定し、ｋの値に０を設定する（ステップＳ２０１）。ここで、ｊはオートマトン１４０ｃの状態番号に対応するものである。また、ｋは遷移先の状態番号に対応するものである。
【０１００】
照合装置１００は、状態ｊが存在しない場合には（ステップＳ２０２，Ｎｏ）、処理を終了する。一方、照合装置１００は、状態ｊが存在する場合には（ステップＳ２０２，Ｙｅｓ）、状態ｊからイベントＳ［ｉ］に関する通常遷移が出ているか否かを判定する（ステップＳ２０３）。
【０１０１】
照合装置１００は、状態ｊからイベントＳ［ｉ］に関する通常遷移が出ていない場合には（ステップＳ２０３，Ｎｏ）、ｊの値に１を加算し（ステップＳ２０４）、ステップＳ２０２に移行する。
【０１０２】
一方、照合装置１００は、状態ｊからイベントＳ［ｉ］に関する通常遷移が出ている場合には（ステップＳ２０３，Ｙｅｓ）、状態ｊは初期状態であるか否かを判定する（ステップＳ２０５）。
【０１０３】
照合装置１００は、状態ｊが初期状態の場合には（ステップＳ２０５，Ｙｅｓ）、状態ｊのイベント集合に現在の時刻ｉを追加し（ステップＳ２０６）、ステップＳ２０７に移行する。
【０１０４】
照合装置１００は、状態ｊの通常遷移先の状態番号をｋに代入し（ステップＳ２０７）、状態ｋのイベント集合に、状態ｊのイベント集合を上書きする（ステップＳ２０８）。照合装置１００は、状態ｋが最終状態ではない場合には（ステップＳ２０９，Ｎｏ）、ステップＳ２０４に移行する。
【０１０５】
一方、状態ｋが最終状態の場合には（ステップＳ２０９，Ｙｅｓ）、状態ｋのイベント集合の値とｉの組を出力し（ステップＳ２１０）、ステップＳ２０４に移行する。
【０１０６】
次に、図２０のステップＳ１０５に示したε遷移、ε＆遷移、ε∨遷移を発動する処理について説明する。図２２は、ε遷移、ε＆遷移、ε∨遷移を発動する処理の処理手順を示すフローチャートである。
【０１０７】
図２２に示すように、照合装置１００は、ｊの値に１を設定し、ｋの値に０を設定する（ステップＳ３０１）。照合装置１００は、状態ｊが存在しない場合には（ステップＳ３０２，Ｙｅｓ）、処理を終了する。
【０１０８】
照合装置１００は、状態ｊが存在する場合には（ステップＳ３０２，Ｎｏ）、ε＆遷移またはε∨遷移であるか否かを判定する（ステップＳ３０３）。照合装置１００は、ε＆遷移またはε∨遷移ではない場合には（ステップＳ３０３，Ｎｏ）、ε遷移関連処理を実行し（ステップＳ３０４）、ステップＳ３０２に移行する。
【０１０９】
一方、照合装置１００は、ε＆遷移またはε∨遷移の場合には（ステップＳ３０３，Ｙｅｓ）、ε＆遷移であるか否かを判定する（ステップＳ３０５）。照合装置１００は、ε＆遷移の場合には（ステップＳ３０５，Ｙｅｓ）、状態ｊのε＆遷移元の各状態におけるイベント集合の積集合を求め、求めたものを状態ｊのイベント集合に設定する（ステップＳ３０６）。
【０１１０】
一方、照合装置１００は、ε∨遷移の場合には（ステップＳ３０５，Ｎｏ）、状態ｊのε∨遷移元の各状態におけるイベント集合の和集合を求め、求めたものを状態ｊのイベント集合に設定する（ステップＳ３０７）。
【０１１１】
照合装置１００は、状態ｊが最終状態の場合には（ステップＳ３０８，Ｙｅｓ）、状態ｊのイベント集合中の値と、ｉとの組を出力し（ステップＳ３０９）、ｊの値に１を加算し（ステップＳ３１０）、ステップＳ３０２に移行する。
【０１１２】
一方、状態ｊが最終状態ではない場合には（ステップＳ３０８，Ｎｏ）、ステップＳ３０２に移行する。
【０１１３】
次に、図２２のステップＳ３０４に示したε遷移関連処理の処理手順について説明する。図２３は、ε遷移関連処理の処理手順を示すフローチャートである。照合装置１００は、状態ｊからε遷移が出ていない場合には（ステップＳ４０１，Ｎｏ）、ステップＳ４０７に移行する。
【０１１４】
一方、照合装置１００は、状態ｊからε遷移が出ている場合には（ステップＳ４０１，Ｙｅｓ）、状態ｊの遷移先のうち、未処理な状態の状態番号の一つをｋに代入する（ステップＳ４０２）。
【０１１５】
照合装置１００は、状態ｋのイベント集合に、状態ｊのイベント集合を上書きし（ステップＳ４０３）、状態ｋが最終状態であるか否かを判定する（ステップＳ４０４）。照合装置１００は、状態ｋが最終状態ではない場合には（ステップＳ４０４，Ｎｏ）、ステップＳ４０６に移行する。
【０１１６】
状態ｋが最終状態の場合には（ステップＳ４０４，Ｙｅｓ）、照合装置１００は、状態ｋのイベント集合の値と、ｉとの組を出力する（ステップＳ４０５）。照合装置１００は、状態ｊからのε遷移を全て処理していない場合には（ステップＳ４０６，Ｎｏ）、ステップＳ４０２に移行する。
【０１１７】
一方、照合装置１００は、状態ｊからのε遷移を全て処理した場合には（ステップＳ４０６，Ｙｅｓ）、ｊの値に１を加算し（ステップＳ４０７）、処理を終了する。
【０１１８】
次に、本実施例にかかる照合装置１００の効果について説明する。照合装置１００は、イベントパターン１４０ａを基にして解析木１４０ｂを生成する。照合装置１００は、解析木１４０ｂを辿り、積演算ノードの子ノードを並列に積演算ノードに接続し、和演算ノードの子ノードを並列に和演算ノードに接続することで、オートマトン１４０ｃを生成する。そして、照合装置１００は、イベントストリーム１４０ｄとオートマトン１４０ｃとを比較し、イベントストリーム１４０ｄにイベントパターン１４０ａが含まれているか否かを照合する。照合装置１００は、オートマトン１４０ｃの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させる。また、照合装置１００は、オートマトン１４０ｃの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させる。照合装置１００によれば、イベントパターンの「＆」で表現される並列パターンに含まれるイベントの発生順序の全ての組み合わせを含めなくても、照合を行うことができるため、イベントパターンを効率的に照合することができる。
【０１１９】
また、照合装置１００は、初期状態の通常遷移が発生した場合に、イベントストリームの時刻をイベント集合に記憶し、遷移元のノードのイベント集合の時刻を、遷移先のノードのイベント集合に順次記憶していく。そして、照合装置１００は、終了状態に遷移した場合に、終了状態に遷移したイベントの時刻と、イベント集合の時刻とを対応づけて出力する。このため、照合装置１００によれば、イベントストリームにおける、イベントパターンの開始時刻と終了時刻とを照合結果として出力することができる。
【０１２０】
ところで、図２に示した照合部１５０ｄの処理は一例であり、各種の拡張が可能である。以下において、照合部１５０ｄのその他の処理１、２、３、４について順に説明する。
【０１２１】
その他の処理１について説明する。照合部１５０ｄは、最大照合幅を導入してもよい。例えば、照合部１５０ｄは、開始時刻と終了時刻との間に含まれるイベント数が閾値未満の場合に、照合結果として、開始時刻と終了時刻との組を出力する。照合部１５０ｄがこのような処理を行うことで、開始時刻から終了時刻がかけ離れたものを照合結果として出力することを避けることができる。
【０１２２】
その他の処理２について説明する。上記実施例では、開始状態の通常遷移が発生する度に、開始状態のイベント集合に時刻を登録する。このため、各状態のイベント集合には、複数の時刻が含まれる場合があり得た。これに対して、その他の処理２では、照合部１５０ｄは、ある状態に到達した最新のイベントの時刻を１つ、イベント集合に登録するものとする。
【０１２３】
例えば、照合部１５０ｄは、時刻３においてイベントａが発生し、状態１の通常遷移が発動した場合には、状態１のイベント集合に「３」を登録する。その後、照合部１５０ｄは、時刻１５において、イベントａが再度発生し、状態１の通常遷移が発動した場合には、状態１のイベント集合を「１５」に上書きする。他の状態についても、照合部１５０ｄは、最新のイベントの時刻を、状態のイベント集合に登録する。照合部１５０ｄがこのような処理を実行することで、開始時刻と終了時刻の区間が極小となるもののみを照合結果として出力することができる。
【０１２４】
その他の処理３について説明する。照合部１５０ｄは、積演算ノードに対して、積集合に含まれる値のうち、最小値を、積演算ノードのイベント集合に登録する。例えば、図１９において、仮に、状態５のイベント集合を「３」、状態７のイベント集合を「１５」とした場合には、状態８のイベント集合を「３」に設定する。
【０１２５】
また、照合部１５０ｄは、和演算ノードに対して、和集合に含まれる値のうち、最大値を、和演算ノードのイベント集合に登録する。例えば、図１９において、仮に、状態８のイベント集合を「３」、状態１０のイベント集合を「１６」とした場合には、状態１１のイベント集合を「１６」に設定する。このような処理を照合部１５０ｄが実行することで、計算効率、記憶部の領域効率を更に向上させることができる。
【０１２６】
その他の処理４について説明する。照合部１５０ｄは、最終状態への遷移が発生し、最終状態のイベントの時刻が新たな値に置き換わった場合にのみ、開始時刻、終了時刻の組を出力してもよい。
【０１２７】
ここで、従来手法、本発明の照合装置、さらなる改善を加えた本発明の照合装置の時間計算量、領域計算量について示す。図２４は、時間計算量および領域計算量の比較結果を示す図である。図２４において、ｍはイベントパターン長、ｎはイベントストリーム長、ｗは最大参照幅に対応するものである。
【０１２８】
図２４に示すように、従来手法では、時間計算量が、最大照合幅がない場合に「Ｏ（ｍｎ２）」となり、最大照合幅がある場合に「Ｏ（ｍｎｗ）」となる。従来手法では、領域計算量が、最大照合幅がない場合に「Ｏ（ｍ！ｎ）」となり、最大照合幅がある場合に「Ｏ（ｍ！ｗ）」となる。
【０１２９】
これに対して、本発明では、時間計算量が、最大照合幅がない場合に「Ｏ（ｍｎ２）」となり、最大照合幅がある場合に「Ｏ（ｍｎｗ）」となる。本発明では、領域計算量が、最大照合幅がない場合に「Ｏ（ｍｎ）」となり、最大照合幅がある場合に「Ｏ（ｍｗ）」となる。このため、従来手法と比較して、本発明は領域計算量が飛躍的に小さくなる。
【０１３０】
また、その他の処理２〜４により極小照合のみの出力に対応した本発明では、時間計算量が、最大照合幅がない場合に「Ｏ（ｍｎ）」となり、最大照合幅がある場合に「Ｏ（ｍｗ）」となる。また、その他の処理２〜４により極小照合のみの出力に対応した本発明では、領域計算量が、最大照合幅がない場合に「Ｏ（ｍ）」となり、最大照合幅がある場合に「Ｏ（ｍ）」となる。このため、かかる発明では、他のものと比較して、時間計算量、領域計算量を共に改善することができる。
【０１３１】
次に、図２に示した照合装置１００と同様の機能を実現する照合プログラムを実行するコンピュータの一例を説明する。図２５は、照合プログラムを実行するコンピュータの一例を示す図である。
【０１３２】
図２５に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、ディスプレイ２０３を有する。また、コンピュータ２００は、記憶媒体からプログラム等を読取る読み取り装置２０４と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０６と、ハードディスク装置２０７を有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【０１３３】
ハードディスク装置２０７は、解析木生成プログラム２０７ａ、オートマトン生成プログラム２０７ｂ、照合プログラム２０７ｃを記憶する。ＣＰＵ２０１は、各プログラム２０７ａ〜２０７ｃを読み出して、ＲＡＭ２０６に展開する。解析木生成プログラム２０７ａは、解析木生成プロセス２０６ａとして機能する。オートマトン生成プログラム２０７ｂは、オートマトン生成プロセス２０６ｂとして機能する。照合プログラム２０７ｃは、照合プロセス２０６ｃとして機能する。
【０１３４】
例えば、解析木生成プロセス２０６ａは、解析木生成部１５０ｂに対応する。オートマトン生成プロセス２０６ｂは、オートマトン生成部１５０ｃに対応する。照合プロセス２０６ｃは、照合部１５０ｄに対応する。
【０１３５】
なお、各プログラム２０７ａ〜２０７ｃについては、必ずしも最初からハードディスク装置２０７に記憶させておかなくてもよい。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤディスク、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ２００がこれらから各プログラム２０７ａ〜２０７ｃを読み出して実行するようにしてもよい。
【０１３６】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１３７】
（付記１）単一のイベントの第１パターン、複数のイベントのうち順不同で全てのイベントが発生する第２パターン、または、複数のイベントのうちいずれかのイベントが発生する第３パターンを含み、第１パターン、第２パターン、第３パターンの発生順序を示すイベントパターンに基づいて、前記イベントに対応するイベントノードと、前記第２パターンのイベント間の関係を示す積演算ノードと、前記第３パターンのイベント間の関係を示す和演算ノードとを木構造状に関連付けた解析木を生成する解析木生成部と、
前記解析木を辿り、前記積演算ノードの子ノードを並列に前記積演算ノードに接続する処理、および、前記和演算ノードの子ノードを並列に前記和演算ノードに接続する処理を行うことで、オートマトンを生成するオートマトン生成部と、
複数のイベントの発生順序を含むイベントストリームと、前記オートマトンとを順次比較し、前記オートマトンの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させ、前記オートマトンの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させることで、前記イベントストリームに前記イベントパターンが含まれているか否かを照合する照合部と
を有することを特徴とする照合装置。
【０１３８】
（付記２）前記照合部は、遷移の開始したイベントストリームの開始時刻を特定し、前記オートマトンにおいてノード間の遷移が発生する度に、遷移先のノードのイベント集合に前記開始時刻を順次記憶していき、前記オートマトンの最終状態に到達した場合には、前記最終状態に遷移する前記イベントストリームの終了時刻と、前記開始時刻とを対応づけて出力することを特徴とする付記１に記載の照合装置。
【０１３９】
（付記３）前記照合部は、前記イベントストリームの前記開始時刻に対応するイベントと、前記終了時刻に対応するイベントとの間に含まれるイベント数が閾値未満の場合に、前記開始時刻と前記終了時刻とを出力することを特徴とする付記２に記載の照合装置。
【０１４０】
（付記４）前記照合部は、前記オートマトンの異なるノードから前記積演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が小さい方の開始時刻を、前記積演算ノードのイベント集合に記憶することを特徴とする付記２または３に記載の照合装置。
【０１４１】
（付記５）前記照合部は、前記オートマトンの異なるノードから前記和演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が大きい方の開始時刻を、前記和演算ノードのイベント集合に記憶することを特徴とする付記２、３または４に記載の照合装置。
【０１４２】
（付記６）コンピュータに、
単一のイベントの第１パターン、複数のイベントのうち順不同で全てのイベントが発生する第２パターン、または、複数のイベントのうちいずれかのイベントが発生する第３パターンを含み、第１パターン、第２パターン、第３パターンの発生順序を示すイベントパターンに基づいて、前記イベントに対応するイベントノードと、前記第２パターンのイベント間の関係を示す積演算ノードと、前記第３パターンのイベント間の関係を示す和演算ノードとを木構造状に関連付けた解析木を生成して記憶装置に記憶し、
前記記憶装置に記憶された前記解析木を辿り、前記積演算ノードの子ノードを並列に前記積演算ノードに接続する処理、および、前記和演算ノードの子ノードを並列に前記和演算ノードに接続する処理を行うことで、オートマトンを生成して記憶装置に記憶し、
複数のイベントの発生順序を含むイベントストリームと、前記オートマトンとを順次比較し、前記オートマトンの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させ、前記オートマトンの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させることで、前記イベントストリームに前記イベントパターンが含まれているか否かを照合する
各処理を実行させることを特徴とする照合プログラム。
【０１４３】
（付記７）前記照合する処理は、遷移の開始したイベントストリームの開始時刻を特定し、前記オートマトンにおいてノード間の遷移が発生する度に、遷移先のノードのイベント集合に前記開始時刻を順次記憶していき、前記オートマトンの最終状態に到達した場合には、前記最終状態に遷移する前記イベントストリームの終了時刻と、前記開始時刻とを対応づけて出力することを特徴とする付記６に記載の照合プログラム。
【０１４４】
（付記８）前記照合する処理は、前記イベントストリームの前記開始時刻に対応するイベントと、前記終了時刻に対応するイベントとの間に含まれるイベント数が閾値未満の場合に、前記開始時刻と前記終了時刻とを出力することを特徴とする付記７に記載の照合プログラム。
【０１４５】
（付記９）前記照合する処理は、前記オートマトンの異なるノードから前記積演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が小さい方の開始時刻を、前記積演算ノードのイベント集合に記憶することを特徴とする付記７または８に記載の照合プログラム。
【０１４６】
（付記１０）前記照合する処理は、前記オートマトンの異なるノードから前記和演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が大きい方の開始時刻を、前記和演算ノードのイベント集合に記憶することを特徴とする付記７、８または９に記載の照合プログラム。
【符号の説明】
【０１４７】
１００    照合装置
１１０    通信部
１２０    入力部
１３０    表示部
１４０    記憶部
１５０    制御部
【図１】
0005589952.tif 000002
【図２】
0005589952.tif 000003
【図３】
0005589952.tif 000004
【図４】
0005589952.tif 000005
【図５】
0005589952.tif 000006
【図６】
0005589952.tif 000007
【図７】
0005589952.tif 000008
【図８】
0005589952.tif 000009
【図９】
0005589952.tif 000010
【図１０】
0005589952.tif 000011
【図１１】
0005589952.tif 000012
【図１２】
0005589952.tif 000013
【図１３】
0005589952.tif 000014
【図１４】
0005589952.tif 000015
【図１５】
0005589952.tif 000016
【図１６】
0005589952.tif 000017
【図１７】
0005589952.tif 000018
【図１８】
0005589952.tif 000019
【図１９】
0005589952.tif 000020
【図２０】
0005589952.tif 000021
【図２１】
0005589952.tif 000022
【図２２】
0005589952.tif 000023
【図２３】
0005589952.tif 000024
【図２４】
0005589952.tif 000025
【図２５】
0005589952.tif 000026
【図２６】
0005589952.tif 000027
【図２７】
0005589952.tif 000028
【図２８】
0005589952.tif 000029