以下に、本願の開示する照合装置、照合方法および照合プログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
本実施例に係る照合装置の構成について説明する。図1は、本実施例に係る照合装置の構成を示す図である。図1に示すように、この照合装置100は、通信部110と、入力部120と、出力部130と、記憶部140と、制御部150とを有する。
通信部110は、ネットワークを介して他の外部装置と通信を実行する処理部である。通信部110は、通信装置に対応する。
入力部120は、照合装置100に入力するための入力装置である。例えば、入力部120は、キーボードやマウス、タッチパネル等に対応する。
出力部130は、制御部150から出力される情報を表示する表示装置である。出力部130は、液晶モニタやタッチパネル等に対応する。
記憶部140は、クエリ141と、類似クエリ142と、照合データ143と、ウィンドウデータ144と、ウィンドウ接続データ145とを有する。記憶部140は、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子などの記憶装置に対応する。
クエリ141は、イベントを一意に識別するイベント条件と、イベント条件間の間隔を示すインターバル条件とを定義したクエリの情報である。図2は、クエリのデータ構造の一例を示す図である。図2に示すように、クエリ141は、ノード50〜54を有する。ノード50はイベント条件「Aが出現」を示し、ノード51はイベント条件「Bが出現」を示し、ノード52はイベント条件「Cが出現」を示す。ノード53は、イベント条件「Dが出現」を示し、ノード54はイベント条件「Eが出現」である。
また、図2において、ノード50とノード52との間のインターバル条件を「2−4」とし、ノード50側からノード52側への方向を順方向とする。ノード51とノード52との間のインターバル条件を「2−3」とし、ノード51側からノード52側への方向を順方向とする。ノード51とノード53との間のインターバル条件を「3−5」とし、ノード51側からノード53側への方向を順方向とする。ノード52とノード54との間のインターバル条件を「2−4」とし、ノード52側からノード54側への方向を順方向とする。ノード53とノード54との間のインターバル条件を「1−2」とし、ノード53側からノード54側への方向を順方向とする。
類似クエリ142は、クエリ141に類似するクエリである。類似クエリ142は、クエリ141に基づいて生成される。類似クエリ142と照合データ143とをマッチングして得られる解は、クエリ141と照合データ143とをマッチングして得られる解を全て含む。一方、類似クエリ142と照合データ143とをマッチングして得られる解には、クエリ141と照合データ143とをマッチングして得られる解以外の解も含まれる。
類似クエリ142は、ウィンドウと、ウィンドウ幅条件と、ウィンドウインターバル条件とを定義する。類似クエリ142は、ウィンドウとウィンドウ幅条件によって、複数のイベント条件と、複数のイベント条件が出現する範囲を定義する。ウィンドウで定義したイベント条件は、ウィンドウ幅条件を満たせば、出現順序はどのような順序でも良い。類似クエリ142は、ウィンドウインターバル条件で、各ウィンドウの間隔を定義する。
図3は、類似クエリのデータ構造の一例を示す図である。図3に示すように、類似クエリ142は、ウィンドウ60,61,62を直列に接続する。ウィンドウ60には、イベント条件A,Bが含まれ、ウィンドウ幅条件は「3」である。これにより、イベント条件「イベントAが出現」および「イベントBが出現」が、ウィンドウ幅条件「3」の範囲内で出現するという条件を定義している。
ウィンドウ61には、イベント条件C,Dが含まれ、ウィンドウ幅条件は「4」である。これにより、イベント条件「イベントCが出現」および「イベントDが出現」が、ウィンドウ幅条件「4」の範囲内で出現するという条件を定義している。
ウィンドウ62には、イベント条件Eが含まれ、ウィンドウ幅条件は「1」である。これにより、イベント条件「イベントEが出現」が、ウィンドウ幅条件「1」の範囲内で出現するという条件を定義している。
また、図3に示す類似クエリ142において、ウィンドウ60,61のウィンドウインターバル条件は「1」となる。ウィンドウ61,62のウィンドウインターバル条件は「0」となる。
照合データ143は、類似クエリ142の照合対象となる情報であり、イベントの出現時刻の情報を含む。図4は、照合データのデータ構造の一例を示す図である。図4に示すように、この照合データは、時刻とイベントとを対応付ける。例えば、図4に示す例では、時刻「3」において、イベント「B」が出現する。なお、図4の照合データ143のデータイメージは、図5に示すものとなる。図5は、照合データのデータイメージを示す図である。後述する説明では、図5に示すようなデータイメージを利用して、適宜説明を行う。図5の横軸は、時刻に対応する。図5において、例えば、時刻「3」において、イベント「B」および「D」が出現している。
ウィンドウデータ144は、類似クエリ142のウィンドウのイベント条件およびウィンドウ幅条件を満たす照合データ143の部分を一意に識別する情報である。図6は、ウィンドウデータのデータ構造の一例を示す図である。図6に示すように、ウィンドウデータ144は、ウィンドウID、開始時刻、終了時刻、ウィンドウ条件番号を対応付ける。ウィンドウIDは、ウィンドウを一意に識別する情報である。開始時刻は、ウィンドウの開始時刻を示す。終了時刻は、ウィンドウの終了時刻を示す。ウィンドウ条件番号は、類似クエリ142の対応するウィンドウを示す。例えば、ウィンドウ条件番号「1,2,3」はそれぞれ、図3に示した類似クエリ142のウィンドウ60,61,62に対応する。図3では、ウィンドウ条件番号「3」を省略している。
例えば、図6に示したウィンドウID「0」のレコードは、図5の照合データ143上に設定されるウィンドウ1aに対応する。ウィンドウ1aは、イベント「A,B」を有しており、ウィンドウ幅が「3」であるため、類似クエリ142のウィンドウ60のイベント条件およびウィンドウ幅条件を満たしている。
図6に示したウィンドウID「1」のレコードは、図5の照合データ143上に設定されるウィンドウ1bに対応する。ウィンドウ1bは、イベント「C,D」を有しており、ウィンドウ幅が「4」であるため、類似クエリ142のウィンドウ61のイベント条件およびウィンドウ幅条件を満たしている。
ウィンドウ接続データ145は、照合データ143上に設定された各ウィンドウの接続関係を示す情報である。図7は、ウィンドウ接続データのデータ構造の一例を示す図である。図7に示すように、このウィンドウ接続データ145は、接続元ウィンドウIDと接続先ウィンドウIDとを対応付ける。接続元ウィンドウIDは、接続元のウィンドウIDを示す。接続先ウィンドウIDは、接続先のウィンドウIDを示す。図7に示す例では、接続元ウィンドウID「0」のウィンドウと接続先ウィンドウID「1」のウィンドウとが接続されている旨を示す。すなわち、図5のウィンドウ1aと1bとが接続関係にあることを示す。詳しい説明は後述するが、接続関係にあるウィンドウは各ウィンドウの間隔が、類似クエリ142のウィンドウインターバル条件を満たす。
図1の説明に戻る。制御部150は、特定部151、生成部151、照合部153を有する。制御部150は、例えば、ASIC(Application Specific Integrated Circuit)や、FPGA(Field Programmable Gate Array)などの集積装置に対応する。また、制御部150は、例えば、CPU(Central Processing Unit)やMPU(Micro Processing Unit)等の電子回路に対応する。
特定部151および生成部152は、協働して、クエリ141を類似クエリ142に変換する処理部である。
特定部151は、クエリ141に含まれるイベント条件の組みが、直列関係にあるのか、並列関係にあるのかを判定する。特定部151は、イベント条件の組みと、判定結果を、生成部152に出力する。
特定部151が、イベント条件の組みが、直列関係にあるのか、並列関係にあるのかを判定する並列関係判定処理の処理手順について説明する。図8は、並列関係判定処理の処理手順を示すフローチャートである。図8に示すように、特定部151は、クエリ141に含まれる二つのイベント条件を選択し、二つのイベント条件の間にインターバル条件のパスが存在するか否かを判定する(ステップS101)。特定部151は、二つのイベント条件の間にインターバル条件のパスが存在しない場合には(ステップS101,No)、二つのイベント条件は並列関係にあると判定する(ステップS102)。
一方、特定部151は、二つのイベント条件の間にインターバル条件のパスが存在する場合には(ステップS101,Yes)、ステップS103に移行する。図8の説明では、選択した二つのイベント条件をイベント条件a,bとして説明を行う。
特定部151は、イベント条件aからイベント条件bへの全てのパスの最小インターバル条件を計算し、その中で最大のものをab間の最小インターバル条件とする(ステップS103)。最小インターバル条件を計算する処理手順は後述する。
特定部151は、ab間の最小インターバル条件が、0よりも大きいか否かを判定する(ステップS104)。特定部151は、ab間の最小インターバル条件が、0よりも大きい場合には(ステップS104,Yes)、二つのイベント条件は直列関係にあると判定する(ステップS107)。
一方、特定部151は、ab間の最小インターバル条件が、0よりも大きくない場合には(ステップS104,No)、ステップS105に移行する。特定部151は、イベント条件bからイベント条件aへの全てのパスの最小インターバル条件を計算し、その中で最大のものをba間の最小インターバル条件とする(ステップS105)。
特定部151は、ba間の最小インターバル条件が、0よりも大きいか否かを判定する(ステップS106)。特定部151は、ba間の最小インターバル条件が、0よりも大きい場合には(ステップS106,Yes)、二つのイベント条件は直列関係にあると判定する(ステップS107)。
一方、特定部151は、ba間の最小インターバル条件が、0よりも大きくない場合には(ステップS106,No)、二つのイベント条件は、並列関係にあると判定する(ステップS102)。
次に、図8のステップS103およびステップS105に示したパスの最小インターバル条件を計算する処理について説明する。図9は、パスの最小インターバル条件を計算する処理手順を示すフローチャートである。
図9に示すように、特定部151は、現在のノードを始点イベント条件とする(ステップS111)。特定部151は、終了イベント条件に達したか否かを判定する(ステップS112)。特定部151は、終了イベント条件に達した場合には(ステップS112,Yes)、計算結果を出力する(ステップS113)。
特定部151は、終了イベント条件に達していない場合には(ステップS112,No)、現在のノードとパス上の次のノードとの間のインターバル条件が順方向であるか否かを判定する(ステップS114)。特定部151は、現在のノードとパス上の次のノードとの間のインターバル条件が順方向でない場合には(ステップS114,No)、最大インターバル条件を減算し(ステップS115)、ステップS117に移行する。
一方、特定部151は、現在のノードとパス上の次のノードとの間のインターバル条件が順方向の場合には(ステップS114,Yes)、最小インターバル条件を加算する(ステップS116)。特定部151は、現在のノードとパス上の次のノードを選択し(ステップS117)、ステップS112に移行する。
ここで、図2に示したクエリ141を例にして、特定部151が、イベント条件A〜Eの関係を判定する場合について説明する。
まず、イベント条件A,Bの関係について説明する。イベント条件Aからイベント条件Bに至るパスは「A→C→B」、「A→C→E→D→B」が存在する。イベント条件Bからイベント条件Aに至るパスは「B→C→A」、「B→D→E→C→A」が存在する。特定部151は、各パスの最小インターバル条件を算出する。
一例として、「A→C→B」の最小インターバル条件を算出する場合について説明する。「A→C」は、順方向であるため、「A,C」間の最小インターバル条件「2」を加算する。「C→B」は、逆方向であるため、「C,B」間の最大インターバル条件「3」を減算する。そうすると、「A→C→B」の最小インターバル条件の値は、「2−3=−1」となる。
同様の処理により、特定部151が残りの最小インターバル条件を計算すると、パス「A→C→E→D→B」の最小インターバル条件の値は「2+2−2−5=−3」となる。パス「B→C→A」の最小インターバル条件の値は「2−4=−2」となる。パス「B→D→E→C→A」の最小インターバル条件の値は「3+1−4−4=−4」となる。
イベント条件Aからイベント条件Bに至るパスの最小インターバル条件のうち、最大のものの値が「−1」であり、0以下である。イベント条件Bからイベント条件Aに至るパスの最小インターバル条件のうち、最大のものの値が「−2」であり、0以下である。このため、図8のステップS104,S106の関係により、特定部151は、イベント条件Aとイベント条件Bとの関係が「並列関係」であると判定する。
特定部151が、イベント条件A,C、A,D、A,Eの関係について上記処理と同様に判定を行うと、それぞれの関係は「直列関係」となる。
イベント条件C,Dの関係について説明する。イベント条件Cからイベント条件Dに至るパスの最小インターバル条件のうち、最大のものの値が「0」であり、0以下である。イベント条件Dからイベント条件Cに至るパスの最小インターバル条件のうち、最大のものの値が「−3」であり、0以下である。このため、特定部151は、イベント条件Cとイベント条件Dとの関係が「並列関係」であると判定する。
特定部151が、イベント条件C,Eの関係について上記処理と同様に判定を行うと、それぞれの関係は「直列関係」となる。
このため、図2に示すイベント条件A−Eについて、イベント条件A,Bの組みおよびイベント条件C,Dの組みの関係が「並列関係」となり、そのたのイベント条件の組みの関係は「直列関係」となる。
生成部152は、並列関係にあるイベント条件の組みを同一のウィンドウに設定し、各ウィンドウを直列に接続することで、クエリ141を類似クエリ142に変換する。生成部152が、類似クエリ142に生成するクエリ生成処理の処理手順について説明する。
図10は、クエリ生成処理の処理手順を示すフローチャートである。図10に示すように、生成部152は、未処理のイベント条件が存在するか否かを判定する(ステップS121)。生成部152は、未処理のイベント条件が存在する場合には(ステップS121,Yes)、未処理のイベント条件を一つ取り出す(ステップS122)。
生成部152は、未処理のイベント条件と、並列関係にあるイベント条件を特定する(ステップS123)。生成部152は、取り出した未処理のイベント条件と並列関係にある未処理のイベント条件が少なくとも一つ存在する場合には(ステップS124,Yes)、ステップS125に移行する。生成部152は、取り出した未処理のイベント条件と並列関係にある未処理のイベント条件が少なくとも一つ存在しない場合には(ステップS124,No)、ステップS126に移行する。
生成部152は、取り出したそれぞれのイベント条件と並列関係にある未処理のイベント条件を取り出し(ステップS125)、ステップS124に移行する。
生成部152は、新しいウィンドウを定義し、取り出した全てのイベント条件を、定義したウィンドウ内のイベント条件と定義し(ステップS126)、ステップS121に移行する。
ところで、生成部152は、ステップS121において、未処理のイベント条件が存在しない場合には(ステップS121,No)、ウィンドウを内部のイベント条件の順序関係に従い順番に並べる(ステップS127)。生成部152は、未処理のウィンドウが存在するか否かを判定する(ステップS128)。生成部152は、未処理のウィンドウが存在しない場合には(ステップS128,No)、処理を終了する。
一方、生成部152は、未処理のウィンドウが存在する場合には(ステップS128,Yes)、未処理のウィンドウのうち、先頭のウィンドウを取り出す(ステップS129)。生成部152は、ウィンドウインターバル条件設定処理を行い(ステップS130)、ウィンドウ幅条件設定処理を行い(ステップS131)、ステップS128に移行する。
図10のステップS130に示したウィンドウインターバル条件設定処理の処理手順について具体的に説明する。図11は、ウィンドウインターバル条件設定処理の処理手順を示すフローチャートである。図11に示すように、生成部152は、仮条件の値を無限大に設定し(ステップS141)、ウィンドウ内に未処理のイベント条件が存在するか否かを判定する(ステップS142)。生成部152は、ウィンドウ内に未処理のイベントが存在しない場合には(ステップS142,No)、仮条件の値を、ウィンドウインターバル条件の値に設定する(ステップS143)。
一方、生成部152は、ウィンドウ内に未処理のイベント条件が存在する場合には(ステップS142,Yes)、ステップS144に移行する。生成部152は、ウィンドウ内の未処理のイベント条件を一つ取り出しaとし、直後のウィンドウ内のイベント条件を全て未処理のイベント条件とする(ステップS144)。
生成部152は、直後のウィンドウ内に未処理のイベント条件が存在するか否かを判定する(ステップS145)。生成部152は、直後のウィンドウ内に未処理のイベント条件が存在しない場合には(ステップS145,No)、ステップS142に移行する。
生成部152は、直後のウィンドウ内に未処理のイベント条件が存在する場合には(ステップS145,Yes)、ステップS146に移行する。生成部152は、直後のウィンドウ内の未処理のイベント条件を取り出しbとし、aからbへの全てのパスの最小インターバル条件を計算し、計算した中で最大のものをab間最小インターバル条件とする(ステップS146)。ステップS146において、最小インターバル条件を計算する処理手順は、図9に示した処理手順と同様である。
生成部152は、ab間最小インターバル条件の値が、仮条件の値よりも小さいか否かを判定する(ステップS147)。生成部152は、ab間最小インターバル条件の値が、仮条件の値よりも小さくない場合には(ステップS147,No)、ステップS142に移行する。
生成部152は、ab間最小インターバル条件の値が、仮条件の値よりも小さい場合には(ステップS147,Yes)、ab間最小インターバル条件の値を、仮条件の値に設定し(ステップS148)、ステップS142に移行する。
図10のステップS131に示したウィンドウ幅条件設定処理の処理手順について具体的に説明する。図12は、ウィンドウ幅条件設定処理の処理手順を示すフローチャートである。図12に示すように、生成部152は、仮条件の値を0に設定し(ステップS151)、ウィンドウ内に未処理のイベント条件の組みが存在するか否かを判定する(ステップS152)。
生成部152は、ウィンドウ内に未処理のイベント条件の組みが存在しない場合には(ステップS152,No)、「ウィンドウ幅条件の値>仮条件の値+1」の条件を満たすか否かを判定する(ステップS153)。生成部152は、「ウィンドウ幅条件の値>仮条件の値+1」の条件を満たさない場合には(ステップS153,No)、処理を終了する。
一方、生成部152は、「ウィンドウ幅条件の値>仮条件の値+1」の条件を満たす場合には(ステップS153,Yes)、仮条件の値に1を加算した値を、ウィンドウ幅条件に設定する(ステップS154)。
ところで、生成部152は、ウィンドウ内に未処理のイベント条件の組みが存在する場合には(ステップS152,Yes)、ウィンドウ内の未処理の異なるイベント条件の組みa,bを取り出す(ステップS155)。ステップS155において、イベント条件aとイベント条件bとは異なるイベント条件とする。
生成部152は、イベント条件aからイベント条件bへの全てのパスの最大インターバル条件を計算し、計算結果のうち最小のものをab間最大インターバル条件とする(ステップS156)。生成部152は、イベント条件bからイベント条件aへの全てのパスの最大インターバル条件を計算し、計算結果のうち最小のものをba間最大インターバル条件とする(ステップS157)。
生成部152は、ab間最大インターバル条件の値が、仮条件の値より大きいか否かを判定する(ステップS158)。生成部152は、ab間最大インターバル条件の値が、仮条件の値よりも大きい場合には(ステップS158,Yes)、ab間最大インターバル条件の値を、仮条件の値に設定し(ステップS159)、ステップS160に移行する。
一方、生成部152は、ab間最大インターバル条件の値が、仮条件の値よりも大きくない場合には(ステップS158,No)、ba間最大インターバル条件の値が仮条件の値よりも大きいか否かを判定する(ステップS160)。
生成部152は、ba間最大インターバル条件の値が、仮条件の値よりも大きい場合には(ステップS160,Yes)、ba間最大インターバル条件の値を、仮条件の値に設定し(ステップS161)、ステップS152に移行する。一方、生成部152は、ba間最大インターバル条件の値が、仮条件の値よりも大きくない場合には(ステップS160,No)、ステップS152に移行する。
次に、図12のステップS156およびステップS157に示したパスの最大インターバル条件を計算する処理について説明する。図13は、パスの最大インターバル条件を計算する処理手順を示すフローチャートである。
図13に示すように、生成部152は、現在のノードを始点イベント条件とする(ステップS171)。生成部152は、終了イベント条件に達したか否かを判定する(ステップS172)。生成部152は、終了イベント条件に達した場合には(ステップS172,Yes)、計算結果を出力する(ステップS173)。
生成部152は、終了イベント条件に達していない場合には(ステップS172,No)、現在のノードとパス上の次のノードとの間のインターバル条件が順方向であるか否かを判定する(ステップS174)。生成部152は、現在のノードとパス上の次のノードとの間のインターバル条件が順方向でない場合には(ステップS174,No)、最小インターバル条件を減算し(ステップS175)、ステップS177に移行する。
一方、生成部152は、現在のノードとパス上の次のノードとの間のインターバル条件が順方向の場合には(ステップS174,Yes)、最大インターバル条件を加算する(ステップS176)。生成部152は、現在のノードとパス上の次のノードを選択し(ステップS177)、ステップS172に移行する。
ここで、図2に示したクエリ141を例にして、生成部152が、類似クエリ142を生成する場合について説明する。なお、生成部152は、イベント条件A−Eについて、各イベント条件が並列関係にあるか否かの判定結果を、特定部151から取得済みとする。本実施例では一例として、イベント条件A,Bの組みおよびイベント条件C,Dの組みの関係が「並列関係」とし、そのたのイベント条件の組みの関係は「直列関係」とする。
図14は、生成部の処理を説明するための図である。生成部152は、クエリ141から、イベント条件Aを取り出し、イベント条件Aと並列関係にあるイベント条件Bを取り出す。生成部152は、イベント条件A,Bを含むウィンドウ60を生成する。
図14に示すように、生成部152は、クエリ141から、イベント条件Cを取り出し、イベント条件Cと並列関係にあるイベント条件Dを取り出す。生成部152は、イベント条件C,Dを含むウィンドウ61を生成する。生成部152は、クエリ141から残りのイベント条件Eを取り出し、イベント条件Eを含むウィンドウ62を生成する。生成部152は、ウィンドウ60〜61を、内部のイベント条件の順序関係に従い、ウィンドウ60,61,62の順に並べる。
生成部152は、各ウィンドウのウィンドウインターバル条件を求めて直列に接続することで、類似クエリ142を生成する。まず、生成部152が、ウィンドウ60とウィンドウ61とのウィンドウインターバル条件を計算する場合について説明する。
クエリ141を参照すると、ウィンドウ60のイベント条件Aからウィンドウ61のイベント条件Cに至るパスは「A→C」が存在する。イベント条件Aからイベント条件Dに至るパスは「A→C→B→D」、「A→C→E→D」が存在する。
クエリ141を参照すると、ウィンドウ60のイベント条件Bからウィンドウ61のイベント条件Cに至るパスは「B→C」、「B→D→E→C」が存在する。イベント条件Bからイベント条件Dに至るパスは「B→D」、「B→C→E→D」が存在する。
生成部152は、各パスの最小インターバル条件を計算する。生成部152が、各パスの最小インターバル条件を計算すると、パス「A→C」の最小インターバル条件の値は「2」となる。パス「A→C→B→D」の最小インターバル条件の値は「2−3+3=2」となる。パス「A→C→E→D」の最小インターバル条件の値は「2+2−2=2」となる。パス「B→C」の最小インターバル条件の値は「2」となる。パス「B→D→E→C」の最小インターバル条件の値は「3+1−4=0」となる。パス「B→D」の最小インターバル条件の値は「3」となる。パス「B→C→E→D」の最小インターバル条件の値は「2+2−2=2」となる。
各パスの最小インターバル条件の値のうち、イベント条件Aからイベント条件Cに至る最小インターバル条件の値で最大となる値は「2」となる。イベント条件Aからイベント条件Dに至る最小インターバル条件の値で最大となる値は「2」となる。イベント条件Bからイベント条件Cに至る最小インターバル条件の値で最大となる値は「2」となる。イベント条件Bからイベント条件Dに至る最小インターバル条件の値で最大となる値は「3」となる。
生成部152は、各最大となる値の内、最小となる値から1を減算した値を、ウィンドウ60,61のウィンドウインターバル条件として設定する。上記の例では、各最大となる値の内、最小となる値は「2」であるため、ウィンドウ60,61のウィンドウインターバル条件の値は「1」となる。
続いて、クエリ141を参照すると、ウィンドウ61のイベント条件Cからウィンドウ62のイベント条件Eに至るパスは「C→E」、「C→B→D→E」が存在する。
クエリ141を参照すると、ウィンドウ61のイベント条件Dからウィンドウ62のイベント条件Eに至るパスは「D→E」、「D→B→C→E」が存在する。
生成部152は、各パスの最小インターバルを計算する。生成部152が、各パスの最小インターバルを計算すると、パス「C→E」の最小インターバル条件の値は「2」となる。パス「C→B→D→E」の最小インターバル条件の値は「−3+3+1=1」となる。パス「D→E」の最小インターバル条件の値は「1」となる。パス「D→B→C→E」の値は「−5+2+2=−1」となる。
各パスの最小インターバル条件の値のうち、イベント条件Cからイベント条件Eに至る最小インターバル条件の値で最大となる値は「2」となる。イベント条件Dからイベント条件Eに至る最小インターバル条件の値で最大となる値は「1」となる。
生成部152は、各最大となる値の内、最小となる値から1を減算した値を、ウィンドウ61,62のウィンドウインターバル条件として設定する。上記の例では、各最大となる値の内、最小となる値は「1」であるため、ウィンドウ61,62のウィンドウインターバル条件の値は「0」となる。
続いて、生成部152が各ウィンドウ60〜62のウィンドウ条件幅を算出する処理について説明する。まず、生成部152がウィンドウ60のウィンドウ幅条件を算出する場合について説明する。ウィンドウ60には、イベント条件A,Bが含まれる。クエリ141を参照すると、イベント条件Aからイベント条件Bに至るパスは「A→C→B」、「A→C→E→D→B」が存在する。また、イベント条件Bからイベント条件Aに至るパスは「B→C→A」が存在する。生成部152は、各パスの最大インターバル条件を算出する。
一例として、「A→C→B」の最大インターバル条件を算出する場合について説明する。「A→C」は、順方向であるため、「A,C」間の最大インターバル条件「4」を加算する。「C→B」は、逆方向であるため、「C,B」間の最小インターバル条件「2」を減算する。そうすると、「A→C→B」の最大インターバル条件の値は、「4−2=2」となる。
同様の処理により、生成部152が残りの最大インターバル条件を算出すると、パス「A→C→E→D→B」の最大インターバル条件の値は「4+4−1−3=4」となる。パス「B→C→A」の最大インターバル条件の値は「3−2=1」となる。
各パスの最大インターバル条件の値のうち、イベント条件Aからイベント条件Bに至る最大インターバル条件の値で最小となる値は「2」となる。イベント条件Bからイベント条件Aに至る最大インターバル条件の値で最小となる値は「1」となる。
生成部152は、各最小となる最大インターバル条件の値のうち、最大となる値に1を加算した値を、ウィンドウ60のウィンドウ条件幅として設定する。上記の例では、各最小となる値のうち、最大となる値は「2」であるため、ウィンドウ60のウィンドウ条件幅は「3」となる。
生成部152が、ウィンドウ61のウィンドウ幅条件を算出する場合について説明する。ウィンドウ61には、イベント条件C,Dが含まれる。クエリ141を参照すると、イベント条件Cからイベント条件Dに至るパスは「C→B→D」、「C→E→D」が存在する。イベント条件Dからイベント条件Cに至るパスは「D→B→C」、「D→E→C」が存在する。
生成部152は、各パスの最大インターバル条件を算出すると、パス「C→B→D」の最大インターバル条件の値は「−2+5=3」となる。パス「C→E→D」の最大インターバル条件の値は「4−1=3」となる。パス「D→B→C」の最大インターバル条件の値は「−3+3=0」となる。パス「D→E→C」の最大インターバル条件の値は「2−2=0」となる。
各パスの最大インターバル条件の値のうち、イベント条件Cからイベント条件Dに至る最大インターバル条件の値で最小となる値は「3」となる。イベント条件Dからイベント条件Cに至る最大インターバル条件の値で最小となる値は「0」となる。
生成部152は、各最小となる最大インターバル条件の値のうち、最大となる値に1を加算した値を、ウィンドウ61のウィンドウ条件幅として設定する。上記の例では、各最小となる値のうち、最大となる値は「3」であるため、ウィンドウ61のウィンドウ条件幅は「4」となる。
生成部152が、ウィンドウ62のウィンドウ幅条件を算出する場合について説明する。ウィンドウ62は、二つ以上のイベント条件が存在しない。このため、生成部152は、ウィンドウ62のウィンドウ幅条件を「1」に設定する。
生成部152が上記の処理を実行することで、図2に示すクエリ141は、図3に示す類似クエリ142となる。
照合部153は、類似クエリ142と照合データ143とをマッチングすることで、照合データ143に含まれるイベントのうち、類似クエリ142に定義された条件を満たすイベントの組みを検出する処理部である。
まず、照合部153の照合処理の処理手順について説明する。図15は、照合処理の処理手順を示すフローチャートである。図15に示すように、照合部153は、極小ウィンドウ生成処理を実行する(ステップS201)。照合部153は、それぞれの極小ウィンドウに対し、ウィンドウ条件幅を満たす範囲でウィンドウ幅を広げながら、ウィンドウインターバル条件を満たすウィンドウの組みを見つける(ステップS202)。
照合部153は、元のクエリ解を厳密に見つけない場合には(ステップS203,No)、ウインドウの全組み合わせを出力する(ステップS204)。ここで、元のクエリは、クエリ141に対応する。
一方、照合部153は、元のクエリ解を厳密に見つける場合には(ステップS203,Yes)、未処理の組み合わせ解があるか否かを判定する(ステップS205)。照合部153は、未処理の組み合わせ解がない場合には(ステップS205,No)、処理を終了する。
一方、照合部153は、未処理の組み合わせ解がある場合には(ステップS205,Yes)、未処理の組み合わせ解を一組取り出す(ステップS206)。照合部153は、取り出した組が、元のクエリの条件を満たすか否かを判定する(ステップS207)。
照合部153は、元のクエリの条件を満たす場合には(ステップS207,Yes)、処理中の組を出力し(ステップS208)、ステップS205に移行する。一方、照合部153は、元のクエリの条件を満たさない場合には(ステップS207,No)、ステップS205に移行する。
次に、図15のステップS201に示した極小ウィンドウ生成処理について説明する。図16および図17は、極小ウィンドウ生成処理の処理手順を示すフローチャートである。図16に示すように、照合部153は、現在のウィンドウの開始時刻および終了時刻を0に設定する(ステップS211)。照合部153は、時刻順で次のイベントが存在しない場合には(ステップS212,No)、処理を終了する。
一方、照合部153は、時刻順で次のイベントが存在する場合には(ステップS212,Yes)、時刻順の次のイベントを読み出す(ステップS213)。照合部153は、ウィンドウ内のイベント条件にマッチしない場合には(ステップS214,No)、ステップS212に移行する。
照合部153は、ウィンドウ内のイベント条件にマッチする場合には(ステップS214,Yes)、現在のウィンドウの終了時刻を、イベントの時刻に設定する(ステップS215)。照合部153は、現在のウィンドウの開始時刻とウィンドウ幅条件とを加算した時刻が、イベントの時刻以下でない場合には(ステップS216,No)、図17のステップS218に移行する。
一方、現在のウィンドウの開始時刻とウィンドウ幅条件とを加算した時刻が、イベントの時刻以下の場合には(ステップS216,Yes)、ステップS217に移行する。照合部153は、現在のウィンドウの開始時刻を、((イベントの時刻)−(ウィンドウ幅条件))以降の時刻順で最初のイベントの時刻に設定する(ステップS217)。
図17の説明に移行する。照合部153は、現在のウィンドウが全てのウィンドウ条件を満たしていない場合には(ステップS218,No)、図16のステップS212に移行する。一方、照合部153は、現在のウィンドウが全てのウィンドウ条件を満たしている場合には(ステップS218,Yes)、現在のウィンドウの開始時刻を、ウィンドウ内の先頭のイベントの時刻に設定する(ステップS219)。
照合部153は、ウィンドウ内で現在のウィンドウの開始時刻でない先頭のイベントの時刻をウィンドウの開始時刻とした場合に、ウィンドウの全てのイベント条件を満たす場合に(ステップS220,Yes)、ステップS221に移行する。一方、照合部153は、ウィンドウ内で現在のウィンドウの開始時刻でない先頭のイベントの時刻をウィンドウの開始時刻とした場合に、ウィンドウの全てのイベント条件を満たさない場合に(ステップS220,No)、ステップS222に移行する。
照合部153は、現在のウィンドウの開始時刻を、ウィンドウ内で、現在のウィンドウの開始時刻ではない先頭のイベントの時刻に設定し(ステップS221)、ステップS220に移行する。
照合部153は、現在のウィンドウを極小ウィンドウとして出力する(ステップS222)。照合部153は、現在のウィンドウの開始時刻以外で、ウィンドウ内にイベントが存在しない場合には(ステップS223,No)、ステップS224に移行する。照合部153は、現在のウィンドウの開始時刻以外で、ウィンドウ内にイベントが存在する場合には(ステップS223,Yes)、ステップS225に移行する。
照合部153は、現在のウィンドウの開始時刻を、現在のウィンドウの開始時刻に1を加算した時刻に設定し(ステップS224)、ステップS218に移行する。
照合部153は、現在のウィンドウの開始時刻を、現在のウィンドウの開始時刻でないウィンドウ内の先頭のイベントの時刻に設定し(ステップS225)、ステップS218に移行する。
次に、図15のステップ202に示したウィンドウの組みを見つける処理手順について説明する。図18は、ウィンドウの組みを見つける処理手順を示すフローチャートである。図18に示すように、照合部153は、未処理の極小ウィンドウの組みを取り出し(ステップS301)、現在のウィンドウを、類似クエリ142の先頭のウィンドウに対応する極小ウィンドウに設定する(ステップS302)。
照合部153は、開始時刻にイベント条件を満たすイベントを含み、かつ、ウィンドウ幅がウィンドウ幅条件以内で最大となるように現在のウィンドウの開示時刻を早め(ステップS303)、ステップS304に移行する。
照合部153は、現在のウィンドウと直後のウィンドウとのインターバルが、インターバル条件未満である場合には(ステップS304,Yes)、処理を終了する。一方、照合部153は、現在のウィンドウと直後のウィンドウとのインターバルが、インターバル条件未満ではない場合には(ステップS304,No)、ステップS305に移行する。
照合部153は、現在のウィンドウが類似クエリの最後のウィンドウに対応する場合には(ステップS305,Yes)、現在のウィンドウの組み合わせを出力する(ステップS306)。
一方、照合部153は、現在のウィンドウが類似クエリの最後のウィンドウに対応しない場合には(ステップS305,No)、類似クエリの次のウィンドウに対応する極小ウィンドウを、現在のウィンドウに設定する(ステップS307)。照合部153は、現在のウィンドウに対して、サブルーチンを実行する(ステップS308)。
照合部153は、現在のウィンドウの終了時刻を1時刻遅め、ウィンドウ条件幅を満たすまで開始時刻を遅める(ステップS309)。照合部153は、条件Xを満たすか否かを判定する(ステップS310)。条件Xは、条件1,2,3を有する。照合部153は、条件1,2,3の何れかを満たす場合には(ステップS310,Yes)、処理を終了する。一方、照合部153は、条件1,2,3の何れも満たさない場合には(ステップS310,No)、ステップS308に移行する。
ここで、条件1は、現在のウィンドウの前にウィンドウがあり、前のウィンドウと現在のウィンドウとの間隔が、ウィンドウインターバル条件を満たさないという条件である。条件2は、現在のウィンドウと後のウィンドウとの間隔が、ウィンドウインターバル条件よりも小さいという条件である。条件3は、現在のウィンドウの元となる極小ウィンドウの開始時刻が、現在のウィンドウの開始時刻よりも小さいという条件である。
次に、図18のステップS308に示したサブルーチンの処理手順について説明する。図19は、サブルーチンの処理手順を示すフローチャートである。図19に示すように、照合部153は、前のウィンドウとの間隔がウィンドウインターバル条件となるまで現在のウィンドウの開始時刻を早める(ステップS350)。
照合部153は、現在のウィンドウ幅が、ウィンドウ条件幅よりも大きいか否かを判定する(ステップS351)。照合部153は、現在のウィンドウ幅が、ウィンドウ条件幅よりも大きい場合には(ステップS351,Yes)、処理を終了する。
一方、照合部153は、現在のウィンドウ幅が、ウィンドウ条件幅よりも大きくない場合には(ステップS351,No)、図18のステップS304に移行する。
次に、照合部153が、類似クエリ142と、照合データ143とをマッチングして、類似クエリ142の条件を満たすイベントの組みを検出する処理の一例について説明する。図20〜図24は、照合処理の一例を説明するための図である。ここでは、説明の便宜上、照合データ143のデータイメージを用いて説明する。また、照合部153が用いる類似クエリを、図3に示した類似クエリとする。
図20において、照合部153は、極小ウィンドウ70,80,90を生成する。照合部153は、各極小ウィンドウ70,80,90の開始時刻と終了時刻を0に設定する(ステップS10)。ステップS10の段階において、極小ウィンドウ70,80,90は、イベント条件を満たしていない。
以下では説明を省略するが、照合部153は、極小ウィンドウやウィンドウに関する情報を、適宜、ウィンドウデータ144、ウィンドウ接続データ145に登録する。また、70番台のウィンドウは、類似クエリ142のウィンドウ60のイベント条件を満たすイベントの組みを検索する範囲を示すウィンドウである。80番台のウィンドウは、類似クエリ142のウィンドウ61のイベント条件を満たすイベントの組みを検索する範囲を示すウィンドウである。90番台のウィンドウは、類似クエリ142のウィンドウ62のイベント条件を満たすイベントの組みを検索する範囲を示すウィンドウである。
照合部153は、極小ウィンドウ70の終了時刻を、次のイベントの時刻「1」に設定する。また、照合部153は、極小ウィンドウ90の終了時刻を、次のイベントの時刻「1」に設定する(ステップS11)。極小ウィンドウ70は、ウィンドウ60のウィンドウ幅条件を超えていないが、極小ウィンドウ90は、ウィンドウ62のウィンドウ幅条件を超えている。
照合部153は、極小ウィンドウ90のウィンドウ幅が、ウィンドウ幅条件を満たすように、極小ウィンドウ90の開始時刻を1に設定する。照合部153は、極小ウィンドウ90に含まれるイベントが、ウィンドウ62のイベント条件を満たし、極小ウィンドウ90の開始時刻を進めるとウィンドウ62のイベント条件を満たさないので、極小ウィンドウ90を出力する。照合部153は、極小ウィンドウ90の終了時刻に1を加算した値を開始時刻とするウィンドウ91を設定する(ステップS12)。
照合部153は、極小ウィンドウ70の終了時刻を、次のイベントの時刻「3」に設定する。また、極小ウィンドウ70のウィンドウ幅が、ウィンドウ60のウィンドウ幅条件を満たすように、極小ウィンドウ70の開始時刻を「1」に設定する。極小ウィンドウ70に含まれるイベントが、ウィンドウ60のイベント条件を満たし、極小ウィンドウ70の開始時刻を進めるとウィンドウ60のイベント条件を満たさないので、極小ウィンドウ70を出力する。照合部153は、極小ウィンドウ80の終了時刻を、次のイベント時刻「3」に設定する(ステップS13)。
図21の説明に移行する。照合部153は、極小ウィンドウ70の開始時刻以降の最初のイベントの時刻を開始時刻とする極小ウィンドウ71を生成する。照合部153は、極小ウィンドウ71の終了時刻を、次のイベントの時刻「4」に設定する。照合部153は、極小ウィンドウ80の終了時刻を、次のイベントの時刻「4」に設定する(ステップS14)。
照合部153は、極小ウィンドウ80のウィンドウ幅が、ウィンドウ51のウィンドウ幅条件を超えているため、極小ウィンドウ80の開始時刻を、次のイベントの開始時刻「3」に設定する。極小ウィンドウ80は、ウィンドウ61のイベント条件およびウィンドウ幅条件を満たすため、照合部153は、極小ウィンドウ30を出力する(ステップS15)。
照合部153は、極小ウィンドウ71の終了時刻を、次のイベントの時刻「5」に設定する。極小ウィンドウ71は、ウィンドウ60のイベント条件を満たす。照合部153は、極小ウィンドウ80の開始時刻以降の最初のイベントの時刻を開始時刻とする極小ウィンドウ81を生成する。照合部153は、極小ウィンドウ91の終了時刻を、次のイベントの時刻「5」に設定する。極小ウィンドウ91の幅は、ウィンドウ62のウィンドウ幅条件を超えている(ステップS16)。
照合部153は、極小ウィンドウ71の開始時刻を、次のイベントの時刻「4」に設定しても、ウィンドウ60のイベント条件を満たすので、極小ウィンドウ71の開始時刻を「4」に設定する。照合部153は、極小ウィンドウ71を出力する。照合部153は、極小ウィンドウ91の開始時刻を、次のイベントの時刻「5」に設定しても、ウィンドウ62のイベント条件を満たすので、極小ウィンドウ91の開始時刻を「5」に設定する。照合部153は、極小ウィンドウ91を出力する(ステップS17)。
図22の説明に移行する。照合部153は、極小ウィンドウ71の開始時刻以降の最初のイベントの時刻を開始時刻とする極小ウィンドウ72を生成する。照合部153は、極小ウィンドウ81の終了時刻を、次のイベントの時刻「7」に設定する。極小ウィンドウ81は、ウィンドウ61のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなる。このため、照合部153は、ウィンドウ81を出力する。照合部153は、極小ウィンドウ91の終了時刻に1を加算した値を開始時刻とするウィンドウ92を設定する(ステップS18)。
照合部153は、極小ウィンドウ72の終了時刻を、次のイベントの時刻「8」に設定する。極小ウィンドウ72の幅は、ウィンドウ60のウィンドウ幅条件を超えている。また、照合部153は、極小ウィンドウ81の開始時刻以降の最初のイベントの時刻を開始時刻とする極小ウィンドウ82を生成する(ステップS19)。
照合部153は、極小ウィンドウ72の開始時刻を、ウィンドウ60のウィンドウ幅条件を満たすはじめのイベントの時刻「8」に設定する(ステップS20)。
照合部153は、極小ウィンドウ82の終了時刻を、次のイベントの時刻「10」に設定する。極小ウィンドウ82は、ウィンドウ61のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ82を出力する(ステップS21)。
図23の説明に移行する。照合部153は、極小ウィンドウ72の終了時刻を、次のイベントの時刻「11」に設定する。極小ウィンドウ72の幅は、ウィンドウ60のウィンドウ幅条件を超える。照合部153は、極小ウィンドウ92の終了時刻を、次のイベントの時刻「11」に設定する。極小ウィンドウ92の幅は、ウィンドウ62のウィンドウ幅条件を超える(ステップS22)。
照合部153は、極小ウィンドウ72の開始時刻を、ウィンドウ60のウィンドウ幅条件を満たす最初のイベントの時刻「11」に設定する。照合部153は、極小ウィンドウ72が、ウィンドウ60のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ72を出力する。照合部153は、極小ウィンドウ83の開始時刻以降の最初のイベントの時刻「11」を開始時刻とする極小ウィンドウ84を生成する。照合部153は、極小ウィンドウ92の開始時刻を、ウィンドウ62のウィンドウ幅条件を満たす最初のイベントの時刻「11」に設定する。極小ウィンドウ92は、ウィンドウ62のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ92を出力する。照合部153は、極小ウィンドウ92の終了時刻に1を加算した値を開始時刻とするウィンドウ93を設定する(ステップS23)。
照合部153は、極小ウィンドウ72の終了時刻に1を加算した値を開始時刻とするウィンドウ73を設定する。照合部153は、極小ウィンドウ84の終了時刻を、次のイベントの時刻「13」に設定する。照合部153は、極小ウィンドウ84が、ウィンドウ61のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ84を出力する。照合部153は、極小ウィンドウ93は、ウィンドウ62のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ93を出力する(ステップS24)。
照合部153は、極小ウィンドウ73の終了時刻を、次のイベントの終了時刻「14」に設定する。照合部153は、極小ウィンドウ84の開始時刻以降の最初のイベントの時刻「13」を開始時刻とする極小ウィンドウ85を生成する。照合部153は、極小ウィンドウ93の終了時刻に1を加算した値を開始時刻とするウィンドウ94を設定する(ステップS25)。
図24の説明に移行する。照合部153は、極小ウィンドウ73の終了時刻を、次のイベントの時刻「15」に設定する。極小ウィンドウ73の幅は、ウィンドウ60のウィンドウ幅条件を超える。照合部153は、極小ウィンドウ85の終了時刻を、次のイベントの時刻「15」に設定する。照合部153は、極小ウィンドウ85が、ウィンドウ61のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ85を出力する(ステップS26)。
照合部153は、極小ウィンドウ73の開始時刻を、ウィンドウ60のウィンドウ幅条件を満たす最初のイベントの時刻「14」に設定する。照合部153は、極小ウィンドウ73が、ウィンドウ60のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ73を出力する。照合部153は、極小ウィンドウ85の開始時刻以降の最初のイベントの時刻「15」を開始時刻とする極小ウィンドウ86を生成する(ステップS27)。
照合部153は、極小ウィンドウ73の開始時刻以降の最初のイベントの時刻「15」を開始時刻とする極小ウィンドウ74を生成する。照合部153は、極小ウィンドウ86の終了時刻を、次のイベントの時刻「16」に設定する。照合部153は、極小ウィンドウ86が、ウィンドウ61のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ86を出力する。照合部153は、極小ウィンドウ94が、ウィンドウ62のイベント条件を満たし、開始時刻を進めるとイベント条件を満たさなくなるため、極小ウィンドウ94を出力する(ステップS28)。
照合部153は、極小ウィンドウ74について、時刻16以降はイベントが無く、ウィンドウ60のイベント条件を満たさないので、極小ウィンドウ74を削除する(ステップS29)。
図20〜図24を用いて説明したように、照合部153が、照合データ143に対して、図16、図17に示した極小ウィンドウ生成処理を実行することで、極小ウィンドウ70〜73,80〜86,90〜94が生成される。極小ウィンドウ70〜73,80〜86,90〜94に関する情報は、ウィンドウデータ144に登録される。
このうち、極小ウィンドウ70〜73は、類似クエリ142のウィンドウ60のイベント条件A,Bを全て含み、ウィンドウ60のウィンドウ幅条件「3」以下となるイベントの最小範囲を示すウィンドウである。
極小ウィンドウ80〜86は、類似クエリ142のウィンドウ61のイベント条件C,Dを全て含み、ウィンドウ61のウィンドウ幅条件「4」以下となるイベントの最小範囲を示すウィンドウである。
極小ウィンドウ90〜94は、類似クエリ142のウィンドウ62のイベント条件Eを含み、ウィンドウ62のウィンドウ幅条件「1」以下となるイベントの最小範囲を示すウィンドウである。
照合部153は、極小ウィンドウを生成した後に、ウィンドウ幅条件を満たす範囲で、極小ウィンドウの幅を広げながら、類似クエリ142のウィンドウインターバル条件を満たすウィンドウの組みを検出する。照合部153が、ウィンドウの組みを見つける処理の一例について説明する。以下の説明では、極小ウィンドウおよびウィンドウをまとめて、ウィンドウと表記する。
図25〜図29は、ウィンドウの組みを見つける処理の一例を示す図である。図25について説明する。照合部153は、ウィンドウ70,80,90の組みを選択する。照合部153は、ウィンドウ70の幅が、ウィンドウ幅条件と同じであるため、ウィンドウ70の開始時刻をそのままとする。また、ウィンドウ70とウィンドウ80とのインターバルが、ウィンドウ60,61のウィンドウインターバル条件「1」未満である。このため、照合部153は、ウィンドウ70,80,90の組みが、類似クエリ142の条件を満たさないと判定する(ステップS30)。
照合部153は、ウィンドウ71,82,92の組みを選択する。照合部153は、現在のウィンドウをウィンドウ71に設定する(ステップS31)。
照合部153は、ウィンドウ71について、イベントを含み、ウィンドウ幅条件以内で最大となるように、ウィンドウ71の開始時刻を「3」に設定する。また、照合部153は、ウィンドウ82に対して、サブルーチンを実行する。サブルーチンの処理は、図19に示した処理手順に対応する。ウィンドウ71とウィンドウ82との間隔は、類似クエリ142のウィンドウ60,61のウィンドウインターバル条件を満たしている。また、照合部153は、ウィンドウ82のウィンドウ幅を、これ以上広げられないため、ウィンドウ82の終了時刻をそのままとする。照合部153は、ウィンドウ92に対して、サブルーチンを実行する。ウィンドウ82とウィンドウ92との間隔は、類似クエリ142のウィンドウ61,62のウィンドウインターバル条件を満たしている。また、照合部153は、ウィンドウ92のウィンドウ幅を、これ以上広げられないため、ウィンドウ92の終了時刻をそのままとする。
ここで、ウィンドウ71、82,92の組みは、それぞれのウィンドウインターバル条件を満たす。このため、照合部153は、ウィンドウ71,82,92の組みを出力する(ステップS32)。
照合部153は、ウィンドウ82に対するサブルーチンを実行する。照合部153は、ウィンドウ82の終了時刻を1進め、ウィンドウ幅条件を満たすように、ウィンドウ82の開始時刻を進める。ここで、ウィンドウ71とウィンドウ82との幅が、ウィンドウインターバル条件を満たさない。このため、照合部153は処理を終了する(ステップS33)。
図26の説明に移行する。照合部153は、ウィンドウ71,82,92をステップS32の段階にもどし、ウィンドウ82に対してサブルーチンを実行する(ステップS34)。
照合部153は、ウィンドウ82の終了時刻を1進め、ウィンドウ幅条件を満たすように、ウィンドウ82の開始時刻を進める。照合部153は、ウィンドウ71とウィンドウ82との間隔が、ウィンドウインターバル条件を満たさないため処理を終了する(ステップS35)。
照合部153は、ウィンドウ71,82,92をステップS34の段階にもどし、ウィンドウ71に対してサブルーチンを実行する(ステップS36)。
照合部153は、ウィンドウ71の終了時刻を1進め、ウィンドウ幅条件を満たすように、ウィンドウ71の開始時刻を1進める。照合部153は、ウィンドウ71とウィンドウ82との間隔が、ウィンドウインターバル条件以下となるため、処理を終了する(ステップS37)。
照合部153は、ウィンドウ72,85,94の組みを取り出す。照合部153は、ウィンドウ72を現在のウィンドウに設定する。照合部153は、ウィンドウ72について、ウィンドウ幅条件を満たす範囲で、前方にイベントが存在しないので、ウィンドウ72の開始時刻をそのままとする。照合部153は、ウィンドウ85に対してサブルーチンを実行する。照合部153は、ウィンドウ72とウィンドウ85との間隔、ウィンドウ85とウィンドウ94との間隔が、ウィンドウインターバル条件を満たしているので、ウィンドウ85をそのままとする。照合部153は、ウィンドウ94に対してサブルーチンを実行する。照合部153は、ウィンドウ85とウィンドウ94との間隔が、ウィンドウインターバル条件を満たしており、ウィンドウ94の幅を広げられないためそのままとする。
ここで、ウィンドウ72,85,94の組みは、それぞれのウィンドウインターバル条件を満たす。このため、照合部153は、ウィンドウ72,85,94の組みを出力する(ステップS38)。
図27の説明に移行する。照合部153は、ウィンドウ72,85,94をステップS38の段階にもどし、ウィンドウ85に対するサブルーチンに戻る。照合部153は、ウィンドウ85の終了時刻を1進める。照合部153は、ウィンドウ85とウィンドウ94との間隔が、ウィンドウインターバル条件以下となるため、処理を終了する(ステップS39)。
照合部153は、ウィンドウ72,85,94をステップS38の段階にもどし、ウィンドウ72に対するサブルーチンに戻る。照合部153は、ウィンドウ72の終了時刻を1進める。照合部153は、ウィンドウ72とウィンドウ85との間隔が、ウィンドウインターバル条件以下となるため、処理を終了する(ステップS40)。
照合部153は、ウィンドウ72,86,94の組みを取り出す。ウィンドウ72を現在のウィンドウに設定する。照合部153は、ウィンドウ72について、ウィンドウ幅条件を満たす範囲で、前方にイベントが存在しないので、ウィンドウ72の開始時刻をそのままとする。照合部153は、ウィンドウ86に対してサブルーチンを実行する(ステップS41)。
照合部153は、ウィンドウ72とウィンドウ86との間隔が、ウィンドウインターバル条件を満たすように、ウィンドウ86の開始時刻を、ウィンドウ幅条件内で早める。照合部153は、ウィンドウ72とウィンドウ86との間隔が、ウィンドウインターバル条件を満たすが、ウィンドウ86とウィンドウ94との間隔が、ウィンドウインターバル条件以下となるため、処理を終了する(ステップS42)。
図28の説明に移行する。照合部153は、ウィンドウ72,86,94をステップ41の段階に戻し、ウィンドウ72に対するサブルーチンに戻る(ステップS43)。
照合部153は、ウィンドウ72の終了時刻を1遅らせる。照合部153は、ウィンドウ72がウィンドウ幅条件を満たすため、ウィンドウ72の開始時刻をそのままとする。照合部153は、ウィンドウ86に対してサブルーチンを実行する。照合部153は、ウィンドウ72とウィンドウ86との間隔が、ウィンドウインターバル条件を満たすように、ウィンドウ86の開始時刻を早める。照合部153は、ウィンドウ86とウィンドウ94との間隔が、ウィンドウインターバル条件以下となるため、処理を終了する(ステップS44)。
照合部153は、ウィンドウ72に対するサブルーチンに戻る(ステップS45)。照合部153は、ウィンドウ72の終了時刻を1遅める。照合部153は、ウィンドウ86に対するサブルーチンを実行する。照合部153は、ウィンドウ72とウィンドウ86との間隔が、ウィンドウインターバル条件を満たすため、ウィンドウ86の開始時刻をそのままとする。照合部153は、ウィンドウ86とウィンドウ94との間隔が、ウィンドウインターバル条件以下となるため、処理を終了する(ステップS46)。
図29の説明に移行する。照合部153は、ウィンドウ72に対するサブルーチンに戻る(ステップS47)。照合部153は、ウィンドウ72の終了時刻を1遅め、ウィンドウ幅条件を満たすように、ウィンドウ72の開始時刻を1遅める。照合部153は、ウィンドウ72の元のウィンドウの開始時刻よりも、ウィンドウ72の開始時刻が大きくなったため、処理を終了する(ステップS48)。
図25〜図29を用いて説明したように、照合部153は、類似クエリ142の条件を満たすウィンドウの組みを、照合データ143から検出する。図30は、本実施例に係る照合結果の一例を示す図である。
例えば、図30の各ウィンドウのうち、類似クエリ142の条件を満たすウィンドウの組みは、ウィンドウ71,81,92の組み、ウィンドウ72,84,94の組み、ウィンドウ73,86,95の組みとなる。図30で得られた検出結果は、クエリ141の解を全て含むが、クエリ141の解とならないものも含まれている。なお、照合部153は、各ウィンドウの接続関係を、ウィンドウ接続データ145に登録する。
照合部153は更に、得られた検出結果の解を展開し、クエリ141の条件を満たす解を特定する。ここでは一例として、ウィンドウ71,81,92と、ウィンドウ72,84,94を展開して説明を行う。図31は、解を展開した結果の一例を示す図である。図31の「A,B,C,D,E」は、イベントを示し、各イベントの下の数字は、該当するイベントが出現する時刻を示す。例えば、1段目のレコードでは、イベントAの時刻「5」、イベントBの時刻「3」、イベントCの時刻「10」、イベントDの時刻「7」、イベントEの時刻「11」となる。
図31に示すイベントの出現時刻の組み合わせのうち、クエリ141の条件を満たす組み合わせは、3段目のレコードとなるイベントAの時刻「11」、イベントBの時刻「11」、イベントCの時刻「13」、イベントDの時刻「15」、イベントEの時刻「16」となる。なぜなら、図2のクエリ141で定義されたインターバル条件を全て満たすためである。
次に、本実施例に係る照合装置100の効果について説明する。照合装置100は、クエリ141を基にして、互いの関係が並列関係にあるイベント条件の組みを特定する。照合装置100は、並列関係にあるイベント条件の組みを同一のウィンドウに設定して、複数のウィンドウを直列に接続し、接続関係にあるウィンドウ間のウィンドウインターバル条件を設定した類似クエリを生成する。そして、照合装置100は、照合データ143と、類似クエリ142とを比較し、照合データ143に含まれるイベントのうち、類似クエリ142の条件を満たすイベントの組み合わせを検出する。このため、照合装置100によれば、クエリ141をそのまま用いたパターン照合と比較して、ほぼ同等の結果を高速に得ることができる。
また、照合装置100は、同一のウィンドウに含まれる開始点のイベント条件から終了点のイベント条件に至るまでの各インターバル条件を基にして、ウィンドウの幅を設定する。このため、クエリ141の解を漏らさず得るためのウィンドウの幅を適切に定義することができる。
また、照合装置100は、類似クエリ142で定義されたウィンドウ幅条件未満となる範囲内で、ウィンドウのイベント条件を満たすイベントの組みを照合データ143から検出する。また、照合装置100は、検出したイベントの組みの範囲を極小ウィンドウとして設定し、ウィンドウの幅を広げつつ、前記ウィンドウインターバル条件を満たす検索ウィンドウの組みを検出する。このため、照合データ143から、クエリ141の解を残らず検出することができる。
また、照合装置100は、ウィンドウインターバル条件にマッチするウィンドウの組みに含まれるイベントを展開し、各イベントの間隔がクエリ141のインターバルとマッチするイベントの組みを検出する。このため、類似クエリ142によって絞ったイベントの組み合わせから、クエリ141の条件を満たす真の解を効率的に取り出すことができる。
次に、上記の実施例に示した照合装置と同様の機能を実現する照合プログラムを実行するコンピュータの一例を説明する。図32は、照合プログラムを実行するコンピュータの一例を示す図である。
図32に示すように、コンピュータ200は、各種演算処理を実行するCPU201と、ユーザからのデータの入力を受け付ける入力装置202と、ディスプレイ203を有する。また、コンピュータ200は、記憶媒体からプログラム等を読取る読み取り装置204と、ネットワークを介して他のコンピュータとの間でデータの授受を行うインターフェース装置205とを有する。また、コンピュータ200は、各種情報を一時記憶するRAM206と、ハードディスク装置207を有する。そして、各装置201〜207は、バス208に接続される。
ハードディスク装置207は、特定プログラム207a、生成プログラム207b、照合プログラム207cを有する。CPU201は、各プログラム207a,207b,207cを読み出してRAM206に展開する。
特定プログラム207aは、特定プロセス206aとして機能する。生成プログラム207bは、生成プロセス206bとして機能する。照合プログラム207cは、照合プロセス206cとして機能する。
例えば、特定プロセス206aは、特定部151に対応する。生成プロセス206bは、生成部152に対応する。照合プロセス206cは、照合部153に対応する。
なお、各プログラム207a〜207cについては、必ずしも最初からハードディスク装置207に記憶させておかなくてもよい。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD−ROM、DVDディスク、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ200がこれらから各プログラム207a〜207cを読み出して実行するようにしてもよい。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)複数のイベント条件と、相互に接続された各イベント条件のインターバル条件とを定義したクエリを基にして、互いの関係が並列関係にあるイベント条件の組みを特定する特定部と、
並列関係にあるイベント条件の組みを同一のウィンドウに設定して、複数のウィンドウを直列に接続し、各ウィンドウに含まれるイベント条件のインターバル条件を基にして、接続関係にあるウィンドウ間のウィンドウインターバル条件を設定した類似クエリを生成する生成部と、
複数のイベントと各イベントの出現タイミングとを関連付けた照合データと、前記類似クエリとを比較し、前記照合データに含まれるイベントのうち、前記類似クエリの条件を満たすイベントの組み合わせを検出する照合部と
を有することを特徴とする照合装置。
(付記2)前記生成部は、同一のウィンドウに含まれる第1のイベント条件から第2のイベント条件に至るまでの各インターバル条件を基にして、ウィンドウの幅を設定することを特徴とする付記1に記載の照合装置。
(付記3)前記照合部は、前記類似クエリで定義されたウィンドウの幅未満となる範囲内で、該ウィンドウのイベント条件を満たすイベントの組みを前記照合データから検出し、検出したイベントの組みの範囲を検索ウィンドウとして設定し、前記検索ウィンドウの幅を広げつつ、前記ウィンドウインターバル条件を満たす検索ウィンドウの組みを検出することを特徴とする付記2に記載の照合装置。
(付記4)前記照合部は、前記ウィンドウインターバル条件を満たす検索ウィンドウの組みに含まれるイベントを展開し、各イベントの間隔が前記クエリのインターバル条件を満たすイベントの組みを検出することを特徴とする付記3に記載の照合装置。
(付記5)コンピュータが実行する照合方法であって、
複数のイベント条件と、相互に接続された各イベント条件のインターバル条件とを定義したクエリを基にして、互いの関係が並列関係にあるイベント条件の組みを特定し、
並列関係にあるイベント条件の組みを同一のウィンドウに設定して、複数のウィンドウを直列に接続し、各ウィンドウに含まれるイベント条件のインターバル条件を基にして、接続関係にあるウィンドウ間のウィンドウインターバル条件を設定した類似クエリを生成し、
複数のイベントと各イベントの出現タイミングとを関連付けた照合データと、前記類似クエリとを比較し、前記照合データに含まれるイベントのうち、前記類似クエリの条件を満たすイベントの組み合わせを検出する
各処理を実行することを特徴とする照合方法。
(付記6)前記生成する処理は、同一のウィンドウに含まれる第1のイベント条件から第2のイベント条件に至るまでの各インターバル条件を基にして、ウィンドウの幅を設定することを特徴とする付記5に記載の照合方法。
(付記7)前記検出する処理は、前記類似クエリで定義されたウィンドウの幅未満となる範囲内で、該ウィンドウのイベント条件を満たすイベントの組みを前記照合データから検出し、検出したイベントの組みの範囲を検索ウィンドウとして設定し、前記検索ウィンドウの幅を広げつつ、前記ウィンドウインターバル条件を満たす検索ウィンドウの組みを検出することを特徴とする付記6に記載の照合方法。
(付記8)前記検出する処理は、前記ウィンドウインターバル条件を満たす検索ウィンドウの組みに含まれるイベントを展開し、各イベントの間隔が前記クエリのインターバル条件を満たすイベントの組みを検出することを特徴とする付記7に記載の照合方法。
(付記9)コンピュータに、
複数のイベント条件と、相互に接続された各イベント条件のインターバル条件とを定義したクエリを基にして、互いの関係が並列関係にあるイベント条件の組みを特定し、
並列関係にあるイベント条件の組みを同一のウィンドウに設定して、複数のウィンドウを直列に接続し、各ウィンドウに含まれるイベント条件のインターバル条件を基にして、接続関係にあるウィンドウ間のウィンドウインターバル条件を設定した類似クエリを生成し、
複数のイベントと各イベントの出現タイミングとを関連付けた照合データと、前記類似クエリとを比較し、前記照合データに含まれるイベントのうち、前記類似クエリの条件を満たすイベントの組み合わせを検出する
各処理を実行させることを特徴とする照合プログラム。
(付記10)前記生成する処理は、同一のウィンドウに含まれる第1のイベント条件から第2のイベント条件に至るまでの各インターバル条件を基にして、ウィンドウの幅を設定することを特徴とする付記9に記載の照合プログラム。
(付記11)前記検出する処理は、前記類似クエリで定義されたウィンドウの幅未満となる範囲内で、該ウィンドウのイベント条件を満たすイベントの組みを前記照合データから検出し、検出したイベントの組みの範囲を検索ウィンドウとして設定し、前記検索ウィンドウの幅を広げつつ、前記ウィンドウインターバル条件を満たす検索ウィンドウの組みを検出することを特徴とする付記10に記載の照合プログラム。
(付記12)前記検出する処理は、前記ウィンドウインターバル条件を満たす検索ウィンドウの組みに含まれるイベントを展開し、各イベントの間隔が前記クエリのインターバル条件を満たすイベントの組みを検出することを特徴とする付記11に記載の照合プログラム。