本実施例にかかる照合システムの構成に一例について説明する。図1は、本実施例にかかる照合システムの構成を示す図である。図1に示すように、この照合システムは、イベントストリーム発生装置40、ユーザ端末50、照合装置100を有する。照合装置100は、ネットワーク30を介して、イベントストリーム発生装置40、ユーザ端末50に接続される。
イベントストリーム発生装置40は、複数のイベントの系列を含むイベントストリームを発生する装置である。イベントストリーム発生装置40は、イベントストリームの情報を、照合装置100に送信する。
ユーザ端末50は、照合装置100にイベントパターンを送信し、照合装置100から照合結果を受信する装置である。
照合装置100は、イベントパターンがイベントストリームに含まれるか否かを照合する装置である。照合装置100は、照合結果をユーザ端末50に送信する。
図1に示した照合装置100の構成について説明する。図2は、本実施例にかかる照合装置の構成を示す機能ブロック図である。図2に示すように、この照合装置100は、通信部110、入力部120、表示部130、記憶部140、制御部150を有する。
通信部110は、ネットワーク30を介して、イベントストリーム発生装置40、ユーザ端末50とデータ通信を行う処理部である。後述する制御部150は、通信部110を介して、イベントストリームやイベントパターンの情報を受信する。通信部110は、所定の通信プロトコルを用いてデータ通信を行う通信装置、通信カードなどに対応する。
入力部120は、ユーザが各種の情報を照合装置100に入力するための入力装置である。例えば、入力部120は、キーボード、マウス、タッチパネルに対応する。表示部130は、各種の情報を表示する表示装置である。例えば、表示部130は、ディスプレイ、タッチパネルに対応する。
記憶部140は、イベントパターン140a、解析木140b、オートマトン140c、イベントストリーム140dを記憶する。記憶部140は、例えば、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、またはハードディスク、光ディスクなどの記憶装置に対応する。
イベントパターン140aは、イベントストリーム140dの照合に用いられるイベントパターンである。本実施例では一例として、イベントパターン140aを「P=a,((b&c)∨d),e」とする。このイベントパターンのa、b、c、d、eは、それぞれイベントa、b、c、d、eに対応する。
イベントパターンの「&」は、順不同で該当するイベントを全て照合することを示す記号である。例えば、「A&B」は、順不同でイベントA、Bの双方を照合する並列パターンである。「∨」は、少なくとも該当するイベントの片方を照合することを示す記号である。例えば、「A∨B」は、イベントA、Bのうちどちらか一方を照合する選択パターンである。
イベントパターンの「,」はパターンの区切りを示す。イベントパターンは、左側のパターンから順に照合する。例えば、イベントパターンが「P=a,((b&c)∨d),e」の場合には、「a」、「(b&c)∨d」、「e」の順に照合される。
解析木140bは、イベントパターン140aを基にして生成される解析木である。オートマトン140cは、解析木を基に生成される非決定性有限オートマトンである。
イベントストリーム140dは、複数のイベントの系列を含むデータである。図3は、イベントストリームのデータ構造の一例を示す図である。図3に示すように、このイベントストリーム140dは、イベントの系列を示すイベントストリームと、各イベントが発生した時刻とを対応づけて記憶する。
制御部150は、データ取得部150a、解析木生成部150b、オートマトン生成部150c、照合部150dを有する。例えば、制御部150は、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)などの集積装置に対応する。また、制御部150は、例えば、CPUやMPU(Micro Processing Unit)等の電子回路に対応する。
データ取得部150aは、イベントストリーム発生装置40から、イベントストリームを取得し、ユーザ端末50からイベントパターンを取得する処理部である。データ取得部150aは、イベントパターンおよびイベントストリームを、イベントパターン140a、イベントストリーム140dとして記憶部140に記憶させる。
解析木生成部150bは、イベントパターン140aを基にして、解析木140bを生成する処理部である。解析木生成部150bは、生成した解析木140bを記憶部140に記憶させる。
解析木生成部150bは、イベントパターンを「P=(a,((b&c)∨d),e)」とすると、図4に示す解析木を生成する。図4は、解析木の一例を示す図である。図4に示すように、この解析木140bは、ノード61〜69を有する。このうち、ノード61〜65は、イベントパターンの「a、b、c、d、e」にそれぞれ対応するイベントノードである。ノード66〜69は、イベントパターンの「,、,、∨、&」にそれぞれ対応する演算ノードである。
例えば、解析木生成部150bは、イベントパターン140aを辿り、演算ノードを解析木の節に設定し、対応するイベントノードを演算ノードに接続することで、解析木140bを生成する。解析木生成部150bは、如何なる従来技術を利用して、イベントパターン140aから解析木140bを生成してもよい。
オートマトン生成部150cは、解析木140bを基にして、オートマトン140cを生成する処理部である。オートマトン生成部150cは、生成したオートマトン140cを記憶部140に記憶させる。
例えば、オートマトン生成部150cは、従来技術「G.Navarro and M.Raffinot,"Flexible Pattern Matching in Strings,"Cambridge University Press.(2002)」(第5章)に記載された「Thompson Automation」の構築手法を利用して、オートマトン140cを生成する。ここで、オートマトン生成部150cのオートマトン構築法について説明する。図5〜図8は、オートマトン生成部のオートマトン構築法を説明するための図である。
単一のイベントに対するオートマトンは、図5に示すものとなる。図5は、単一イベント「P=a」に対応するオートマトンを示す。オートマトン生成部150cは、ノード1aとノード1bとを結び、イベントaによりノード1aからノード1bに遷移するオートマトンを生成する。
非連続直列パターンに対するオートマトンは、図6に示すものとなる。この非連続直列パターンは、複数のイベントを含むイベントパターンに、ノイズイベントが含まれるものである。図6は、非連続直列パターンP=(P1,P2)に対応するオートマトンを示す。オートマトン生成部150cは、パターンP1に対応するオートマトンA1と、パターンP2に対応するオートマトンA2を、図6のようにノード2bで連結する。そして、オートマトン生成部150cは、イベントP1によりノード2aからノード2bに遷移し、イベントP2によりノード2bからノード2cに遷移するオートマトンを生成する。
図6に示すオートマトンは、非連続照合を行うオートマトンである。すなわち、このオートマトンは、P1の照合の後、任意のイベント列の出現を得てからP2を照合したとしても、P=(P1,P2)の照合を認めるものである。
選択パターンに対するオートマトンは、図7に示すものとなる。図7は、選択パターンP=(P1∨P2)に対応するオートマトンを示す。オートマトン生成部150cは、ノード3aとノード3bとを結び、ノード3aとノード3dとを結ぶ。オートマトン生成部150cは、パターンP1に対応するオートマトンA1と、パターンP2に対応するオートマトンA2を、ノード3aの後のε遷移と、ノード3fの手前のε∨遷移によって連結する。
図7において、ノード3aからノード3bへの遷移およびノード3aからノード3dへの遷移をε遷移とする。例えば、あるノードからノード3aに遷移した場合に、ノード3aからノード3bへの遷移およびノード3aからノード3dへの遷移が発動する。
図7において、ノード3cからノード3fへの遷移およびノード3eからノード3fへの遷移をε∨遷移とする。例えば、イベントP1によりノード3bからノード3cに遷移した場合には、ノード3cからノード3fにε∨遷移が発動する。また、イベントP2によりノード3dからノード3eに遷移した場合には、ノード3eからノード3fにε∨遷移が発動する。ノード3fは、ノード3cからのε∨遷移、または、ノード3eからのε∨遷移のうち、どちらかのε∨遷移を受けた後に、遷移を開始するノードである。このようなノード3fを、和演算ノードとする。
並列パターンに対するオートマトンは、図8に示すものとなる。図8は、並列パターンP=(P1&P2)に対応するオートマトンを示す。オートマトン生成部150cは、ノード4aとノード4bとを結び、ノード4aとノード4dとを結ぶ。オートマトン生成部150cは、パターンP1に対応するオートマトンA1と、パターンP2に対応するオートマトンA2を、ノード4aの後のε遷移と、ノード4f手前のε&遷移によって連結する。
図8において、ノード4aからノード4bへの遷移およびノード4aからノード4dへの遷移をε遷移とする。ε遷移に関する説明は、図7のものと同様である。
図8において、ノード4cからノード4fへの遷移およびノード4eからノード4fへの遷移をε&遷移とする。例えば、イベントP1によりノード4bからノード4cに遷移した場合には、ノード4cからノード4fにε&遷移が発動する。また、イベントP2によりノード4dからノード4eに遷移した場合には、ノード4eからノード4fにε&遷移が発動する。ノード4fは、ノード4cからのε&遷移、および、ノード4eからのε&遷移のうち、双方からのε&遷移を受けた後に、遷移を開始するノードである。このようなノード4fを、積演算ノードとする。
次に、図5〜図8に示したオートマトンの構築法を用いて、オートマトン生成部150cが、解析木140bからオートマトン140dを生成する処理の一例について説明する。図9は、オートマトンを生成する処理を説明する図である。なお、オートマトンの作成に利用する解析木140bのデータ構造を、図4に示すものとする。
オートマトン生成部150aは、解析木の演算ノードのうち、この演算ノードの子ノードが共にイベントノードであるものに対して、オートマトンを作成する処理を、解析木を下から上に辿りながら、上記処理を再帰的に実行する。ただし、オートマトンを作成した部分は、イベントノードとみなす。
具体的に、図4、図9を用いて説明する。図4の解析木140bにおいて、演算ノードの子ノードが共にイベントノードとなるものは、ノード69、62、63となる。ノード69は「&」の演算ノードであるため、ノード62、63、69に対応するパターンは、並列パターンP=(b&c)である。このため、オートマトン生成部150cは、並列パターンP=(b&c)のオートマトン5を生成する。
図9の1段目に示すように、オートマトン生成部150cは、ノード5aとノード5bとを結び、ノード5aとノード5dとを結ぶ。オートマトン生成部150cは、ノード5bとノード5cを結び、ノード5dとノード5eを結ぶ。オートマトン生成部150cは、ノード5cとノード5fとを結び、ノード5eとノード5fとを結ぶ。そして、オートマトン生成部150cは、イベントbによりノード5bからノード5cに遷移し、イベントcによりノード5dからノード5eに遷移するオートマトン5を生成する。
オートマトン生成部150cは、オートマトン5において、ノード5aからノード5bへの遷移およびノード5aからノード5dへの遷移をε遷移とする。オートマトン生成部150cは、ノード5cから5fへの遷移およびノード5eからノード5fへの遷移をε&遷移とする。また、オートマトン生成部150cは、ノード5fを、積演算ノードとする。
オートマトン生成部150cがオートマトン5を生成した後の処理を説明する。図4の解析木140bにおいて、演算ノードの子ノードが共にイベントノードとなるものは、オートマトン5に対応するノード群と、ノード64、68となる。ノード68は「∨」の演算ノードであるため、オートマトン5に対応するノード群と、ノード64、68に対応するパターンは、選択パターンP=(P5∨d)となる。P5は、オートマトン5のノード62、63、69に対応する。オートマトン生成部150cは、選択パターンP=(P5∨d)のオートマトン6を生成する。
図9の2段目に示すように、オートマトン生成部150cは、ノード6aとノード5aとを結び、ノード6aとノード6bとを結び、ノード6bとノード6cとを結ぶ。また、オートマトン生成部150cは、ノード5fとノード6dとを結び、ノード6cとノード6dとを結ぶ。そして、オートマトン生成部150cは、イベントdによりノード6bからノード6cに遷移するオートマトン6を生成する。なお、オートマトン6に含まれるオートマト5に関する説明は、上記のものと同様である。
オートマトン生成部150cは、オートマトン6において、ノード6aからノード5aへの遷移およびノード6aからノード6bへの遷移をε遷移とする。オートマトン生成部150cは、ノード5fから6dへの遷移およびノード6cからノード6dへの遷移をε∨遷移とする。また、オートマトン生成部150cは、ノード6dを、和演算ノードとする。
オートマトン生成部150cがオートマトン6を生成した後の処理を説明する。図4の解析木140bにおいて、演算ノードの子ノードが共にイベントノードとなるものは、オートマトン6に対応するノード群と、ノード65、67となる。ノード67は「,」の演算ノードであるため、オートマトン6に対応するノード群と、ノード65、67に対応するパターンは、非連続直列パターンP=(P6,e)となる。P6は、オートマトン6のノード62、63、64、68、69に対応する。オートマトン生成部150cは、非連続直列パターンP=(P6,e)のオートマトン7を生成する。
図9の3段目に示すように、オートマトン生成部150cは、ノート6dとノード7aとを結ぶ。そして、オートマトン生成部150cは、イベントeによりノード6dからノード7aに遷移するオートマトン7を生成する。なお、オートマトン7に含まれるオートマトン6に関する説明は、上記のものと同様である。
オートマトン生成部150cがオートマトン7を生成した後の処理を説明する。図4の解析木140bにおいて、演算ノードの子ノードが共にイベントノードとなるものは、オートマトン7に対応するノード群と、ノード61、66となる。ノード66は「,」の演算ノードであるため、オートマトン7に対応するノード群と、ノード61、66に対応するパターンは、非連続直列パターンP=(P7,a)となる。P7は、オートマトン7のノード62、63、64、65、67、68、69に対応する。オートマトン生成部150cは、非連続直列パターンP=(P7,e)のオートマトン8を生成する。
図9の4段目に示すように、オートマトン生成部150cは、ノード8aとノード6aとを結ぶ。そして、オートマトン生成部150cは、イベントaによりノード8aからノード6aに遷移するオートマトン8を生成する。なお、オートマトン8に含まれるオートマトン7に関する説明は、上記のものと同様である。
オートマトン生成部150cがオートマトン8を生成した後の処理を説明する。オートマトン生成部150cは、オートマトン8の開始ノードとなるノード8aを、初期状態に指定する。また、オートマトン生成部150cは、オートマトン8の最終ノートとなるノード7aを最終状態に指定する。
また、オートマトン生成部150cは、オートマトン8の各ノード5a〜5f、6a〜6d、7a、8aに、状態番号を付与する。オートマトン生成部150cは、初期状態から最終状態に至る任意の経路上において、昇順となるように状態番号を割り当てる。図9の5段目に示す例では、オートマトン生成部150cは、ノード8a、6a、5a、5b、5cの状態番号を1、2、3、4、5とする。オートマトン生成部150cは、ノード5d、5e、5fの状態番号を6、7、8とする。オートマトン生成部150cは、ノード6b、6c、6d、7aの状態番号を9、10、11、12とする。
上述したように、オートマトン生成部150cは、図9に示す処理を実行することで、解析木140bからオートマトン140cを生成する。
ここで、図9に示したオートマトン140cに含まれるノードのデータ構造の一例について説明する。図10は、ノードのデータ構造の一例を示す図である。図10に示すように、ノードは、状態番号、状態種別、遷移種別、遷移先ノードへのポインタ、イベント集合を有する。なお、遷移先のノードが複数の場合には、遷移先ノードへのポインタは複数存在する。
状態番号は、各ノードに割り振られるユニークな番号である。状態種別は、ノードの状態の種別に対応する。例えば、状態種別には、ノードに応じて、初期状態、最終状態、&合流状態、∨合流状態が格納される。ここで、&合流状態は、該当ノードが積演算ノードである旨を示す。∨合流状態は、該当ノードが和演算ノードである旨を示す。
遷移種別には、ノードに応じて、遷移するイベントの種別、ε遷移、ε&遷移、ε∨遷移が格納される。遷移先ノードへの各ポインタはそれぞれ、遷移先のノードの位置情報を格納する。イベント集合は、初期状態のノードの遷移が発動した時点での、イベントストリームの時刻を格納する。このイベント集合には、後述の照合部150dによって時刻が格納される。
図10に示すものは、図9のノード8aに対応するノードのデータ構造である。ノード8aの状態番号は「1」であり、状態種別は「初期状態」である。ノード8aは、イベントaで遷移が発動するため、遷移種別は「イベントa」である。また、ノード8aの遷移先のノードの状態番号は「2」であるため、遷移先ノードへのポインタは「状態番号2のノードの位置情報」である。
図2の説明に戻る。照合部150dは、オートマトン140cを利用して、イベントストリーム140dを照合する処理部である。照合部150dは、照合結果をユーザ端末50に通知する。例えば、照合結果には、イベントストリーム140d上のイベントパターン140aの開始時刻と、終了時刻とが含まれる。
具体的に、照合部150dの処理について説明する。照合部150dは、イベントストリーム140dの各イベントを順に辿り、オートマトン140cの各ノードと比較し、イベントに応じて通常遷移、ε遷移、ε&遷移、ε∨遷移を発動させる。照合部150dは、初期状態からの遷移が開始した時点での、イベントストリーム140dの時刻を初期状態のイベント集合に登録する。照合部150dは、通常遷移、ε&遷移、ε∨遷移を発動する度に、遷移先のイベント集合に遷移元のイベント集合を上書きする。
なお、照合部150dは、オートマトン140cの積演算ノードに関しては、全てのε&遷移が発動した後に、遷移を開始させる。また、照合部150dは、ε&遷移の遷移元の各ノードのイベント集合に共通する値を、積演算ノードのイベント集合に上書きする。
また、オートマトン140cの和演算ノードに関しては、いずれか一つのε∨遷移が発動した後に、遷移を開始させる。また、照合部150dは、ε∨遷移の遷移元の各ノードのイベント集合のいずれか少なくとも一つに含まれる値を全て、和演算ノードのイベント集合に上書きする。
照合部150dは、最終状態への遷移が発動した時点で、照合完了とし、開始時刻と終了時刻とを出力する。
次に、図を用いて照合部150dの処理を説明する。図11〜図19は、照合部の処理を説明するための図である。なお、図11〜図19の説明では、状態番号によって、各ノードを区別して説明する。以下では、状態番号1〜12のノードを、状態1〜12として説明する。また、オートマトン140cと比較するイベントストリーム140dを、図3に示すものとする。
図11について説明する。照合部150dは、状態1〜12のイベント集合として、空集合を付与する。図11において「{}」は、各状態に対応するイベント集合を示す。図11に示すように、各イベント集合は、空集合となっている。
図3および図12の説明に移行する。照合部150dは、イベントストリーム140dから時刻1のイベント「y」を取得する。オートマトン140cには「y」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部150dは、ε遷移、ε&遷移、ε遷移が発動させる。各状態のイベント集合は空集合であるため、各状態のイベント集合は空集合のままとなる。
照合部150dは、イベントストリーム140dから時刻2のイベント「z」を取得する。オートマトン140cには「z」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部150dは、ε遷移、ε&遷移、ε遷移が発動させる。各状態のイベント集合は空集合であるため、各状態のイベント集合は空集合のままとなる。
図3および図13の説明に移行する。照合部150dは、イベントストリーム140dから時刻3のイベント「a」を取得する。イベント「a」によって通常遷移が起こるのは状態1である。照合部150dは、状態1のイベント集合に「3」を設定する。また、イベントaにより通常遷移が発生し、状態2のイベント集合に「3」を設定する。
また、照合部150dは、状態2からのε遷移により、状態3、9のイベント集合に、状態2のイベント集合の値「3」を上書きする。同様にして、照合部150dは、状態3からのε遷移により、状態4、6のイベント集合に、状態3のイベント集合「3」を上書きする。
図3および図14の説明に移行する。照合部150dは、イベントストリーム140dから、時刻4、5、6、7のイベント「z、y、x、z」を順次取得する。オートマトン140cには「z、y、x、z」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部150dは、ε遷移、ε&遷移、ε遷移を発動させる。各状態5、7、8、10のイベント集合は空集合であるため、状態11、12のイベント集合は空集合のままとなる。
図3および図15の説明に移行する。照合部150dは、イベントストリーム140dから、時刻8のイベントcを取得する。イベント「c」によって通常遷移が起こるのは状態6である。照合部150dは、状態7のイベント集合に、状態6のイベント集合「3」を上書きする。
また、照合部150dは、状態5のイベント集合と、状態7のイベント集合との積集合を計算し、計算結果を状態8に上書きする。状態5のイベント集合と、状態7のイベント集合との積集合は、空集合であるため、状態8のイベント集合は、空集合のままとなる。また、状態10、11、12のイベント集合も空集合のままとなる。
図3および図16の説明に移行する。照合部150dは、イベントストリーム140dから、時刻9、10のイベント「z、z」を順次取得する。オートマトン140cには「z、z」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部150dは、ε遷移、ε&遷移、ε遷移を発動させる。状態5のイベント集合と、状態7のイベント集合との積集合は、空集合であるため、状態8のイベント集合は、空集合のままとなる。また、状態10、11、12のイベント集合も空集合のままとなる。
図3および図17の説明に移行する。照合部150dは、イベントストリーム140dから、時刻11のイベントbを取得する。イベント「b」によって通常遷移が起こるのは状態4である。照合部150dは、状態5のイベント集合に、状態4のイベント集合「3」を上書きする。
また、照合部150dは、状態5のイベント集合と、状態7のイベント集合との積集合を計算し、計算結果を状態8に上書きする。状態5のイベント集合と、状態7のイベント集合との積集合は「3」である。このため、照合部150dは、状態8のイベント集合に「3」を上書きする。
また、照合部150dは、状態8のイベント集合と、状態9のイベント集合との和集合を計算し、計算結果を状態11に上書きする。状態8のイベント集合と、状態10のイベント集合との和集合は「3」である。このため、照合部150dは、状態11のイベント集合に「3」を上書きする。なお、状態10、12のイベント集合は、空集合のままとなる。
図3および図18の説明に移行する。照合部150dは、イベントストリーム140dから、時刻12のイベントeを取得する。イベント「e」によって通常遷移が起こるのは状態11である。照合部150dは、状態12のイベント集合に、状態11のイベント集合「3」を上書きする。
照合部150dは、最終状態11に対する通常遷移が発生したので、照合結果を出力する。照合結果の開始時刻は、状態11のイベント集合の値「3」とし、終了時刻は、状態11への通常遷移が発生した時刻「12」とする。なお、照合部150dは、ε遷移、ε&遷移、ε∨遷移を発動させるが、他の状態のイベント集合に変化はない。
図3および図19の説明に移行する。照合部150dは、イベントストリーム140dから、時刻13、14のイベント「z、y」を順次取得する。オートマトン140cには「z、y」に対応する通常遷移が存在しないので、通常遷移は発動しない。また、照合部150dは、ε遷移、ε&遷移、ε遷移を発動させるが、各状態のイベント集合に変化はない。
照合部150dは、上述した図11〜図19に示す処理を実行することにより、オートマトン140cを利用して、イベントストリーム140dを照合する。照合部150dは、照合結果をユーザ端末50に通知する。なお、照合部150dは、照合結果を表示部130に表示させてもよい。
次に、図2に示した照合装置100の処理手順について説明する。図20は、照合装置の処理手順を示すフローチャートである。例えば、図20に示す処理は、イベントパターン140aとイベントストリーム140dとを取得した後に、オートマトン140cを生成したことを契機にして実行される。
図20に示すように、照合装置100は、iの値を1に設定し(ステップS101)、イベントS[i]が存在するか否かを判定する(ステップS102)。ここで、イベントS[i]は、イベントストリーム140dの時刻iのイベントに対応する。
照合装置100は、イベントS[i]が存在しない場合には(ステップS102,No)、処理を終了する。一方、照合装置100は、イベントS[i]が存在する場合には(ステップS102,Yes)、イベントS[i]を読み込む(ステップS103)。
照合装置100は、イベントS[i]に関するオートマトンN(P)の全ての通常遷移を発動する(ステップS104)。ここで、オートマトンN(P)は、オートマトン140cに対応する。
照合装置100は、オートマトンN(P)の全てのε遷移、ε&遷移、ε∨遷移を発動する(ステップS105)。照合装置100は、iに1を加算し(ステップS106)、ステップS102に移行する。
次に、図20のステップS104に示した通常遷移を発動する処理について説明する。図21は、通常遷移を発動する処理の処理手順を示すフローチャートである。図21に示すように、照合装置100は、jの値に1を設定し、kの値に0を設定する(ステップS201)。ここで、jはオートマトン140cの状態番号に対応するものである。また、kは遷移先の状態番号に対応するものである。
照合装置100は、状態jが存在しない場合には(ステップS202,No)、処理を終了する。一方、照合装置100は、状態jが存在する場合には(ステップS202,Yes)、状態jからイベントS[i]に関する通常遷移が出ているか否かを判定する(ステップS203)。
照合装置100は、状態jからイベントS[i]に関する通常遷移が出ていない場合には(ステップS203,No)、jの値に1を加算し(ステップS204)、ステップS202に移行する。
一方、照合装置100は、状態jからイベントS[i]に関する通常遷移が出ている場合には(ステップS203,Yes)、状態jは初期状態であるか否かを判定する(ステップS205)。
照合装置100は、状態jが初期状態の場合には(ステップS205,Yes)、状態jのイベント集合に現在の時刻iを追加し(ステップS206)、ステップS207に移行する。
照合装置100は、状態jの通常遷移先の状態番号をkに代入し(ステップS207)、状態kのイベント集合に、状態jのイベント集合を上書きする(ステップS208)。照合装置100は、状態kが最終状態ではない場合には(ステップS209,No)、ステップS204に移行する。
一方、状態kが最終状態の場合には(ステップS209,Yes)、状態kのイベント集合の値とiの組を出力し(ステップS210)、ステップS204に移行する。
次に、図20のステップS105に示したε遷移、ε&遷移、ε∨遷移を発動する処理について説明する。図22は、ε遷移、ε&遷移、ε∨遷移を発動する処理の処理手順を示すフローチャートである。
図22に示すように、照合装置100は、jの値に1を設定し、kの値に0を設定する(ステップS301)。照合装置100は、状態jが存在しない場合には(ステップS302,Yes)、処理を終了する。
照合装置100は、状態jが存在する場合には(ステップS302,No)、ε&遷移またはε∨遷移であるか否かを判定する(ステップS303)。照合装置100は、ε&遷移またはε∨遷移ではない場合には(ステップS303,No)、ε遷移関連処理を実行し(ステップS304)、ステップS302に移行する。
一方、照合装置100は、ε&遷移またはε∨遷移の場合には(ステップS303,Yes)、ε&遷移であるか否かを判定する(ステップS305)。照合装置100は、ε&遷移の場合には(ステップS305,Yes)、状態jのε&遷移元の各状態におけるイベント集合の積集合を求め、求めたものを状態jのイベント集合に設定する(ステップS306)。
一方、照合装置100は、ε∨遷移の場合には(ステップS305,No)、状態jのε∨遷移元の各状態におけるイベント集合の和集合を求め、求めたものを状態jのイベント集合に設定する(ステップS307)。
照合装置100は、状態jが最終状態の場合には(ステップS308,Yes)、状態jのイベント集合中の値と、iとの組を出力し(ステップS309)、jの値に1を加算し(ステップS310)、ステップS302に移行する。
一方、状態jが最終状態ではない場合には(ステップS308,No)、ステップS302に移行する。
次に、図22のステップS304に示したε遷移関連処理の処理手順について説明する。図23は、ε遷移関連処理の処理手順を示すフローチャートである。照合装置100は、状態jからε遷移が出ていない場合には(ステップS401,No)、ステップS407に移行する。
一方、照合装置100は、状態jからε遷移が出ている場合には(ステップS401,Yes)、状態jの遷移先のうち、未処理な状態の状態番号の一つをkに代入する(ステップS402)。
照合装置100は、状態kのイベント集合に、状態jのイベント集合を上書きし(ステップS403)、状態kが最終状態であるか否かを判定する(ステップS404)。照合装置100は、状態kが最終状態ではない場合には(ステップS404,No)、ステップS406に移行する。
状態kが最終状態の場合には(ステップS404,Yes)、照合装置100は、状態kのイベント集合の値と、iとの組を出力する(ステップS405)。照合装置100は、状態jからのε遷移を全て処理していない場合には(ステップS406,No)、ステップS402に移行する。
一方、照合装置100は、状態jからのε遷移を全て処理した場合には(ステップS406,Yes)、jの値に1を加算し(ステップS407)、処理を終了する。
次に、本実施例にかかる照合装置100の効果について説明する。照合装置100は、イベントパターン140aを基にして解析木140bを生成する。照合装置100は、解析木140bを辿り、積演算ノードの子ノードを並列に積演算ノードに接続し、和演算ノードの子ノードを並列に和演算ノードに接続することで、オートマトン140cを生成する。そして、照合装置100は、イベントストリーム140dとオートマトン140cとを比較し、イベントストリーム140dにイベントパターン140aが含まれているか否かを照合する。照合装置100は、オートマトン140cの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させる。また、照合装置100は、オートマトン140cの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させる。照合装置100によれば、イベントパターンの「&」で表現される並列パターンに含まれるイベントの発生順序の全ての組み合わせを含めなくても、照合を行うことができるため、イベントパターンを効率的に照合することができる。
また、照合装置100は、初期状態の通常遷移が発生した場合に、イベントストリームの時刻をイベント集合に記憶し、遷移元のノードのイベント集合の時刻を、遷移先のノードのイベント集合に順次記憶していく。そして、照合装置100は、終了状態に遷移した場合に、終了状態に遷移したイベントの時刻と、イベント集合の時刻とを対応づけて出力する。このため、照合装置100によれば、イベントストリームにおける、イベントパターンの開始時刻と終了時刻とを照合結果として出力することができる。
ところで、図2に示した照合部150dの処理は一例であり、各種の拡張が可能である。以下において、照合部150dのその他の処理1、2、3、4について順に説明する。
その他の処理1について説明する。照合部150dは、最大照合幅を導入してもよい。例えば、照合部150dは、開始時刻と終了時刻との間に含まれるイベント数が閾値未満の場合に、照合結果として、開始時刻と終了時刻との組を出力する。照合部150dがこのような処理を行うことで、開始時刻から終了時刻がかけ離れたものを照合結果として出力することを避けることができる。
その他の処理2について説明する。上記実施例では、開始状態の通常遷移が発生する度に、開始状態のイベント集合に時刻を登録する。このため、各状態のイベント集合には、複数の時刻が含まれる場合があり得た。これに対して、その他の処理2では、照合部150dは、ある状態に到達した最新のイベントの時刻を1つ、イベント集合に登録するものとする。
例えば、照合部150dは、時刻3においてイベントaが発生し、状態1の通常遷移が発動した場合には、状態1のイベント集合に「3」を登録する。その後、照合部150dは、時刻15において、イベントaが再度発生し、状態1の通常遷移が発動した場合には、状態1のイベント集合を「15」に上書きする。他の状態についても、照合部150dは、最新のイベントの時刻を、状態のイベント集合に登録する。照合部150dがこのような処理を実行することで、開始時刻と終了時刻の区間が極小となるもののみを照合結果として出力することができる。
その他の処理3について説明する。照合部150dは、積演算ノードに対して、積集合に含まれる値のうち、最小値を、積演算ノードのイベント集合に登録する。例えば、図19において、仮に、状態5のイベント集合を「3」、状態7のイベント集合を「15」とした場合には、状態8のイベント集合を「3」に設定する。
また、照合部150dは、和演算ノードに対して、和集合に含まれる値のうち、最大値を、和演算ノードのイベント集合に登録する。例えば、図19において、仮に、状態8のイベント集合を「3」、状態10のイベント集合を「16」とした場合には、状態11のイベント集合を「16」に設定する。このような処理を照合部150dが実行することで、計算効率、記憶部の領域効率を更に向上させることができる。
その他の処理4について説明する。照合部150dは、最終状態への遷移が発生し、最終状態のイベントの時刻が新たな値に置き換わった場合にのみ、開始時刻、終了時刻の組を出力してもよい。
ここで、従来手法、本発明の照合装置、さらなる改善を加えた本発明の照合装置の時間計算量、領域計算量について示す。図24は、時間計算量および領域計算量の比較結果を示す図である。図24において、mはイベントパターン長、nはイベントストリーム長、wは最大参照幅に対応するものである。
図24に示すように、従来手法では、時間計算量が、最大照合幅がない場合に「O(mn2)」となり、最大照合幅がある場合に「O(mnw)」となる。従来手法では、領域計算量が、最大照合幅がない場合に「O(m!n)」となり、最大照合幅がある場合に「O(m!w)」となる。
これに対して、本発明では、時間計算量が、最大照合幅がない場合に「O(mn2)」となり、最大照合幅がある場合に「O(mnw)」となる。本発明では、領域計算量が、最大照合幅がない場合に「O(mn)」となり、最大照合幅がある場合に「O(mw)」となる。このため、従来手法と比較して、本発明は領域計算量が飛躍的に小さくなる。
また、その他の処理2〜4により極小照合のみの出力に対応した本発明では、時間計算量が、最大照合幅がない場合に「O(mn)」となり、最大照合幅がある場合に「O(mw)」となる。また、その他の処理2〜4により極小照合のみの出力に対応した本発明では、領域計算量が、最大照合幅がない場合に「O(m)」となり、最大照合幅がある場合に「O(m)」となる。このため、かかる発明では、他のものと比較して、時間計算量、領域計算量を共に改善することができる。
次に、図2に示した照合装置100と同様の機能を実現する照合プログラムを実行するコンピュータの一例を説明する。図25は、照合プログラムを実行するコンピュータの一例を示す図である。
図25に示すように、コンピュータ200は、各種演算処理を実行するCPU201と、ユーザからのデータの入力を受け付ける入力装置202と、ディスプレイ203を有する。また、コンピュータ200は、記憶媒体からプログラム等を読取る読み取り装置204と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置205とを有する。また、コンピュータ200は、各種情報を一時記憶するRAM206と、ハードディスク装置207を有する。そして、各装置201〜207は、バス208に接続される。
ハードディスク装置207は、解析木生成プログラム207a、オートマトン生成プログラム207b、照合プログラム207cを記憶する。CPU201は、各プログラム207a〜207cを読み出して、RAM206に展開する。解析木生成プログラム207aは、解析木生成プロセス206aとして機能する。オートマトン生成プログラム207bは、オートマトン生成プロセス206bとして機能する。照合プログラム207cは、照合プロセス206cとして機能する。
例えば、解析木生成プロセス206aは、解析木生成部150bに対応する。オートマトン生成プロセス206bは、オートマトン生成部150cに対応する。照合プロセス206cは、照合部150dに対応する。
なお、各プログラム207a〜207cについては、必ずしも最初からハードディスク装置207に記憶させておかなくてもよい。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ200がこれらから各プログラム207a〜207cを読み出して実行するようにしてもよい。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)単一のイベントの第1パターン、複数のイベントのうち順不同で全てのイベントが発生する第2パターン、または、複数のイベントのうちいずれかのイベントが発生する第3パターンを含み、第1パターン、第2パターン、第3パターンの発生順序を示すイベントパターンに基づいて、前記イベントに対応するイベントノードと、前記第2パターンのイベント間の関係を示す積演算ノードと、前記第3パターンのイベント間の関係を示す和演算ノードとを木構造状に関連付けた解析木を生成する解析木生成部と、
前記解析木を辿り、前記積演算ノードの子ノードを並列に前記積演算ノードに接続する処理、および、前記和演算ノードの子ノードを並列に前記和演算ノードに接続する処理を行うことで、オートマトンを生成するオートマトン生成部と、
複数のイベントの発生順序を含むイベントストリームと、前記オートマトンとを順次比較し、前記オートマトンの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させ、前記オートマトンの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させることで、前記イベントストリームに前記イベントパターンが含まれているか否かを照合する照合部と
を有することを特徴とする照合装置。
(付記2)前記照合部は、遷移の開始したイベントストリームの開始時刻を特定し、前記オートマトンにおいてノード間の遷移が発生する度に、遷移先のノードのイベント集合に前記開始時刻を順次記憶していき、前記オートマトンの最終状態に到達した場合には、前記最終状態に遷移する前記イベントストリームの終了時刻と、前記開始時刻とを対応づけて出力することを特徴とする付記1に記載の照合装置。
(付記3)前記照合部は、前記イベントストリームの前記開始時刻に対応するイベントと、前記終了時刻に対応するイベントとの間に含まれるイベント数が閾値未満の場合に、前記開始時刻と前記終了時刻とを出力することを特徴とする付記2に記載の照合装置。
(付記4)前記照合部は、前記オートマトンの異なるノードから前記積演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が小さい方の開始時刻を、前記積演算ノードのイベント集合に記憶することを特徴とする付記2または3に記載の照合装置。
(付記5)前記照合部は、前記オートマトンの異なるノードから前記和演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が大きい方の開始時刻を、前記和演算ノードのイベント集合に記憶することを特徴とする付記2、3または4に記載の照合装置。
(付記6)コンピュータに、
単一のイベントの第1パターン、複数のイベントのうち順不同で全てのイベントが発生する第2パターン、または、複数のイベントのうちいずれかのイベントが発生する第3パターンを含み、第1パターン、第2パターン、第3パターンの発生順序を示すイベントパターンに基づいて、前記イベントに対応するイベントノードと、前記第2パターンのイベント間の関係を示す積演算ノードと、前記第3パターンのイベント間の関係を示す和演算ノードとを木構造状に関連付けた解析木を生成して記憶装置に記憶し、
前記記憶装置に記憶された前記解析木を辿り、前記積演算ノードの子ノードを並列に前記積演算ノードに接続する処理、および、前記和演算ノードの子ノードを並列に前記和演算ノードに接続する処理を行うことで、オートマトンを生成して記憶装置に記憶し、
複数のイベントの発生順序を含むイベントストリームと、前記オートマトンとを順次比較し、前記オートマトンの積演算ノードにおいては、遷移元の全てのノードからの遷移が発動した後に遷移を開始させ、前記オートマトンの和演算ノードにおいては、遷移元のいずれかのノードからの遷移が発動した後に遷移を開始させることで、前記イベントストリームに前記イベントパターンが含まれているか否かを照合する
各処理を実行させることを特徴とする照合プログラム。
(付記7)前記照合する処理は、遷移の開始したイベントストリームの開始時刻を特定し、前記オートマトンにおいてノード間の遷移が発生する度に、遷移先のノードのイベント集合に前記開始時刻を順次記憶していき、前記オートマトンの最終状態に到達した場合には、前記最終状態に遷移する前記イベントストリームの終了時刻と、前記開始時刻とを対応づけて出力することを特徴とする付記6に記載の照合プログラム。
(付記8)前記照合する処理は、前記イベントストリームの前記開始時刻に対応するイベントと、前記終了時刻に対応するイベントとの間に含まれるイベント数が閾値未満の場合に、前記開始時刻と前記終了時刻とを出力することを特徴とする付記7に記載の照合プログラム。
(付記9)前記照合する処理は、前記オートマトンの異なるノードから前記積演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が小さい方の開始時刻を、前記積演算ノードのイベント集合に記憶することを特徴とする付記7または8に記載の照合プログラム。
(付記10)前記照合する処理は、前記オートマトンの異なるノードから前記和演算ノードに遷移が発生した場合には、異なるノードのイベント集合に記憶された開始時刻のうち、値が大きい方の開始時刻を、前記和演算ノードのイベント集合に記憶することを特徴とする付記7、8または9に記載の照合プログラム。