(57)【特許請求の範囲】
【請求項１】
プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、複数の検索キーワードを入力し、入力された各検索キーワードの重要度を用いて、複数の文書から所望の文書を検索する文書検索装置であって、
前記プロセッサは、
前記複数の文書の各々に含まれる文字列に対する接尾辞配列を構築し、
構築された前記接尾辞配列の各接尾辞と、当該接尾辞と同じ文書に由来し、且つ、辞書順序で当該接尾辞の一つ前又は後の接尾辞と、を先頭の文字から順番に比較した場合に一致する文字の数を、当該接尾辞に対応する要素とする整数配列を構築して前記メモリに格納し、
前記メモリに格納された前記整数配列において、入力された前記複数の検索キーワードの各々で始まる接尾辞に対応する要素のうち、当該検索キーワードの文字数より小さい値の要素の数を、当該検索キーワードを含む文書の数として算出し、算出された前記文書の数を用いて、当該検索キーワードの重要度を計算することを特徴とする文書検索装置。
【請求項２】
前記プロセッサは、
前記一致する文字の数が所定パラメータ値以上の値である場合、前記文字の数に代えて前記所定パラメータ値を、当該接尾辞に対応する要素とする整数配列を構築して前記メモリに格納し、
入力された前記複数の検索キーワードの各々について、
当該検索キーワードの長さが前記所定パラメータ値より小さい場合には、前記メモリに格納された前記整数配列において、当該検索キーワードで始まる接尾辞に対応する要素のうち、当該検索キーワードの文字数より小さい値の要素の数を、当該検索キーワードを含む文書の数として算出し、算出された前記文書の数を用いて、当該検索キーワードの重要度を計算し、
当該検索キーワードの長さが前記所定パラメータ値より大きい場合には、当該検索キーワードを用いた検索処理を前記複数の文書に対して実行することによって、当該検索キーワードを含む文書の数を算出し、算出された前記文書の数を用いて、当該検索キーワードの重要度を計算することを特徴とする請求項１に記載の文書検索装置。
【請求項３】
前記整数配列は、前記接尾辞配列における各接尾辞に対応する文字の数を並べたウェーブレット木のデータ構造であることを特徴とする請求項１に記載の文書検索装置。
【請求項４】
さらに、
前記複数の文書の少なくとも一つの文書を、さらに複数の文書に分割したものを元の文書に代わる新たな文書とみなして検索する文書検索装置において、
前記整数配列の要素数と同じ数の０を含む整数配列であって、入力された前記複数の検索キーワードの各々について、前記接尾辞配列において当該検索キーワードで始まる接尾辞の範囲がc1番目からc2番目の要素であり、且つ、前記接尾辞配列においてc1番目の０とc2番目の０の要素の間にあるk+1以上の要素の値の数をxとする場合、当該検索キーワードを含む文書の数がc2-c1+1-xと一致するように別の整数配列を構築して前記メモリに格納し、
入力された前記複数の検索キーワードの各々について、それらの検索キーワードが出現するk回分割後の文書の数を算出する手段を実行し、その手段は、接尾辞配列のc1番目からc2番目の要素に対応する検索キーワードに対しては、前記メモリに格納された前記別の整数配列においてc1番目の０からc2番目０の間にあるk+1以上の値の数xを算出し、c2-c1+1-xを算出して前記文書の数を求めることを特徴とする手段であって、
前記手段により算出された前記文書の数を用いて、当該検索キーワードの重要度を計算することを特徴とする請求項１に記載の文書検索装置。
【請求項５】
プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備えた文書検索装置において、複数の検索キーワードを入力し、入力された各検索キーワードの重要度を用いて、複数の文書から所望の文書を検索する文書検索方法であって、
前記プロセッサが、
前記複数の文書の各々に含まれる文字列に対する接尾辞配列を構築する手順と、
構築された前記接尾辞配列の各接尾辞と、当該接尾辞と同じ文書に由来し、且つ、辞書順序で当該接尾辞の一つ前又は後の接尾辞と、を先頭の文字から順番に比較した場合に一致する文字の数を、当該接尾辞に対応する要素とする整数配列を構築して前記メモリに格納する手順と、
前記メモリに格納された前記整数配列において、入力された前記複数の検索キーワードの各々で始まる接尾辞に対応する要素のうち、当該検索キーワードの文字数より小さい値の要素の数を、当該検索キーワードを含む文書の数として算出し、算出された前記文書の数を用いて、当該検索キーワードの重要度を計算する手順と、
を含むことを特徴とする文書検索方法。
【請求項６】
プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、複数の検索キーワードを入力し、入力された各検索キーワードの重要度を用いて、複数の文書から所望の文書を検索する文書検索装置において用いられる文書検索プログラムであって、
前記複数の文書の各々に含まれる文字列に対する接尾辞配列を構築する手順と、
構築された前記接尾辞配列の各接尾辞について、当該接尾辞と、当該接尾辞と同じ文書に由来し、且つ、辞書順序で当該接尾辞の一つ前又は後の接尾辞と、を先頭の文字から順番に比較した場合に一致する文字の数を、当該接尾辞に対応する要素とする整数配列を構築して前記メモリに格納する手順と、
前記メモリに格納された前記整数配列において、入力された前記複数の検索キーワードの各々で始まる接尾辞に対応する要素のうち、当該検索キーワードの文字数より小さい値の要素の数を、当該検索キーワードを含む文書の数として算出し、算出された前記文書の数を用いて、当該検索キーワードの重要度を計算する手順と、
を前記プロセッサに実行させることを特徴とする文書検索プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書検索装置に関し、特に、接尾辞配列を用いて所望の文書を検索する技術に関する。
【背景技術】
【０００２】
現代社会では、膨大な量の電子文書がオフィス等において日々作成されている。インターネットの拡大も、膨大な量の電子文書が作成される要因となっている。これらの電子文書を活用するためには、膨大な量の電子文書から、必要な情報が記された電子文書を短時間で検索し出力する文書検索技術が必須である。
【０００３】
図１は、従来の文書検索技術の一例を示す概略図である。図１を用いて、検索対象の文書集合データ１０１から、指定された単語（ここでは京都）を含む文書１０２を探索する従来の手法を説明する。
【０００４】
まず文書集合データ１０１に含まれる全文書１０２の全ての接尾辞を抽出する。接尾辞とは、所定の文字列からなる文書に対し、先頭の文字を0個以上削って得られる文字列である。例えば、「ABC$」という文書に対する接尾辞は、「ABC$」、「BC$」、「C$」、「$」である。なお、「$」は文字列の末尾を示す仮想的な文字であって、コンピュータが文字列の最後の位置を処理する場合に用いる。
【０００５】
次に、抽出された各接尾辞を辞書順にソートすることによって、ソート結果１０４を生成する。辞書順とは、2つの接尾辞を先頭の文字から順に比較したとき、先に右端に達するか文字コードが小さい文字が現れた接尾辞を小さいとみなす順序である。図１に示す例では、説明の便宜上、記号文字＜ひらがな＜漢字の順に大小関係を定義し、ひらがな、漢字同士の大小は50音順としている。また、「$」は、辞書順で他のすべての文字より小さいものとする一方、異なる文書に由来する「$」同士は互いに異なる文字であって、文書番号順の大小関係があるとみなす。
【０００６】
その後、生成されたソート結果１０４に基づいて、接尾辞配列データ１０５と呼ばれるデータ構造の配列を構築する。接尾辞配列データ１０５とは、ソート結果１０４の先頭の接尾辞から順に、各接尾辞の属する文書及び当該文書の何番目の文字から接尾辞が始まっているかを記録した配列である。なお、接尾辞配列データ１０５内での位置と、もとの文書内での位置との混同を防ぐために、「接尾辞配列データ１０５でi行目」の接尾辞を、context番号１０８を用いて「context i」で表記する。
【０００７】
ここで、所定のキーワードwが文書集合データ１０１に出現する場合、キーワードwで始まる接尾辞が存在する。また、キーワードwが文書集合データ１０１中に出現する回数と、キーワードwで始まる接尾辞の個数とは等しい。さらに、接尾辞配列データ１０５は辞書順にソートされているので、同一のキーワードwで始まる各接尾辞は接尾辞配列データ１０５上で連続するcontext番号１０８に集まる。
【０００８】
図１の例では、キーワード「京都」は文書集合データ１０１中に計4回出現する。そのため、キーワード「京都」で始まる接尾辞の数は4個であり（ソート結果１０４参照）、これら4個の接尾辞は、context番号１０８が4〜7の位置１０６に連続して現れている。
【０００９】
このような接尾辞配列データ１０５の性質を利用することによって、任意のキーワードwが出現する文書の番号及び位置を計算すること、すなわち検索することが可能となる。
【００１０】
図１の例では、キーワード「京都」で始まる接尾辞のcontext番号１０８は4〜7である。すなわち、文書0の0文字目と3文字目、文書1の1文字目と4文字目に「京都」が出現していることが分かる。なお、キーワードに対応するcontext番号１０８は、2分探索等の公知の方法によって求められる（非特許文献１参照）。
【００１１】
膨大な量の電子文書から所望の電子文書を検索する場合、複数のキーワードを与え、与えられた複数のキーワードを含む電子文書を探すことが多い。このとき、個々のキーワードが文書を特徴付ける力は必ずしも同一ではない。例えば、多くの文書に満遍なく出現するキーワードよりも、一部の文書に集中して出現するキーワードの方が文書を特徴付ける力が強い。そのため、一部の文書に集中して出現するキーワード（重要キーワード）を含む文書を、優先的に検索結果として出力することが望ましい。
【００１２】
例えば、キーワードが「自転車」と「超伝導」である場合を考える。ここで、「自動車」が1万文書に出現する一方、「超伝導」は10文書にのみ出現するとする。そして、検索結果として、「自転車」のみを10個含む文書と、「超伝導」のみを10個含む文書が得られたと仮定する。
【００１３】
この場合、それぞれの文書において、キーワードの出現回数はいずれも10回で同じである。しかしながら、キーワード「自転車」は多くの文書に出現するキーワードであるのに対し、キーワード「超伝導」は少数の文書にのみ出現するキーワードである。そのため、キーワード「超伝導」の方が文書を特徴付ける力が強いと考えられる。このようなキーワード「超伝導」を含む文書を優先的に検索結果として出力することによって、ユーザにとって重要と思われる文書を優先的に提示できる。
【００１４】
文書を特徴付ける力が強いキーワードを含む文書を優先的に検索結果として出力するための手法の一つとして、TF(Term Frequency)−IDF(Inverse Document Frequency)と呼ばれるキーワードの重み付け手法が知られている（北研二他著、情報検索アルゴリズム、共立出版）。
【００１５】
TFはキーワードの出現回数である。一方、IDFはキーワードが出現する文書数DF(Document Frequency)の逆数である。TFとIDFの積算値をキーワードの重要度と定義することによって、ユーザにとって重要な文書を優先的に選択することが可能となる。なお、TFとIDFの積算値をキーワードの重要度と定義する他、TFとIDFの積算値の対数やその他の計算式によって求められる値をキーワードの重要度としてもよい。対数をキーワードの重要度とすることによって、TFとIDFの積算値が大きい値である場合の微小な差に意味が薄いことを反映させることができる（北研二他著、情報検索アルゴリズム、共立出版）。
【００１６】
TF-IDFを計算するためには、キーワードの出現回数TF値と、キーワードを含む文書数DF値を求める必要がある。TF値は、文書番号をウェーブレット木（Makinen, V. and Navarro, G., Rank and select revisited and extended, Theoretical Computer Science 387:332-347, 2007）に格納することによって、容易に計算できる。
【００１７】
一方、DF値は、全てのcontextを検討し、何種類の文書番号が出現するかを数える必要があるので、計算に長時間を要していた。特に、出現頻度が高いキーワードのDF値を求める計算には長時間を要していた。このようなDF値の計算を高速化することを目的とする各種技術が知られている（非特許文献１、２参照）。
【先行技術文献】
【特許文献】
【００１８】
【非特許文献１】Gusfield, D., Algorithms on strings, trees and sequences, Cambridge university press, 1997.
【非特許文献２】Sadakane, K., Succinct data structures for flexible text retrieval systems, Journal of discrete algorithms 5(1):12-22, 2007.
【発明の概要】
【発明が解決しようとする課題】
【００１９】
しかしながら、非特許文献１、２に記載された方法では、DF値の計算の過程で接尾辞木を構築する必要があり、大規模な検索システムへの適用が困難という問題があった。
【００２０】
すなわち、非特許文献１、２に記載された接尾辞木を構築する方法では、接尾辞配列の大きさLの13〜15倍の大きさ13L〜15Lのメモリを必要とする（Puglisi et al., A taxonomy of suffix array construction algorithms, ACM computing surveys, 39(2):Article 4, 2007）。そのため、文書集合データ１０１より遥かに大きな一時データが必要となり、大規模な検索システムへの適用は困難であった。
【００２１】
本発明は、上述した課題を考慮したものであって、与えられたキーワードを含む電子文書の数（DF値）を、少ないメモリ使用量で高速に計算できる文書検索装置を提供することを目的とする。
【課題を解決するための手段】
【００２２】
上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。
【００２３】
本願は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、複数の検索キーワードを入力し、入力された各検索キーワードの重要度を用いて、複数の文書から所望の文書を検索する文書検索装置であって、前記プロセッサは、前記複数の文書の各々に含まれる文字列に対する接尾辞配列を構築し、構築された前記接尾辞配列の各接尾辞と、当該接尾辞と同じ文書に由来し、且つ、辞書順序で当該接尾辞の一つ前又は後の接尾辞と、を先頭の文字から順番に比較した場合に一致する文字の数を、当該接尾辞に対応する要素とする整数配列を構築して前記メモリに格納し、前記メモリに格納された前記整数配列において、入力された前記複数の検索キーワードの各々で始まる接尾辞に対応する要素のうち、当該検索キーワードの文字数より小さい値の要素の数を、当該検索キーワードを含む文書の数として算出し、算出された前記文書の数を用いて、当該検索キーワードの重要度を計算することを特徴とする。
【発明の効果】
【００２４】
本発明によれば、与えられたキーワードを含む電子文書の数を、少ないメモリ使用量で高速に計算することができる。
【００２５】
上記した以外の課題、構成及び効果は、以下の実施形態の説明により明らかにされる。
【図面の簡単な説明】
【００２６】
【図１】従来の文書検索技術の一例を示す概略図である。
【図２】本発明の第１の実施形態の代表シグネチャ構築手段によって構築される代表シグネチャデータを説明する図である。
【図３】本発明の第１の実施形態の代表シグネチャデータに基づくDF値の計算方法を説明する図である。
【図４】本発明の第１の実施形態の文書検索装置の構成例を示す図である。
【図５】本発明の第１の実施形態の接尾辞配列データ及び代表シグネチャデータの構築処理の概要を示す図である。
【図６】本発明の第１の実施形態の代表シグネチャ構築手段の制御ロジックを示すフローチャートである。
【図７】本発明の第１の実施形態の接尾辞配列データ及び代表シグネチャデータの構築処理に係るデータの流れを示す図である。
【図８】本発明の第１の実施形態のＤＦ計算手段の制御ロジックを示すフローチャートである。
【図９】本発明の第１の実施形態の検索処理に係るデータの流れを説明する図である。
【図１０】本発明の第１の実施形態の検索手段の制御ロジックを示すフローチャートである。
【図１１】本発明の第１の実施形態の接尾辞配列データ及び代表シグネチャデータのデータ構造の一例であるウェーブレット木を示す図である。
【図１２】本発明の第２の実施形態の代表シグネチャ構築手段の制御ロジックを示すフローチャートである。
【図１３】本発明の第２の実施形態の代表シグネチャ構築手段によって構築される代表シグネチャデータを説明する図である。
【図１４】本発明の第１の実施形態、第２の実施形態の文書検索方法を所定の文書集合データに適用した例を示す図である。
【図１５】本発明の第３の実施形態の代表シグネチャデータの構築方法の例を示す図である。
【図１６】本発明の第４の実施形態の代表シグネチャ構築手段によって構築される整数配列HSの例を示す図である。
【図１７】本発明の第５の実施形態の代表シグネチャ構築手段によって構築される整数配列HSAllの例を示す図である。
【図１８】本発明の実施形態の文書検索方法と従来手法との性能比較を示す図である。
【発明を実施するための形態】
【００２７】
以下、本発明の実施の形態について図面を参照して説明する。
【００２８】
（第１の実施形態）
以下、本発明の第１の実施形態について説明する。
【００２９】
図４は、本発明の第１の実施形態の文書検索装置１の構成例を示す図である。文書検索装置１は、ＣＰＵ（Central Processing Unit）４０１、主記憶装置（メモリ）４０２、補助記憶装置４０３、リムーバブルメディア４０４、ユーザインターフェース部４０６を備える。この文書検索装置１は、ＬＡＮ（Local Area Network）等のネットワーク４０５を介して外部のネットワークに接続されている。
【００３０】
ＣＰＵ４０１は、主記憶装置４０２に格納されたプログラム（接尾辞配列構築手段４０７、代表シグネチャ構築手段４０８、ＤＦ計算手段４０９、検索手段４１０の機能を実現するプログラム）を実行する中央演算装置である。
【００３１】
主記憶装置４０２は、上記プログラム及び上記プログラムの実行に用いる文書集合データ１０１、接尾辞配列データ１０５、代表シグネチャデータ１０７等を記憶するＲＡＭ（Random Access Memory）等の記憶装置である。補助記憶装置４０３は、文書集合データ１０１、接尾辞配列データ１０５、代表シグネチャデータ１０７等を記憶するＨＤＤ等の記憶装置である。
【００３２】
リムーバブルメディア４０４は、文書集合データ１０１、接尾辞配列データ１０５、代表シグネチャデータ１０７等を記録したＣＤ−ＲＯＭ、ＤＶＤ等の記録媒体である。リムーバブルメディア４０４と補助記憶装置４０３の両方またはいずれか一方に格納された必要なデータが、文書検索装置１の起動時に主記憶装置４０２に読み出される。
【００３３】
ユーザインターフェース部４０６は、ユーザインターフェースを提供する入出力装置（例えば、キーボード、マウス、ディスプレイ）である。
【００３４】
以上に示す装置構成において、ＣＰＵ４０１は、主記憶装置４０２、補助記憶装置４０３、リムーバブルメディア４０４、又は、ネットワーク４０５を介した外部から、必要に応じて文書集合データ１０１を取得する。その後、取得した文書集合データ１０１に基づいて、接尾辞配列データ１０５、代表シグネチャデータ１０７を構築する。
【００３５】
図１１は、本発明の第１の実施形態の接尾辞配列データ１０５及び代表シグネチャデータ１０７のデータ構造の一例であるウェーブレット木を示す図である。
【００３６】
文書検索装置１は、接尾辞配列データ１０５及び代表シグネチャデータ１０７を、図１１に示すウェーブレット木（Makinen, V. and Navarro, G., Rank and select revisited and extended, Theoretical Computer Science 387:322-347, 2007）と呼ばれるデータ構造で記録する。
【００３７】
このウェーブレット木のデータ構造は、長方形[0,X]×[0,Y]（X,Yは整数）の2次元領域１１０１に配置された点の位置を記録できるデータ構造である。このデータ構造では、水平方向には必ず1つの点を設ける必要があるが、垂直方向には複数の点を設けてもよいし、点を設けなくてもよい。このウェーブレット木のデータ構造を用いることによって、任意の長方形[x1,x2]×[y1,y2]の領域１１０２の内部の点１１０３の集合について、下記の計算を効率よく実行できる。
【００３８】
（ａ）領域１１０２の内部の各点をX座標の昇順に並べたリストを、計算式enumX(T,[x1,x2],[y1,y2])によって求める計算。X座標が同じ点が複数ある場合には、共通するX座標は１回だけ報告する。
【００３９】
（ｂ）領域１１０２の内部の各点の総数を、計算式rank(T,[x1,x2],[y1,y2])によって求める計算。
【００４０】
図５は、本発明の第１の実施形態の接尾辞配列データ１０５及び代表シグネチャデータ１０７の構築処理の概要を示す図である。
【００４１】
（１）接尾辞配列データ１０５の構築
まず接尾辞配列構築手段４０７が、入力された文書集合データ１０１に基づいて、接尾辞配列データ１０５を構築する。具体的には、まず文書集合データ１０１に含まれる全文書１０２の全ての接尾辞を抽出する。次に、抽出された各接尾辞を辞書順にソートすることによって、ソート結果１０４を生成する。その後、生成されたソート結果１０４の中でソートされた各接尾辞の属する文書の番号及び文書内の位置に基づいて、接尾辞配列データ１０５を構築する。
【００４２】
なお、接尾辞配列構築手段４０７は、他の方法によって接尾辞配列データ１０５を構築してもよい（Puglisi et al., A taxonomy of suffix array construction algorithms, ACM computing surveys, 39(2):Article 4, 2007）。以下の説明において、文書集合データ１０１に含まれる文書の数をD、構築された接尾辞配列データ１０５の長さ（要素数）をLという。
【００４３】
このように構築された接尾辞配列データ１０５中の各接尾辞の属する文書の番号（図１の例では、0、1、1、1、…）を、上記のウェーブレット木のデータ構造で表現する。なお、図１１では、図１の接尾辞配列データ１０５に基づいて生成されるウェーブレット木のデータ構造を示している。以下、文書番号を表現するウェーブレット木のデータ構造をTDという。
【００４４】
このように、接尾辞配列データ１０５中の各文書番号をウェーブレット木のデータ構造で表現することにより、文書番号に相当する全体の接尾辞配列データ１０５中で各文書に対応するcontextを、文書番号順に取得することが容易になる。例えば、所定の検索キーワードwに対応するcontextの範囲がc1〜c2である場合、検索キーワードwが出現する文書の番号は、前述の計算式enumX(TD,[0,X],[c1,c2])により計算できる。
【００４５】
（２）代表シグネチャデータ１０７の構築
代表シグネチャ構築手段４０８は、文書集合データ１０１及び接尾辞配列構築手段４０７によって構築された接尾辞配列データ１０５に基づいて、代表シグネチャデータ１０７を構築する。代表シグネチャデータ１０７の構築方法について図６を用いて詳細に後述する。
【００４６】
以上に示す処理により、接尾辞配列構築手段４０７、代表シグネチャ構築手段４０８は、入力された文書集合データ１０１に基づいて、それぞれ接尾辞配列データ１０５、代表シグネチャデータ１０７を構築する。
【００４７】
図６は、本発明の第１の実施形態の代表シグネチャ構築手段４０８の制御ロジックを示すフローチャートである。図２は、本発明の第１の実施形態の代表シグネチャ構築手段４０８によって構築される代表シグネチャデータ１０７を説明する図である。図７は、本発明の第１の実施形態の接尾辞配列データ１０５及び代表シグネチャデータ１０７の構築処理に係るデータの流れを示す図である。
【００４８】
以下、図６に示す各処理について、図２、図７を適宜参照しながら説明する。
【００４９】
まずステップ６０１において、代表シグネチャ構築手段４０８は、文書集合データ１０１の各文書d１０２の高さ配列Hd[i]２０７を生成する（Ｓ６０１）。
【００５０】
具体的には、各文書d１０２について、当該文書d１０２の全ての接尾辞２０１を抽出する。次に、抽出された各接尾辞２０１を辞書順にソートすることによって、ソート結果２０３を生成する。その後、ソート結果２０３に基づいて、接尾辞配列データ２０５を作成する。その後、接尾辞配列データ２０５の高さ配列Hd[i]２０７を生成する。
【００５１】
高さ配列Hd[i]２０７には、context番号iの接尾辞と、一つ前のcontext番号i-1の接尾辞との間で一致する先頭からの文字の長さが格納される。この高さ配列Hd[i]２０７は、Hd[1]＝０の整数配列である。高さ配列Hd[i]２０７は、従来技術を用いて効率よく計算可能である（笠井他、数理解析研究所講究録1093 巻1999年、81-86頁）。
【００５２】
なお、context番号iの接尾辞と、一つ後のcontext番号i+1の接尾辞との間で一致する先頭からの文字の長さを、高さ配列Hd[i]２０７に格納してもよい。
【００５３】
次にステップ６０２において、代表シグネチャ構築手段４０８は、各文書d１０２の（文書長+1）の和を計算し、計算された和の値に等しい長さLの整数配列R[i](i=1〜L)１０７を作成する（Ｓ６０２）。図２に示す例では、文書0の文書長は6、文書1の文書長は7であるので、(6+1)+(7+1)=15の長さの整数配列R[i]を作成する。
【００５４】
その後ステップ６０３〜６０７において、代表シグネチャ構築手段４０８は、作成された整数配列R[i](i=1〜L)に、高さ配列Hd[i]２０７の先頭要素を格納するとともに、高さ配列Hd[i]２０７の先頭要素を削除する処理を繰り返す（Ｓ６０３〜６０７）。
【００５５】
具体的には、i=1〜Lについて、context番号iに対応する文書d１０２を取得し、context番号iが当該文書d１０２の接尾辞である場合、高さ配列Hd[i]２０７の先頭要素を、整数配列R[i]に格納するとともに、高さ配列Hd[i]２０７の先頭要素を削除する処理を繰り返す。
【００５６】
以上の処理により、代表シグネチャ構築手段４０８は、各文書d１０２の高さ配列Hd[i]２０７をマージした整数配列R[i]を作成する。このようにして作成された整数配列R[i]が、代表シグネチャデータ１０７である。代表シグネチャデータ１０７とは、接尾辞配列データ１０５に等しい要素数を持つ新たな整数配列である。
【００５７】
その後、代表シグネチャ構築手段４０８は、構築された代表シグネチャデータ１０７を、ウェーブレット木のデータ構造のデータTRに格納する。そうすると、指定されたcontext範囲［c1,c2］に存在するキーワード長|w|より小さい値の数を、前述の計算式rank(TR, [0,|w|-1],[c1,c2])により高速に計算することができる。なお、このようにして計算されたキーワード長|w|より小さい値の数が、キーワードwのDF値である（図３参照）。
【００５８】
図３は、本発明の第１の実施形態の代表シグネチャデータ１０７に基づくDF値の計算方法を説明する図である。キーワード長|w|より小さい値の数が、キーワードwのDF値である理由を、図３を用いて説明する。
【００５９】
代表シグネチャデータ１０７の[c1,…,c2]（ここでは[4,…,7]）において、キーワード長|w|（キーワードが「京都」である場合は２）より小さい値の数を考察する。代表シグネチャデータ１０７において、ある文書dの高さ配列Hd[i]２０７に由来する値に着目する。
【００６０】
まず、代表シグネチャデータ１０７の[c1,…,c2]において、文書dの高さ配列Hd[i]２０７に由来する最初の値は、キーワード長|w|より小さい。例えば、代表シグネチャデータ１０７の[4,…,7]において、高さ配列H0[i]、H1[i]２０７に由来する最初の値0は、キーワード長2より小さい。なぜなら、当該最初の値は、文書dにおいて先頭がキーワードwである接尾辞と先頭がwではない接尾辞とを先頭から比較したときに一致する文字列の長さであり、キーワード長|w|とは一致し得ないからである。
【００６１】
次に、文書dの高さ配列Hd[i]に由来する２つ目以降の値は、キーワード長|w|以上である。例えば、代表シグネチャデータ１０７の[4,…,7]において、高さ配列H0[i] 、H1[i]２０７に由来する2つ目以降の値2は、キーワード長2以上である。なぜなら、当該2つ目以降の値は、文書dにおいて先頭がキーワードwである2つの接尾辞を先頭から比較したときに一致する文字列の長さであるからである。
【００６２】
以上に示すように、代表シグネチャデータ１０７の[c1,…,c2]にあるキーワード長|w|より小さい値の数は、キーワードwを含む文書数DF値に一致する。
【００６３】
図８は、本発明の第１の実施形態のＤＦ計算手段４０９の制御ロジックを示すフローチャートである。ここでは、検索キーワードとしてキーワードwが入力された場合のＤＦ計算手段４０９の動作について説明する。
【００６４】
まずステップ８０１において、ＤＦ計算手段４０９は、入力されたキーワードwのcontext範囲[c1,c2]を求める（Ｓ８０１）。次にステップ８０２において、ＤＦ計算手段４０９は、代表シグネチャデータ１０７のcontext範囲[c1,c2]において、入力されたキーワードwの長さより小さい値の数を変数nに格納する（Ｓ８０２）。その後ステップ８０３において、ＤＦ計算手段４０９は、変数nの値を出力する（Ｓ８０３）。
【００６５】
以上に示す処理により、ＤＦ計算手段４０９は、入力されたキーワードwに対するDF値を、少ないメモリ使用量で高速に計算することができる。
【００６６】
図９は、本発明の第１の実施形態の検索処理に係るデータの流れを説明する図である。図１０は、本発明の第１の実施形態の検索手段４１０の制御ロジックを示すフローチャートである。
【００６７】
以下、図１０に示す各処理について、図９を適宜参照しながら説明する。
【００６８】
なお、予め文書検索装置１は、ユーザインターフェース部４０６又はネットワーク４０５を介して、1つ以上のキーワードw1,w2,…,wk、及び、取得したい文書数の上限値Nを入力しているものとする。
【００６９】
まずステップ１００１において、検索手段４１０は、接尾辞配列構築手段４０７によって構築された接尾辞配列データ１０５から、各キーワードwi(i=1〜k)に対応するcontextの範囲[c1i〜c2i]を求める（Ｓ１００１）。
【００７０】
次にステップ１００２において、検索手段４１０は、ＤＦ計算手段４０９を呼出し、呼び出されたＤＦ計算手段４０９は、各キーワードwiのDF値を計算する（Ｓ１００２）。ステップ１００２の処理については、図８を用いて前述した通りである。
【００７１】
その後ステップ１００３において、検索手段４１０は、入力された各キーワードwiのうち少なくとも一つを含み、以降のステップ１００６〜１０１２を未処理の文書のうち、文書番号が最も小さい文書の番号dを求める（Ｓ１００３）。
【００７２】
ステップ１００３では、各キーワードwiを含む文書の文書番号のリストを、前述した計算式enumX(TD,[0,X],[c1i,c2i])によって求める。その後、生成されたリストを先頭から突き合わせることによって、各キーワードwiのうち少なくとも一つを含む文書番号を昇順に取得する。その後、後述するステップ１００６〜１０１２を未処理で、且つ、文書番号が最も小さい文書番号dを求める。
【００７３】
その後、ステップ１００６に進むと、検索手段４１０は、ステップ１００３で求められた文書番号dの文書のスコアSを求める（Ｓ１００６）。ここでいうスコアSは、当該文書が含む各キーワードwiのTF-IDF値の合計値である。各キーワードwiのTF-IDF値は、計算式rank(TD,[d,d],[c1i,c2i])によって求められるTF値を、ステップ１００２で計算されたDF値で除算することによって得られる。
【００７４】
その後ステップ１００７、１００８において、検索手段４１０は、蓄積文書の数が上限値N未満であるか否かを判定する（Ｓ１００７、Ｓ１００８）。蓄積文書とは、既にステップ１００６〜１０１２の処理が実行され、蓄積された文書である。
【００７５】
蓄積文書数が上限値N未満である場合（Ｓ１００８でＹＥＳ）、ステップ１００９に進んで、検索手段４１０は、文書番号dの文書を蓄積文書に加える。一方、蓄積文書数が上限値N以上である場合（Ｓ１００８でＮＯ）、ステップ１０１０に進んで、検索手段４１０は、ステップ１００６で求められたスコアSと、蓄積文書の最小スコアとを比較する（Ｓ１０１０）。
【００７６】
スコアSが蓄積文書の最小スコアよりも大きい場合（Ｓ１０１１でＹＥＳ）、蓄積文書のうちの最小スコアの文書を削除し、文書番号dの文書を蓄積文書に加える。一方、スコアSが蓄積文書の最小スコアよりも小さい場合（Ｓ１０１１でＮＯ）、再びステップ１００３に戻って処理を繰り返す。
【００７７】
以上に示す処理により、検索手段４１０は、入力された各キーワードwiを少なくとも一つ含む文書を全て検索し、検索された文書についてキーワードwiとの関連度を反映するスコアを計算し、スコアが上位N件の文書のリストを出力することができる。
【００７８】
（第２の実施形態）
以下、本発明の第２の実施形態について説明する。
【００７９】
前述の第１の実施形態では、代表シグネチャ構築手段４０８は、文書集合データ１０１中の文書１０２毎に、接尾辞配列データ２０５及び高さ配列Hd[i]２０７を構築していた（図２参照）。そのため、これらデータを格納するためのメモリ領域が必要であった。この第２の実施形態では、より少ないメモリ領域で代表シグネチャデータ１０７を構築する形態について説明する。
【００８０】
なお、この第２の実施形態において、前述の第１の実施形態と同様である部分については適宜重複する説明を省略する。
【００８１】
図１２は、本発明の第２の実施形態の代表シグネチャ構築手段４０８の制御ロジックを示すフローチャートである。図１３は、本発明の第２の実施形態の代表シグネチャ構築手段４０８によって構築される代表シグネチャデータ１０７を説明する図である。
【００８２】
まずステップ１２０１において、代表シグネチャ構築手段４０８は、文書集合データ１０１全体の長さLの整数配列R[i](i=1〜L)１３０１を作成する（Ｓ１２０１）。このステップ１２０１では、さらに、作成された整数配列R[i]１３０１に、文書集合データ１０１全体の接尾辞配列データ１０５に対応する高さ配列の値h（図１３では0、0、0、0、2、3、2、…）を格納する。このステップ１２０１の処理は、図６のステップ６０２〜６０７の処理と同様である。
【００８３】
その後ステップ１２０２において、代表シグネチャ構築手段４０８は、大きさD（Dは、文書集合データ１０１に含まれる文書数）の整数配列Prev[d](d=1〜D)１３０２を作成し、作成された整数配列Prev[d]１３０２の全要素に-1を設定する（Ｓ１２０２）。以下の処理では、整数配列Prev[d](1≦d≦D)１３０２には、最後に処理した文書dのcontext番号１０８が設定される。
【００８４】
その後ステップ１２０３において、代表シグネチャ構築手段４０８は、整数ペアの集合データであるNearest１３０３を作成し、Nearest１３０３が要素(0,-1)のみを持つように初期化する（Ｓ１２０３）。以下の処理では、Nearest１３０３の要素(h,j)には、ステップ１２０１で格納された高さ配列の値hが最後に出現したcontext番号j１０８が設定される。
【００８５】
その後ステップ１２０４〜１２０９において、代表シグネチャ構築手段４０８は、各context番号i(i=1〜L)１０８について、以下に示すステップ１２０７、１２０８、１２０９の処理を実行する。
【００８６】
ステップ１２０７において、代表シグネチャ構築手段４０８は、Nearest１３０３の要素である整数ペア(h,j)のうち、h≧R[i]の要素を消去し、Nearest１３０３に(R[i],i)を追加する（Ｓ１２０７）。その後ステップ１２０８において、代表シグネチャ構築手段４０８は、context番号iの接尾辞が対応する文書の文書番号dを、接尾辞配列データ１０５から取得する（Ｓ１２０８）。
【００８７】
その後ステップ１２０９において、代表シグネチャ構築手段４０８は、Nearest１３０３の要素である整数ペア(h',j)のうち、j≧Prev[d]１３０２、且つ、jが最小の値である整数ペアを探し、当該整数ペアのh'の値を整数配列R[i]１３０１に代入する（Ｓ１２０９）。
【００８８】
ステップ１２０９において、具体的には、Prev[d]＜1の場合、整数配列R[i]１３０１に0を代入する。一方、Prev[d]≧1の場合、Nearest１３０３の要素である整数ペア(h',j)のうち、j＞Prev[d]、且つ、h'が最小の整数ペアを探す。当該整数ペアが存在する場合には、当該整数ペアのh'の値を整数配列R[i]１３０１に代入する。当該整数ペアが存在しない場合には、整数配列R[i]１３０１に0を代入する。
【００８９】
以上の処理により、代表シグネチャ構築手段４０８は、整数配列R[i]１３０１を更新することによって、代表シグネチャデータ１０７を生成する。この第２の実施形態の方法によれば、前述の第１の実施形態の方法のように個々の文書dの高さ配列Hd[i]２０７を構築する必要がない。そのため、より少ないメモリ領域で代表シグネチャデータ１０７を構築することができる。
【００９０】
図１８は、本発明の実施形態の文書検索方法と従来手法との性能比較を示す図である。
【００９１】
本発明の実施形態の文書検索方法によれば、代表シグネチャデータ１０７の個々の要素が232ビットで表現できる場合、4Lバイトだけのメモリ使用量があればよい。また、代表シグネチャデータ１０７を格納するためのウェーブレット木のデータの大きさも、Lが大きい場合には4Lよりわずかに多い程度とすることができる。また計算式rankの計算時間はLの大きさに関係なくほぼ一定である(Makinen, V. and Navarro, G., Rank and select revisited and extended, Theoretical Computer Science 387:332-347, 2007)。なお、図１８に示すメモリ使用量は、文書集合データ１０１、接尾辞配列データ１０５を記録するためのメモリ使用量や、大きさがLやDに比例しない小さなデータを含まない。
【００９２】
（第３の実施形態）
以下、本発明の第３の実施形態について説明する。
【００９３】
図１４は、本発明の第１の実施形態、第２の実施形態の文書検索方法を所定の文書集合データに適用した例を示す図である。
【００９４】
図１４では、一つの文書「AAAAAAAAAA$」のみを含む文書集合データに、前述の第１の実施形態、第２の実施形態の文書検索方法を適用した例を示している。構築される代表シグネチャデータ１０７の要素の最大値は、最悪の場合に、最長の文書の長さから1を減算した値となる。この例は最悪のケースとなっており、最大値が10-1=9となっている。このような大きな値を格納するためには、大きなメモリ領域が必要である。
【００９５】
そこで、この第３の実施形態の文書検索方法では、所定の数値パラメータrを設け、パラメータr未満の値は、そのまま代表シグネチャデータ１０７に格納する。一方、パラメータr以上の値は、その値の代わりにパラメータrを代表シグネチャデータ１０７に格納する。
【００９６】
なお、この第３の実施形態において、前述の第１の実施形態と同様である部分については適宜重複する説明を省略する。
【００９７】
図１５は、本発明の第３の実施形態の代表シグネチャデータ１５０１の構築方法の例を示す図である。図１５では、上記の数値パラメータr=1である場合に構築される代表シグネチャデータ１５０１を示している。この場合、前述の第１の実施形態、第２の実施形態の代表シグネチャデータ１０７と異なり、context番号6,7の値が1に置換されている（代表シグネチャデータ１５０１参照）。
【００９８】
以上に示すように、代表シグネチャ構築手段４０８は、代表シグネチャデータ１０７において、パラメータr以上の値を、全てパラメータrに置換することによって、代表シグネチャデータ１５０１を構築する。
【００９９】
なお、その後ＤＦ計算手段４０９は、生成された代表シグネチャデータ１５０１において、キーワード長|w|がパラメータrの値以下の場合には、前述の第１の実施形態、第２の実施形態と同様の方法により、DFの値を計算する。一方、キーワード長|w|がパラメータrの値以上である場合、キーワードwを単独で検索した場合と同様の手順により、キーワードwが出現する文書番号を全て求め、DFの値を計算する。
【０１００】
以上説明した第３の実施形態の文書検索方法によれば、キーワード長|w|がパラメータrの値以上の場合、DF値を計算するための処理時間は大きくなる。一方、長いキーワードの出現回数は短いキーワードよりも少ないため、検索時間も少ない。また、検索時に予想されるキーワード長よりもパラメータrの値を大きくすることによって、ほとんどのキーワードのDF値を、代表シグネチャデータ１５０１を用いて計算することができる。
【０１０１】
（第４の実施形態）
以下、本発明の第４の実施形態について説明する。
【０１０２】
前述の第２の実施形態の代表シグネチャ構築手段４０８は、その動作を修正することにより、非特許文献２に記載の手法のメモリ使用量を抑えることができる。そのために、この第４の実施形態の代表シグネチャ構築手段４０８は、接尾辞配列データ１０５に等しい大きさで、代表シグネチャデータ１０７とは異なる整数配列HSを作成する。整数配列HSは非特許文献２で使用されるデータと等価であるため、非特許文献２に記載の接尾辞木を使う方法より、主記憶の消費を大幅に抑えることができる。
【０１０３】
なお、この第４の実施形態において、前述の第２の実施形態と同様である部分については適宜重複する説明を省略する。
【０１０４】
図１６は、本発明の第４の実施形態の代表シグネチャ構築手段４０８によって構築される整数配列HS１６０１の例を示す図である。この整数配列HS１６０１は、同じ文書に由来する接尾辞の重複を計算するための配列である。
【０１０５】
代表シグネチャ構築手段４０８は、図１６に示すような整数配列HS１６０１を構築する。具体的には、キーワードwが出現するcontext範囲が[c1〜c2]の場合、当該整数配列HS１６０１の[c1+1]番目〜[c2]番目の要素の和をxとすると、キーワードwのDF値=c2-c1+1-xとなる整数配列HS１６０１を構築する。これにより、例えばキーワード「京都」が出現するcontext範囲が[4〜7]の場合、当該キーワード「京都」のDFの値は、(7-4+1)-(HS[5]＋HS[6]＋HS[7])=4-2=2と計算できる。
【０１０６】
a,a'を互いに異なる文字、s,s'を任意の文字列とする。整数配列HS１６０１を構築するためには、同じ文書dに由来する2つの接尾辞wasと接尾辞wa's'の間に文書dに由来する接尾辞がない場合、wasのcontext以降wa's'のcontextまでのいずれかの整数配列HS１６０１の要素に、1を加える必要がある(非特許文献２参照)。
【０１０７】
例えば、ｄ=1、w=「京都」、a=「と」、s=「京都市$」、a'=「市」、s'=「$」の場合は、was=「京都と京都市$」のcontext番号１０８が4、wa's'=「京都市$」のcontext番号１０８が6である。そのため、H[5]又はHS[6]に1を加える。図１６の例では、HS[5]に1が加えられる。
【０１０８】
また例えば、d=0、w=「京都」、a=「市」、s=「$」、a'=「府」、s'=「京都市$」の場合は、was=「京都市$」のcontext番号１０８が5、wa's'=「京都府京都市$」のcontext番号１０８が7である。そのため、HS[6]又はHS[7]に１を加える。図１６の例では、HS[7]に1が加えられる。
【０１０９】
ただし、上記2例において、いずれもHS[6]に1を加えると、正しい計算ができない。例えば、HS[5]=0、HS[6]=2、HS[7]=0である場合、キーワード「京都市」のDF値は、(6-5+1)- (HS[5]＋HS[6]＋HS[7])=2-2=0となり、実際のDF値2と異なる。これは、キーワード「京都」の重複を表すべき整数配列HS１６０１の値が、「京都市」の重複と混同されたためである。
【０１１０】
この問題を防ぐために、wa'が初めて出現するcontext番号i１０８に対応する整数配列HS[i]に１を加えればよい。これにより、整数配列HS[i]に加えた値はwaとの重複を排除できる一方、wa'で始まる接尾辞同士の重複との混同を防ぐことができる。このようなiを計算するためには、高さ配列Hd[i]中のwasのcontextからwa's'のcontextまでの間で、高さ配列Hd[i]の値が最小、且つ、最もwa's'のcontextに近いcontextがiに一致することを利用する。
【０１１１】
この第４の実施形態の代表シグネチャ構築手段４０８は、まず整数配列HS１６０１の要素をすべて0で初期化する。そして、前述の第２の実施形態のステップ１２０９の処理（図１２参照）を下記の処理に置き換えることによって、整数配列HS１６０１を構築する。
【０１１２】
具体的には、Nearest１３０３の要素である整数ペア(h,j)のうち、j＞Pred[d]１３０２、且つ、hが最小の値である整数ペアを探し、当該整数ペアのjの値について、HS[j]に1を加える。
【０１１３】
なお、整数配列HS１６０１の[c1+1番目〜c2番目]の要素の和xを計算する方法は、非特許文献２に記載の方法と同一であるものとする。
【０１１４】
（第５の実施形態）
以下、本発明の第５の実施形態について説明する。
【０１１５】
ここでは、検索対象の文書のデータ量が大きい場合に、文書を複数のデータに分割した単位で検索する形態について説明する。例えば、1冊の書籍から所定のテキストを検索する場合、書籍全体のテキストを検索対象とするのではなく、章、節、段落、文単位に検索したい場合がある。この場合、元の文書を章、節、段落、文等の単位で最大n回分割した場合に、k回目に分割された文書のDF値を計算する方法を説明する。
【０１１６】
なお、この第５の実施形態において、前述の第４の実施形態と同様である部分については適宜重複する説明を省略する。
【０１１７】
図１７は、本発明の第５の実施形態の代表シグネチャ構築手段４０８によって構築される整数配列HSAll１７０１の例を示す図である。この整数配列HSAll１７０１は、同じ文書に由来する接尾辞の重複を、元の文書を分割して得られた文書の集合に対して計算するための配列である。
【０１１８】
第５の実施形態の代表シグネチャ構築手段４０８は、新たな整数配列HSAll１７０１を構築し、構築された整数配列HSAll１７０１を使用してDF値を計算する。整数配列HSAll１７０１は、下記手順で構築される。
【０１１９】
すなわち、まず前述の第４の実施形態の方法（図１６参照）により、代表シグネチャ構築手段４０８は、整数配列HS１６０１を構築する。次に、代表シグネチャ構築手段４０８は、整数配列HSAll１７０１を要素が無い空の配列として初期化する。その後、各i=1〜Lについて、整数配列HSAll１７０１にHS[i]個の「1」と1つの「0」を追加する。
【０１２０】
その後、以下の処理によって、整数配列HSAll１７０１を更新する。すなわち、各k=1〜n（k：元の文書をn回分割した場合のk回目に分割された文書）に対応する整数配列HS[i]の値を、前述の第４の実施形態の方法と同様に計算し、整数配列HSAll１７０１のi番目の0の前にあるHS[i]個の値を、k+1で置き換える。以上の処理により、整数配列HSAll１７０１を更新する。
【０１２１】
以上に示す処理により更新された整数配列HSAll１７０１を、ウェーブレット木のデータ構造であるTHに格納する。そうすると、整数配列HSAll１７０１においてc1番目の0からc2番目の0の間にあるk+1以上の値の数xを、計算式rank(TH, [k+1,n+1], [select(HSAll,[0,0],c1), select(HSAll,[0,0],c2)])によって計算できる。
【０１２２】
一方、k回の分割した文書集合に対し、キーワードwのcontext範囲がc1〜c2である場合、キーワードwのDF値はc2-c1+1-xと一致する。そのため、整数配列HSAll１７０１を用いて任意のキーワードwのDF値を、任意の分割の回数に応じて計算することができる。
【０１２３】
整数配列HSAll１７０１の要素数は、接尾辞配列データ１０５の要素数と、最初の整数配列HS１６０１の全要素の値の和の合計値である。整数配列HS１６０１の値の和は、接尾辞１つについて高々１しか増えないため、接尾辞配列データ１０５の要素数以下である。したがって、整数配列HSAll１７０１の要素数は、接尾辞配列データ１０５の要素数の２倍以内である。
【０１２４】
以上、本発明の各実施形態について説明したが、上記各実施形態は本発明の適用例の一つを示したものであり、本発明の技術的範囲を上記各実施形態の具体的構成に限定する趣旨ではない。本発明の要旨を逸脱しない範囲において種々変更可能である。
【符号の説明】
【０１２５】
１  文書検索装置
４０１  ＣＰＵ（中央演算装置）
４０２  主記憶装置
４０３  補助記憶装置
４０４  リムーバブルメディア
４０５  ネットワーク
４０６  インターフェース部
４０７  接尾辞配列構築手段
４０８  代表シグネチャ構築手段
４０９  ＤＦ計算手段
４１０  検索手段
【図１】
0005472929.tif 000002
【図２】
0005472929.tif 000003
【図３】
0005472929.tif 000004
【図５】
0005472929.tif 000005
【図６】
0005472929.tif 000006
【図７】
0005472929.tif 000007
【図８】
0005472929.tif 000008
【図９】
0005472929.tif 000009
【図１０】
0005472929.tif 000010
【図１２】
0005472929.tif 000011
【図１３】
0005472929.tif 000012
【図１４】
0005472929.tif 000013
【図１５】
0005472929.tif 000014
【図１６】
0005472929.tif 000015
【図１７】
0005472929.tif 000016
【図１８】
0005472929.tif 000017
【図４】
0005472929.tif 000018
【図１１】
0005472929.tif 000019