(57)【特許請求の範囲】
【請求項１】
正規表現によるパターンマッチングを適用できない順序関係にあるデータを対象に複数の属性からなるレコードの集合からレコードの組み合わせを検索する検索装置であって、
レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された該複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンを入力する入力手段と、
前記検索パターンから前記順序関係を抽出して、決定性有限オートマトンに変換する変換手段と、
前記レコードの集合から同じ順序にある１つ以上のレコードを読み込み、読み込まれたレコードにより前記決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合に登録する処理を繰り返し、該決定性有限オートマトンの終了状態が遷移先として該状態遷移集合に登録されたとき、該終了状態に到達した状態遷移の付加情報から前記検索パターンに対応するレコードの組み合わせを求める検索手段と、
得られたレコードの組み合わせを検索結果として出力する出力手段とを備え、
前記検索手段は、前記同じ順序にある複数のレコードにより前記決定性有限オートマトン上で状態遷移が可能なとき、該複数のレコードに対応する複数の遷移先と該複数のレコードを示す複数の付加情報とを前記状態遷移集合に登録することを特徴とする検索装置。
【請求項２】
正規表現によるパターンマッチングを適用できない順序関係にあるデータを対象に複数の属性からなるレコードの集合からレコードの組み合わせを検索するコンピュータのためのプログラムであって、
レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された該複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンから、該順序関係を抽出して決定性有限オートマトンに変換し、
前記レコードの集合から同じ順序にある１つ以上のレコードをメモリ上に読み込み、読み込まれたレコードにより前記決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合に登録し、該同じ順序にある複数のレコードにより該決定性有限オートマトン上で状態遷移が可能なとき、該複数のレコードに対応する複数の遷移先と該複数のレコードを示す複数の付加情報とを該状態遷移集合に登録する処理を繰り返し、
前記決定性有限オートマトンの終了状態が遷移先として前記状態遷移集合に登録されたとき、該終了状態に到達した状態遷移の付加情報から前記検索パターンに対応するレコードの組み合わせを求め、
得られたレコードの組み合わせを検索結果として出力する
処理を前記コンピュータに実行させることを特徴とするプログラム。
【請求項３】
前記検索パターンから前記順序関係以外のイベント間の制約を抽出し、前記状態遷移を可能にするレコードが該制約を満たすかどうかを調べる処理を、前記コンピュータにさらに実行させることを特徴とする請求項２記載のプログラム。
【請求項４】
前記コンピュータは、前記検索パターンとして、連続して発生しないイベントの繰り返しを含む検索パターンを指定することを特徴とする請求項２記載のプログラム。
【請求項５】
前記コンピュータは、前記検索パターンに対応するレコードの組み合わせが見つかるたびに、見つかったレコードの組み合わせを出力することを特徴とする請求項２記載のプログラム。
【請求項６】
前記コンピュータは、前記検索パターンに対応するレコードの組み合わせを求める処理において、前記検索パターンにマッチするレコードの組み合わせの中でイベント間の間隔が最長の組み合わせを返す最長マッチと、該検索パターンにマッチするレコードの組み合わせの中でイベント間の間隔が最短の組み合わせを返す最短マッチと、該検索パターンにマッチする最初のレコードの組み合わせを返す最初マッチと、該検索パターンにマッチするすべてのレコードの組み合わせを返す全部マッチのうちの１つの方法でパターンマッチングを行うことを特徴とする請求項２記載のプログラム。
【請求項７】
前記検索パターンに対応するレコードの組み合わせに関する集約演算を行って演算結果を出力する処理を、前記コンピュータにさらに実行させることを特徴とする請求項２記載のプログラム。
【請求項８】
前記コンピュータは、指定された属性の値に基づいて前記レコードの集合を整列し、整列したレコードの集合を検索することを特徴とする請求項２記載のプログラム。
【請求項９】
前記コンピュータは、指定された属性の値に基づいて前記レコードの集合をグループ化し、各グループ内のレコードを整列することを特徴とする請求項８記載のプログラム。
【請求項１０】
正規表現によるパターンマッチングを適用できない順序関係にあるデータを対象に複数の属性からなるレコードの集合からレコードの組み合わせを検索する検索方法であって、
コンピュータが、レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された該複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンから、該順序関係を抽出して決定性有限オートマトンに変換し、
前記コンピュータが、前記レコードの集合から同じ順序にある１つ以上のレコードをメモリ上に読み込み、読み込まれたレコードにより前記決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合に登録し、該同じ順序にある複数のレコードにより該決定性有限オートマトン上で状態遷移が可能なとき、該複数のレコードに対応する複数の遷移先と該複数のレコードを示す複数の付加情報とを該状態遷移集合に登録する処理を繰り返し、
前記コンピュータが、前記決定性有限オートマトンの終了状態が遷移先として前記状態遷移集合に登録されたとき、該終了状態に到達した状態遷移の付加情報から前記検索パターンに対応するレコードの組み合わせを求め、
前記コンピュータが、得られたレコードの組み合わせを検索結果として出力する
ことを特徴とする検索方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、大量のデータを対象として、各データが持つ順序に基づいて繰り返しを含むパターンを検索する装置および方法に関する。
【０００２】
【従来の技術】
順序に基づいたデータに関して、繰り返しパターンを扱うために従来から利用されてきた技術として、文字列の出現順序に対する正規表現によるパターンマッチングが挙げられる。そこで、このパターンマッチングの特徴および利用分野について述べる。
【０００３】
文字列検索の分野では、文字列が出現する順序に着目して、正規表現によるパターンマッチングが利用されてきた。まず、文字列検索とパターンマッチングの相違について明確にしておく。文字列探索とは、「文章中からパターンａｂｃを探せ」のように、探索すべきパターンが完全に確定しているものを言う。一方、パターンマッチングとは、不確定のパターンを探す操作のことで、パターン照合とも呼ばれる。パターンマッチングでは、パターンを指定するのに正規表現が用いられる。
【０００４】
図１２は、文字列データと正規表現ａ（ａ｜ｂ）＊ａのパターンマッチングの例を示している。ここで、（ａ｜ｂ）＊は、ａまたはｂが０回以上繰り返し出現することを意味している。文字列探索とパターンマッチングは、一見似たように見えるが、異なるカテゴリに属する問題で、それぞれに対して別のアルゴリズムを適用しなければならない。
【０００５】
正規表現によるパターンマッチングを実現するには、有限オートマトン（finite automaton）を利用する。正規表現をオートマトンに変換するには、２段階のアプローチをとる。まず、正規表現を非決定性有限オートマトン（non-deterministic finite automaton，ＮＦＡ）に変換する。正規表現からＮＦＡへの変換は容易である。ＮＦＡ単体でパターンマッチングを行うことも可能であるが、得られたＮＦＡを等価である決定性有限オートマトン（deterministic finite automaton，ＤＦＡ）に変換し、ＤＦＡを使ってパターンマッチングを行う方法が多く用いられる。
【０００６】
ＤＦＡでは、決定性という言葉が示すように、ある状態において入力が決まれば遷移先が１つだけに定まるが、ＮＦＡでは、非決定性という言葉が示すように、ある状態において入力に対する遷移先が複数存在する場合がある。
【０００７】
図１３は、正規表現ａ（ａ｜ｂ）＊ａに対応するＮＦＡを示している。このＮＦＡにａａａという文字列を与えた場合を考える。１文字目のａを入力すると、開始状態０から１に遷移する。２文字目もａであるが、状態１には、文字ａに対する遷移先として、状態１と状態２の２種類の状態がある。結論から言えば、２文字目のａでは状態１から状態１へと遷移し、３文字目のａでは状態２に遷移するのが正解なのであるが、２文字目のａを読み込んだ時点では、どちらへ進めばよいかはわからない。
【０００８】
この問題を解決するためには、バックトラックを利用し、とりあえずどちらかの状態に遷移して処理を進め、失敗したらもう１つの状態に遷移するという処理が必要となる。しかし、バックトラックを用いると、後戻りのための処理時間がかかる。
【０００９】
そこで、正規表現を変換して得られたＮＦＡをそのまま使うのではなく、ＮＦＡをさらにＤＦＡに変換してから、パターンマッチング処理を行う。ＤＦＡの場合には、ＮＦＡと違って、状態と入力が決まれば遷移先が必ず１つだけに決まるので、ＮＦＡのようなバックトラックは必要がなく、処理を高速に実行することが可能になる。
【００１０】
例えば、図１３のＮＦＡは、図１４に示すようなＤＦＡに変換される。ここでは、ａという文字に対してその遷移先は１つだけとなり、ＮＦＡに見られたような曖昧さはない。したがって、バックトラックは必要なくなるわけである。もちろん、あらかじめＮＦＡをＤＦＡに変換するのに時間がかかるが、大量のデータに対してパターンマッチングを行う場合、バックトラックがないＤＦＡの高速性により、全体としては十分に処理が高速化される。
【００１１】
ところで、正規表現は、図１５に示すような連結（concatenation）、選択（union）、および繰り返し（閉包：closure）の３つの基本操作（演算子）によって、再帰的に定義される。これらの操作の間には、普通の数式と同様に、優先順位があり、最も強く結合するのが繰り返し“＊”であり、次に強く結合するのが連結であり、最後が選択“|”という順番になる。ただし、文字や記号を括弧で囲むことによって、優先順位を変えることもできる。
【００１２】
【発明が解決しようとする課題】
しかしながら、上述した従来の検索処理には、次のような問題がある。
文字列における正規表現と、それによるパターンマッチングは、あらゆるクラスの文字列に対する検索方法を提供する一般的なフレームワークである。しかし、順序を持つデータは、以下の（１）〜（３）に示すように、データの特性が文字列データとは異なるため、正規表現とそのパターンマッチングを適用することができない。
（１）文字列においては、等間隔で隣あった文字しか存在しないが、順序を持つデータの場合には、ある位置に複数のイベントが存在する場合がある。例えば、同じ日に複数回の買い物を行った場合がそれにあたり、「顧客１０００１は、３月２１日に牛乳とパンの２つの商品を購入」といった表現が必要となる。しかし、文字列では、同じ位置に２つの文字が出現することがないので、正規表現では同時に発現するイベントを表現できない。
（２）文字列では、値と記号（リテラル）とが等しい。つまり、文字列として“Ａ”が与えられたとき、“Ａ”は値でもあり、記号としてのＡでもある。しかし、複数の属性からなるデータでは、「商品としてＰＣを購入し、かつ、ＴＶを購入した顧客を‘顧客グループＡ’と呼ぶ」というように、複数フィールドの条件の組み合わせを１つの記号として扱う必要がある。このような複数フィールドの条件の組み合わせを、正規表現で表すことはできない。
（３）順序を持つデータの場合、「ＰＣを購入してからＴＶを購入するまでの日数が３ヵ月以内」というように、順序に間隔の概念が必要となる。しかし、文字列の正規表現では、間隔を指定することはできない。
【００１３】
このような順序を持つデータを扱うための技術として、出願人による先願の特願２００１−３４０８１７（「順序を考慮したパターンを用いた検索装置および方法」）がある。この先願において処理の対象となるデータは、複数のフィールド（属性）を持つレコードの集合からなるデータである。各レコードは決まった数のフィールドを持ち、あるレコードのみが異なった数のフィールドを持つことはないものとする。さらに、データ中には、順序を持ったフィールドが１つ以上含まれているものとする。
【００１４】
順序を持ったフィールドとは、日付や時刻といった順序関係をあらかじめ持っているフィールドか、顧客ＩＤ（顧客識別子）フィールドのように、データを並び替えることで順序が生じるものである。また、日付フィールドと時刻フィールドをあわせて１つの順序フィールドと考えることができるように、複数のフィールドを複合して順序を持たせる場合もある。
【００１５】
このような対象データの中から順序を持つパターンを検索する際に、イベント定義とイベント間定義によりパターンが指定される。
イベント定義とは、１つあるいは複数のフィールドについて指定した条件に、一意な名前を付けたものである。１つのフィールドについて条件を指定する場合は、例えば、「商品としてＰＣを購入した顧客を‘顧客グループＡ’と呼ぶ」というように定義できる。また、複数のフィールドについて条件を指定する場合には、例えば、「商品としてＰＣを購入し、かつ、ＣＡＭＥＲＡを購入した顧客を‘顧客グループＡ’と呼ぶ」というように、複数フィールドの条件の組み合わせを１つの記号（リテラル）として扱う。
【００１６】
つまり、イベントとは、１つあるいは複数のフィールドについて条件を満たしたレコードに関するラベルであると定義する。さらに、正規表現におけるワイルドカードのように、何にでもマッチするような条件を指定することも可能とする。
【００１７】
図１６は、「商品としてＰＣを購入し、かつ、ＣＡＭＥＲＡを購入した顧客を‘顧客グループＡ’と呼ぶ」で定義されるイベント定義の例を示している。既に説明したように、複数フィールドの条件の組み合わせを文字列の正規表現で表すことは不可能である。
【００１８】
次に、イベント間定義とは、イベント定義を利用して、イベントとイベントの間にまたがる関係を記述するものである。イベント間定義においては、同じ順序に複数のイベントが存在する場合や、順序の間隔が一定でない場合（任意の間隔で順序が記述される場合）も考慮される。
【００１９】
具体的な例としては、商品としてＰＣを購入し、かつ、ＣＡＭＥＲＡを購入した顧客を‘Ａ’と呼び、商品としてＴＶを購入し、かつ、ＶＴＲを購入した顧客を‘Ｂ’と呼ぶことにすると、「‘Ａ’から‘Ｂ’までの間隔が３来店以内」というようなイベント間定義が考えられる。また、「‘Ａ’から‘Ｂ’までの間隔が３日以内（‘Ａ’の日付フィールドと‘Ｂ’の日付フィールドの差が３日以内）」といった定義も考えられる。
【００２０】
また、順序を持つフィールド以外でも、イベントとイベントにまたがる制約を記述することができる。例えば、「‘Ａ’における価格が‘Ｂ’における価格よりも大きい」といった定義が可能である。さらに、イベント定義がどのようなパターンにもマッチするワイルドカードで指定されている場合でも、イベント間定義によって条件を指定することが可能である。
【００２１】
図１７は、イベント間定義の例を示している。この例においては、イベント‘Ａ’とイベント‘Ｂ’の間隔が３日以内であり、イベント‘Ａ’とイベント‘Ｃ’の間隔が５日以内であることが定義されている。
【００２２】
正規表現において、すべての文字にマッチする‘．’を利用してａ．．ｂと表記するのは、あくまでもリテラル‘ａ’の３文字後に‘ｂ’が出現するという意味であり、１つ以上のフィールドについて条件が指定されたイベント定義とは異なる。
【００２３】
また、任意のイベント間の関係が定義できるということは、検索すべきマッチングパターンがグラフ構造で表現されることを意味する。図１７の例でも、イベント定義１とイベント定義２の間にイベント間の制約が存在し、イベント定義１とイベント定義３の間にイベント間の制約が存在する。
【００２４】
このように、イベント定義とイベント間定義によりパターンを指定することで、順序を持つレコード群を対象としたパターン指定検索が実現できる。しかし、パターンに繰り返し指定が含まれていると、検索処理でバックトラックが必要になる場合がある。以下では、図１８に示す多次元データ（複数フィールドのデータ）を例に用いてこの問題について説明する。
【００２５】
図１８のデータにおいて、ＲＩＤはレコード識別子であり、各レコードは、購入日、商品、および価格の３つのフィールドを有するものとする。また、購入日により順序が定義されており、連続な購入日とは、カレンダーの通りではなく、次の来店日を意味するものと仮定する。検索パターン（イベントパターン）は、例えば、以下のように与えられる。
イベント定義
Ｅｖｅｎｔ１：商品＝Ｂ
Ｅｖｅｎｔ２：商品＝Ｃ
順序
（Ｅｖｅｎｔ１＋）−Ｅｖｅｎｔ２
イベント間定義
Ｅｖｅｎｔ２．購入日＜＝Ｅｖｅｎｔ１．購入日＋２日
このイベントパターンにおいて、順序は、Ｅｖｅｎｔ１が１回以上連続した後に続いてＥｖｅｎｔ２が発生することを表し、イベント間定義は、Ｅｖｅｎｔ１の購入日からＥｖｅｎｔ２の購入日までの間隔が２日以内であることを表している。上述した先願の検索処理では、このイベントパターンから図１９のような問い合わせパターンが生成され、データへのポインタＤＰと問い合わせパターンへのポインタＰＰの２つを用いて処理が進められる。
【００２６】
ＰＰについては、図１９に示すように、ＰＰ＝１のときＥｖｅｎｔ１（商品＝Ｂ）の１回以上の繰り返しを指し、ＰＰ＝２のときＥｖｅｎｔ２（商品＝Ｃ）を指すものとする。この場合、Ｅｖｅｎｔ１とＥｖｅｎｔ２のうちＥｖｅｎｔ２の方が出現順序が後であるから、イベント間定義は、ＰＰ＝２の位置に付加しておく。
【００２７】
初期化処理により、ＤＰ＝２００１／０１／１３、ＰＰ＝１と設定され、初めに、ＤＰ＝２００１／０１／１３のデータについて、ＰＰ＝１のイベント定義である商品＝Ｂのパターンに合致するものがあるかどうかを調べる。この場合、Ｒ１のレコードが合致するので、ポインタＤＰがインクリメントされてＤＰ＝２００１／０１／１５となる。ＰＰに関しては、Ｅｖｅｎｔ１の繰り返しが続く場合と、Ｅｖｅｎｔ２の商品＝Ｃでマッチングする場合の両方が発生し得る。このように、２つ以上の分岐が発生する場合には、選択して実行した１つの分岐先が失敗すれば、他の分岐先を調べるためのバックトラックが必要となる。
【００２８】
例えば、ＰＰ＝１の繰り返しが続くかどうかを調べるには、ＤＰ＝２００１／０１／１５のデータについてＰＰ＝１のイベント定義のパターンが合致するかどうかを調べる。この場合、Ｒ５のレコードがＰＰ＝１の条件に合致するので、ＤＰ＝２００１／０１／１６となるが、ＰＰについては再びＥｖｅｎｔ１の繰り返しを調べるか、Ｅｖｅｎｔ２を調べるかの分岐が発生する。
【００２９】
そこで、Ｅｖｅｎｔ１の繰り返しについて調べるとして、ＤＰ＝２００１／０１／１６のデータを見るとＲ８のレコードが合致する。すなわち、Ｅｖｅｎｔ１−Ｅｖｅｎｔ１−Ｅｖｅｎｔ１のように３回のマッチングに成功する。しかし、ＤＰ＝２００１／０１／２０においては、Ｅｖｅｎｔ１にもＥｖｅｎｔ２にも合致するデータが存在していないのでマッチングは成功せず、前の分岐にもどって処理をやり直す必要がある。
【００３０】
一般に、ＰＯＳ（Point-Of-Sales）のレシートのような順序を持つ多次元データにおいては、同一時刻に多数の商品が購買されることが多く、検索処理でバックトラックが発生すると処理の効率が著しく低下する。このため、順序を持つデータをバックトラックなしで検索する方法が望まれる。
【００３１】
本発明の課題は、順序を持つデータを対象としてイベントの繰り返しを含むパターンを効率良く検索する装置および方法を提供することである。
【００３２】
【課題を解決するための手段】
図１は、本発明の検索装置の原理図である。図１の検索装置は、入力手段１０１、変換手段１０２、検索手段１０３、および出力手段１０４を備え、正規表現によるパターンマッチングを適用できない順序関係にあるデータを対象に複数の属性からなるレコードの集合１０５からレコードの組み合わせを検索する。
【００３３】
入力手段１０１は、レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンを入力する。変換手段１０２は、検索パターンから順序関係を抽出して、決定性有限オートマトンに変換する。
【００３４】
検索手段１０３は、レコードの集合１０５から同じ順序にある１つ以上のレコードを読み込み、読み込まれたレコードにより決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合１０６に登録する処理を繰り返し、決定性有限オートマトンの終了状態が遷移先として状態遷移集合１０６に登録されたとき、終了状態に到達した状態遷移の付加情報から検索パターンに対応するレコードの組み合わせを求める。検索手段１０３は、同じ順序にある複数のレコードにより決定性有限オートマトン上で状態遷移が可能なとき、それらのレコードに対応する複数の遷移先とそれらのレコードを示す複数の付加情報とを状態遷移集合に登録する。そして、出力手段１０４は、得られたレコードの組み合わせを検索結果として出力する。
【００３５】
ユーザは、入力手段１０１を用いて、複数のイベントとイベント間の順序関係により決められる検索パターンとして、あるイベントの繰り返しを含むような検索パターンを指定することができる。入力された検索パターンは変換手段１０２に渡され、変換手段１０２により、順序関係の情報が決定性有限オートマトンに変換される。
【００３６】
検索手段１０３は、レコードの集合１０５を検索対象データとして、同じ順序にある１つ以上のレコードを一まとまりとして読み込み、それらのレコードの各々について、決定性有限オートマトン上で定義された状態遷移を起こすイベントに対応するかどうかを調べる。そして、あるレコードがそのようなイベントに対応すれば、その場合の遷移先の状態と付加情報（レコードの識別情報等）とを状態遷移集合１０６に登録する。
【００３７】
状態遷移集合１０６の初期値としては、決定性有限オートマトンの開始状態が登録されており、新たに遷移先の状態が登録されることで、状態遷移集合１０６は複数の状態を保持することになる。
【００３８】
検索手段１０３は、このようなレコードの読み込みと、状態遷移集合１０６に登録された状態から次の状態への遷移が可能かどうかの判定と、状態遷移集合１０６の更新とを繰り返し、決定性有限オートマトンの終了状態が遷移先として登録されると、開始状態から終了状態までに至る状態遷移の付加情報から、その状態遷移を起こしたレコードの組み合わせを特定する。そして、出力手段１０４は、このレコードの組み合わせを検索パターンに対応する検索結果として出力する。
【００３９】
決定性有限オートマトン上での状態遷移の可能性を調べる際に、遷移先を状態遷移集合１０６として管理することで、複数のレコードによる可能な遷移先をすべて登録することができる。したがって、イベントの繰り返しによる分岐が発生する場合でも、複数の枝の遷移先を同時に登録しながら効率良く検索処理を進めることができ、バックトラックを防止することが可能となる。
【００４０】
検索パターンに順序関係以外のイベント間の制約が含まれている場合は、変換手段１０２は、その制約を検索パターンから抽出して検索手段１０３に渡し、検索手段１０３は、状態遷移を可能にするレコードが制約を満たすかどうかを調べる。これにより、順序関係と制約の両方を満たすレコードの組み合わせを求めることができる。
【００４１】
図１の入力手段１０１は、例えば、後述する図１０の入力装置１３３に対応し、図１の変換手段１０２は、例えば、後述する図２のパターン変換部１１４に対応し、図１の検索手段１０３および出力手段１０４は、例えば、図２の検索処理部１１５に対応する。
【００４２】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態を詳細に説明する。
図２は、本実施形態の検索装置の構成図である。図２の検索装置は、イベント変換部１１３、パターン変換部１１４、および検索処理部１１５を備え、順序を持つ多次元データ１１１を検索対象として、繰り返しを含む検索パターン１１２に合致するデータの組み合わせを検索する。
【００４３】
イベント変換部１１３は、与えられたデータ１１１の各レコードがどのイベントに対応するのかを認識するために設けられ、レコードをイベント記号に変換する。
【００４４】
パターン変換部１１４は、与えられた検索パターン１１２をイベント定義１２１、順序関係１２２、および順序関係以外のイベント間制約１２３に分解し、イベント定義１２１をイベント変換部１１３に出力し、制約１２３を検索処理部１１５に出力する。
【００４５】
そして、イベント変換部１１３は、イベント定義１２１をイベント記号に変換する。この場合、イベント記号としては、正規表現における‘．’のように、何にでもマッチする記号も使用可能とする。制約１２３としては、例えば、イベント間の間隔に関する条件や、イベント間であるフィールドの値が同じ／異なるという条件を設定することが可能である。
【００４６】
また、パターン変換部１１４は、順序関係１２２を非決定性有限オートマトン（ＮＦＡ）１２４に変換した後、決定性有限オートマトン（ＤＦＡ）１２５に変換して、検索処理部１１５に出力する。このような変換を行う理由は、状態を持つ決定性有限オートマトンを利用して検索処理を進めることによりバックトラックを防止することができるからである。
【００４７】
検索処理部１１５は、イベント変換部１１３により変換されたデータを読み込み、ＤＦＡ１２５を利用してデータがイベント定義１２１に合致するかどうかを調べて、検索結果１１６を出力する。ここで、順序を持つ多次元データ１１１は、従来の決定性有限オートマトンでは想定していない検索対象であるため、決定性有限オートマトンを以下のように拡張する。
（１）あるデータの値が複数のイベントに合致する場合や同じ順序にある複数のレコードが複数のイベントに合致する場合があるため、状態遷移の遷移先は複数存在し状態遷移集合となる。また、遷移するだけでなく、イベント間の関係を調べることができるように、状態遷移集合にはマッチしたレコードの情報を状態遷移の履歴情報として付加する。
（２）与えられたレコードが状態遷移可能かどうかに加えて、そのレコードがイベント間の制約１２３を満たすかどうかも調べる。
（３）一度のデータスキャンで状態遷移を完了するために、遷移可能かどうかを調べる際に、毎回、開始状態を状態遷移集合に加え、開始状態からの遷移についても調べる。
【００４８】
図３は、図２の検索装置による全体処理のフローチャートである。まず、ユーザは、データ１１１を入力し（ステップＳ１）、検索パターン１１２を指定する（ステップＳ２）。
【００４９】
パターン変換部１１４は、指定された検索パターン１１２を解析してイベント定義部分を抽出し、イベント変換部１１３は、抽出されたイベント定義１２１とデータ１１１をイベント記号に変換する（ステップＳ３）。また、パターン変換部１１４は、検索パターン１１２のうち順序関係を表す部分をＤＦＡ１２５に変換し（ステップＳ４）、それ以外のイベント間の関係を制約１２３として抽出する（ステップＳ５）。
【００５０】
検索処理部１１５は、データを読み込んで、それがイベント定義１２１に合致するかどうかを調べる（ステップＳ６）。このとき、順序を持つデータに対して状態遷移を適用するために、従来の状態遷移の仕組みを付加情報を持つ状態遷移集合に拡張する。そして、データがイベント定義１２１に合致する場合には、ＤＦＡ１２５上で遷移を行って順序関係１２２の条件を満たすかどうかを調べ、その条件を満たす場合には、さらに、制約１２３を満たすかどうかを調べる。
【００５１】
このようにして、ステップＳ６でデータの読み込み、遷移処理、および制約１２３の判定を繰り返すことにより、指定された検索パターン１１２に合致するデータの組み合わせを検索し、検索結果１１６を出力する（ステップＳ７）。
【００５２】
ここで、検索パターン１１２に含まれる順序関係１２２をＤＦＡ１２５に変換するアルゴリズムについて説明する。この変換は、例えば、以下の文献１で紹介されている変換理論を用いて容易に実現することができる。
文献１：A. V. Aho, J. D. Ullman 共著、土居範久訳、「コンパイラ」、培風館、ｐｐ．８４−９１、１９８６
検索パターンとしては、前述した以下のようなパターンを用い、便宜上、Ｅｖｅｎｔ１およびＥｖｅｎｔ２をそれぞれａおよびｂと表すことにする。
イベント定義
Ｅｖｅｎｔ１：商品＝Ｂ
Ｅｖｅｎｔ２：商品＝Ｃ
順序
（Ｅｖｅｎｔ１＋）−Ｅｖｅｎｔ２
イベント間定義
Ｅｖｅｎｔ２．購入日＜＝Ｅｖｅｎｔ１．購入日＋２日
この場合、Ｅｖｅｎｔ１とＥｖｅｎｔ２の順序関係は、正規表現‘ａ＋ｂ’に置き換えられる。この正規表現からは、文献１の８７ページに記載されたアルゴリズム３．２によりＮＦＡを機械的に構成することができる。以下では、記号‘ε’は何があっても遷移する「ε遷移」を表すものとする。
【００５３】
まず、‘ａ＋’についてはａが１回以上繰り返されるということから、‘ａａ＊’に等価となる。ここで、‘ａ＊’はａが０回以上繰り返されることを意味する。そこで、‘ａ＋ｂ’は‘ａａ＊ｂ’へと等価に変換できる。次に、‘ａａ＊ｂ’を分解してａ、ａ＊、およびｂのそれぞれについて状態遷移を定義し、最後にそれらを合併することでＮＦＡを構成することができる。
【００５４】
まず、ａおよびｂについては、状態遷移をそれぞれ以下のように定義することができる。
ｓｔａｔｅ０→ａ→ｓｔａｔｅ３
ｓｔａｔｅ２→ｂ→ｓｔａｔｅ１
ここで、ｓｔａｔｅ０およびｓｔａｔｅ１は、それぞれ開始状態および終了状態を表している。
【００５５】
また、ａ＊については、図４に示すような状態遷移を定義することができる。図４では、ｓｔａｔｅ４からａによってｓｔａｔｅ４へと遷移している。この状態遷移は、図５に示すように、ｓｔａｔｅ４からａによって新しい状態（ｓｔａｔｅ５）に遷移し、ｓｔａｔｅ５からε遷移でｓｔａｔｅ４に遷移することと等価である。そこで、ａ＊の状態遷移を図５のように構成し、ａおよびｂの状態遷移とε遷移で結合することで、図６に示すようなＮＦＡが得られる。このＮＦＡが表す状態遷移を書き下すと以下のようになる。
＝＝＝＝  ＮＦＡ  ＝＝＝＝
ｓｔａｔｅ０：（ａ．３）
ｓｔａｔｅ１：（ｅｎｄ）
ｓｔａｔｅ２：（ｂ．１）
ｓｔａｔｅ３：（ε．４）
ｓｔａｔｅ４：（ε．２）（ａ．５）
ｓｔａｔｅ５：（ε．４）
このＮＦＡでは、ｓｔａｔｅ４からａによってｓｔａｔｅ２とｓｔａｔｅ５の両方へと遷移可能であり、遷移先が一意に決定されないことが明らかである。
【００５６】
次に、ＮＦＡからＤＦＡへの変換は、文献１の８４ページに記載されたアルゴリズム３．１により機械的に実施することができる。このアルゴリズムにより上述のＮＦＡは以下のようなＤＦＡに変換される。
＝＝＝＝  ＤＦＡ  ＝＝＝＝
ｄｆａ０：ａ→１
ｄｆａ１：ｂ→３  ａ→２
ｄｆａ２：ｂ→３  ａ→２
ｄｆａ３：（ｅｎｄ）
ＤＦＡの状態（ｄｆａ０〜ｄｆａ３）とＮＦＡの状態（ｓｔａｔｅ０〜ｓｔａｔｅ５）の対応関係は、以下の通りである。
ｄｆａ０  ＝  ＮＦＡ｛ｓｔａｔｅ０｝
ｄｆａ１  ＝  ＮＦＡ｛ｓｔａｔｅ２，ｓｔａｔｅ３，ｓｔａｔｅ４｝
ｄｆａ２  ＝  ＮＦＡ｛ｓｔａｔｅ２，ｓｔａｔｅ４，ｓｔａｔｅ５｝
ｄｆａ３  ＝  ＮＦＡ｛ｓｔａｔｅ１｝
ｄｆａ０は開始状態であり、これはｓｔａｔｅ０からなる。ｄｆａ０からはａによってｄｆａ１に遷移する。ｄｆａ１はｓｔａｔｅ２、ｓｔａｔｅ３、およびｓｔａｔｅ４からなり、ｄｆａ１からはｂによってｄｆａ３に遷移し、ａによってｄｆａ２に遷移する。また、ｄｆａ３は終了状態である。このように、ＤＦＡでは、各状態からａ、ｂによって一意にしか遷移していないことが分かる。
【００５７】
図７は、図３のステップＳ６における検索処理のフローチャートである。検索処理部１１５は、まず、初期化処理を行って、状態遷移集合を開始状態である｛ｄｆａ０｝に設定し、先頭の順序（開始位置）にあるレコード（またはレコード群）を処理対象とする（ステップＳ１１）。
【００５８】
次に、処理対象のレコードを読み込み、状態遷移集合に登録されている状態から、読み込まれたレコードにより遷移可能かどうかを調べる（ステップＳ１２）。このとき、同じ順序にある複数のレコードはまとめて扱う。例えば、図１８に示したように２００１／０１／１５の日付に３つのレコードがあれば、それらのレコードについて状態遷移集合からＤＦＡ１２５上で遷移可能かどうかを調べる。
【００５９】
あるレコードにより遷移可能であれば、次に、そのレコードが制約１２３の条件を満たしているかどうかを調べ（ステップＳ１３）、制約１２３を満たす場合に新しい遷移先を状態遷移集合に追加する（ステップＳ１４）。また、状態遷移集合に登録されている状態のうち遷移可能でないものについては、状態遷移集合から削除する。ただし、ｄｆａ０は削除せずに残しておき、毎回、開始状態からの遷移について調べることにする。これにより、検索対象のデータを一度スキャンするだけですべての遷移処理を行うことが可能となる。
【００６０】
次に、ＤＦＡ１２５における終了状態になったかどうかを判定し（ステップＳ１５）、終了状態になっていなければ、データの末尾（最後の順序）に到達したかどうかを判定する（ステップＳ１７）。また、終了状態になっていれば、結果を登録して（ステップＳ１６）、ステップＳ１７の判定を行う。
【００６１】
データの末尾に到達していなければ、次の順序のレコードを処理対象としてステップＳ１２以降の処理を繰り返す。そして、ステップＳ１７においてデータの末尾に到達すれば処理を終了する。
【００６２】
このような検索処理によれば、イベント定義とイベント間定義によって指定された順序パターンについて、正規表現的な検索処理を効率良く行うことができる。
【００６３】
ところで、前述した検索パターンにおける繰り返しでは、あるイベントが連続して発生することを想定しているが、実際には、イベントが連続していなくても繰り返し発生するような検索パターンを指定したい場合もある。このような検索パターンについても、イベントが連続して発生する場合と同様の表現を用いて指定することで、これまで述べてきた検索処理を適用することができる。
【００６４】
例えば、Ｅｖｅｎｔ１が連続していなくても繰り返し発生することを、‘（Ｅｖｅｎｔ１．＊）＋’と表すことにする。この場合、Ｅｖｅｎｔ１の後の‘．’は何にでもマッチするので、‘．’が０個以上出現することにより、Ｅｖｅｎｔ１が連続する場合と連続しなくても繰り返し発生する場合のすべてを網羅することができる。
【００６５】
‘．’をオートマトンにおける‘ＡＮＹ’に合致する記号として扱うことで、‘．’を含む順序関係から、前述したアルゴリズムによりＮＦＡおよびＤＦＡを構成することができる。この場合、イベント変換部１１３は、‘．’をＡＮＹに合致するイベント記号に変換し、検索処理部１１５は、ＡＮＹにはどのようなレコードでもマッチするものとして検索処理を行う。
【００６６】
次に、図１８のデータを対象として、前述した検索パターンが指定された場合の検索処理について説明する。
検索装置は、まず、指定された検索パターンを、Ｅｖｅｎｔ１が商品＝Ｂを表し、Ｅｖｅｎｔ２が商品＝Ｃを表すことを識別できるように登録しておく。これにより、読み込まれたレコードがどのようなイベント（またはイベント群）に合致しているかを判断することができる。順序を持つ多次元データを検索対象とする場合、文字列のパターンマッチングとは異なり、あらかじめデータのドメイン（アルファベットなら２６文字）を知ることは一般的にはできない。
【００６７】
次に、前述した手順に従って検索パターンの順序関係を表すＤＦＡを生成し、開始位置＝２００１／０１／１３、初期状態遷移集合＝｛ｄｆａ０｝として、検索処理を開始する。この場合、イベント間の制約はＥｖｅｎｔ２．購入日＜＝Ｅｖｅｎｔ１．購入日＋２日であるので、終了状態のｄｆａ３に到達しない限り制約について調べる必要はない。
【００６８】
まず、Ｒ１、Ｒ２、およびＲ３の３つのレコードが処理対象となり、Ｒ１についてはＥｖｅｎｔ１に合致し、Ｒ２についてはＥｖｅｎｔ２に合致することが分かる。一方、ＤＦＡ上においては、｛ｄｆａ０｝からａすなわちＥｖｅｎｔ１によって｛ｄｆａ１｝に遷移可能であることが分かる。そこで、ｄｆａ０→ａ→ｄｆａ１の遷移における遷移先ｄｆａ１と、履歴情報（付加情報）としてのレコード識別子（ＲＩＤ）およびイベント識別子を状態遷移集合に登録する。これにより、状態遷移集合は以下のようになる。
ｄｆａ０
ｄｆａ１：レコードＲ１  イベントａ
なお、この例ではレコードとイベントを履歴情報として登録しているが、該当するレコードとイベントが一意に識別できるのであれば、他の情報を登録しても構わない。遷移を見つけたら制約について調べることになっているが、ａ単独ではイベント間の制約を調べる必要がないので、この処理をスキップする。
【００６９】
続いて、順序を２００１／０１／１５に進める。これにより、Ｒ４、Ｒ５、およびＲ６の３つのレコードが処理対象となり、Ｒ５がＥｖｅｎｔ１に合致し、Ｒ６がＥｖｅｎｔ２に合致する。状態遷移集合｛ｄｆａ０，ｄｆａ１｝からの遷移を調べると、ｄｆａ０については、Ｒ５によりｄｆａ０→ａ→ｄｆａ１と遷移可能である。また、ｄｆａ１については、Ｒ５によりｄｆａ１→ａ→ｄｆａ２と遷移可能であり、Ｒ６によりｄｆａ１→ｂ→ｄｆａ３と遷移可能である。
【００７０】
そこで、これらの遷移先ｄｆａ１、ｄｆａ２、およびｄｆａ３について、履歴情報を付加して一時的に状態遷移集合に登録する。このとき、新たな遷移先がない状態（元の集合に含まれていた状態）は状態遷移集合から削除するが、ｄｆａ０については必ず残しておく。これにより、状態遷移集合は以下のようになる。ｄｆａ０
ｄｆａ１：レコードＲ５  イベントａ
ｄｆａ２：レコードＲ１  イベントａ  レコードＲ５  イベントａ
ｄｆａ３：レコードＲ１  イベントａ  レコードＲ６  イベントｂ
ここで、制約が評価可能なｄｆａ３に到達したイベントａおよびｂについて、制約が満たされるかどうかを調べる。この場合、Ｒ１の購入日＝２００１／０１／１３であり、Ｒ６の購入日＝２００１／０１／１６である。したがって、Ｒ５の購入日とＲ６の購入日の間には３日の間隔があり、上述の制約を満たさないので、ｄｆａ３を状態遷移集合から削除する。これにより、状態遷移集合は以下のようになる。
ｄｆａ０
ｄｆａ１：レコードＲ５  イベントａ
ｄｆａ２：レコードＲ１  イベントａ  レコードＲ５  イベントａ
次に、順序を２００１／０１／１６に進める。これにより、Ｒ７、Ｒ８、およびＲ９の３つのレコードが処理対象となり、Ｒ８がＥｖｅｎｔ１に合致し、Ｒ９がＥｖｅｎｔ２に合致する。このとき、状態遷移集合｛ｄｆａ０，ｄｆａ１，ｄｆａ２｝からは、Ｒ８およびＲ９により以下のような遷移が可能である。
ｄｆａ０→ａ→ｄｆａ１（Ｒ８）
ｄｆａ１→ａ→ｄｆａ２（Ｒ８）
ｄｆａ１→ｂ→ｄｆａ３（Ｒ９）
ｄｆａ２→ｂ→ｄｆａ３（Ｒ９）
そこで、これらの遷移先について、履歴情報を付加して状態遷移集合に一時的に登録する。このとき、ｄｆａ０以外で元の集合に含まれていた状態は、状態遷移集合から削除する。これにより、状態遷移集合は以下のようになる。
0004047053.tif 000002
ここで、制約が評価可能なｄｆａ３に到達した遷移（１）および（２）について、制約が満たされるかどうかを調べる。（１）については、Ｒ５の購入日＝２００１／０１／１５であり、Ｒ９の購入日＝２００１／０１／１６であるから、制約を満たしている。したがって、（１）を検索結果として登録し、状態遷移集合から削除する。
【００７１】
（２）については、Ｒ１の購入日＝２００１／０１／１３であり、Ｒ９の購入日＝２００１／０１／１６であるから、これらの購入日の間には３日の間隔があり、制約を満たさない。したがって、（２）を状態遷移集合から削除する。これにより、状態遷移集合は以下のようになる。
ｄｆａ０
ｄｆａ１：レコードＲ８  イベントａ
ｄｆａ２：レコードＲ５  イベントａ  レコードＲ８  イベントａ
最後に、開始位置を２００１／０１／２０に進める。これにより、Ｒ１０、Ｒ１１、およびＲ１２の３つのレコードが処理対象となるが、イベント定義に合致するものがないため、状態遷移集合｛ｄｆａ０，ｄｆａ１，ｄｆａ２｝から遷移することができない。したがって、状態遷移集合からｄｆａ１およびｄｆａ２を削除する。
【００７２】
ここで、すべてのデータについて検索が完了したので処理を終了する。こうして、以下のような順序パターンが検索結果として出力される。
レコードＲ５  イベントａ  レコードＲ９  イベントｂ
次に、本実施形態の検索装置の付加的な機能について説明する。検索処理部１１５は、通常、データの末尾まで検索してから結果を出力するが、データが巨大な場合には、結果が返ってくるまでのレスポンスが遅くなる。そこで、検索パターンに合致するパターンが見つかるたびに、そのパターンを構成するレコード群を出力することも可能とする。これにより、データが巨大な場合においても結果出力までのレスポンスを向上させることができる。
【００７３】
また、検索処理におけるパターンマッチングの指定方法としては、様々なものが考えられる。正規表現におけるパターンマッチングでは、与えられた文字列パターンにマッチする最も長い文字列を返す「最長マッチ」が基本である。しかし、Ｐｅｒｌ（Practical Extraction and Report Language）処理系では、与えられた文字パターンにマッチする最も短い文字列を返す「最短マッチ」を指定することができる。
【００７４】
本実施形態の順序に基づいたパターンマッチングにおいては、正規表現で用いられるマッチング指定を含む以下のようなマッチング指定が可能である。同時に複数のパターンマッチングが指定された場合は、検索処理部１１５は、該当するパターンを列挙して出力する。
（１）最長マッチ：与えられた検索パターンにマッチするパターンの中でイベント間の間隔が最長のものを返す。
（２）最短マッチ：与えられた検索パターンにマッチするパターンの中でイベント間の間隔が最短のものを返す。
（３）最初マッチ：与えられた検索パターンにマッチする最初のパターンを返す。
（４）全部マッチ：与えられた検索パターンにマッチするすべてのパターンを返す。
（５）データの末尾から逆向きの最長マッチ：与えられた検索パターンに逆向きにマッチするパターンの中でイベント間の間隔が最長のものを返す。
（６）データの末尾から逆向きの最短マッチ：与えられた検索パターンに逆向きにマッチするパターンの中でイベント間の間隔が最短のものを返す。
【００７５】
また、検索処理部１１５が出力する検索結果の出力フォーマットをユーザが指定することも可能である。この場合、検索処理部１１５は、検索されたパターンに含まれるレコード群の情報を、指定されたフォーマットにコンパイルして出力する。
【００７６】
例えば、ＰＣを購入した後、３日以内にＴＶを購入したことを表す検索パターンに対して、“顧客ＩＤ，ＰＣの購入日，ＴＶの購入日，ＰＣとＴＶの購入日の間隔（ＴＶの購入日−ＰＣの購入日）”のように、特定のフィールドの値を用いた演算をユーザが指定する。検索処理部１１５は、与えられたデータの中から対応するパターンを発見し、そのパターンからＰＣとＴＶの購入日を抽出して出力するとともに、ＰＣとＴＶの購入日の間隔を計算して出力する。
【００７７】
さらに、発見された繰り返しを含むパターンを対象として、レコード群の集約演算（aggregate function）を実行し、演算結果を出力することも可能である。集約演算としては、最小値（ＭＩＮ）、最大値（ＭＡＸ）、平均（ＡＶＧ）、総和（ＳＵＭ）といった一般的な関数が用いられる。これらの集約演算を処理する際には、１つ１つのパターンを発見したら、それらをバッファに保存しておき、処理の区切りがついたところで、保存されたパターンすべてを対象として演算を実行する。
【００７８】
例えば、ＰＣを購入した後、３日以内にＴＶを購入したことを表す検索パターンに対して、“顧客ＩＤ，ＰＣの購入日，ＴＶの購入日，ＡＶＧ（ＰＣとＴＶの価格）”のように指定することができる。
【００７９】
ところで、検索パターンにマッチするパターンが見つからない場合には、なんらかの形でユーザにその旨を通知する必要がある。例えば、マッチするパターンがないことを示すレコードをあらかじめ用意しておき、検索結果としてＮＵＬＬが出力された場合にそのレコードを用いてメッセージを画面上に表示することで、ユーザにこれを通知することができる。
【００８０】
また、複数のフィールドからなるレコードの集合がデータとして与えられた際に、レコードのグループバイ（グループ化）を行って、処理を高速化することもできる。このとき、どのフィールドでグループ化し、各グループのレコード群をどのフィールドで整列（ソート）するかを指定して、あらかじめレコードを並べ替えておく。グループ化に用いるフィールドとしては、複数のフィールドを指定することができる。
【００８１】
例えば、図８のようなデータを検索対象として、顧客ＩＤフィールドでグループ化し、各グループのレコードを購入日フィールドで整列するものとする。この場合、グループ化と整列により、検索対象データは図９のように並べ替えられる。顧客ＩＤが１１０００１００１の顧客は、２００１／０１／１３に１回目の来店を行い、商品ＡとＮの２点を購入した。また、同じ顧客が２００１／０１／２８に２回目の来店を行い、別の商品Ｂを購入している。
【００８２】
こうして並べ替えられたデータを検索対象とすることで、検索処理部１１５は、各グループについて整列されたレコードを順番に取り出すだけで、マッチングを行うことができる。したがって、データがメモリ上に乗り切らない場合でも処理を高速に行うことができる。
【００８３】
以上説明した実施形態の検索パターンでは、簡単のため、Ｅｖｅｎｔ１とＥｖｅｎｔ２の２つのイベントのみが用いられている。また、イベント定義とイベント間定義においては１つの条件のみが用いられている。しかし、実際には、検索パターンをより多くの数のイベントによって指定することが可能であり、イベント定義およびイベント間定義においても、より多くの条件を指定することが可能である。
【００８４】
ところで、図２の検索装置は、例えば、図１０に示すような情報処理装置（コンピュータ）を用いて構成される。図１０の情報処理装置は、ＣＰＵ（中央処理装置）１３１、メモリ１３２、入力装置１３３、出力装置１３４、外部記憶装置１３５、媒体駆動装置１３６、およびネットワーク接続装置１３７を備え、それらはバス１３８により互いに接続されている。
【００８５】
メモリ１３２は、例えば、ＲＯＭ（read only memory）、ＲＡＭ（randomaccess memory）等を含み、処理に用いられるプログラムとデータを格納する。ＣＰＵ１３１は、メモリ１３２を利用してプログラムを実行することにより、必要な処理を行う。
【００８６】
この場合、図２のイベント変換部１１３、パターン変換部１１４、および検索処理部１１５は、プログラムとしてメモリ１３２に格納され、図２の制約１２３、ＤＦＡ１２５、および状態遷移集合１２６の情報は、データとしてメモリ１３２に格納される。検索処理部１１５は、処理対象のデータを外部記憶装置１３５からメモリ１３２上に読み込み、制約１２３およびＤＦＡ１２５を参照しながら状態遷移集合１２６を更新する処理を繰り返す。
【００８７】
入力装置１３３は、例えば、キーボード、ポインティングデバイス、タッチパネル等であり、ユーザからの指示や情報の入力に用いられる。出力装置１３４は、例えば、ディスプレイ、プリンタ、スピーカ等であり、ユーザへの問い合わせや検索結果の出力に用いられる。
【００８８】
外部記憶装置１３５は、例えば、磁気ディスク装置、光ディスク装置、光磁気ディスク装置、テープ装置等である。情報処理装置は、この外部記憶装置１３５に、上述のプログラムとデータを保存しておき、必要に応じて、それらをメモリ１３２にロードして使用する。
【００８９】
媒体駆動装置１３６は、可搬記録媒体１３９を駆動し、その記録内容にアクセスする。可搬記録媒体１３９としては、メモリカード、フレキシブルディスク、ＣＤ−ＲＯＭ（compact disk read only memory ）、光ディスク、光磁気ディスク等、任意のコンピュータ読み取り可能な記録媒体が用いられる。ユーザは、この可搬記録媒体１３９に上述のプログラムとデータを格納しておき、必要に応じて、それらをメモリ１３２にロードして使用する。
【００９０】
ネットワーク接続装置１３７は、ＬＡＮ（local area network）やインターネット等の任意の通信ネットワークに接続され、通信に伴うデータ変換を行う。情報処理装置は、上述のプログラムとデータをネットワーク接続装置１３７を介して他の装置から受け取り、必要に応じて、それらをメモリ１３２にロードして使用する。
【００９１】
図１１は、図１０の情報処理装置にプログラムとデータを供給することのできるコンピュータ読み取り可能な記録媒体を示している。可搬記録媒体１３９やサーバ１４０のデータベース１４１に保存されたプログラムとデータは、メモリ１３２にロードされる。このとき、サーバ１４０は、プログラムとデータを搬送する搬送信号を生成し、ネットワーク上の任意の伝送媒体を介して情報処理装置に送信する。そして、ＣＰＵ１３１は、そのデータを用いてそのプログラムを実行し、必要な処理を行う。
（付記１）  複数の属性からなるレコードの集合からレコードの組み合わせを検索する検索装置であって、
レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された該複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンを入力する入力手段と、
前記検索パターンから前記順序関係を抽出して、決定性有限オートマトンに変換する変換手段と、
前記レコードの集合から同じ順序にある１つ以上のレコードを読み込み、読み込まれたレコードにより前記決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合に登録する処理を繰り返し、該決定性有限オートマトンの終了状態が遷移先として該状態遷移集合に登録されたとき、該終了状態に到達した状態遷移の付加情報から前記検索パターンに対応するレコードの組み合わせを求める検索手段と、
得られたレコードの組み合わせを検索結果として出力する出力手段と
を備えることを特徴とする検索装置。
（付記２）  複数の属性からなるレコードの集合からレコードの組み合わせを検索するコンピュータのためのプログラムであって、
レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された該複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンから、該順序関係を抽出して決定性有限オートマトンに変換し、
前記レコードの集合から同じ順序にある１つ以上のレコードをメモリ上に読み込み、読み込まれたレコードにより前記決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合に登録する処理を繰り返し、
前記決定性有限オートマトンの終了状態が遷移先として前記状態遷移集合に登録されたとき、該終了状態に到達した状態遷移の付加情報から前記検索パターンに対応するレコードの組み合わせを求め、
得られたレコードの組み合わせを検索結果として出力する
処理を前記コンピュータに実行させることを特徴とするプログラム。
（付記３）  前記検索パターンから前記順序関係以外のイベント間の制約を抽出し、前記状態遷移を可能にするレコードが該制約を満たすかどうかを調べる処理を、前記コンピュータにさらに実行させることを特徴とする付記２記載のプログラム。
（付記４）  前記コンピュータは、前記検索パターンとして、連続して発生しないイベントの繰り返しを含む検索パターンを指定することを特徴とする付記２記載のプログラム。
（付記５）  前記コンピュータは、前記検索パターンに対応するレコードの組み合わせが見つかるたびに、見つかったレコードの組み合わせを出力することを特徴とする付記２記載のプログラム。
（付記６）  前記コンピュータは、前記検索パターンに対応するレコードの組み合わせを求める処理において、前記検索パターンにマッチするレコードの組み合わせの中でイベント間の間隔が最長の組み合わせを返す最長マッチと、該検索パターンにマッチするレコードの組み合わせの中でイベント間の間隔が最短の組み合わせを返す最短マッチと、該検索パターンにマッチする最初のレコードの組み合わせを返す最初マッチと、該検索パターンにマッチするすべてのレコードの組み合わせを返す全部マッチのうちの１つの方法でパターンマッチングを行うことを特徴とする付記２記載のプログラム。
（付記７）  前記コンピュータは、前記検索パターンに対応するレコードの組み合わせの情報を、指定されたフォーマットにコンパイルして出力することを特徴とする付記２記載のプログラム。
（付記８）  前記検索パターンに対応するレコードの組み合わせに関する集約演算を行って演算結果を出力する処理を、前記コンピュータにさらに実行させることを特徴とする付記２記載のプログラム。
（付記９）  前記コンピュータは、指定された属性の値に基づいて前記レコードの集合を整列し、整列したレコードの集合を検索することを特徴とする付記２記載のプログラム。
（付記１０）  前記コンピュータは、指定された属性の値に基づいて前記レコードの集合をグループ化し、各グループ内のレコードを整列することを特徴とする付記９記載のプログラム。
（付記１１）  複数の属性からなるレコードの集合からレコードの組み合わせを検索するコンピュータのためのプログラムを記録した記録媒体であって、該プログラムは、
レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された該複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンから、該順序関係を抽出して決定性有限オートマトンに変換し、
前記レコードの集合から同じ順序にある１つ以上のレコードをメモリ上に読み込み、読み込まれたレコードにより前記決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合に登録する処理を繰り返し、
前記決定性有限オートマトンの終了状態が遷移先として前記状態遷移集合に登録されたとき、該終了状態に到達した状態遷移の付加情報から前記検索パターンに対応するレコードの組み合わせを求め、
得られたレコードの組み合わせを検索結果として出力する
処理を前記コンピュータに実行させることを特徴とするコンピュータ読み取り可能な記録媒体。
（付記１２）  複数の属性からなるレコードの集合からレコードの組み合わせを検索するコンピュータにプログラムを搬送する搬送信号であって、該プログラムは、
レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された該複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンから、該順序関係を抽出して決定性有限オートマトンに変換し、
前記レコードの集合から同じ順序にある１つ以上のレコードをメモリ上に読み込み、読み込まれたレコードにより前記決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合に登録する処理を繰り返し、
前記決定性有限オートマトンの終了状態が遷移先として前記状態遷移集合に登録されたとき、該終了状態に到達した状態遷移の付加情報から前記検索パターンに対応するレコードの組み合わせを求め、
得られたレコードの組み合わせを検索結果として出力する
処理を前記コンピュータに実行させることを特徴とする搬送信号。
（付記１３）  複数の属性からなるレコードの集合からレコードの組み合わせを検索する検索方法であって、
コンピュータが、レコード内の所定属性が特定の値をとることをそれぞれ定義する複数のイベントと、属性値の順序に基づいて定義された該複数のイベントの間の順序関係とを用いて指定された、イベントの繰り返しを含む検索パターンから、該順序関係を抽出して決定性有限オートマトンに変換し、
前記コンピュータが、前記レコードの集合から同じ順序にある１つ以上のレコードをメモリ上に読み込み、読み込まれたレコードにより前記決定性有限オートマトン上で状態遷移が可能かどうかを調べ、可能な状態遷移の遷移先と状態遷移を可能にするレコードを示す付加情報とを状態遷移集合に登録する処理を繰り返し、
前記コンピュータが、前記決定性有限オートマトンの終了状態が遷移先として前記状態遷移集合に登録されたとき、該終了状態に到達した状態遷移の付加情報から前記検索パターンに対応するレコードの組み合わせを求め、
前記コンピュータが、得られたレコードの組み合わせを検索結果として出力する
ことを特徴とする検索方法。
【００９２】
【発明の効果】
本発明によれば、順序を持つデータを対象としてイベントの繰り返しを含むパターンを効率良く検索することができる。データについては一度のスキャンのみで検索可能であるため、コンピュータの主記憶スペースが限られている場合においても高速な検索処理を行うことができる。また、本発明は、パターンの定義を変えるだけで様々な種類の検索に対応することができ、実用的に極めて有用である。
【図面の簡単な説明】
【図１】本発明の検索装置の原理図である。
【図２】検索装置の構成図である。
【図３】全体処理のフローチャートである。
【図４】第１の状態遷移を示す図である。
【図５】第２の状態遷移を示す図である。
【図６】第１のＮＦＡを示す図である。
【図７】検索処理のフローチャートである。
【図８】第１の検索対象データを示す図である。
【図９】並べ替えられたデータを示す図である。
【図１０】情報処理装置の構成図である。
【図１１】記録媒体を示す図である。
【図１２】正規表現によるパターンマッチングを示す図である。
【図１３】第２のＮＦＡを示す図である。
【図１４】ＤＦＡを示す図である。
【図１５】正規表現の演算子を示す図である。
【図１６】イベント定義を示す図である。
【図１７】イベント間定義を示す図である。
【図１８】第２の検索対象データを示す図である。
【図１９】問い合わせパターンを示す図である。
【符号の説明】
１０１  入力手段
１０２  変換手段
１０３  検索手段
１０４  出力手段
１０５  レコードの集合
１０６、１２６  状態遷移集合
１１１  データ
１１２  検索パターン
１１３  イベント変換部
１１４  パターン変換部
１１５  検索処理部
１１６  結果
１２１  イベント定義
１２２  順序関係
１２３  制約
１２４  ＮＦＡ
１２５  ＤＦＡ
１３１  ＣＰＵ
１３２  メモリ
１３３  入力装置
１３４  出力装置
１３５  外部記憶装置
１３６  媒体駆動装置
１３７  ネットワーク接続装置
１３８  バス
１３９  可搬記録媒体
１４０  サーバ
１４１  データベース
【図１】
0004047053.tif 000003
【図２】
0004047053.tif 000004
【図３】
0004047053.tif 000005
【図４】
0004047053.tif 000006
【図５】
0004047053.tif 000007
【図６】
0004047053.tif 000008
【図７】
0004047053.tif 000009
【図８】
0004047053.tif 000010
【図９】
0004047053.tif 000011
【図１０】
0004047053.tif 000012
【図１１】
0004047053.tif 000013
【図１２】
0004047053.tif 000014
【図１３】
0004047053.tif 000015
【図１４】
0004047053.tif 000016
【図１５】
0004047053.tif 000017
【図１６】
0004047053.tif 000018
【図１７】
0004047053.tif 000019
【図１８】
0004047053.tif 000020
【図１９】
0004047053.tif 000021