(57)【要約】  タクソノミにおける各ノードの転置リストにおいて、各ノードのうち、最上位のノードの転置リストは、検索対象データの識別子を示す整数値のリストであり、最上位ノード以外のノードの転置リストは、識別子の代わりに、ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストである。さらに、各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、ブロックにおける整数値と整数値の直前の整数値との差分値が可変長整数コードのビット列に変換される。
2012049883.tif 000002
【特許請求の範囲】
【請求項１】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すためのデータ構造であって、
前記タクソノミにおいて、前記各ノードの上位ノードである先祖ノードを示す先祖参照用データと、
前記各ノードの転置リストを含み、前記各ノードのうち、前記先祖参照用データにおいて前記先祖ノードが登録されているノードの転置リストは、登録された前記先祖ノードに対応する転置リスト中の位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データとを備える、データ構造。
【請求項２】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するためのインデックス作成装置であって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するための先祖ノード決定部と、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するための先祖ノード探索部と、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するための先祖番号変換部とを備える、インデックス作成装置。
【請求項３】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すためのデータ検索装置であって、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを記憶するための先祖番号転置リスト記憶部と、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するための識別子変換部とを備える、データ検索装置。
【請求項４】
前記データ検索装置は、さらに、
前記タクソノミにおける各ノードの、各検索対象データに対応する頻度を示す頻度リストを記憶するための頻度リスト記憶部を備え、
前記識別子変換部は、さらに、前記指定ノードに対応する１または複数の前記検索対象データの識別子のリストにおいて、前記頻度リストに基づいて前記識別子をソートする、
請求の範囲第３項に記載のデータ検索装置。
【請求項５】
前記データ検索装置は、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードのいずれからも到達可能な検索対象データの集合を取り出し、
前記識別子変換部は、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードに対応する前記転置リストを前記先祖番号転置リスト記憶部から取得し、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を行なう際に、前記指定ノードの組で共通の前記上位ノードのうち、前記タクソノミにおいて最も下位の上位ノードである共通先祖ノードに対応する前記転置リストにおける整数値を取り出すとき、前記指定ノードの組において共通の前記整数値を取り出し、取り出した前記整数値を用いて、前記複数の指定ノードに対応する前記検索対象データの識別子のリストを作成する、請求の範囲第３項に記載のデータ検索装置。
【請求項６】
前記データ検索装置は、さらに、
前記タクソノミにおける各ノードの下位ノードである子ノードの集合を示す子ノード情報を記憶するための子ノード記憶部と、
前記指定ノードに対応する前記検索対象データの識別子のリストを受けて、前記タクソノミにおける各ノードの中から、前記リストが示す前記検索対象データの集合において所定値以上の頻度を持つノードを取り出すためのトップダウン探索部とを備え、
前記トップダウン探索部は、前記最上位ノードに対応する前記転置リストにおける前記識別子の位置を検出し、前記子ノード情報に基づいて、検出した前記位置と前記最上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記ノードの頻度を算出する処理を少なくとも行い、さらに、前記ノードの下位のノードについて、上位ノードに対応する前記転置リストにおいて前記識別子の位置に対応する整数値と、前記上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記１つ下位のノードの頻度を算出する処理を０回以上行なうことにより、前記検索対象データにおける前記各ノードの頻度を算出する、請求の範囲第３項に記載のデータ検索装置。
【請求項７】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成方法であって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するステップと、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを含む、インデックス作成方法。
【請求項８】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索方法であって、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するステップとを含む、データ検索方法。
【請求項９】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成プログラムを記録した、コンピュータ読み取り可能な記録媒体であって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記インデックス作成プログラムは、コンピュータに、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するステップと、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを実行させるためのプログラムである、コンピュータ読み取り可能な記録媒体。
【請求項１０】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索プログラムを記録した、コンピュータ読み取り可能な記録媒体であって、前記データ検索プログラムは、コンピュータに、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するステップとを実行させるためのプログラムである、コンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ構造、インデックス作成装置、データ検索装置、インデックス作成方法、データ検索方法およびコンピュータ読み取り可能な記録媒体に関し、特に、転置インデックスを用いるデータ構造、インデックス作成装置、データ検索装置、インデックス作成方法、データ検索方法およびコンピュータ読み取り可能な記録媒体に関する。
【背景技術】
【０００２】
電子文書を検索する技術として、たとえば、特開２００６−７３０３５号公報（特許文献１）には、以下のような構成が開示されている。すなわち、電子化文書検索システムは、索引語、索引語を含む登録文書の文書頻度および文書識別子、ならびに索引語の各登録文書内での文書内頻度および出現位置を記憶する索引記憶手段と、登録文書をｎ（ｎは１以上の整数）文字の連鎖である索引語に分割する文書分割手段と、検索語を覆う１つ以上のｎ文字連鎖である索引語に分割する検索語分割手段と、検索語が２つ以上の索引語に分割されるときは複数の索引語の出現位置間の距離を指定する位置演算子で合成した検索条件木を生成する検索条件解析手段と、検索条件木に基づき検索結果合成処理を実行し検索結果を得る検索条件評価手段とを備える。【０００３】
また、特開２００８−１４０３５７号公報（特許文献２）には、以下のような方法が開示されている。すなわち、文書識別番号をvariable  byte法でバイト列へ圧縮する際に、バイト列のうちｗビットを当該索引語の当該文書中での出現回数を表現するために用い、ｘビットをポスティングの属性情報を表現するために用いる。ｗビットで表現できない出現回数は、ｗビットで表現しきれない数値であることを示す特殊な値をバイト列中に書き込んだ上で、variable  byte法で記述し後置する。ここで、ｘ，ｗはパラメータとして与えられる整数である。また、転置リストの途中の位置からでも、圧縮されたポスティングを読める手段を提供し、転置リスト上の２分探索を可能とする。【０００４】
また、転置インデックスを用いて電子文書を検索する技術は、Zobel,  Justin  and  Moffat,  Alistair  "Inverted  Files  for  Text  Search  Engines",ACM  Computing  Surveys(New  York:  Association  for  Computing  Machinery),  pp.8-9  pp.19-23  Vol.38  No.2  Article  6,  July  2006（非特許文献１）にも記載されている。【０００５】
また、木構造におけるデータ圧縮技術の一例が、特表２００３−５０１７４９号公報（特許文献３）に開示されている。すなわち、メモリは、多数の異なるハイアラーキーレベルにノードを有するツリー形状ハイアラーキーより成るディレクトリ構造体として実施される。このディレクトリ構造体では、所与の第１数のエレメントをテーブルが含むノードであって巾圧縮されたノードにポインタが最初に追加される。機能的トリー構造の性能を最大にするために、個々の巾圧縮されたノードを指すポインタの追加が、ノード内のポインタの数が上記第１数より小さい所定のスレッシュホールド値に対応するまで許される。巾圧縮されたノードは、その巾圧縮されたノードに受け入れられるポインタの数が上記スレッシュホールド値を越えるや否や、親ノードおよび個別の子ノードにより形成されたノードのクラスターへと変換される。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Zobel,  Justin  and  Moffat,  Alistair  "Inverted  Files  for  Text  Search  Engines",ACM  Computing  Surveys(New  York:  Association  for  Computing  Machinery),  pp.8-9  pp.19-23  Vol.38  No.2  Article  6,  July  2006
【特許文献】
【０００７】
【特許文献１】特開２００６−７３０３５号公報
【特許文献２】特開２００８−１４０３５７号公報
【特許文献３】特表２００３−５０１７４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、電子文書を検索する際に、複数のタグおよび複数の意味クラスから構成される有向非循環グラフ（ＤＡＧ：Directed  Acyclic  Graph）のデータ集合（以下、タクソノミとも称する。）が用いることが考えられる。【０００９】
ここでは、まず、タクソノミおよび検索対象データを定義する。【００１０】
図３１は、本発明の第１の実施の形態に係るインデックス作成装置およびデータ検索装置におけるタクソノミおよび検索対象データの一例を具体的に示す図である。【００１１】
図３１を参照して、前述のように、タクソノミとは、複数のタグおよび複数の意味クラスから構成される有向非循環グラフである。【００１２】
タグとは、グラフ中の葉ノードであり、少なくともラベルを持つ情報である。ラベルとは、タグを表現する文字列である。図３１では、タグを長方形で表現し、各タグのラベルを「“”」で囲んだ文字列として表現している。【００１３】
また、意味クラスとは、タグをまとめ上げる概念を表現した情報であり、文字列であるラベル、または識別子を持つ。図３１では、各意味クラスを楕円で表現し、各意味クラスのラベルを楕円内に記述している。【００１４】
なお、以下では、任意の文字または記号であるＸについて、「Ｘ」というラベルを持つタグまたは意味クラスを「Ｘノード」と表現することがある。【００１５】
タクソノミ内の意味クラスおよびタグには、意味的な包含関係が存在する。図３１では、矢印でこの関係を示している。たとえば、「企業ノード」は「電器メーカーノード」の上位の概念であり、「電器メーカーノード」は「山本電気ノード」の上位の概念である。【００１６】
また、この包含関係には、同義な関係も含まれる。たとえば、「山本電気」という企業が「ｙａｍａｄｅｎ」という略称で呼ばれることもあるとする。このとき、「山本電気ノード」は「ｙａｍａｄｅｎノード」の上位の概念として捉えることも可能である。【００１７】
検索対象データとは、タクソノミ中のタグと結びついたデータであり、他の検索対象データとの識別を可能とするユニークな識別子を持つ。【００１８】
検索対象データの例としては、たとえば、ニュース記事などがこれにあたり、各記事は、整数で表現された識別子を持ち、また、各記事中に登場する単語をタグとして持つ。【００１９】
図３１では、７つの検索対象データ、および各検索対象データに対応する識別子が示されている。たとえば、識別子「００１」の検索対象データは、「山本電気」というデータを含み、タクソノミ中の「山本電気ノード」との関係を持つ。【００２０】
本発明の第１の実施の形態に係るデータ検索装置は、ある意味クラスまたはタグを示す情報が入力されると、当該情報によって指定されたタクソノミ中のノードから到達可能なデータの集合を示す識別子のリストを返す。【００２１】
たとえば、タグ「ｙａｍａｄｅｎ」がデータ検索装置へ入力されると、データ検索装置は、００３，００４の２つの識別子を検索対象として返す。また、意味クラス「山陽食品」がデータ検索装置へ入力されると、データ検索装置は、００４，００５，００６，００７の４つの識別子を検索対象として返す。【００２２】
次に、図３１に示すモデルについてもう少し詳しい説明を行なう。【００２３】
図３２は、本発明の第１の実施の形態に係るインデックス作成装置およびデータ検索装置におけるタクソノミおよび検索対象データの一例を概念的に示す図である。【００２４】
図３２では、タクソノミの例が示されており、楕円が意味クラスを表し、長方形がタグを表している。各タグからつながっているｄ（Ｘ）は、ノードＸから到達可能な検索対象データの識別子の集合を表現している。【００２５】
このとき、意味クラスＸに対応するｄ（Ｘ）は、意味クラスＸから到達可能なタグの集合Ｙにおいて、各タグのｄ（ｙ）（ｙ⊂Ｙ）のＵｎｉｏｎになる。【００２６】
たとえば、ｄ（Ｂ）＝ｄ（Ｌ）∪ｄ（Ｍ）∪ｄ（Ｎ）であり、ｄ（Ａ）＝ｄ（Ｌ）∪ｄ（Ｍ）∪ｄ（Ｎ）∪ｄ（Ｏ）である。【００２７】
このようなタクソノミを用いた電子文書検索では、タクソノミのサイズが大きくなった場合に、タクソノミにおいて上位の意味クラスに対する問い合わせを高速に実現できない、という問題点がある。【００２８】
すなわち、従来の転置インデックスを用いる方法としては、タグのみの転置インデックスを用いる方法Ａ、およびすべてのノードに対応する転置インデックスを用いる方法Ｂの２種類が考えられる。【００２９】
方法Ａを採用した場合、上位の意味クラスに対応する転置リストを参照するためには、到達可能なタグの集合を計算する処理時間と、当該計算結果によって得られるタグの集合に対応する転置リストをそれぞれ参照し、データ集合のＵｎｉｏｎ（和集合）を計算する処理時間とが必要である。このため、方法Ａを採用すると、タクソノミおよびデータ集合のサイズが大きくなった場合に、これら２つの処理時間が増大してしまう。【００３０】
また、方法Ｂを採用した場合、検索時に該当する転置リストを読み出すのみで処理を終えることができるものの、記憶しなければならないデータの量が圧倒的に増加する。現在のコンピュータアーキテクチャでは、主記憶装置に収まらないデータがある場合、補助記憶装置へのアクセスが発生するため、方法Ｂを採用すると問い合わせ速度が低下してしまうことがある。【００３１】
しかしながら、特許文献１〜３および非特許文献１には、タクソノミを用いた電子文書検索において、上記のような問題点を解決するための構成は開示されていない。【００３２】
この発明は、上述の課題を解決するためになされたもので、その目的は、検索処理のためのデータ容量の低減および検索処理の高速化を図ることが可能なデータ構造、インデックス作成装置、データ検索装置、インデックス作成方法、データ検索方法およびコンピュータ読み取り可能な記録媒体を提供することである。
【課題を解決するための手段】
【００３３】
上記課題を解決するために、この発明のある局面に係わるデータ構造は、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すためのデータ構造であって、上記タクソノミにおいて、上記各ノードの上位ノードである先祖ノードを示す先祖参照用データと、上記各ノードの転置リストを含み、上記各ノードのうち、上記先祖参照用データにおいて上記先祖ノードが登録されているノードの転置リストは、登録された上記先祖ノードに対応する転置リスト中の位置を示す整数値のリストであり、さらに、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データとを備える。【００３４】
上記課題を解決するために、この発明のある局面に係わるインデックス作成装置は、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するためのインデックス作成装置であって、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、上記タクソノミにおけるノードごとに、上記ノードの上位ノードである先祖ノードを１つ選択し、選択した上記先祖ノードを示す先祖参照用データを生成するための先祖ノード決定部と、上記先祖参照用データに基づいて、上記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するための先祖ノード探索部と、上記検索対象データの識別子を受けて、上記先祖ノードリストにおける各上記ノードのうち最上位のノードについては、上記識別子を対応の転置リストの要素として追加し、上記最上位ノード以外のノードについては、対応の転置リストの要素として、上記識別子の代わりに、上記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するための先祖番号変換部とを備える。【００３５】
上記課題を解決するために、この発明のある局面に係わるデータ検索装置は、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すためのデータ検索装置であって、上記タクソノミにおける各ノードの転置リストを含み、上記各ノードのうち、最上位のノードの転置リストは、上記検索対象データの識別子を示す整数値のリストであり、上記最上位ノード以外のノードの転置リストは、上記識別子の代わりに、上記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを記憶するための先祖番号転置リスト記憶部と、上記指定ノードを示す情報を受けて、上記転置リスト用データに基づき、上記指定ノードに対応する上記転置リストの整数値が示す上記位置に対応する、上記指定ノードの上位ノードに対応する上記転置リストの整数値を取り出す処理を、上記最上位ノードに対応する上記転置リストの上記識別子を取り出すまで繰り返すことにより、上記指定ノードに対応する上記検索対象データの識別子のリストを作成するための識別子変換部とを備える。【００３６】
上記課題を解決するために、この発明のある局面に係わるインデックス作成方法は、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成方法であって、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、上記タクソノミにおけるノードごとに、上記ノードの上位ノードである先祖ノードを１つ選択し、選択した上記先祖ノードを示す先祖参照用データを生成するステップと、上記先祖参照用データに基づいて、上記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、上記検索対象データの識別子を受けて、上記先祖ノードリストにおける各上記ノードのうち最上位のノードについては、上記識別子を対応の転置リストの要素として追加し、上記最上位ノード以外のノードについては、対応の転置リストの要素として、上記識別子の代わりに、上記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを含む。【００３７】
上記課題を解決するために、この発明のある局面に係わるデータ検索方法は、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索方法であって、上記タクソノミにおける各ノードの転置リストを含み、上記各ノードのうち、最上位のノードの転置リストは、上記検索対象データの識別子を示す整数値のリストであり、上記最上位ノード以外のノードの転置リストは、上記識別子の代わりに、上記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、上記指定ノードを示す情報を受けて、上記転置リスト用データに基づき、上記指定ノードに対応する上記転置リストの整数値が示す上記位置に対応する、上記指定ノードの上位ノードに対応する上記転置リストの整数値を取り出す処理を、上記最上位ノードに対応する上記転置リストの上記識別子を取り出すまで繰り返すことにより、上記指定ノードに対応する上記検索対象データの識別子のリストを作成するステップとを含む。【００３８】
上記課題を解決するために、この発明のある局面に係わるコンピュータ読み取り可能な記録媒体は、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成プログラムを記録した、コンピュータ読み取り可能な記録媒体であって、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、上記インデックス作成プログラムは、コンピュータに、上記タクソノミにおけるノードごとに、上記ノードの上位ノードである先祖ノードを１つ選択し、選択した上記先祖ノードを示す先祖参照用データを生成するステップと、上記先祖参照用データに基づいて、上記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、上記検索対象データの識別子を受けて、上記先祖ノードリストにおける各上記ノードのうち最上位のノードについては、上記識別子を対応の転置リストの要素として追加し、上記最上位ノード以外のノードについては、対応の転置リストの要素として、上記識別子の代わりに、上記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを実行させるためのプログラムである。【００３９】
またこの発明の別の局面に係わるコンピュータ読み取り可能な記録媒体は、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索プログラムを記録した、コンピュータ読み取り可能な記録媒体であって、上記データ検索プログラムは、コンピュータに、上記タクソノミにおける各ノードの転置リストを含み、上記各ノードのうち、最上位のノードの転置リストは、上記検索対象データの識別子を示す整数値のリストであり、上記最上位ノード以外のノードの転置リストは、上記識別子の代わりに、上記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、上記指定ノードを示す情報を受けて、上記転置リスト用データに基づき、上記指定ノードに対応する上記転置リストの整数値が示す上記位置に対応する、上記指定ノードの上位ノードに対応する上記転置リストの整数値を取り出す処理を、上記最上位ノードに対応する上記転置リストの上記識別子を取り出すまで繰り返すことにより、上記指定ノードに対応する上記検索対象データの識別子のリストを作成するステップとを実行させるためのプログラムである。
【発明の効果】
【００４０】
本発明によれば、検索処理のためのデータ容量の低減および検索処理の高速化を図ることができる。
【図面の簡単な説明】
【００４１】
【図１】図１（ａ）は、転置インデックスを用いたデータ構造の一例を示している。図１（ｂ）は、転置インデックスを用いたデータ構造の他の例を示している。
【図２】本発明の第１の実施の形態に係るインデックス作成装置およびデータ検索装置における転置リストの圧縮方法の一例を示す図である。
【図３】本発明の第１の実施の形態に係るインデックス作成装置およびデータ検索装置における可変長整数コードの一例を示す図である。
【図４】本発明の第１の実施の形態に係る情報処理装置の概略構成図である。
【図５】本発明の第１の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。
【図６】本発明の第１の実施の形態に係る情報処理装置における先祖ノード記憶部に記憶される先祖参照用データの一例を示す図である。
【図７】本発明の第１の実施の形態に係る情報処理装置における先祖番号転置リスト記憶部に記憶される先祖番号転置リストの一例を示す図である。
【図８】本発明の第１の実施の形態に係る情報処理装置における頻度リスト記憶部に記憶される頻度リストの一例を示す図である。
【図９】本発明の第１の実施の形態に係る情報処理装置がタクソノミ登録処理を行なう際の動作手順を示すフローチャートである。
【図１０】本発明の第１の実施の形態に係る情報処理装置がデータ登録処理を行なう際の動作手順を示すフローチャートである。
【図１１】先祖ノード探索部が先祖ノード集合の算出処理を行なう際の動作手順を示すフローチャートである。
【図１２】先祖番号変換部が構築するトライ木の一例を示す図である。
【図１３】再帰的関数ｉｎｓｅｒｔＴｒｉｅの処理手順を示すフローチャートである。
【図１４】先祖番号変換部がトライ木の構築処理を行なう際の動作手順を示すフローチャートである。
【図１５】再帰的関数ｉｎｓｅｒｔの処理手順を示すフローチャートである。
【図１６】先祖頻度変換部が行なうトライ木における頻度の計算結果を示す図である。
【図１７】再帰的関数ｉｎｓｅｒｔＦｒｅｑの処理手順を示すフローチャートである。
【図１８】本発明の第１の実施の形態に係る情報処理装置がデータ検索処理を行なう際の動作手順を示すフローチャートである。
【図１９】関数ｔｒａｎｓの処理手順を示すフローチャートである。
【図２０】本発明の第１の実施の形態に係る情報処理装置における先祖番号転置リスト記憶部に記憶される先祖番号転置リストの一例を示す図である。
【図２１】本発明の第２の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。
【図２２】本発明の第２の実施の形態に係る情報処理装置がデータ検索処理を行なう際の動作手順を示すフローチャートである。
【図２３】処理ｎｏｄｅ−ｉｎの手順を示すフローチャートである。
【図２４】処理ｎｏｄｅ−ｏｕｔの手順を示すフローチャートである。
【図２５】本発明の第２の実施の形態に係る情報処理装置における深さ優先探索の処理手順の具体例を示す図である。
【図２６】本発明の第２の実施の形態に係る情報処理装置における深さ優先探索の処理手順の具体例を示す図である。
【図２７】本発明の第３の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。
【図２８】子ノード記憶部２１に記憶される情報の一例を示す図である。
【図２９】再帰的関数ｌｉｓｔの処理手順を示すフローチャートである。
【図３０】関数ｌｉｓｔＪｏｉｎの処理手順を示すフローチャートである。
【図３１】タクソノミおよび検索対象データの一例を具体的に示す図である。
【図３２】タクソノミおよび検索対象データの一例を概念的に示す図である。
【発明を実施するための形態】
【００４２】
以下、本発明の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【００４３】
＜第１の実施の形態＞
本発明の第１の実施の形態に係るデータ検索装置は、タクソノミ中のノードを示すＸを入力し、ｄ（Ｘ）を返す機能を提供する。このような機能を実現する方法としては、転置インデックスを用いることが考えられる。
【００４４】
図１（ａ）は、転置インデックスを用いたデータ構造の一例を示している。図１（ｂ）は、転置インデックスを用いたデータ構造の他の例を示している。
【００４５】
図１（ａ）は、タクソノミ中のタグに対して作成した転置インデックスを示している。この転置インデックスでは、各行が各タグの転置リストを表している。
【００４６】
たとえば、タグＬは、検索対象データ１番、４５６番および１２０００番に関連し、タグＭは、検索対象データ２３番および１６３３３番に関連している。
【００４７】
この転置インデックスを用いたデータ検索装置は、タグが入力として与えられた場合、転置インデックスにおける各行のうち、当該タグに対応する行のデータを返す。また、意味クラスが入力として与えられた場合、このデータ検索装置は、タクソノミ中の到達可能なタグの集合を調べ、各タグに対応するｄ（Ｘ）をそれぞれ取り出し、取り出したｄ（Ｘ）のＵｎｉｏｎを計算して返す。
【００４８】
図１（ｂ）は、タクソノミ中の全ノードに対して作成した転置インデックスを示している。この転置インデックスでは、各行が各ノードの転置リストを表している。
【００４９】
たとえば、意味クラスＢは、検索対象データ１番、２３番、４５６番、１２０００番および１６３３３番に関連している。
【００５０】
この転置インデックスを用いたデータ検索装置は、タクソノミ中のノードＸが指定された場合、転置インデックスにおける各行のうち、ノードＸに対応する行のデータを取り出す。
【００５１】
次に、本発明の第１の実施の形態に係るインデックス作成装置およびデータ検索装置における転置リストの圧縮技術について説明する。
【００５２】
図１に示す転置インデックスは、各キーに対応する整数値のリストである。
【００５３】
通常、コンピュータによって整数値を保持するためには、４バイトのデータが必要である。このため、普通にこれらのデータを保持するためには、ノードごとに（４バイト×ノードが登場する検索対象データ数）のサイズを持つ転置リストを保持しなければならない。通常、このような転置リストのサイズは大きなものになるため、次のような圧縮方法が用いられる。
【００５４】
図２は、本発明の第１の実施の形態に係るインデックス作成装置およびデータ検索装置における転置リストの圧縮方法の一例を示す図である。
【００５５】
図２は、「１，２，５，７，８，１１，１５，１６，１８，１９」という１０個の整数値のリストを圧縮する方法の例を示している。
【００５６】
この圧縮方法では、まず、整数値のリストをＬ個置きにブロックに分割する。ここでは、Ｌ＝５の場合が例示されている。
【００５７】
次に、分割されたブロックに対して、先頭の数値はそのままにし、以降の数値を直前の数値との差分に置き換える処理を行なう。
【００５８】
次に、可変長整数コードを用いて、これら差分の値を表現する。ここで、可変長整数コードとは、短い整数を短いビット長で表現し、長い整数を長いビット長で表現する整数列の符号化方法である。可変長整数コードの例は、非特許文献１に記載されている。
【００５９】
図３は、本発明の第１の実施の形態に係るインデックス作成装置およびデータ検索装置における可変長整数コードの一例を示す図である。
【００６０】
図３では、可変長整数コードの例としてγコードの例が示されている。たとえば、整数１は、０で表され、整数２は、１００で表される。
【００６１】
図２に示すような圧縮方法が有効な理由は、以下の通りである。すなわち、まず、整数値を差分で表現することにより、転置リストの整数値が小さくなる。そして、可変長整数コードを用いることにより、データ長が短くなる。これにより、転置リストの圧縮が可能となる。
【００６２】
さらに、Ｌ個ごとのブロックを作成することにより、たかだかＬ回の復号および足し算を行なえば、元の転置リストにおける任意の位置の値を取り出すことができる。
【００６３】
［構成および基本動作］
本発明の第１の実施の形態に係るインデックス作成装置およびデータ検索装置を備える情報処理装置は、典型的には、汎用的なアーキテクチャを有するコンピュータを基本構造としており、予めインストールされたプログラムを実行することで、後述するような各種機能を提供する。一般的に、このようなプログラムは、フレキシブルディスク（Flexible  Disk）およびＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）などの記録媒体に格納されて、あるいはネットワークなどを介して流通する。
【００６４】
本発明の第１の実施の形態に係るプログラムは、他のプログラムの一部に組み込まれて提供されるものであってもよい。この場合でも、本発明の第１の実施の形態に係るプログラム自体は、上記のような組み込み先の他のプログラムが有するモジュールを含んでおらず、当該他のプログラムと協働して処理が実行される。すなわち、本発明の第１の実施の形態に係るプログラムとしては、このような他のプログラムに組み込まれた形態であってもよい。
【００６５】
なお、代替的に、プログラムの実行により提供される機能の一部または全部を専用のハードウェア回路として実装してもよい。
【００６６】
図４は、本発明の第１の実施の形態に係る情報処理装置の概略構成図である。
【００６７】
図４を参照して、情報処理装置２０１は、演算処理部であるＣＰＵ（Central  Processing  Unit）１０１と、メインメモリ１０２と、ハードディスク１０３と、入力インターフェイス１０４と、表示コントローラ１０５と、データリーダ／ライタ１０６と、通信インターフェイス１０７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【００６８】
ＣＰＵ１０１は、ハードディスク１０３に格納されたプログラム（コード）をメインメモリ１０２に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ１０２は、典型的には、ＤＲＡＭ（Dynamic  Random  Access  Memory）などの揮発性の記憶装置であり、ハードディスク１０３から読み出されたプログラムに加えて、各種の演算処理結果を示すデータなどを保持する。また、ハードディスク１０３は不揮発性の磁気記憶装置であり、ＣＰＵ１０１で実行されるプログラムに加えて、各種設定値などが格納される。このハードディスク１０３にインストールされるプログラムは、後述するように、記録媒体１１１に格納された状態で流通する。なお、ハードディスク１０３に加えて、あるいはハードディスク１０３に代えて、フラッシュメモリなどの半導体記憶装置を採用してもよい。
【００６９】
入力インターフェイス１０４は、ＣＰＵ１０１とキーボード１０８、マウス１０９および図示しないタッチパネルなどの入力部との間のデータ伝送を仲介する。すなわち、入力インターフェイス１０４は、ユーザが入力部を操作することで与えられる操作指令などの外部からの入力を受付ける。
【００７０】
表示コントローラ１０５は、表示部の典型例であるディスプレイ１１０と接続され、ディスプレイ１１０での表示を制御する。すなわち、表示コントローラ１０５は、ＣＰＵ１０１による画像処理の結果などをユーザに対して表示する。ディスプレイ１１０は、たとえばＬＣＤ（Liquid  Crystal  Display）またはＣＲＴ（Cathode  Ray  Tube）である。
【００７１】
データリーダ／ライタ１０６は、ＣＰＵ１０１と記録媒体１１１の間のデータ伝送を仲介する。すなわち、記録媒体１１１は、情報処理装置２０１で実行されるプログラムなどが格納された状態で流通し、データリーダ／ライタ１０６は、この記録媒体１１１からプログラムを読み出す。また、データリーダ／ライタ１０６は、ＣＰＵ１０１の内部指令に応答して、情報処理装置２０１における処理結果などを記録媒体１１１へ書き込む。なお、記録媒体１１１は、たとえば、ＣＦ（Compact  Flash）およびＳＤ（Secure  Digital）などの汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible  Disk）などの磁気記憶媒体、またはＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）などの光学記憶媒体である。
【００７２】
通信インターフェイス１０７は、ＣＰＵ１０１と他のパーソナルコンピュータおよびサーバ装置などの間のデータ伝送を仲介する。通信インターフェイス１０７は、典型的には、イーサネット（登録商標）またはＵＳＢ（Universal  Serial  Bus）の通信機能を有する。なお、記録媒体１１１に格納されたプログラムを情報処理装置２０１にインストールする形態に代えて、通信インターフェイス１０７を介して配信サーバなどからダウンロードしたプログラムを情報処理装置２０１にインストールしてもよい。
【００７３】
また、情報処理装置２０１には、必要に応じてプリンタなどの他の出力装置が接続されてもよい。
【００７４】
［制御構造］
次に、情報処理装置２０１におけるインデックス作成機能およびデータ検索機能を提供するための制御構造について説明する。
【００７５】
図５は、本発明の第１の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。
【００７６】
図５に示すＣＰＵ１０１における各ブロックは、ハードディスク１０３に格納されたプログラム（コード）などをメインメモリ１０２に展開して、ＣＰＵ１０１に実行させることで提供される。なお、図５に示す情報処理装置２０１の制御構造の一部または全部を専用ハードウェアおよび／または配線回路によって実現してもよい。
【００７７】
図５を参照して、情報処理装置２０１は、その制御構造として、先祖ノード決定部１１と、先祖ノード探索部１３と、識別子付与部１４と、先祖番号変換部１５と、先祖頻度変換部１７と、識別子変換部１８とを備える。また、情報処理装置２０１は、先祖ノード記憶部１２と、先祖番号転置リスト記憶部１６と、頻度リスト記憶部１９とを備える。これらの記憶部は、図４に示すメインメモリ１０２またはハードディスク１０３に相当する。
【００７８】
ＣＰＵ１０１は、図５に示す各部の他に、多くのユニットによって構成されるのが一般的であるが、説明を簡単にするために、他のユニットについては図示していない。
【００７９】
先祖ノード決定部１１は、タクソノミと、タクソノミ中の各ノードの検索対象データ集合における頻度分布を示す頻度情報を受けて、各ノードに対して、先祖ノード記憶部１２に登録すべき先祖ノードを決定する。
【００８０】
先祖ノード記憶部１２は、先祖ノード決定部１１によって決定された各ノードの先祖ノードを１つ記憶する。
【００８１】
先祖ノード探索部１３は、あるタグを受けて、先祖ノード記憶部１２を参照し、当該タグの上位ノードである先祖ノードをすべて取り出す。
【００８２】
識別子付与部１４は、１つ以上のタグと各タグの頻度とから成る検索対象データを受けて、当該検索対象データに識別子を付与して先祖番号変換部１５へ出力する。
【００８３】
先祖番号転置リスト記憶部１６は、タクソノミ中のノードを指すラベルごとの転置リストを保持する。
【００８４】
先祖番号変換部１５は、識別子が付与された検索対象データを識別子付与部１４から受けて、検索対象データ内のタグごとに、先祖ノード探索部１３を利用して先祖ノードの集合を取り出す。そして、先祖番号変換部１５は、各タグに対応する先祖ノードの集合をトライ構造として整理し、識別子と、トライ構造と、各タグについての頻度とを先祖頻度変換部１７へ出力する。
【００８５】
また、先祖番号変換部１５は、先祖番号転置リスト記憶部１６内の先祖ノードの集合のうち最も上位にあたるノードに対応する転置リストに識別子を追加した上で、追加した位置を覚えておき、当該ノードの次に上位にあたるノードについての転置リストに、直前に覚えておいた先祖ノードについての位置を追加する。そして、先祖番号変換部１５は、さらに下位ノードの転置リストについてもこのような処理を繰り返す。
【００８６】
先祖頻度変換部１７は、識別子と、各タグの先祖ノードをまとめたトライ構造と、各タグについての頻度とを先祖番号変換部１５から受けて、各先祖ノードに対応する頻度を計算し、頻度リスト記憶部１９内の先祖ノードの集合のうち最も上位にあたるノードに対応する転置リストに頻度を追加した上で、追加した頻度を覚えておき、当該ノードの次に上位にあたるノードについての転置リストにおける頻度と、直前に覚えておいた頻度とを比較し、等しければ「０」を追加し、そうでなければ当該転置リストにおける頻度をそのまま追加する。そして、先祖頻度変換部１７は、さらに下位ノードの転置リストについてもこのような処理を繰り返す。
【００８７】
識別子変換部１８は、タクソノミ中のノードを指すラベルを外部から受けて、先祖ノード探索部１３を用いて当該ノードの先祖ノードの集合を取り出した上で、当該ラベルが指すノードに対応する転置リストを先祖番号転置リスト記憶部１６から取り出す。そして、識別子変換部１８は、転置リスト中の各整数値が示す先祖番号転置リスト記憶部１６内の位置と、頻度リスト記憶部１９内の位置とを参照しながら識別子および対応の頻度の組を作成し、作成された識別子を頻度順に並べ替えた上で、出力する。
【００８８】
次に、先祖ノード記憶部１２、先祖番号転置リスト記憶部１６、および頻度リスト記憶部１９内のデータ構造について説明する。
【００８９】
図６は、本発明の第１の実施の形態に係る情報処理装置における先祖ノード記憶部に記憶される先祖参照用データの一例を示す図である。
【００９０】
図６を参照して、先祖ノード記憶部１２は、タクソノミ中の各ノードの先祖ノードを示す情報を保持する。図６は、図２に示すタクソノミに対応する先祖参照用データの例を示している。
【００９１】
この先祖参照用データでは、各行が各ノードに対応しており、各ノードの先祖ノードが示されている。なお、先祖ノードを指定しない場合には、空を示す記号として「φ」を用いる。たとえば、意味クラスＡに対する先祖ノードは無く、意味クラスＢに対する先祖ノードはＡである。
【００９２】
また、先祖参照用データでは、実際にはタクソノミに先祖ノードが存在する場合においても、「φ」を示すことがある。たとえば、図２に示すタクソノミでは、ノードＣに対する親ノードとしてノードＡが存在するが、図６に示す先祖参照用データでは、先祖ノードが無い「φ」が示されている。
【００９３】
各ノードに対して各先祖ノードのうちのどのノードを選ぶか、また、先祖ノードを「無し」とするかの判断は、先祖ノード決定部１１が行なう。この処理については後述する。
【００９４】
図７は、本発明の第１の実施の形態に係る情報処理装置における先祖番号転置リスト記憶部に記憶される先祖番号転置リストの一例を示す図である。
【００９５】
図７を参照して、先祖番号転置リスト記憶部１６は、本質的には、各ノードに対応する検索対象データの識別子の列を示す情報を記憶する。
【００９６】
しかしながら、先祖番号転置リスト記憶部１６は、すべてのノードに対応する識別子の列をそのまま転置リストとして保持するのではなく、先祖参照用データにおいて先祖ノードが登録されているノードについては、先祖ノードに対応する転置リスト中の位置を保持する。
【００９７】
たとえば、ノードＢに対応する転置リストｄ（Ｂ）では、「１，２，３，６，７」という５つの整数値が記載されている。これらは、ノードＢの先祖ノードＡに対応する転置リスト中の位置を意味している。たとえば、転置リストｄ（Ｂ）において、１はノードＡに対応するリスト内の１番目の値である識別子１を、２はＡに対応するリスト内の２番目の値である識別子２３を、３はノードＡに対応するリスト内の３番目の値である識別子識別子４５６を意味する。
【００９８】
なお、図７は、先祖番号転置リスト記憶部１６が保持する情報を理解しやすいように示した図であり、実際には、先祖番号転置リスト記憶部１６は、図７に示すデータをそのまま保持する訳ではない。実際には、先祖番号転置リスト記憶部１６は、各転置リストについて、図２に示す圧縮方法を用いて圧縮したデータと、転置リストの長さとを保持する。
【００９９】
図８は、本発明の第１の実施の形態に係る情報処理装置における頻度リスト記憶部に記憶される頻度リストの一例を示す図である。
【０１００】
図８を参照して、頻度リスト記憶部１９は、先祖番号転置リスト記憶部１６に記憶された転置リストにおける各ノードについて検索対象データ番号に対応する頻度を記憶する。
【０１０１】
たとえば、ノードＣに対応する頻度リストは「２，３，５」という値を持つ。
【０１０２】
これらの値は、図７に示す先祖番号転置リスト記憶部１６内のノードＣに対応する転置リスト「２４５１，３４４３，１８９２１」と対応している。すなわち、意味クラスＣは、検索対象データ２４５１番内で頻度２を持ち、検索対象データ３４４３番内で頻度３を持ち、検索対象データ１８９２１番で頻度５を持つ。
【０１０３】
なお、図８では「０」という値が存在しているが、前述のように、これは頻度「０」を表している訳ではなく、図６で示される先祖ノードの頻度と等しいことを意味する。たとえば、意味クラスＢの頻度リストの先頭における頻度の値が「０」となっているため、意味クラスＢの検索対象データ１番における頻度は、先祖ノードＡの頻度リストの先頭における値「４」である。
【０１０４】
［動作］
次に、本発明の第１の実施の形態に係る情報処理装置の動作について図面を用いて説明する。本発明の第１の実施の形態では、情報処理装置を動作させることによって、本発明の第１の実施の形態に係るインデックス作成方法およびデータ検索方法が実施される。よって、本発明の第１の実施の形態に係るインデックス作成方法およびデータ検索方法の説明は、以下の情報処理装置２０１の動作説明に代える。なお、以下の説明においては、適宜図５を参照する。
【０１０５】
本発明の第１の実施の形態に係る情報処理装置の処理は大きく、タクソノミ登録処理、データ登録処理およびデータ検索処理の３つから成る。
【０１０６】
［タクソノミ登録処理］
図９は、本発明の第１の実施の形態に係る情報処理装置がタクソノミ登録処理を行なう際の動作手順を示すフローチャートである。
【０１０７】
図９を参照して、情報処理装置２０１は、タクソノミおよびデータ分布が先祖ノード決定部１１へ入力されると、タクソノミ登録処理を開始する。
【０１０８】
ここで、データ分布とは、タクソノミ中の各ノードに関連するデータ数の予測値であり、以降の説明では、ノードＸに対応するデータ数の予測値をｆｒｅｑ（Ｘ）とする。
【０１０９】
先祖ノード決定部１１は、まず、各ノードに対して次の処理を順に行なう。
【０１１０】
まず、ノードＸに対して、タクソノミを辿ることにより、先祖ノードのリストを収集する（ＲＴ０１）。
【０１１１】
ここで、タクソノミはＤＡＧであるため、先祖ノードの収集処理は、深さ優先探索または幅優先探索によって実現可能である。
【０１１２】
次に、先祖ノード決定部１１は、先祖ノードのリストのうち、先祖ノード記憶部１２に登録する先祖ノードの候補を選ぶ（ＲＴ０２）。この処理では、先祖ノード決定部１１は、ノードＸの各先祖ノードＹに対して以下のような演算を実行する。
ｃｓｏｍｐ（Ｙ、Ｘ）＝ｅｎｔｏｐｙ（Ａｌｌ、ｆｒｅｑ（Ｘ））−ｅｎｔｏｐｙ（ｆｒｅｑ（Ｙ），ｆｒｅｑ（Ｘ））
【０１１３】
ここで、Ａｌｌは、ユーザが想定するデータ集合の数を意味する定数である。また、ｅｎｔｏｐｙ（ｍ，ｎ）は、ｍ個のデータ集合中のｎ個を取り出す転置リストを作成する場合のデータ長の下限を意味する。なお、ｅｎｔｏｐｙ（ｍ，ｎ）は、次の式によって算出することが可能である。
ｅｎｔｏｐｙ（ｍ，ｎ）＝ｎ×ｌｏｇ（ｍ／ｎ）＋（ｍ−ｎ）×ｌｏｇ（ｍ／（ｍ−ｎ））
【０１１４】
これにより、ｅｎｔｏｐｙ（Ａｌｌ，ｆｒｅｑ（Ｘ））は、ノードＸを通常の転置リストとして表現した場合のデータ長、ｅｎｔｏｐｙ（ｆｒｅｑ（Ｙ），ｆｒｅｑ（Ｘ））は、ノードＸを先祖ノードＹの転置リストを参照して表現した場合のデータ長を意味する。
【０１１５】
よって、ｃｏｍｐ（Ｙ，Ｘ）は、Ｘの先祖ノードとしてノードＹを選んだときに圧縮可能なデータ長を表現している。
【０１１６】
先祖ノード決定部１１は、ｃｏｍｐ（Ｙ，Ｘ）が閾値σより小さい先祖ノードを排除することで、先祖ノードの候補を選ぶ。
【０１１７】
次に、先祖ノード決定部１１は、先祖ノード候補が１つ以上存在していれば（ＲＴ０５でＹＥＳ）、先祖ノードのリストをスコアリングし、スコアが最大になる先祖ノードを１つ決定する（ＲＴ０３）。
【０１１８】
このスコアリングでは、より上位の先祖ノードであり、かつ、データ長が小さくなりそうな先祖ノードに高い得点を付ける。
【０１１９】
ここで、具体的なスコアリングの例として、ＡｎｃＳｃｏｒｅを定義する。ノードＸの先祖ノードＹに対応するスコアＡｎｃＳｃｏｒｅは、次の式によって算出される。
ＡｎｃＳｃｏｒｅ（Ｙ，Ｘ）＝α×ｄｉｓ（Ｘ，Ｙ）＋β×１／ｅｎｔｏｐｙ（ｆｒｅｑ（Ｙ），ｆｒｅｑ（Ｘ））
【０１２０】
ここで、α、βは定数であり、それぞれ、検索速度を重視する度合い、およびデータ量を重視する度合いを意味する。
【０１２１】
また、ｄｉｓ（Ｘ，Ｙ）は、ノードＹからノードＸに到達するために辿るエッジの数を意味する。すなわち、ｄｉｓ（Ｘ，Ｙ）が大きくなればなるほど、より上位の先祖ノードを選ぶことができ、検索時のコストが減る。
【０１２２】
先祖ノード決定部１１は、各先祖ノード候補の中からスコアＡｎｃＳｃｏｒｅ（Ｙ，Ｘ）が最大になるノードＹを取り出し、ノードＸおよび先祖ノードＹのペアを先祖ノード記憶部１２に挿入する。
【０１２３】
一方、先祖ノード決定部１１は、先祖ノード候補が１つも存在していなければ（ＲＴ０５でＮＯ）、先祖ノードは存在しないものとして、ノードＸおよびφを先祖ノード記憶部１２に保存する（ＲＴ０４）。
【０１２４】
なお、ここでは、データ分布およびＡｌｌといった情報が得られる場合に、データ量を計算することで効率良く先祖を選ぶ方法を用いた。
【０１２５】
しかしながら、データ分布およびＡｌｌが得られない場合、各ノードに対して単に親ノードを１つ選ぶといった方法を用いても良い。
【０１２６】
また、ここでは、検索速度およびデータ量から先祖ノードを選択しているが、各ノードに対するユーザの問い合わせ頻度がわかっている場合には、問い合わせ頻度が高い先祖ノードを選ぶ、といった別の基準に置き換えてもよいし、または、別の基準を追加しても良い。
【０１２７】
［データ登録処理］
次に、データ登録処理を説明する。
【０１２８】
図１０は、本発明の第１の実施の形態に係る情報処理装置がデータ登録処理を行なう際の動作手順を示すフローチャートである。
【０１２９】
図１０を参照して、情報処理装置２０１は、識別子付与部１４へ１つ以上のタグおよび当該タグの頻度を持つデータが入力されると、データ登録処理を開始する。
【０１３０】
まず、識別子付与部１４は、内部にカウンターを持ち、データが入力されるたびにカウンターに１を追加し、その値を識別子としてデータに付与する（ＲＤ０１）。そして、識別子付与部１４は、識別子と１つ以上のタグと各タグの頻度とを先祖番号変換部１５に出力する。
【０１３１】
先祖番号変換部１５は、識別子付与部１４から受けた各タグについて次の作業を行なう。すなわち、先祖番号変換部１５は、まず、先祖ノード探索部１３にタグＸを渡し、タグＸの先祖ノードの集合を先祖ノード探索部１３から取り出す（ＲＤ０２）。
【０１３２】
図１１は、先祖ノード探索部が先祖ノード集合の算出処理を行なう際の動作手順を示すフローチャートである。
【０１３３】
図１１を参照して、先祖ノード探索部１３は、まず、一時変数ｎｏｄｅにタグＸを代入し、出力リストａｎｃＬｉｓｔを空の状態で初期化する（ＲＤ０２１）。
【０１３４】
次に、先祖ノード探索部１３は、先祖ノード記憶部１２を参照してｎｏｄｅの先祖ノードを取り出し、ｎｏｄｅ．ａｎｃとする。
【０１３５】
次に、先祖ノード探索部１３は、ｎｏｄｅ．ａｎｃ＝φでない場合には（ＲＤ０２２でｆａｌｓｅ）、ｎｏｄｅをａｎｃＬｉｓｔに追加し、ｎｏｄｅにｎｏｄｅの先祖ノードを代入し（ＲＤ０２４）、再びｎｏｄｅ．ａｎｃの判定処理を行なう（ＲＤ０２２）。
【０１３６】
一方、先祖ノード探索部１３は、ｎｏｄｅ．ａｎｃ＝φの場合には（ＲＤ０２２でｔｒｕｅ）、ｎｏｄｅをａｎｃＬｉｓｔに追加し、ａｎｃＬｉｓｔを出力する（ＲＤ０２３）。
【０１３７】
以上の処理により、先祖ノード探索部１３は、指定されたタグと当該タグの上位にあるすべての先祖ノードとを取り出すことができる。
【０１３８】
たとえば、図２に示すタクソノミのタグＬが入力として与えられ、図６に示す情報が先祖ノード記憶部１２に保持されている場合、先祖ノード探索部１３は、｛Ｌ，Ｂ，Ａ｝という３つのノードを先祖番号変換部１５に返す。
【０１３９】
再び図１０を参照して、次に、先祖番号変換部１５は、各タグの先祖ノードのリストをすべて調べ、共通する先祖ノードをまとめたトライ木すなわち前述のトライ構造を構築する（ＲＤ０３）。
【０１４０】
図１２は、先祖番号変換部が構築するトライ木の一例を示す図である。
【０１４１】
図１２を参照して、このトライ木は、３つのタグＬ，Ｎ，Ｏにそれぞれ対応する先祖ノードのリスト｛Ｌ，Ｂ，Ａ｝，｛Ｎ，Ｂ，Ａ｝，｛Ｏ，Ｃ｝をまとめたトライ木である。
【０１４２】
このトライ木の要素は、各先祖ノードのラベルであり、３つの先祖ノードリスト中の共通の先祖をまとめた形になっている。
【０１４３】
このトライ木の構築アルゴリズムを説明するために、再帰的関数ｉｎｓｅｒｔＴｒｉｅを定義する。
【０１４４】
図１３は、再帰的関数ｉｎｓｅｒｔＴｒｉｅの処理手順を示すフローチャートである。
【０１４５】
図１３を参照して、再帰的関数ｉｎｓｅｒｔＴｒｉｅでは、トライ木中の要素ｔｎｏｄｅと、１つの先祖ノードリストｌｉｓｔとを入力とし、処理が開始される。
【０１４６】
ｉｎｓｅｒｔＴｒｉｅでは、まず、与えられたｌｉｓｔの中身を調べ（ＲＤ０３１）、ｌｉｓｔが空であれば（ＲＤ０３１でｔｒｕｅ）、何もせず処理を終了する（ＲＤ０３６）。
【０１４７】
一方、ｌｉｓｔの中身が空で無ければ（ＲＤ０３１でｆａｌｓｅ）、ｌｉｓｔの最後のラベルを取り出し、トライ木中の要素ｔｎｏｄｅの子要素のうち、当該ラベルを持つ子要素ｃｎｏｄｅを取り出す（ＲＤ０３２）。
【０１４８】
次に、ラベルを持つ子要素ｃｎｏｄｅが有れば（ＲＤ０３３でｆａｌｓｅ）、ｃｎｏｄｅおよびｌｉｓｔを引数として、ＲＤ０３１〜ＲＤ０３４に示す処理と同じ処理を行なう（ＲＤ０３５）。
【０１４９】
一方、ラベルを持つ子要素が無ければ（ＲＤ０３３でｔｒｕｅ）、当該ラベルを要素としたｃｎｏｄｅを作成し、要素ｔｎｏｄｅの子要素としてｃｎｏｄｅを追加し（ＲＤ０３４）、ｃｎｏｄｅおよびｌｉｓｔを引数として、ＲＤ０３１〜ＲＤ０３４に示す処理と同じ処理を行なう（ＲＤ０３５）。
【０１５０】
図１４は、先祖番号変換部がトライ木の構築処理を行なう際の動作手順を示すフローチャートである。
【０１５１】
図１４を参照して、先祖番号変換部１５は、まず、トライ木のルート要素ｒｏｏｔを作成する（ＲＤ０４１）。
【０１５２】
次に、先祖番号変換部１５は、ルート要素ｒｏｏｔ、および各タグの先祖ノードリストｌｉｓｔに対して再帰的関数ｉｎｓｅｒｔＴｒｉｅを呼び出す（ＲＤ０４２）。
【０１５３】
以上の処理により、各先祖ノードリストはルート要素ｒｏｏｔの子孫として追加され、図１２に示すようなトライ木を構築することができる。
【０１５４】
再び図１０を参照して、次に、先祖番号変換部１５は、トライ木および識別子に基づいて、先祖番号転置リスト記憶部１６内の転置リストの更新処理を行なう（ＲＤ０４）。
【０１５５】
この処理を説明するために、再帰的関数ｉｎｓｅｒｔ（Ｎｏｄｅ  ｎｏｄｅ，ｉｎｔ  ｎｕｍｂｅｒ）を定義する。
【０１５６】
図１５は、再帰的関数ｉｎｓｅｒｔの処理手順を示すフローチャートである。
【０１５７】
図１５を参照して、関数ｉｎｓｅｒｔは、トライ木中の要素を意味するｎｏｄｅ、および整数値ｎｕｍｂｅｒという２つの引数を持つ。
【０１５８】
再帰的関数ｉｎｓｅｒｔでは、まず、ｎｏｄｅで指定されるノードに対応する先祖番号転置リスト記憶部１６内の転置リストについて、当該転置リストの最後にｎｕｍｂｅｒを追加し、追加した時点における転置リストの長さ、すなわちｎｕｍｂｅｒの追加位置を取り出してｐｏｓとする（ＲＤＩ０１）。
【０１５９】
次に、ｎｏｄｅのトライ木における各子ノードすなわちｃｈｉｌｄについて、ｐｏｓを追加する関数処理ｉｎｓｅｒｔ（ｃｈｉｌｄ，ｐｏｓ）を呼び出す。これにより、各子要素の転置リストに、ｎｏｄｅで指定される現在の要素の追加位置の情報ｐｏｓが追加される（ＲＤＩ０２）。
【０１６０】
再び図１０を参照して、先祖番号変換部１５は、トライ木におけるｒｏｏｔの各子要素ｒｃｈｉｌｄに対して、ｉｎｓｅｒｔ（ｒｃｈｉｌｄ，識別子）を呼び出すことにより、先祖番号転置リスト記憶部１６内の転置リストの更新処理を行なう（ＲＤ０４）。
【０１６１】
また、先祖番号変換部１５は、転置リストの更新処理（ＲＤ０４）と並行して、トライ木と、識別子と、各タグの頻度とを先祖頻度変換部１７へ出力する。
【０１６２】
次に、先祖頻度変換部１７は、先祖番号変換部１５から受けたトライ木および各タグの頻度に基づいて先祖ノードの頻度の計算を行なう（ＲＤ０５）。
【０１６３】
図１６は、先祖頻度変換部が行なうトライ木における頻度の計算結果を示す図である。
【０１６４】
図１６を参照して、先祖頻度変換部１７は、トライ木の葉ノードから親方向に辿りながら、各ノードの子ノードが持つ頻度の和を計算することにより、先祖ノードの頻度の計算を行なう。
【０１６５】
たとえば、図１２に示すトライ木と、タグＬの頻度３、タグＮの頻度２およびタグＯの頻度１とが得られた場合には、先祖頻度変換部１７は、タグＢの頻度５、タグＡの頻度５およびタグＣの頻度１を算出する。
【０１６６】
再び図１０を参照して、次に、先祖頻度変換部１７は、頻度リストの更新を行なう（ＲＤ０６）。
【０１６７】
この処理を説明するために、再帰的関数ｉｎｓｅｒｔＦｒｅｑを定義する。
【０１６８】
図１７は、再帰的関数ｉｎｓｅｒｔＦｒｅｑの処理手順を示すフローチャートである。
【０１６９】
図１７を参照して、再帰的関数ｉｎｓｅｒｔＦｒｅｑは、トライ木中のノードを意味するｎｏｄｅ、および頻度を示す整数値ｆｒｅｑという２つの引数を持つ。
【０１７０】
再帰的関数ｉｎｓｅｒｔＦｒｅｑでは、まず、ｎｏｄｅで指定されるノードおよび当該ノードの頻度ｆｒｅｑを頻度リスト記憶部１９に追加する（ＲＤＩＦ０１）。
【０１７１】
さらに、トライ木におけるｎｏｄｅの各子ノードｃｈｉｌｄに対して、ｎｏｄｅの頻度ｆｒｅｑと、子ノードの頻度ｃｈｉｌｄ．ｆｒｅｑとを比較し、等しい場合、ｉｎｓｅｒｔＦｒｅｑ（ｃｈｉｌｄ，０）を呼び出すことにより、「０」を頻度として追加する。
【０１７２】
一方、頻度が等しく無い場合には、ｉｎｓｅｒｔＦｒｅｑ（ｃｈｉｌｄ，ｃｈｉｌｄ．ｆｒｅｑ）を呼び出すことにより、子ノードの頻度をそのまま追加する（ＲＤＩＦ０２）。
【０１７３】
先祖頻度変換部１７は、トライ木におけるｒｏｏｔの各子ノードｒｃｈｉｌｄに対して、ｉｎｓｅｒｔ（ｒｃｈｉｌｄ，ｒｃｈｉｌｄ．ｆｒｅｑ）を呼び出すことにより、頻度リストの更新を行なう（ＲＤ０６）。
【０１７４】
［データ検索処理］
次に、データ検索処理を説明する。
【０１７５】
図１８は、本発明の第１の実施の形態に係る情報処理装置がデータ検索処理を行なう際の動作手順を示すフローチャートである。
【０１７６】
図１８を参照して、情報処理装置２０１は、識別子変換部１８へタクソノミ中のノードを指すラベルが入力されると、データ検索処理を開始する。
【０１７７】
まず、識別子変換部１８は、ラベルが入力されると、先祖ノード探索部１３を用いて、当該ラベルが指す指定ノードに対応する先祖ノードのリストを取得する（Ｓ０１）。
【０１７８】
次に、識別子変換部１８は、先祖番号転置リスト記憶部１６を参照し、指定ノードに対応する転置リストを整数列として読み出す（Ｓ０２）。
【０１７９】
次に、識別子変換部１８は、頻度リスト記憶部１９を参照し、指定ノードに対応する頻度リストを整数列として読み出す（Ｓ０３）。
【０１８０】
次に、識別子変換部１８は、先祖ノードリスト、転置リストおよび頻度リストに基づいて、識別子および頻度の組のリストを作成する。より詳細には、識別子変換部１８は、長さｎの転置リスト、および頻度リスト中の各値の組に対して、関数ｔｒａｎｓによる処理を行なう（Ｓ０４）。
【０１８１】
図１９は、関数ｔｒａｎｓの処理手順を示すフローチャートである。図１９では、ノードＸに対応する先祖ノードリストａｎｃＬｉｓｔ、転置リスト中の値ｉｎｖ［ｉ］（０＜ｉ＜＝ｎ）、頻度リスト中の値ｈｉｔ［ｉ］（０＜ｉ＜＝ｎ）を引数とする、関数ｔｒａｎｓ（ｉｎｖ［ｉ］，ｈｉｔ［ｉ］，ａｎｃＬｉｓｔ）の処理手順が示されている。
【０１８２】
図１９を参照して、関数ｔｒａｎｓでは、まず、一時変数ｐｏｓにｉｎｖ［ｉ］を代入し、一時変数ｆｒｅｑにｈｉｔ［ｉ］を代入する（Ｓ０４１）。
【０１８３】
次に、ａｎｃＬｉｓｔ中の先祖ノードを下位のノードから順に参照し、各先祖ノードａｎｃに対して、次のような処理を行なう。
【０１８４】
すなわち、まず、ｆｒｅｑの値が０である場合には、関数ｓｅｌｅｃｔＦｒｅｑ（ｐｏｓ，ａｎｃ）による処理を行なう。
【０１８５】
ここで、関数ｓｅｌｅｃｔＦｒｅｑ（ｐｏｓ，ａｎｃ）では、頻度リスト記憶部１９中のノードａｎｃに対応する頻度リストのうち、ｐｏｓ番目の値を取り出す処理を行なう。頻度リスト記憶部１９において、たとえば頻度リストはＬ個のブロックに分割した上で保存されているため、たかだかＬ回の復号処理を行なうだけで頻度を取り出すことができる。そして、取り出した値は、変数ｆｒｅｑに代入される。
【０１８６】
次に、関数ｓｅｌｅｃｔ（ｐｏｓ，ａｎｃ）による処理を行なう。関数ｓｅｌｅｃｔ（ｐｏｓ、ａｎｃ）では、先祖番号転置リスト記憶部１６内に記憶されているノードａｎｃの転置リストのうち、ｐｏｓ番目の値を取り出す処理を行なう。
【０１８７】
ここで、転置リストは、前述のようにＬ個ごとのブロックに分割した上で差分圧縮されていることから、転置リストのうち、ｐｏｓ番目の値を取り出すためには、たかだかＬ回の復号および足し算を行なえば良い。
【０１８８】
このような処理をすべての先祖ノードに対して行った後、ｐｏｓを識別子すなわちデータ番号とし、ｆｒｅｑを頻度として出力する（Ｓ０４３）。
【０１８９】
再び図１０を参照して、次に、識別子変換部１８は、識別子を頻度順に並べ替え、検索結果として出力する（Ｓ０５）。
【０１９０】
なお、本発明の第１の実施の形態に係る情報処理装置では、識別子変換部１８は、識別子を頻度順に並べ替えて出力する構成であるとしたが、情報処理装置２０１は、各識別子に対応する何らかの評価値を外部に持ち、頻度および評価値に基づいて識別子を並べ替える構成であってもよい。
【０１９１】
次に、本発明の第１の実施の形態に係る情報処理装置によって奏する効果をより具体的に説明する。
【０１９２】
本発明の第１の実施の形態に係る情報処理装置では、タクソノミ中のノードに対応する転置リストにおいて、識別子の列を記憶するのではなく、当該ノードの上位ノードである先祖ノードの転置リスト中の位置を記憶する。これにより、データ量が小さく、検索も高速となるインデックスを実現している。
【０１９３】
まず、ここでは、タクソノミ登録処理により、図２に示すタクソノミが登録され、図６に示す先祖ノードが登録されたことを想定する。
【０１９４】
さらに、データ登録処理により、図１（ａ）に示す転置リストで表現されたデータが登録されたとき、先祖番号転置リスト記憶部１６には、図７に示す転置リストが、差分圧縮された形で保持される。
【０１９５】
図７に示す転置リストに注目して見ると、図６に示す先祖ノードリストにおいて先祖ノードがφになっているノードＡおよびＣでは、これらのノードに対応する識別子がそのまま入っているが、それ以外の転置リストは、図１（ｂ）に示す転置インデックスに比べ、各要素間の差分が小さくなっており、高い率の圧縮が可能となっている。
【０１９６】
次に、本発明の第１の実施の形態に係る情報処理装置による検索が高速であることを説明するため、データ検索処理について述べる。
【０１９７】
識別子変換部１８に、ノードＢを示すラベルが入力されたとする。
【０１９８】
このとき、識別子変換部１８は、図７に示す転置リストおよび図８に示す頻度リストの中から、それぞれｄ（Ｂ）に対応する行を取り出す。
【０１９９】
また、識別子変換部１８は、ノードＢの先祖ノードに対応する転置リストとして、図７に示す転置リストからノードＡに対応する行を取り出す。
【０２００】
また、識別子変換部１８は、ｄ（Ｂ）に対応する行の各データと先祖ノードＡの転置リストとを照合し、（１，２３，４５６，１２０００，１６３３３）という識別子の列と、（４，１，３，２，５）という頻度の列とを取り出すことができる。
【０２０１】
以上の処理のステップ数は、識別子列の長さに対して定数倍であることから、データ検索を高速に実現することが可能である。
【０２０２】
さらに、識別子変換部１８は、取り出した識別子の列を、（１６３３３，１，４５６，１２０００，２３）のように頻度順に並べ替え、指定ノードと関連の強いデータから順番に返すことが可能である。
【０２０３】
また、図９に示すタクソノミ登録処理におけるパラメータα、β、γを調整することにより、先祖ノードの選択方法を変えることができる。
【０２０４】
たとえば、γを小さく設定することで、図６に示すノードＣに対応する先祖ノードをφではなく、ノードＡとして登録することを考える。
【０２０５】
このとき、先祖番号転置リスト記憶部１６に記憶される情報は、以下の図２０に示す転置リストになる。
【０２０６】
図２０は、本発明の第１の実施の形態に係る情報処理装置における先祖番号転置リスト記憶部に記憶される先祖番号転置リストの一例を示す図である。
【０２０７】
図２０を参照して、この転置リストにおける整数列は、図７に示す転置リストに対して、ノードＣに対応する整数列における各値の差分がさらに小さくなっており、当該差分の圧縮をすることにより、転置リストのデータ量をさらに小さくすることができる。
【０２０８】
ただし、この設定では、ノードＣに対する問い合わせを行なう場合、ノードＡの転置リストを参照しなければならない。このため、図７に示す転置リストの場合に比べ、検索処理に時間がかかる。
【０２０９】
このように、α、β、γを調整することにより、データサイズおよび検索速度のバランスを調整することが可能である。
【０２１０】
以上のように、本発明の第１の実施の形態に係るデータ構造は、検索対象データに関するタグを有するタクソノミにおいて、タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すためのデータ構造である。そして、データ構造は、先祖参照用データと、転置リスト用データすなわち先祖番号転置リストとを備える。この先祖参照用データは、タクソノミにおいて、各ノードの上位ノードである先祖ノードを示す。そして、転置リスト用データは、各ノードの転置リストを含み、各ノードのうち、先祖参照用データにおいて先祖ノードが登録されているノードの転置リストは、登録された先祖ノードに対応する転置リスト中の位置を示す整数値のリストである。さらに、転置リスト用データでは、各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、ブロックにおける整数値と整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されている。
【０２１１】
また、本発明の第１の実施の形態に係るインデックス作成装置は、検索対象データに関するタグを有するタクソノミにおいて、タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成する。そして、インデックス作成装置では、各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、ブロックにおける整数値と整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されている。そして、先祖ノード決定部１１は、タクソノミにおけるノードごとに、ノードの上位ノードである先祖ノードを１つ選択し、選択した先祖ノードを示す先祖参照用データを生成する。先祖ノード探索部１３は、先祖参照用データに基づいて、タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成する。そして、先祖番号変換部１５は、検索対象データの識別子を受けて、先祖ノードリストにおける各ノードのうち最上位のノードについては、識別子を対応の転置リストの要素として追加し、最上位ノード以外のノードについては、対応の転置リストの要素として、識別子の代わりに、ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加する。
【０２１２】
また、本発明の第１の実施の形態に係るデータ検索装置は、検索対象データに関するタグを有するタクソノミにおいて、タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出す。そして、データ検索装置では、先祖番号転置リスト記憶部１６は、転置リスト用データを記憶する。この転置リスト用データは、タクソノミにおける各ノードの転置リストを含み、各ノードのうち、最上位のノードの転置リストは、検索対象データの識別子を示す整数値のリストであり、最上位ノード以外のノードの転置リストは、識別子の代わりに、ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストである。さらに、転置リスト用データでは、各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、ブロックにおける整数値と整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されている。そして、識別子変換部１８は、指定ノードを示す情報を受けて、転置リスト用データに基づき、指定ノードに対応する転置リストの整数値が示す位置に対応する、指定ノードの上位ノードに対応する転置リストの整数値を取り出す処理を、最上位ノードに対応する転置リストの識別子を取り出すまで繰り返すことにより、指定ノードに対応する検索対象データの識別子のリストを作成する。
【０２１３】
このように、タクソノミにおける各ノードの転置リストを、先祖ノードの転置リスト中の位置で表現することにより、転置リストにおける整数列の差分を短くすることが可能である。これにより、当該差分を可変長整数コードで表現することでデータ長が小さい転置リストを作成することができる。
【０２１４】
さらに、検索時においては、あるノードに対応する転置リストを検索対象データの識別子の列に変換するために、たかだか「グラフ（木構造）の高さ」個の先祖ノードに対応する転置リストを参照すれば良くなる。この参照処理は、通常、高速であり、指定ノードが上位のノードになればなるほど少ない処理で済む。
【０２１５】
具体的には、通常、すべてのノードに対して転置インデックスを作成する場合、図１（ｂ）に示すような識別子の列を保持する必要がある。
【０２１６】
これに対して、本発明の第１の実施の形態に係るデータ検索装置では、転置インデックスは、図７に示すような識別子の列を保持すれば良い。
【０２１７】
図７に示す識別子列は、図１（ｂ）に示す識別子列に比べて、小さい値で構成されているため、これらの値の差分をとって可変長整数コードにより圧縮する処理を加えることで当該転置インデックスを大幅に圧縮することが可能である。
【０２１８】
また、たかだか（識別子列の長さ×先祖ノードの数×Ｌ）回の参照を行なうだけで、上位ノードに対する問い合わせを行なうことが可能となる。
【０２１９】
すなわち、本発明の第１の実施の形態に係るデータ検索装置では、タクソノミ中の各ノードに対応する転置インデックスをコンパクトに表現しつつ、タクソノミ中の上位のノードに対する問い合わせを高速に行なうことができる。また、タクソノミ中の上位のノードに対する問い合わせを高速に実現可能なコンパクトなデータ構造を実現することができる。
【０２２０】
したがって、使用データ量をコンパクトに押さえつつ、タクソノミ中の上位ノードである意味クラスに対する問い合わせを高速に実現可能である。
【０２２１】
このように、本発明の第１の実施の形態に係るデータ構造における各構成要素のうち、先祖参照用データおよび転置リスト用データからなる最小構成により、検索処理のためのデータ容量の低減および検索処理の高速化を図る、という本発明の目的を達成することが可能となる。
【０２２２】
また、本発明の第１の実施の形態に係るインデックス作成装置における各構成要素のうち、先祖ノード決定部１１、先祖ノード探索部１３および先祖番号変換部１５からなる最小構成により、検索処理のためのデータ容量の低減および検索処理の高速化を図る、という本発明の目的を達成することが可能となる。
【０２２３】
また、本発明の第１の実施の形態に係るデータ検索装置における各構成要素のうち、先祖番号転置リスト記憶部１６および識別子変換部１８からなる最小構成により、検索処理のためのデータ容量の低減および検索処理の高速化を図る、という本発明の目的を達成することが可能となる。
【０２２４】
なお、特許文献１には、検索語を木構造に変換することにより、検索処理を効率化する構成が開示されているが、本発明の第１の実施の形態に係る情報処理装置では、検索に用いるインデックスを木構造に変換することでインデックス全体を圧縮する構成であり、特許文献１に記載の構成とまったく異なるものである。
【０２２５】
また、本発明の第１の実施の形態に係るインデックス作成装置では、先祖ノード決定部１１は、先祖ノードに対応するデータ分布に基づいて、各ノードに対する先祖ノードを決定する。すなわち、先祖ノード決定部１１は、タクソノミにおける各ノードが所定のデータ集合内でどの程度の頻度を持つか、あるいは持ちそうかを示す頻度分布を受けて、タクソノミにおけるノードごとに、ノードの各先祖ノードに対応する頻度に基づいて、各先祖ノードを選んだ場合における対応の転置リストのデータ長を計算し、各先祖ノードのうち、データ長が小さい先祖ノードおよびタクソノミにおいてより上位の先祖ノードを優先して選択する。
【０２２６】
このような構成により、検索速度およびデータ量のバランスを調整しながら転置インデックスを作成することができる。
【０２２７】
また、本発明の第１の実施の形態に係るデータ検索装置では、各ノードに対応する転置リストを記憶するだけでなく、頻度リストを記憶する。すなわち、頻度リスト記憶部１９は、タクソノミにおける各ノードの、各検索対象データに対応する頻度を示す頻度リストを記憶する。そして、識別子変換部１８は、さらに、指定ノードに対応する１または複数の検索対象データの識別子のリストにおいて、頻度リストに基づいて識別子をソートする。
【０２２８】
このような構成により、検索結果として単に識別子を返すのではなく、頻度に基づいたランキングを返すことが可能である。
【０２２９】
また、本発明の第１の実施の形態に係るデータ構造は、タクソノミ中のあるノードの頻度リストを表現する際に、当該ノードの頻度リストと当該ノードの先祖ノードの頻度リストとを比較し、同じ頻度を持つ場合に短い符号を与えた頻度データを備える。
【０２３０】
このような構成により、データ長が小さい頻度リストを作成することができる。
【０２３１】
次に、本発明の他の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【０２３２】
＜第２の実施の形態＞
本実施の形態は、第１の実施の形態に係る情報処理装置と比べて複数のノードが指定された場合の処理の効率化を図る情報処理装置に関する。以下で説明する内容以外は第１の実施の形態に係る情報処理装置と同様である。
【０２３３】
図２１は、本発明の第２の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。
【０２３４】
図２１を参照して、情報処理装置２０２は、本発明の第１の実施の形態に係る情報処理装置と比べて、識別子変換部１８の代わりに複数識別子変換部２８を備える。
【０２３５】
複数識別子変換部２８は、タクソノミ中の２つ以上の指定ノードを受けて、指定ノードごとに、先祖ノード探索部１３を用いて先祖ノードリストを取り出す。複数識別子変換部２８は、各指定ノードについて、共通の先祖ノードをまとめたトライ木を作成する。そして、複数識別子変換部２８は、作成したトライ木を深さ優先探索しながら、各指定ノードすべてと関連する検索対象データ集合を示す識別子のリストを作成する。
【０２３６】
図２２は、本発明の第２の実施の形態に係る情報処理装置がデータ検索処理を行なう際の動作手順を示すフローチャートである。
【０２３７】
図２２を参照して、情報処理装置２０１は、複数識別子変換部２８へタクソノミ中の複数のノードを示す情報が入力されると、データ検索処理を開始する。
【０２３８】
まず、複数識別子変換部２８は、入力された複数の指定ノードに対して、先祖ノード探索部１３を用いて、それぞれの先祖ノードのリストを取得する（Ｊ０１）。この処理は、本発明の第１の実施の形態における処理Ｓ０１と同じ処理である。
【０２３９】
次に、複数識別子変換部１８は、各指定ノードの先祖ノードのリストのうち、共通する先祖ノードをまとめたトライ木を構築する（Ｊ０２）。この処理は、本発明の第１の実施の形態における処理ＲＤ０３と同じ処理である。
【０２４０】
次に、複数識別子変換部１８は、構築したトライ木において、深さ優先探索を行いながらＪＯＩＮ処理を繰り返すことにより、得られた結果を検索結果として出力する（Ｊ０３）。
【０２４１】
ここで、処理Ｊ０３について詳しく述べる。この処理では、トライ木において、深さ優先探索を行いながら、図２３および図２４に示す２つの処理ｎｏｄｅ−ｉｎおよびｎｏｄｅ−ｏｕｔを実施する。
【０２４２】
ここで、トライ木のルートを起点とした深さ優先探索において、処理ｎｏｄｅ−ｉｎは、ノードに入るときに実施される処理であり、処理ｎｏｄｅ−ｏｕｔは、ノードを出るときに実施される処理である。
【０２４３】
図２３は、処理ｎｏｄｅ−ｉｎの手順を示すフローチャートである。
【０２４４】
図２３を参照して、処理ｎｏｄｅ−ｉｎでは、まず、新しく入るノードである対象ノードに対応するバッファリストを作成する（Ｊ０３１）。ここで、バッファリストとは、整数列を一時的に保持するためのリストである。
【０２４５】
次に、対象ノードがトライ木中の葉ノードである場合には（Ｊ０３２でＹＥＳ）、対象ノードに対応する転置リストを先祖番号転置リスト記憶部１６から読み出し、読み出した転置リストの整数列を対象ノードのバッファリストに追加する（Ｊ０３３）。
【０２４６】
一方、対象ノードがトライ木中の葉ノードでない場合には（Ｊ０３２でＮＯ）、当該トライ木中の各子ノードに対して探索処理を続け、すべての子を辿り終えた時点で処理を終了する（Ｊ０３４）。
【０２４７】
図２４は、処理ｎｏｄｅ−ｏｕｔの手順を示すフローチャートである。
【０２４８】
図２４を参照して、処理ｎｏｄｅ−ｏｕｔでは、まず、出ようとする対象ノードがトライ木中の葉ノードでない場合には、対象ノードのバッファリストおよび対象ノードに対応する転置リストに基づいて、バッファリスト内の整数列を変換する処理を行なう（Ｊ０３６）。この処理は、対象ノードｎｏｄｅ、およびバッファリスト内の各値ｐｏｓに対して、前述の関数ｓｅｌｅｃｔ（ｐｏｓ，ｎｏｄｅ）を実施することで行われる。
【０２４９】
次に、トライ木における対象ノードの親ノードが保持するバッファリストが空かどうかを調べ（Ｊ０３７）、空である場合には（Ｊ０３７でＹＥＳ）、親ノードのバッファリストに、対象ノードのバッファリストを追加する処理を行なう（Ｊ０３８）。
【０２５０】
一方、空でない場合には（Ｊ０３７でＮＯ）、親ノードのバッファリストにある整数列と対象ノードのバッファリストにある整数列とを比較し、ＪＯＩＮ処理すなわち両方に含まれる整数値だけを残す処理を行なう（Ｊ０３９）。
【０２５１】
図２５は、本発明の第２の実施の形態に係る情報処理装置における深さ優先探索の処理手順の具体例を示す図である。
【０２５２】
図２５を参照して、図２に示すタクソノミに対して、入力ノードとして、Ｌ，Ｎ，Ｏという３つのノードが指定された状況を想定する。
【０２５３】
図２５では、これらの入力ノードから作成されるトライ木が示されており、また、Ｐ０〜Ｐ１３は、このトライ木に対する探索順を示している。
【０２５４】
まず、ｒｏｏｔのバッファリストが作成される（Ｐ０）。
【０２５５】
次に、ノードＡが探索され、ノードＡのバッファリストが作成される（Ｐ１）。
【０２５６】
次に、ノードＢが探索され、ノードＢのバッファリストが作成される（Ｐ２）。
【０２５７】
次に、ノードＬが探索され、ノードＬの転置リストが読み込まれる（Ｐ３）。
【０２５８】
次に、ノードＢに戻り、ノードＬの転置リストがノードＢのバッファリストに追加される（Ｐ４）。
【０２５９】
次に、ノードＮが探索され、ノードＮの転置リストが読み込まれる（Ｐ５）。
【０２６０】
次に、ノードＢに戻り、ノードＢのバッファリストおよびノードＮの転置リストがＪＯＩＮ処理される（Ｐ６）。
【０２６１】
次に、ノードＡに戻り、ノードＢのバッファリストがノードＢの転置リスト中の値に変換され、ノードＡのバッファリストに追加される（Ｐ７）。
【０２６２】
次に、ｒｏｏｔに戻り、ノードＡのバッファリストがノードＡの転置リスト中の値に変換され、ｒｏｏｔのバッファリストに追加される（Ｐ８）。
【０２６３】
次に、ノードＣが探索され、ノードＣのバッファリストが作成される（Ｐ９）。
【０２６４】
次に、ノードＯが探索され、ノードＯの転置リストが読み込まれる（Ｐ１０）。
【０２６５】
次に、ノードＣに戻り、ノードＯの転置リストがノードＣのバッファリストに追加される（Ｐ１１）。
【０２６６】
次に、ｒｏｏｔに戻り、ノードＣのバッファリストがノードＣの転置リスト中の値に変換され、ｒｏｏｔのバッファリストとＪＯＩＮ処理される（Ｐ１２）。
【０２６７】
次に、ｒｏｏｔのバッファリストが出力される（Ｐ１３）。
【０２６８】
以上の処理により、ノードＬ，Ｎ，Ｏのすべてに関連する検索対象データの識別子の列を作成し、出力することができる。
【０２６９】
以上のように、本発明の第２の実施の形態に係るデータ検索装置は、タクソノミにおける複数のノードが指定された場合には、各指定ノードのいずれからも到達可能な検索対象データの集合を取り出す。そして、データ検索装置では、複数識別子変換部２８は、タクソノミにおける複数のノードが指定された場合には、各指定ノードに対応する転置リストを先祖番号転置リスト記憶部１６から取得し、指定ノードに対応する転置リストの整数値が示す位置に対応する、指定ノードの上位ノードに対応する転置リストの整数値を取り出す処理を行なう際に、指定ノードの組で共通の上位ノードのうち、タクソノミにおいて最も下位の上位ノードである共通先祖ノードに対応する転置リストにおける整数値を取り出すとき、指定ノードの組において共通の整数値を取り出す。そして、複数識別子変換部２８は、取り出した整数値を用いて、複数の指定ノードに対応する検索対象データの識別子のリストを作成する。
【０２７０】
このような構成により、複数のノードをキーとするＡＮＤ検索において、ＪＯＩＮ演算を効率的に行なうことが可能となる。
【０２７１】
すなわち、本発明の第１の実施の形態に係る情報処理装置を用いてＡＮＤ検索を行なう場合には、入力された複数の指定ノードに対応する転置リストを識別子の列に変換するために、各指定ノードの転置リストが参照する先祖ノードの転置リストをすべて参照した上で、ＪＯＩＮ処理を行なう必要がある。
【０２７２】
たとえば、Ｌ，Ｎ，Ｏという３つの指定ノードを入力とし、各指定ノードが１００個の検索対象データと関係を持つ場合、合計３００個の整数についてそれぞれすべての先祖ノードにおける転置リストの位置を調べ、識別子へ変換する必要がある。
【０２７３】
これに対して、本発明の第２の実施の形態に係る情報処理装置では、指定ノードの組の共通の先祖ノードのうち、最下位の先祖ノードに対応する転置リスト中の番号に指定ノードの値を変換した時点でＪＯＩＮ処理を行なう。これにより、効率の良い参照が可能となる。
【０２７４】
たとえば、Ｌ，Ｎ，Ｏという３つの指定ノードを入力とし、各指定ノードが１００個の検索対象データと関係を持つ場合であっても、すべての先祖ノードにおける転置リストの位置を調べる必要がなくなる。
【０２７５】
この例を具体的に説明するため、ノードＬとノードＮのＪＯＩＮ処理のみに注目する。
【０２７６】
図２５に示すように、ノードＬとノードＮのＪＯＩＮ処理は、各々の転置リストを識別子に変換せずに、ノードＢに対応する転置リスト中の位置について実施する。このため、ノードＢより上位のノードに対応する転置リストを参照する処理は、このＪＯＩＮ処理の結果に対してのみ行なえば良いことから、効率的に処理が可能である。
【０２７７】
次に、本発明の第２の実施の形態に係る情報処理装置によって奏する効果をより具体的に説明する。
【０２７８】
ここでは、図６および図７に示すデータが保持されている際に、複数識別子変換部２８に、ノードＬとノードＮが入力されたとする。
【０２７９】
このとき、図２２に示すデータ検索処理におけるステップＪ０１の処理により、ノードＬに対応する先祖ノードリストとして｛Ｌ，Ｂ，Ａ｝が得られる。また、ノードＮに対応する先祖ノードリストとして｛Ｎ，Ｂ，Ａ｝が得られる。
【０２８０】
次に、これらの先祖ノードリストに基づいて先祖トライを構築すると、図２６に示すような先祖トライが構築される（Ｊ０２）。
【０２８１】
図２６は、本発明の第２の実施の形態に係る情報処理装置における深さ優先探索の処理手順の具体例を示す図である。
【０２８２】
次に、図２２に示すデータ検索処理におけるステップＪ０３の処理を行なうと、以下のような処理手順でＪＯＩＮ処理が行われる。
【０２８３】
すなわち、まず、ｒｏｏｔのバッファリストが作成される（Ｑ０）。
【０２８４】
次に、ノードＡが探索され、ノードＡのバッファリストが作成される（Ｑ１）。
【０２８５】
次に、ノードＢが探索され、ノードＢのバッファリストが作成される（Ｑ２）。
【０２８６】
次に、ノードＬが探索され、ノードＬの転置リスト｛１，３，４｝が読み込まれる（Ｑ３）。
【０２８７】
次に、ノードＢに戻り、ノードＬの転置リストがノードＢのバッファリストに追加される（Ｑ４）。
【０２８８】
次に、ノードＮが探索され、ノードＮの転置リスト｛３｝が読み込まれる（Ｑ５）。
【０２８９】
次に、ノードＢに戻り、ノードＢのバッファリストおよびノードＮの転置リストがＪＯＩＮ処理される（Ｑ６）。
【０２９０】
次に、ノードＡに戻り、ノードＢのバッファリストがノードＢの転置リスト中の値｛３｝に変換され、ノードＡのバッファリストに追加される（Ｑ７）。
【０２９１】
次に、ｒｏｏｔに戻り、ノードＡのバッファリストがノードＡの転置リスト中の値すなわち識別子｛４５６｝に変換され、ｒｏｏｔのバッファリストに追加される（Ｑ８）。
【０２９２】
次に、ｒｏｏｔのバッファリストが出力される（Ｑ９）。
【０２９３】
図２６において、重要なポイントはステップＱ７およびＱ９における処理である。ステップＱ７およびＱ９では、ノードＢおよびノードＡに対応する転置リストの参照がそれぞれ行われる。このデータの参照は、それぞれ１つの値についてのみ行われる。具体的には、ステップＱ７では３を３に変換する処理が行われ、ステップＱ９では３を４５６に変換する処理が行われる。
【０２９４】
これに対して、通常の処理手順では、ノードＬに対応する転置リスト｛１，３，４｝、およびノードＮに対応する転置リスト｛３｝内の値それぞれについて上位ノードの転置リストを参照しなければならず、処理に時間がかかってしまう。
【０２９５】
その他の構成および動作は第１の実施の形態に係る情報処理装置と同様であるため、ここでは詳細な説明を繰り返さない。
【０２９６】
次に、本発明の他の実施の形態について図面を用いて説明する。なお、図中同一または相当部分には同一符号を付してその説明は繰り返さない。
【０２９７】
＜第３の実施の形態＞
本実施の形態は、第１の実施の形態に係る情報処理装置と比べて検索結果に関連するノードの集合を得る情報処理装置に関する。以下で説明する内容以外は第１の実施の形態に係る情報処理装置と同様である。
【０２９８】
図２７は、本発明の第３の実施の形態に係る情報処理装置が提供する制御構造を示すブロック図である。
【０２９９】
図２７を参照して、情報処理装置２０３は、本発明の第１の実施の形態に係る情報処理装置と比べて、さらに、子ノード記憶部２１と、トップダウン探索部２２とを備える。
【０３００】
子ノード記憶部２１は、先祖ノード記憶部１２に記載されている先祖ノードをまとめることにより作成された、各ノードおよび各ノードの仮想的な１つのｒｏｏｔについての子ノードの集合を示す情報を記憶する。
【０３０１】
図２８は、子ノード記憶部２１に記憶される情報の一例を示す図である。図２８は、図６に示す先祖参照用データが得られる場合における子ノード情報の例を示している。
【０３０２】
図２８を参照して、たとえば、２行目には、ノードＡについての子ノードのリストが登録されており、ノードＡには、ノードＢという子ノードが登録されていることがわかる。
【０３０３】
また、１行目には、仮想的なルートｒｏｏｔに対応する子ノードとしてノードＡおよびノードＣが登録されている。
【０３０４】
図６に示す例では、ノードＡおよびノードＣが、先祖ノードの存在しない最上位のノードとして登録されている。そして、これらのノードが上位に単一のルートｒｏｏｔを仮想的に持ち、ルートｒｏｏｔの下位に、タクソノミ中の最上位ノードＡ，Ｃのリストが存在するものとして、図２８に示す子ノードのリストが作成されている。
【０３０５】
また、トップダウン探索部２２は、指定された全検索対象データの部分集合を示す識別子のリストと、整数ｍｉｎとを受けて、先祖番号転置リスト記憶部１６内の転置リストを参照しながら、指定された検索対象データの集合内で、ｍｉｎ回以上登場するノードのリストを返す。
【０３０６】
次に、本発明の第３の実施の形態に係る情報処理装置のｌｉｓｔ処理について説明する。
【０３０７】
トップダウン探索部２２は、検索対象データの集合を示す識別子のリスト、および整数値ｍｉｎが入力されると、ｌｉｓｔ処理を開始する。
【０３０８】
この処理では、識別子変換部１８において検索処理が行われた後、得られた識別子のリストと、予め設定されたｍｉｎの値とが入力として呼び出される。なお、これらはユーザまたは外部のプログラムによって呼び出されても良い。
【０３０９】
トップダウン探索部２２は、子ノード記憶部２１に記憶されているルートノードを起点として、タクソノミ中のノードをトップダウンに辿り、指定された検索対象データ集合内での頻度がｍｉｎ以上かどうかを調べる。この際に、トップダウン探索部２２は、再帰的関数ｌｉｓｔを実行する。
【０３１０】
図２９は、再帰的関数ｌｉｓｔの処理手順を示すフローチャートである。
【０３１１】
図２９を参照して、再帰的関数ｌｉｓｔは、子ノード記憶部２１に記憶されているノードのうち特定のノードを示すｎｏｄｅ、検索対象データ集合を表現した整数列ｉｎｐｕｔ、および閾値ｍｉｎという３つの値を入力として呼び出される。
【０３１２】
再帰的関数ｌｉｓｔでは、呼び出されると、まず、先祖番号転置リスト記憶部１６から、ｎｏｄｅで指定されるノードに対応する転置リストを読み込み、ｎＬｉｓｔとする（Ｌ０１）。
【０３１３】
次に、ｎＬｉｓｔおよび整数列ｉｎｐｕｔに対して、ＪＯＩＮ処理である関数ｌｉｓｔＪｏｉｎを実施する（Ｌ０２）。
【０３１４】
図３０は、関数ｌｉｓｔＪｏｉｎの処理手順を示すフローチャートである。
【０３１５】
図３０を参照して、ｌｉｓｔＪｏｉｎは、入力された２つの整数配列ａとｂを順に調べ、ａ，ｂ両方に含まれる数値が登場する整数配列ａ中の位置のリストを返す関数である。
【０３１６】
より詳細には、２つの整数配列ａおよびｂが与えられると、まず、配列ａ中の位置を示す変数ａｐを０に初期化し、配列ｂ中の位置を示す変数ｂｐを０に初期化し、出力する整数列を示す変数ｏｕｔを空の状態で初期化する（Ｌ０２１）。
【０３１７】
次に、ａｐが配列ａの長さより小さく、かつ、ｂｐが配列ｂｐの長さより小さい場合には（Ｌ０２２でＹＥＳ）、配列ａのａｐ番目と配列ｂのｂｐ番目とを比較する（Ｌ０２３）。
【０３１８】
そして、両者が等しい場合には（Ｌ０２３でＹＥＳ）、同じ数値が発見されたとして、ｏｕｔにａｐを追加した後、ａｐをインクリメントし（Ｌ０２４）、ａｐと配列ａの長さとの比較およびｂｐと配列ｂｐの長さとの比較を再び行なう（Ｌ０２２）。
【０３１９】
一方、両者が等しくなく（Ｌ０２３でＮＯ）、配列ａのａｐ番目の値が配列ｂのｂｐ番目の値より大きい場合には（Ｌ０２５でＹＥＳ）、ｂｐをインクリメントし（Ｌ０２６）、ａｐと配列ａの長さとの比較およびｂｐと配列ｂｐの長さとの比較を再び行なう（Ｌ０２２）。
【０３２０】
また、両者が等しくなく（Ｌ０２３でＮＯ）、配列ａのａｐ番目の値が配列ｂのｂｐ番目の値より小さい場合には（Ｌ０２５でＮＯ）、ａｐをインクリメントし（Ｌ０２７）、ａｐと配列ａの長さとの比較およびｂｐと配列ｂｐの長さとの比較を再び行なう（Ｌ０２２）。
【０３２１】
また、ａｐが配列ａの長さ以上であるか、またはｂｐが配列ｂｐの長さ以上である場合には（Ｌ０２２でＮＯ）、配列ａまたはｂの最後まで到達したとして、ｏｕｔを出力して、処理を終了する（Ｌ０２８）。
【０３２２】
再び図２９を参照して、次に、トップダウン探索部２２は、関数ｌｉｓｔＪｏｉｎを実施した結果得られた整数列をｔｅｍｐとし、ｔｅｍｐの長さを調べる（Ｌ０３）。
【０３２３】
トップダウン探索部２２は、ｔｅｍｐの長さがｍｉｎ以上である場合には（Ｌ０３でＹＥＳ）、ｎｏｄｅが示すノードの子孫にあたる下位ノードも探索すべきであると判断する。
【０３２４】
トップダウン探索部２２は、ｎｏｄｅが示すノードの子孫にあたる下位ノードも探索すべきであると判断すると、子ノード記憶部２１を参照し、ｎｏｄｅの子ノードのリストを取得する（Ｌ０４）。
【０３２５】
次に、トップダウン探索部２２は、各子ノードｃｎｏｄｅと、現時点での検索対象データを示す整数列ｔｅｍｐと、ｍｉｎとを引数として、同じ関数ｌｉｓｔを呼び出す（Ｌ０５）。これにより、子孫ノードに対しても同様の探索が行われる。
【０３２６】
次に、トップダウン探索部２２は、ｎｏｄｅで指定されたノードのラベル、およびｔｅｍｐの長さを頻度として出力する（Ｌ０６）。
【０３２７】
一方、トップダウン探索部２２は、ｔｅｍｐの長さがｍｉｎ未満である場合には（Ｌ０３でＮＯ）、処理を終了する。
【０３２８】
なお、トップダウン探索部２２は、ｌｉｓｔ処理を開始する際、子ノード記憶部２１に記憶されているルートノードｒｏｏｔ、入力された識別子のリストｄｉｄｓ、および閾値ｍｉｎを引数として、ｌｉｓｔ（ｒｏｏｔ，ｄｉｄｓ，ｍｉｎ）を実行する。
【０３２９】
次に、本発明の第３の実施の形態に係るデータ検索装置のｌｉｓｔ処理を具体的に説明する。
【０３３０】
ここでは、図６に示す先祖ノード参照用データ、図７に示す転置リスト、および図２８に示す子ノード参照データが保持されている場合に、検索対象データの識別子の列として｛２４５１，３４４３｝が入力され、閾値ｍｉｎとして１が入力された場合を想定する。
【０３３１】
このとき、トップダウン探索部２２は、図２８に示す子ノード参照データにおけるｒｏｏｔの子ノードＡおよびＣに対して処理を開始する。
【０３３２】
ノードＡに対しては、図７の１行目に示す転置リストが読み込まれ、関数ｌｉｓｔＪｏｉｎによる処理が行われ、ｌｉｓｔＪｏｉｎ（ｄ（Ａ），｛２４５１，３４４３｝）の結果として｛４，５｝が得られる。｛４，５｝の長さは２であり、ｍｉｎより大きい。
【０３３３】
このため、トップダウン探索部２２は、さらに、ノードＡの子ノードＢに対して探索処理を行い、ｌｉｓｔＪｏｉｎ（ｄ（Ｂ），｛４，５｝）を実行する。
【０３３４】
この結果は空集合となるため、トップダウン探索部２２は、ノードＢ以下のノードに対しては探索処理を行なわず、ｒｏｏｔの別の子ノードＣに対して同様の処理を行なう。
【０３３５】
すなわち、トップダウン探索部２２は、ｌｉｓｔＪｏｉｎ（ｄ（Ｃ），｛２４５１，３４４３｝）を実行し、結果として｛１，２｝を得る。｛１，２｝の長さは２であり、ｍｉｎより大きい。
【０３３６】
このため、トップダウン探索部２２は、ノードＣの子ノードＯに対してｌｉｓｔＪｏｉｎ（ｄ（Ｏ），｛１，２｝）を実行し、｛１｝を得る。
【０３３７】
以上のような探索処理により、トップダウン探索部２２は、指定された検索対象データの集合において、ノードＡの頻度が２、ノードＯの頻度が１、ノードＣの頻度が２、という情報を出力する。
【０３３８】
以上のように、本発明の第３の実施の形態に係るデータ検索装置では、子ノード記憶部２１は、タクソノミにおける各ノードの下位ノードである子ノードの集合を示す子ノード情報を記憶する。トップダウン探索部２２は、指定ノードに対応する検索対象データの識別子のリストを受けて、タクソノミにおける各ノードの中から、リストが示す検索対象データの集合において所定値以上の頻度を持つノードを取り出す。そして、トップダウン探索部２２は、最上位ノードに対応する転置リストにおける識別子の位置を検出し、子ノード情報に基づいて、検出した位置と最上位ノードの１つ下位のノードに対応する転置リストにおける整数値とを比較し、一致した整数値に基づいてノードの頻度を算出する処理を少なくとも行なう。さらに、トップダウン探索部２２は、ノードの下位のノードについて、上位ノードに対応する転置リストにおいて識別子の位置に対応する整数値と、上位ノードの１つ下位のノードに対応する転置リストにおける整数値とを比較し、一致した整数値に基づいて１つ下位のノードの頻度を算出する処理を０回以上行なう。これにより、トップダウン探索部２２は、検索対象データにおける各ノードの頻度を算出する。
【０３３９】
このような構成により、指定された検索対象データ集合において高頻度なノードを効率良く探すことができる。
【０３４０】
検索対象データ集合において高頻度なノードを探す処理は、クエリ拡張およびファセット検索などに役立つ。
【０３４１】
たとえば、何らかの検索を行なうことにより得られた検索結果の集合に対してこのようなｌｉｓｔ処理を行なうことで、検索結果に関連するノードの集合が得られる。このため、これらのノードの集合を用いてクエリ拡張を行なうこと、およびこれらのノードの集合をファセットとして提示することが可能になる。
【０３４２】
通常、検索結果に関連するノードの集合を得るためには、タクソノミ中の各ノードに対応する転置リストを先祖番号転置リスト記憶部１６から読み込み、各転置リストについて先祖ノードを参照し、識別子の列に変換してからＪＯＩＮ処理を行っていく必要がある。このような方法では、無駄が多くなるため時間がかかる。これに対して、本発明の第３の実施の形態に係るデータ検索装置では、タクソノミ中のノードをトップダウンに調べながら、各ノードにおいて毎回識別子の列に変換することなくＪＯＩＮ処理を行なうことができるため、処理効率を向上させることができる。
【０３４３】
その他の構成および動作は第１の実施の形態に係る情報処理装置と同様であるため、ここでは詳細な説明を繰り返さない。
【０３４４】
上記実施の形態の一部または全部は以下の付記のようにも記載されうるが、本発明の範囲は、以下の付記に限定されるものではない。
【０３４５】
［付記１］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すためのデータ構造であって、
前記タクソノミにおいて、前記各ノードの上位ノードである先祖ノードを示す先祖参照用データと、
前記各ノードの転置リストを含み、前記各ノードのうち、前記先祖参照用データにおいて前記先祖ノードが登録されているノードの転置リストは、登録された前記先祖ノードに対応する転置リスト中の位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データとを備える、データ構造。
【０３４６】
［付記２］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するためのインデックス作成装置であって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するための先祖ノード決定部と、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するための先祖ノード探索部と、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するための先祖番号変換部とを備える、インデックス作成装置。
【０３４７】
［付記３］
前記先祖ノード決定部は、前記タクソノミにおける各ノードが所定のデータ集合内でどの程度の頻度を持つか、あるいは持ちそうかを示す頻度分布を受けて、前記タクソノミにおけるノードごとに、前記ノードの各先祖ノードに対応する頻度に基づいて、前記各先祖ノードを選んだ場合における対応の転置リストのデータ長を計算し、前記各先祖ノードのうち、前記データ長が小さい前記先祖ノードおよび前記タクソノミにおいてより上位の前記先祖ノードを優先して選択する、付記２に記載のインデックス作成装置。
【０３４８】
［付記４］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すためのデータ検索装置であって、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを記憶するための先祖番号転置リスト記憶部と、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するための識別子変換部とを備える、データ検索装置。
【０３４９】
［付記５］
前記データ検索装置は、さらに、
前記タクソノミにおける各ノードの、各検索対象データに対応する頻度を示す頻度リストを記憶するための頻度リスト記憶部を備え、
前記識別子変換部は、さらに、前記指定ノードに対応する１または複数の前記検索対象データの識別子のリストにおいて、前記頻度リストに基づいて前記識別子をソートする、付記４に記載のデータ検索装置。
【０３５０】
［付記６］
前記データ検索装置は、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードのいずれからも到達可能な検索対象データの集合を取り出し、
前記識別子変換部は、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードに対応する前記転置リストを前記先祖番号転置リスト記憶部から取得し、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を行なう際に、前記指定ノードの組で共通の前記上位ノードのうち、前記タクソノミにおいて最も下位の上位ノードである共通先祖ノードに対応する前記転置リストにおける整数値を取り出すとき、前記指定ノードの組において共通の前記整数値を取り出し、取り出した前記整数値を用いて、前記複数の指定ノードに対応する前記検索対象データの識別子のリストを作成する、付記４に記載のデータ検索装置。
【０３５１】
［付記７］
前記データ検索装置は、さらに、
前記タクソノミにおける各ノードの下位ノードである子ノードの集合を示す子ノード情報を記憶するための子ノード記憶部と、
前記指定ノードに対応する前記検索対象データの識別子のリストを受けて、前記タクソノミにおける各ノードの中から、前記リストが示す前記検索対象データの集合において所定値以上の頻度を持つノードを取り出すためのトップダウン探索部とを備え、
前記トップダウン探索部は、前記最上位ノードに対応する前記転置リストにおける前記識別子の位置を検出し、前記子ノード情報に基づいて、検出した前記位置と前記最上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記ノードの頻度を算出する処理を少なくとも行い、さらに、前記ノードの下位のノードについて、上位ノードに対応する前記転置リストにおいて前記識別子の位置に対応する整数値と、前記上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記１つ下位のノードの頻度を算出する処理を０回以上行なうことにより、前記検索対象データにおける前記各ノードの頻度を算出する、付記４に記載のデータ検索装置。
【０３５２】
［付記８］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成方法であって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するステップと、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを含む、インデックス作成方法。
【０３５３】
［付記９］
前記先祖参照用データを生成するステップにおいては、前記タクソノミにおける各ノードが所定のデータ集合内でどの程度の頻度を持つか、あるいは持ちそうかを示す頻度分布を受けて、前記タクソノミにおけるノードごとに、前記ノードの各先祖ノードに対応する頻度に基づいて、前記各先祖ノードを選んだ場合における対応の転置リストのデータ長を計算し、前記各先祖ノードのうち、前記データ長が小さい前記先祖ノードおよび前記タクソノミにおいてより上位の前記先祖ノードを優先して選択する、付記８に記載のインデックス作成方法。
【０３５４】
［付記１０］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索方法であって、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するステップとを含む、データ検索方法。
【０３５５】
［付記１１］
前記データ検索方法は、さらに、
前記タクソノミにおける各ノードの、各検索対象データに対応する頻度を示す頻度リストを取得するステップと、
前記指定ノードに対応する１または複数の前記検索対象データの識別子のリストにおいて、前記頻度リストに基づいて前記識別子をソートするステップとを含む、付記１０に記載のデータ検索方法。
【０３５６】
［付記１２］
前記データ検索方法では、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードのいずれからも到達可能な検索対象データの集合を取り出し、
前記識別子のリストを作成するステップにおいては、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードに対応する前記転置リストを取得し、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を行なう際に、前記指定ノードの組で共通の前記上位ノードのうち、前記タクソノミにおいて最も下位の上位ノードである共通先祖ノードに対応する前記転置リストにおける整数値を取り出すとき、前記指定ノードの組において共通の前記整数値を取り出し、取り出した前記整数値を用いて、前記複数の指定ノードに対応する前記検索対象データの識別子のリストを作成する、付記１０に記載のデータ検索方法。
【０３５７】
［付記１３］
前記データ検索方法は、さらに、
前記タクソノミにおける各ノードの下位ノードである子ノードの集合を示す子ノード情報を取得するステップと、
前記指定ノードに対応する前記検索対象データの識別子のリストを受けて、前記タクソノミにおける各ノードの中から、前記リストが示す前記検索対象データの集合において所定値以上の頻度を持つノードを取り出すステップとを含み、
前記ノードを取り出すステップにおいては、前記最上位ノードに対応する前記転置リストにおける前記識別子の位置を検出し、前記子ノード情報に基づいて、検出した前記位置と前記最上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記ノードの頻度を算出する処理を少なくとも行い、さらに、前記ノードの下位のノードについて、上位ノードに対応する前記転置リストにおいて前記識別子の位置に対応する整数値と、前記上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記１つ下位のノードの頻度を算出する処理を０回以上行なうことにより、前記検索対象データにおける前記各ノードの頻度を算出する、付記１０に記載のデータ検索方法。
【０３５８】
［付記１４］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成プログラムを記録した、コンピュータ読み取り可能な記録媒体であって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記インデックス作成プログラムは、コンピュータに、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するステップと、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを実行させるためのプログラムである、コンピュータ読み取り可能な記録媒体。
【０３５９】
［付記１５］
前記先祖参照用データを生成するステップにおいては、前記タクソノミにおける各ノードが所定のデータ集合内でどの程度の頻度を持つか、あるいは持ちそうかを示す頻度分布を受けて、前記タクソノミにおけるノードごとに、前記ノードの各先祖ノードに対応する頻度に基づいて、前記各先祖ノードを選んだ場合における対応の転置リストのデータ長を計算し、前記各先祖ノードのうち、前記データ長が小さい前記先祖ノードおよび前記タクソノミにおいてより上位の前記先祖ノードを優先して選択する、付記１４に記載のコンピュータ読み取り可能な記録媒体。
【０３６０】
［付記１６］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索プログラムを記録した、コンピュータ読み取り可能な記録媒体であって、前記データ検索プログラムは、コンピュータに、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するステップとを実行させるためのプログラムである、コンピュータ読み取り可能な記録媒体。
【０３６１】
［付記１７］
前記データ検索プログラムは、さらに、コンピュータに、
前記タクソノミにおける各ノードの、各検索対象データに対応する頻度を示す頻度リストを取得するステップと、
前記指定ノードに対応する１または複数の前記検索対象データの識別子のリストにおいて、前記頻度リストに基づいて前記識別子をソートするステップとを実行させるためのプログラムである、付記１６に記載のコンピュータ読み取り可能な記録媒体。
【０３６２】
［付記１８］
前記データ検索プログラムでは、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードのいずれからも到達可能な検索対象データの集合を取り出し、
前記識別子のリストを作成するステップにおいては、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードに対応する前記転置リストを取得し、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を行なう際に、前記指定ノードの組で共通の前記上位ノードのうち、前記タクソノミにおいて最も下位の上位ノードである共通先祖ノードに対応する前記転置リストにおける整数値を取り出すとき、前記指定ノードの組において共通の前記整数値を取り出し、取り出した前記整数値を用いて、前記複数の指定ノードに対応する前記検索対象データの識別子のリストを作成する、付記１６に記載のコンピュータ読み取り可能な記録媒体。
【０３６３】
［付記１９］
前記データ検索プログラムは、さらに、コンピュータに、
前記タクソノミにおける各ノードの下位ノードである子ノードの集合を示す子ノード情報を取得するステップと、
前記指定ノードに対応する前記検索対象データの識別子のリストを受けて、前記タクソノミにおける各ノードの中から、前記リストが示す前記検索対象データの集合において所定値以上の頻度を持つノードを取り出すステップとを実行させるためのプログラムであり、
前記ノードを取り出すステップにおいては、前記最上位ノードに対応する前記転置リストにおける前記識別子の位置を検出し、前記子ノード情報に基づいて、検出した前記位置と前記最上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記ノードの頻度を算出する処理を少なくとも行い、さらに、前記ノードの下位のノードについて、上位ノードに対応する前記転置リストにおいて前記識別子の位置に対応する整数値と、前記上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記１つ下位のノードの頻度を算出する処理を０回以上行なうことにより、前記検索対象データにおける前記各ノードの頻度を算出する、付記１６に記載のコンピュータ読み取り可能な記録媒体。
【０３６４】
上記実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は、上記説明ではなく請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【０３６５】
この出願は、２０１０年１０月１５日に出願された日本出願特願２０１０−２３２８９６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０３６６】
本発明によれば、大規模なタクソノミおよびデータ集合を管理する際に、高速にデータ集合を検索可能な検索エンジンを提供することが可能である。したがって、本発明は、産業上の利用可能性を有している。
【符号の説明】
【０３６７】
１１  先祖ノード決定部
１２  先祖ノード記憶部
１３  先祖ノード探索部
１４  識別子付与部
１５  先祖番号変換部
１６  先祖番号転置リスト記憶部
１７  先祖頻度変換部
１８  識別子変換部
１９  頻度リスト記憶部
２１  子ノード記憶部
２２  トップダウン探索部
２８  複数識別子変換部
１０１  ＣＰＵ
１０２  メインメモリ
１０３  ハードディスク
１０４  入力インターフェイス
１０５  表示コントローラ
１０６  データリーダ／ライタ
１０７  通信インターフェイス
１０８  キーボード
１０９  マウス
１１０  ディスプレイ
１１１  記録媒体
１２１  バス
２０１，２０２，２０３  情報処理装置
【図１】
2012049883.tif 000003
【図２】
2012049883.tif 000004
【図３】
2012049883.tif 000005
【図４】
2012049883.tif 000006
【図５】
2012049883.tif 000007
【図６】
2012049883.tif 000008
【図７】
2012049883.tif 000009
【図８】
2012049883.tif 000010
【図９】
2012049883.tif 000011
【図１０】
2012049883.tif 000012
【図１１】
2012049883.tif 000013
【図１２】
2012049883.tif 000014
【図１３】
2012049883.tif 000015
【図１４】
2012049883.tif 000016
【図１５】
2012049883.tif 000017
【図１６】
2012049883.tif 000018
【図１７】
2012049883.tif 000019
【図１８】
2012049883.tif 000020
【図１９】
2012049883.tif 000021
【図２０】
2012049883.tif 000022
【図２１】
2012049883.tif 000023
【図２２】
2012049883.tif 000024
【図２３】
2012049883.tif 000025
【図２４】
2012049883.tif 000026
【図２５】
2012049883.tif 000027
【図２６】
2012049883.tif 000028
【図２７】
2012049883.tif 000029
【図２８】
2012049883.tif 000030
【図２９】
2012049883.tif 000031
【図３０】
2012049883.tif 000032
【図３１】
2012049883.tif 000033
【図３２】
2012049883.tif 000034
【手続補正書】
【提出日】平成25年4月2日(2013.4.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すためのデータ構造であって、
前記タクソノミにおいて、前記各ノードの上位ノードである先祖ノードを示す先祖参照用データと、
前記各ノードの転置リストを含み、前記各ノードのうち、前記先祖参照用データにおいて前記先祖ノードが登録されているノードの転置リストは、登録された前記先祖ノードに対応する転置リスト中の位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データとを備える、データ構造。
【請求項２】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するためのインデックス作成装置であって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するための先祖ノード決定部と、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するための先祖ノード探索部と、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するための先祖番号変換部とを備える、インデックス作成装置。
【請求項３】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すためのデータ検索装置であって、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを記憶するための先祖番号転置リスト記憶部と、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するための識別子変換部とを備える、データ検索装置。
【請求項４】
前記データ検索装置は、さらに、
前記タクソノミにおける各ノードの、各検索対象データに対応する頻度を示す頻度リストを記憶するための頻度リスト記憶部を備え、
前記識別子変換部は、さらに、前記指定ノードに対応する１または複数の前記検索対象データの識別子のリストにおいて、前記頻度リストに基づいて前記識別子をソートする、
請求項３に記載のデータ検索装置。
【請求項５】
前記データ検索装置は、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードのいずれからも到達可能な検索対象データの集合を取り出し、
前記識別子変換部は、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードに対応する前記転置リストを前記先祖番号転置リスト記憶部から取得し、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を行なう際に、前記指定ノードの組で共通の前記上位ノードのうち、前記タクソノミにおいて最も下位の上位ノードである共通先祖ノードに対応する前記転置リストにおける整数値を取り出すとき、前記指定ノードの組において共通の前記整数値を取り出し、取り出した前記整数値を用いて、前記複数の指定ノードに対応する前記検索対象データの識別子のリストを作成する、請求項３に記載のデータ検索装置。
【請求項６】
前記データ検索装置は、さらに、
前記タクソノミにおける各ノードの下位ノードである子ノードの集合を示す子ノード情報を記憶するための子ノード記憶部と、
前記指定ノードに対応する前記検索対象データの識別子のリストを受けて、前記タクソノミにおける各ノードの中から、前記リストが示す前記検索対象データの集合において所定値以上の頻度を持つノードを取り出すためのトップダウン探索部とを備え、
前記トップダウン探索部は、前記最上位ノードに対応する前記転置リストにおける前記識別子の位置を検出し、前記子ノード情報に基づいて、検出した前記位置と前記最上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記ノードの頻度を算出する処理を少なくとも行い、さらに、前記ノードの下位のノードについて、上位ノードに対応する前記転置リストにおいて前記識別子の位置に対応する整数値と、前記上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記１つ下位のノードの頻度を算出する処理を０回以上行なうことにより、前記検索対象データにおける前記各ノードの頻度を算出する、請求項３に記載のデータ検索装置。
【請求項７】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成方法であって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するステップと、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを含む、インデックス作成方法。
【請求項８】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索方法であって、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するステップとを含む、データ検索方法。
【請求項９】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成プログラムであって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記インデックス作成プログラムは、コンピュータに、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するステップと、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを実行させる、インデックス作成プログラム。
【請求項１０】
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索プログラムであって、コンピュータに、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するステップとを実行させるための、データ検索プログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
本発明は、データ構造、インデックス作成装置、データ検索装置、インデックス作成方法、データ検索方法、インデックス作成プログラムおよびデータ検索プログラムに関し、特に、転置インデックスを用いるデータ構造、インデックス作成装置、データ検索装置、インデックス作成方法、データ検索方法、インデックス作成プログラムおよびデータ検索プログラムに関する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１６
【補正方法】変更
【補正の内容】
【００１６】
この発明は、上述の課題を解決するためになされたもので、その目的は、検索処理のためのデータ容量の低減および検索処理の高速化を図ることが可能なデータ構造、インデックス作成装置、データ検索装置、インデックス作成方法、データ検索方法、インデックス作成プログラムおよびデータ検索プログラムを提供することである。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００３８
【補正方法】変更
【補正の内容】
【００３８】
上記課題を解決するために、この発明のある局面に係わるインデックス作成プログラムは、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成プログラムであって、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、上記インデックス作成プログラムは、コンピュータに、上記タクソノミにおけるノードごとに、上記ノードの上位ノードである先祖ノードを１つ選択し、選択した上記先祖ノードを示す先祖参照用データを生成するステップと、上記先祖参照用データに基づいて、上記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、上記検索対象データの識別子を受けて、上記先祖ノードリストにおける各上記ノードのうち最上位のノードについては、上記識別子を対応の転置リストの要素として追加し、上記最上位ノード以外のノードについては、対応の転置リストの要素として、上記識別子の代わりに、上記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを実行させるためのプログラムである。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００３９
【補正方法】変更
【補正の内容】
【００３９】
またこの発明の別の局面に係わるデータ検索プログラムは、検索対象データに関するタグを有するタクソノミにおいて、上記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索プログラムであって、コンピュータに、上記タクソノミにおける各ノードの転置リストを含み、上記各ノードのうち、最上位のノードの転置リストは、上記検索対象データの識別子を示す整数値のリストであり、上記最上位ノード以外のノードの転置リストは、上記識別子の代わりに、上記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、上記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、上記ブロックにおける整数値と上記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、上記指定ノードを示す情報を受けて、上記転置リスト用データに基づき、上記指定ノードに対応する上記転置リストの整数値が示す上記位置に対応する、上記指定ノードの上位ノードに対応する上記転置リストの整数値を取り出す処理を、上記最上位ノードに対応する上記転置リストの上記識別子を取り出すまで繰り返すことにより、上記指定ノードに対応する上記検索対象データの識別子のリストを作成するステップとを実行させるためのプログラムである。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００９０
【補正方法】変更
【補正の内容】
【００９０】
図６を参照して、先祖ノード記憶部１２は、タクソノミ中の各ノードの先祖ノードを示す情報を保持する。図６は、図３２に示すタクソノミに対応する先祖参照用データの例を示している。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００９２
【補正方法】変更
【補正の内容】
【００９２】
また、先祖参照用データでは、実際にはタクソノミに先祖ノードが存在する場合においても、「φ」を示すことがある。たとえば、図３２に示すタクソノミでは、ノードＣに対する親ノードとしてノードＡが存在するが、図６に示す先祖参照用データでは、先祖ノードが無い「φ」が示されている。
【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】０１３８
【補正方法】変更
【補正の内容】
【０１３８】
たとえば、図３２に示すタクソノミのタグＬが入力として与えられ、図６に示す情報が先祖ノード記憶部１２に保持されている場合、先祖ノード探索部１３は、｛Ｌ，Ｂ，Ａ｝という３つのノードを先祖番号変換部１５に返す。
【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】０１９３
【補正方法】変更
【補正の内容】
【０１９３】
まず、ここでは、タクソノミ登録処理により、図３２に示すタクソノミが登録され、図６に示す先祖ノードが登録されたことを想定する。
【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】０２３７
【補正方法】変更
【補正の内容】
【０２３７】
図２２を参照して、情報処理装置２０２は、複数識別子変換部２８へタクソノミ中の複数のノードを示す情報が入力されると、データ検索処理を開始する。
【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】０２５２
【補正方法】変更
【補正の内容】
【０２５２】
図２５を参照して、図３２に示すタクソノミに対して、入力ノードとして、Ｌ，Ｎ，Ｏという３つのノードが指定された状況を想定する。
【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】０３１７
【補正方法】変更
【補正の内容】
【０３１７】
次に、ａｐが配列ａの長さより小さく、かつ、ｂｐが配列ｂの長さより小さい場合には（Ｌ０２２でＹＥＳ）、配列ａのａｐ番目と配列ｂのｂｐ番目とを比較する（Ｌ０２３）。
【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】０３１８
【補正方法】変更
【補正の内容】
【０３１８】
そして、両者が等しい場合には（Ｌ０２３でＹＥＳ）、同じ数値が発見されたとして、ｏｕｔにａｐを追加した後、ａｐをインクリメントし（Ｌ０２４）、ａｐと配列ａの長さとの比較およびｂｐと配列ｂの長さとの比較を再び行なう（Ｌ０２２）。
【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】０３１９
【補正方法】変更
【補正の内容】
【０３１９】
一方、両者が等しくなく（Ｌ０２３でＮＯ）、配列ａのａｐ番目の値が配列ｂのｂｐ番目の値より大きい場合には（Ｌ０２５でＹＥＳ）、ｂｐをインクリメントし（Ｌ０２６）、ａｐと配列ａの長さとの比較およびｂｐと配列ｂの長さとの比較を再び行なう（Ｌ０２２）。
【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】０３２０
【補正方法】変更
【補正の内容】
【０３２０】
また、両者が等しくなく（Ｌ０２３でＮＯ）、配列ａのａｐ番目の値が配列ｂのｂｐ番目の値より小さい場合には（Ｌ０２５でＮＯ）、ａｐをインクリメントし（Ｌ０２７）、ａｐと配列ａの長さとの比較およびｂｐと配列ｂの長さとの比較を再び行なう（Ｌ０２２）。
【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】０３２１
【補正方法】変更
【補正の内容】
【０３２１】
また、ａｐが配列ａの長さ以上であるか、またはｂｐが配列ｂの長さ以上である場合には（Ｌ０２２でＮＯ）、配列ａまたはｂの最後まで到達したとして、ｏｕｔを出力して、処理を終了する（Ｌ０２８）。
【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】０３５８
【補正方法】変更
【補正の内容】
【０３５８】
［付記１４］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける各ノードから到達可能な検索対象データの集合を取り出すために用いる転置リストを作成するインデックス作成プログラムであって、
前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換されており、
前記インデックス作成プログラムは、コンピュータに、
前記タクソノミにおけるノードごとに、前記ノードの上位ノードである先祖ノードを１つ選択し、選択した前記先祖ノードを示す先祖参照用データを生成するステップと、
前記先祖参照用データに基づいて、前記タクソノミにおけるタグの１または複数の先祖ノードを示す先祖ノードリストを生成するステップと、
前記検索対象データの識別子を受けて、前記先祖ノードリストにおける各前記ノードのうち最上位のノードについては、前記識別子を対応の転置リストの要素として追加し、前記最上位ノード以外のノードについては、対応の転置リストの要素として、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値を追加するステップとを実行させる、インデックス作成プログラム。
【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】０３５９
【補正方法】変更
【補正の内容】
【０３５９】
［付記１５］
前記先祖参照用データを生成するステップにおいては、前記タクソノミにおける各ノードが所定のデータ集合内でどの程度の頻度を持つか、あるいは持ちそうかを示す頻度分布を受けて、前記タクソノミにおけるノードごとに、前記ノードの各先祖ノードに対応する頻度に基づいて、前記各先祖ノードを選んだ場合における対応の転置リストのデータ長を計算し、前記各先祖ノードのうち、前記データ長が小さい前記先祖ノードおよび前記タクソノミにおいてより上位の前記先祖ノードを優先して選択する、付記１４に記載のインデックス作成プログラム。
【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】０３６０
【補正方法】変更
【補正の内容】
【０３６０】
［付記１６］
検索対象データに関するタグを有するタクソノミにおいて、前記タクソノミにおける指定された指定ノードから到達可能な検索対象データの集合を取り出すデータ検索プログラムであって、コンピュータに、
前記タクソノミにおける各ノードの転置リストを含み、前記各ノードのうち、最上位のノードの転置リストは、前記検索対象データの識別子を示す整数値のリストであり、前記最上位ノード以外のノードの転置リストは、前記識別子の代わりに、前記ノードの１つ上のノードに対応する転置リストにおける位置を示す整数値のリストであり、さらに、前記各ノードの転置リストにおける整数値のリストが複数のブロックに分割され、前記ブロックにおける整数値と前記整数値の直前の整数値との差分値が可変長整数コードのビット列に変換された転置リスト用データを取得するステップと、
前記指定ノードを示す情報を受けて、前記転置リスト用データに基づき、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を、前記最上位ノードに対応する前記転置リストの前記識別子を取り出すまで繰り返すことにより、前記指定ノードに対応する前記検索対象データの識別子のリストを作成するステップとを実行させるための、データ検索プログラム。
【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】０３６１
【補正方法】変更
【補正の内容】
【０３６１】
［付記１７］
前記データ検索プログラムは、さらに、コンピュータに、
前記タクソノミにおける各ノードの、各検索対象データに対応する頻度を示す頻度リストを取得するステップと、
前記指定ノードに対応する１または複数の前記検索対象データの識別子のリストにおいて、前記頻度リストに基づいて前記識別子をソートするステップとを実行させる、付記１６に記載のデータ検索プログラム。
【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】０３６２
【補正方法】変更
【補正の内容】
【０３６２】
［付記１８］
前記データ検索プログラムでは、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードのいずれからも到達可能な検索対象データの集合を取り出し、
前記識別子のリストを作成するステップにおいては、前記タクソノミにおける複数のノードが指定された場合には、各前記指定ノードに対応する前記転置リストを取得し、前記指定ノードに対応する前記転置リストの整数値が示す前記位置に対応する、前記指定ノードの上位ノードに対応する前記転置リストの整数値を取り出す処理を行なう際に、前記指定ノードの組で共通の前記上位ノードのうち、前記タクソノミにおいて最も下位の上位ノードである共通先祖ノードに対応する前記転置リストにおける整数値を取り出すとき、前記指定ノードの組において共通の前記整数値を取り出し、取り出した前記整数値を用いて、前記複数の指定ノードに対応する前記検索対象データの識別子のリストを作成する、付記１６に記載のデータ検索プログラム。
【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】０３６３
【補正方法】変更
【補正の内容】
【０３６３】
［付記１９］
前記データ検索プログラムは、さらに、コンピュータに、
前記タクソノミにおける各ノードの下位ノードである子ノードの集合を示す子ノード情報を取得するステップと、
前記指定ノードに対応する前記検索対象データの識別子のリストを受けて、前記タクソノミにおける各ノードの中から、前記リストが示す前記検索対象データの集合において所定値以上の頻度を持つノードを取り出すステップとを実行させるためのプログラムであり、
前記ノードを取り出すステップにおいては、前記最上位ノードに対応する前記転置リストにおける前記識別子の位置を検出し、前記子ノード情報に基づいて、検出した前記位置と前記最上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記ノードの頻度を算出する処理を少なくとも行い、さらに、前記ノードの下位のノードについて、上位ノードに対応する前記転置リストにおいて前記識別子の位置に対応する整数値と、前記上位ノードの１つ下位のノードに対応する前記転置リストにおける整数値とを比較し、一致した整数値に基づいて前記１つ下位のノードの頻度を算出する処理を０回以上行なうことにより、前記検索対象データにおける前記各ノードの頻度を算出する、付記１６に記載のデータ検索プログラム。
【国際調査報告】
2012049883.tif 000035
2012049883.tif 000036
2012049883.tif 000037
2012049883.tif 000038