(57)【特許請求の範囲】
【請求項１】
プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、検索キーワードの入力を受け付け、文書における前記入力された検索キーワードの文書内位置を検索する文書検索システムであって、
前記プロセッサが、前記文書を構成する接尾辞を辞書順に並べた接尾辞配列データを生成する接尾辞配列データ生成部と、
前記プロセッサが、前記接尾辞配列データにおいて前記辞書順に並べられた接尾辞のうち一部の接尾辞の文書内位置をサンプリングするサンプリング部と、
前記プロセッサが、前記文書内で前記接尾辞の前にある一文字を追加した接尾辞の前記接尾辞配列データにおける対応箇所を特定する一文字前接尾辞特定処理を実行する一文字前接尾辞特定処理実行部と、
前記プロセッサが、前記サンプリング部によって前記文書内位置がサンプリングされなかった前記接尾辞に対して、前記一文字前接尾辞特定処理を繰り返し実行することによって、当該接尾辞の直近のサンプリングされた接尾辞の文書内位置に基づいて、当該接尾辞の文書内位置を特定する文書内位置特定部と、を備え、
前記文書内位置特定部は、前記接尾辞配列データから前記検索キーワードから始まる区間に含まれる接尾辞を特定し、前記特定した接尾辞の一文字前にある文字が一致するすべての接尾辞の中から最初の接尾辞及び最後の接尾辞を特定し、
前記一文字前接尾辞特定処理実行部は、前記特定した最初の接尾辞及び最後の接尾辞に対して、前記一文字前接尾辞特定処理を実行し、
前記文書内位置特定部は、
前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間を、前記接尾辞の一文字前にある文字が一致するすべての接尾辞に対する前記一文字前接尾辞特定処理の結果とし、
前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間に、前記文書内位置がサンプリングされた接尾辞が存在する場合には、当該文書内位置に前記一文字前接尾辞特定処理の実行回数を加算した値を、前記文書内位置がサンプリングされた接尾辞に対応する前記一文字前接尾辞特定処理の実行前の接尾辞の文書内位置に決定し、
前記接尾辞配列データから前記検索キーワードから始まる区間に含まれる全ての接尾辞の文書内位置が特定されない場合には、前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間の接尾辞の一文字前にある文字が一致するすべての接尾辞の中から最初の接尾辞及び最後の接尾辞を特定し、
前記一文字前接尾辞特定処理実行部は、前記特定した最初の接尾辞及び最後の接尾辞に対して、前記一文字前接尾辞特定処理を実行することを特徴とする文書検索システム。
【請求項２】
前記文書検索システムは、前記プロセッサが、前記接尾辞配列データに含まれる各接尾辞に対して、前記サンプリング部によって文書内位置がサンプリングされた接尾辞から前記接尾辞に到達するまでの前記一文字前接尾辞特定処理の実行回数の最小値であるサンプル距離値を含むサンプル距離データを生成するサンプル距離データ生成部を備え、
前記文書内位置特定部は、前記プロセッサが、前記区間において前記接尾辞の一文字前にある文字が一致する接尾辞に対して前記一文字前接尾辞特定処理実行部に前記一文字前接尾辞特定処理を実行させるか否かを判定する一文字前接尾辞特定処理実行判定部を備え、
前記一文字前接尾辞特定処理実行判定部は、前記区間に到達するまでの前記一文字前接尾辞特定処理を実行した回数が、前記区間に含まれる接尾辞に対する前記サンプル距離値の最大値よりも小さければ、前記一文字前接尾辞特定処理実行部に前記一文字前接尾辞特定処理を実行させる必要があると判定することを特徴とする請求項１に記載の文書検索システム。
【請求項３】
前記サンプル距離データが、前記接尾辞配列データにおける各接尾辞の位置を示す第１軸、及び、前記接尾辞配列データにおける各接尾辞の位置に対応する前記サンプル距離値を示す第２軸からなる２次元領域に、各接尾辞に対応する前記サンプル距離値を点で格納するウェーブレット木形式で記憶され、
前記一文字前接尾辞特定処理実行判定部は、前記ウェーブレット木形式で記憶した前記サンプル距離データに対して、前記区間の範囲によって特定される前記第１軸上の範囲であって、かつ、前記一文字前接尾辞特定処理の実行回数に１を加えた値以上の前記第２軸上の範囲に前記サンプル距離値を示す点が存在する場合、前記一文字前接尾辞特定処理実行部に前記一文字前接尾辞特定処理を実行させる必要があると判定することを特徴とする請求項２に記載の文書検索システム。
【請求項４】
前記文書内位置特定部は、
予め設定された文字数間隔で、前記接尾辞と当該接尾辞の文書内位置とを対応付けた文書内位置データを生成し、
前記文字数間隔に位置しない接尾辞であっても、当該接尾辞の前記接尾辞配列データにおける位置を中心とする、ユーザが指定した大きさの範囲にある前記接尾辞の１文字前にある文字が、当該接尾辞の１文字前にある文字と一致しない場合、当該接尾辞の前記文書内位置データを生成することを特徴とする請求項１から請求項３のいずれか一つに記載の文書検索システム。
【請求項５】
前記接尾辞の文書内位置が前記文書内位置特定部によって特定された場合、前記プロセッサが、前記特定した文書内位置を表示する表示部を備え、
前記表示部は、ある接尾辞の前記文書内位置を前記一文字前接尾辞特定処理実行部に前記一文字前接尾辞特定処理を実行させて特定した場合に、前記文書内位置が重複する場合、重複した文書内位置を一つの文書内位置として表示することを特徴とすることを特徴とする請求項４に記載の文書検索システム。
【請求項６】
プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備える文書検索システムにおける、検索キーワードの入力を受け付け、文書における前記入力された検索キーワードの文書内位置を検索する文書検索方法であって、
前記方法は、
前記プロセッサが、前記文書を構成する接尾辞を辞書順に並べた接尾辞配列データを生成する接尾辞配列データ生成ステップと、
前記プロセッサが、前記接尾辞配列データにおいて前記辞書順に並べられた接尾辞のうち一部の接尾辞の文書内位置をサンプリングするサンプリングステップと、
前記プロセッサが、前記文書内で前記接尾辞の前にある一文字を追加した接尾辞の前記接尾辞配列データにおける対応箇所を特定する一文字前接尾辞特定処理を実行する一文字前接尾辞特定処理実行ステップと、
前記プロセッサが、前記サンプリングステップによって前記文書内位置がサンプリングされなかった前記接尾辞に対して、前記一文字前接尾辞特定処理を繰り返し実行することによって、当該接尾辞の直近のサンプリングされた接尾辞の文書内位置に基づいて、当該接尾辞の文書内位置を特定する文書内位置特定ステップと、を含み、
前記文書内位置特定ステップでは、前記接尾辞配列データから前記検索キーワードから始まる区間に含まれる接尾辞を特定し、前記特定した接尾辞の一文字前にある文字が一致するすべての接尾辞の中から最初の接尾辞及び最後の接尾辞を特定し、
前記一文字前接尾辞特定処理実行ステップでは、
前記特定した最初の接尾辞及び最後の接尾辞に対して、前記一文字前接尾辞特定処理を実行し、
前記文書内位置特定ステップでは、
前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間を、前記接尾辞の一文字前にある文字が一致するすべての接尾辞に対する前記一文字前接尾辞特定処理の結果とし、
前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間に、前記文書内位置がサンプリングされた接尾辞が存在する場合には、当該文書内位置に前記一文字前接尾辞特定処理の実行回数を加算した値を、前記文書内位置がサンプリングされた接尾辞に対応する前記一文字前接尾辞特定処理の実行前の接尾辞の文書内位置に決定し、
前記接尾辞配列データから前記検索キーワードから始まる区間に含まれる全ての接尾辞の文書内位置が特定されない場合には、前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間の接尾辞の一文字前にある文字が一致するすべての接尾辞の中から最初の接尾辞及び最後の接尾辞を特定し、
前記一文字前接尾辞特定処理実行ステップでは、前記文書内位置特定ステップで特定した最初の接尾辞及び最後の接尾辞に対して、前記一文字前接尾辞特定処理を実行することを特徴とする文書検索方法。
【請求項７】
前記方法は、前記プロセッサが、前記接尾辞配列データに含まれる各接尾辞に対して、前記サンプリング部によって文書内位置がサンプリングされた接尾辞から前記接尾辞に到達するまでの前記一文字前接尾辞特定処理の実行回数の最小値であるサンプル距離値を含むサンプル距離データを生成するサンプル距離データ生成ステップを含み、
前記文書内位置特定ステップは、前記プロセッサが、前記区間において前記接尾辞の一文字前にある文字が一致する接尾辞に対して前記一文字前接尾辞特定処理実行部に前記一文字前接尾辞特定処理を実行させるか否かを判定する一文字前接尾辞特定処理実行判定ステップを含み、
前記一文字前接尾辞特定処理実行判定ステップでは、前記区間に到達するまでの前記一文字前接尾辞特定処理を実行した回数が、前記区間に含まれる接尾辞に対する前記サンプル距離値の最大値よりも小さければ、前記一文字前接尾辞特定処理実行部に前記一文字前接尾辞特定処理を実行させる必要があると判定することを特徴とする請求項６に記載の文書検索方法。
【請求項８】
前記サンプル距離データは、前記接尾辞配列データにおける各接尾辞の位置を示す第１軸、及び、前記接尾辞配列データにおける各接尾辞の位置に対応する前記サンプル距離値を示す第２軸からなる２次元領域に、各接尾辞に対応する前記サンプル距離値を点で格納するウェーブレット木形式で記憶するデータであり、
前記一文字前接尾辞特定処理実行判定ステップでは、前記ウェーブレット木形式で記憶した前記サンプル距離データに対して、前記区間の範囲によって特定される前記第１軸上の範囲であって、かつ、前記一文字前接尾辞特定処理の実行回数に１を加えた値以上の前記第２軸上の範囲に前記サンプル距離値を示す点が存在する場合、前記一文字前接尾辞特定処理実行部に前記一文字前接尾辞特定処理を実行させる必要があると判定することを特徴とする請求項７に記載の文書検索方法。
【請求項９】
前記文書内位置特定ステップは、
予め設定された文字数間隔で、前記接尾辞と当該接尾辞の文書内位置とを対応付けた文書内位置データを生成するステップと、
前記文字数間隔に位置しない接尾辞であっても、当該接尾辞の前記接尾辞配列データにおける位置を中心とする、ユーザが指定した大きさの前記接尾辞の１文字前にある文字が、当該接尾辞の１文字前にある文字と一致しない場合、当該接尾辞の前記文書内位置データを生成するステップと、を含むことを特徴とする請求項６から請求項８のいずれか一つに記載の文書検索方法。
【請求項１０】
前記方法は、前記接尾辞の文書内位置が前記文書内位置特定部によって特定された場合、前記プロセッサが前記特定した文書内位置を表示する表示ステップを含み、
前記表示ステップでは、ある接尾辞の前記文書内位置を前記一文字前接尾辞特定処理実行ステップに前記一文字前接尾辞特定処理を実行させて特定した場合に、前記文書内位置が重複する場合、重複した文書内位置を一つの文書内位置として表示することを特徴とすることを特徴とする請求項９に記載の文書検索方法。
【請求項１１】
プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備える文書検索システムにおいて、検索キーワードの入力を受け付け、文書における前記入力された検索キーワードの文書内位置を検索する処理を前記プロセッサに実行させるプログラムにおいて、
前記処理は、
前記文書を構成する接尾辞を辞書順に並べた接尾辞配列データを前記プロセッサに生成させる接尾辞配列データ生成ステップと、
前記接尾辞配列データにおいて前記辞書順に並べられた接尾辞のうち一部の接尾辞の文書内位置を前記プロセッサにサンプリングさせるサンプリングステップと、
前記文書内で前記接尾辞の前にある一文字を追加した接尾辞の前記接尾辞配列データにおける対応個所を特定する一文字前接尾辞特定処理を前記プロセッサに実行させる一文字前接尾辞特定処理実行ステップと、
前記サンプリングステップによって前記文書内位置がサンプリングされなかった前記接尾辞に対して、前記一文字前接尾辞特定処理を繰り返し実行することによって、当該接尾辞の直近のサンプリングされた接尾辞の文書内位置に基づいて、当該接尾辞の文書内位置を前記プロセッサに特定させる文書内位置特定ステップと、を含み、
前記文書内位置特定ステップでは、前記接尾辞配列データから前記検索キーワードから始まる区間に含まれる接尾辞を特定し、前記特定した接尾辞の一文字前にある文字が一致するすべての接尾辞の中から最初の接尾辞及び最後の接尾辞を特定し、
前記一文字前接尾辞特定処理実行ステップでは、前記特定した最初の接尾辞及び最後の接尾辞に対して、前記一文字前接尾辞特定処理を実行し、
前記文書内位置特定ステップでは、前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間を、前記接尾辞の一文字前にある文字が一致するすべての接尾辞に対する前記一文字前接尾辞特定処理の結果とし、
前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間に、前記文書内位置がサンプリングされた接尾辞が存在する場合には、当該文書内位置に前記一文字前接尾辞特定処理の実行回数を加算した値を、前記文書内位置がサンプリングされた接尾辞に対応する前記一文字前接尾辞特定処理の実行前の接尾辞の文書内位置に決定し、
前記接尾辞配列データから前記検索キーワードから始まる区間に含まれる全ての接尾辞の文書内位置が特定されない場合には、前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間の接尾辞の一文字前にある文字が一致するすべての接尾辞の中から最初の接尾辞及び最後の接尾辞を特定し、
前記一文字前接尾辞特定処理実行ステップでは、前記文書内位置特定ステップで特定した最初の接尾辞及び最後の接尾辞に対して、前記一文字前接尾辞特定処理を実行することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索キーワードを検索する文書検索システムにおいて、特に、接尾辞配列を用いて検索キーワードを検索する文書検索システムに関する。
【背景技術】
【０００２】
現代社会では、膨大な量の電子文書データがオフィス等において日々作成される。また、膨大な量の電子文書が作成される要因の一つにインターネットの普及が挙げられる。望の情報を含む電子文書データを膨大な量の電子文書データから短時間で検索し、検索結果を出力する文書検索技術は、電子文書データの活用のために必須である。
【０００３】
図２０は、従来の文書検索技術の一例を示す概略図である。
【０００４】
図２０では、検索キーワード（図２０に示す例では、「京都」）を含む文書１０２を検索対象の文書集合データ１０１から接尾辞配列というデータ構造を利用して検索する例について説明する。なお、各文書１０２は、本明細書では単純な文字の並びである文字列として扱われる。
【０００５】
まず、文書集合データに含まれる各文書１０２のすべての接尾辞１０３が抽出される。ここで、接尾辞とは、文字列から先頭の文字を０個以上削った文字列をいう。例えば、「ＡＢＣ＄」という内容の文字列に対する接尾辞は、「ＡＢＣ＄」、「ＢＣ＄」、「Ｃ＄」、及び「＄」である。なお、「＄」は文字列の末尾を示す仮想的な文字であって、コンピュータが文字列の最後の位置を処理するために使用する。
【０００６】
次に、抽出された各接尾辞を辞書順にソートすることによって、ソート結果１０４が生成される。ここで、辞書順とは、ある二つの文字列を先頭の文字から順に比較した場合、先に文字コードが小さい文字が出現する文字列を他方の文字列よりも小さいとみなす順序である。
【０００７】
本明細書では、説明の便宜上、ひらがなは漢字より辞書順が小さいと定義し、ひらがな及び漢字同士の辞書順は５０音順に大小関係を定義する。また、「＄」は、他のすべての文字よりも辞書順が小さいとし、異なる文書に由来する「＄」同士は互いに異なる文字であって、辞書順は文書番号順に大小関係があると定義する。
【０００８】
以下、文字列ｓ１が文字列ｓ２よりも辞書順で小さければ、ｓ１＜ｓ２と表記する。
【０００９】
ソート結果１０４の先頭の接尾辞から順に、接尾辞が抽出された文書を示す文書番号及び当該文書における位置を示す文書位置を記憶した配列を接尾辞配列１０５という。
【００１０】
本明細書では、接尾辞配列１０５の先頭の要素から順番にｃｏｎｔｅｘｔ番号１０８が割り当てられ、接尾辞配列１０５の「ｉ行目」を、ｃｏｎｔｅｘｔ番号１０８を用いて「ｃｏｎｔｅｘｔ  ｉ」と表記する。以下、各接尾辞１０３の、接尾辞配列１０５内での位置と、文書１０２内での位置との混同を防止するために、接尾辞配列１０５内での位置を「ｃｏｎｔｅｘｔ」又は「対応箇所」といい、文書１０２での位置を単に「位置」という。
【００１１】
検索キーワードが文書集合データ１０１の文書１０２に出現する場合、当該検索キーワードから始まる接尾辞が存在する。また、検索キーワードが文書集合データ１０１中に出現する回数と、当該検索キーワードから始まる接尾辞の個数とは等しくなる。さらに、接尾辞は辞書順にソートされているので、同一のキーワードで始まる各接尾辞は接尾辞配列１０５上で連続するｃｏｎｔｅｘｔ範囲１０６に集まる。
【００１２】
図２０では、検索キーワード「京都」は、文書集合データ１０１の文書１０２の中で４回出現する。このため、検索キーワード「京都」で始まる接尾辞の数も４個であり（ソート結果１０４参照）、これら４個の接尾辞は接尾辞配列１０５のｃｏｎｔｅｘｔ番号１０８が「３」〜「６」の範囲１０６に連続して出現する。
【００１３】
このような接尾辞配列１０５の性質を利用し、検索キーワードが出現する文書番号及び文書内位置を計算することによって、検索キーワードを検索することが可能となる。
【００１４】
図２０では、検索キーワード「京都」が出現する文書の番号及び位置は、接尾辞配列１０５のｃｏｎｔｅｘｔ番号１０８「３」〜「６」を参照して、文書０の０文字目と３文字目、文書１の１文字目と４文字目であることが特定できる。なお、検索キーワードに対応する接尾辞のｃｏｎｔｅｘｔ番号１０８の範囲１０６は、二分探索等の公知の方法によって求められる（非特許文献１参照）。
【００１５】
接尾辞配列１０５は、接尾辞が出現する文書番号、及び、当該接尾辞の文書内位置を記憶するので、元の文書１０２のデータよりもデータ容量が大きくなる。接尾辞配列１０５に、各接尾辞の文書番号及び文書内位置の両方が４バイトの整数で記憶される場合、一つの接尾辞に対して８バイトのデータが必要である。
【００１６】
接尾辞配列１０５のデータ容量を削減するために、文書番号及び文書内位置の両方を接尾辞配列１０５に記憶する代わりに、全文書を結合した一つの仮想文書での文書内位置を記憶してもよい。この方法について図２１を用いて説明する。
【００１７】
図２１は、従来の、仮想文書での文書内位置を接尾辞配列に記憶する方法の説明図である。
【００１８】
２００２は、文書番号と、当該文書番号によって特定される文書が属する仮想文書での範囲を示す。２００１は、接尾辞配列１０５に記憶される仮想文書での文書内位置を示す。
【００１９】
仮想文書での文書内位置２００１と各文書の範囲２００２とが照合されることによって、文書番号及び文書内位置２００３が算出できる。例えば、文書内位置２００１の先頭には「３７５」が格納されており、各文書の範囲２００２を参照すると「３７５」は、仮想文書で「３４６」〜「４５６」文字目が対応する文書番号「３」に属し、また「３７５＝３４６＋２９」である。このため、仮想文書での文書内位置「３７５」は文書番号「３」の「２９」番目の文字であると計算できる。
【００２０】
上述のように仮想文書を用いて文書番号を接尾辞配列１０５に記憶しないようにしても、仮想文書の文書内位置を記憶するために、依然として４バイトのデータが必要となる。日本語ＵＴＦ-８では、一文字あたり３バイトで表現できるので、この場合の接尾辞配列１０５のデータ容量は、元の文書１０２データ容量の４／３＝１．３倍となる。
【００２１】
さらに、接尾辞配列１０５のデータ容量削減のために、文書内位置のサンプリング、及びＬＦ−ｍａｐｐｉｎｇ技術を用いることが知られている（例えば、特許文献２参照）。
【００２２】
サンプリングとは、すべての接尾辞１０３の取得位置を接尾辞配列１０５に記憶する代わりに、所定の文字数間隔（サンプリング間隔）ｂで抽出した接尾辞の取得位置のみを接尾辞配列１０５に記憶する技術である。
【００２３】
図２２の左側の接尾辞配列１０５では、すべての接尾辞に対し文書番号及び文書内位置が格納されている。これに対して、右側の接尾辞配列２０４は、ｂ＝４文字間隔で文書番号及び文書内位置をサンプリングし、サンプリングされた文書番号及び文書内位置を格納する。これによって、接尾辞配列２０４のデータ量は、接尾辞配列の１０５のデータ量の１／４となる。
【００２４】
ここで、４文字間隔とは、サンプリングされる接尾辞の先頭の文字の元の文書での位置が４文字おきであることを意味し、例えば、元の文書の位置が０番目の文字から始まる接尾辞、４番目の文字から始まる接尾辞、及び８番目の文字から始まる接尾辞・・・の位置がサンプリングされる。
【００２５】
サンプリングされていない接尾辞１０４には文書番号及び文書内位置の情報がないため、サンプリングされた接尾辞１０４の文書番号及び文書内位置を用いて、サンプリングされていない接尾辞の文書番号及び文書内位置を計算する必要がある。この場合、非特許文献２に記載のＬＦ−ｍａｐｐｉｎｇ処理（本明細書では、「一文字前接尾辞特定処理」という呼称も併用する）を用いる。ＬＦ−ｍａｐｐｉｎｇ処理とは、ｃｏｎｔｅｘｔ番号iが与えられ、ｃｏｎｔｅｘｔ  iの接尾辞が文書ｄの位置ｐから始まる場合、同じ文書ｄで位置ｐ−１から始まる接尾辞のｃｏｎｔｅｘｔ番号を計算する方法である。そのｃｏｎｔｅｘｔ番号を、以下ではＬＦ（ｉ）と表記する。また、接尾辞又はｃｏｎｔｅｘｔにＬＦ−ｍａｐｐｉｎｇを適用するという場合は、それらが対応するｃｏｎｔｅｘｔ番号ｉに対しＬＦ（ｉ）を計算する処理を指す。
【００２６】
図２２は、従来のＬＦ−ｍａｐｐｉｎｇ処理による文書番号及び文書内位置の計算方法の説明図である。
【００２７】
例えば、図２２では、「特徴づける機能...」の接尾辞２０１は、文書番号及び文書内位置の情報がサンプリングされていない。接尾辞２０１のｃｏｎｔｅｘｔに対して、一回ＬＦ−ｍａｐｐｉｎｇ処理が実行されると、左側に１文字ずれた「を特徴づける機...」の接尾辞２０２のｃｏｎｔｅｘｔ番号を取得できる。さらにもう一度ＬＦ−ｍａｐｐｉｎｇ処理が実行されると、「品を特徴づける機能...」の接尾辞２０３のｃｏｎｔｅｘｔ番号を取得できる。
【００２８】
この接尾辞２０３の文書番号及び文書内位置２０５がサンプリングされており、文書「５６６」の位置「６７２」から始まる接尾辞であることを特定できる。
【００２９】
「特徴づける機能...」の接尾辞２０１は、「品を特徴づける機能...」の接尾辞２０３の２文字右側であるので、文書「５６６」の位置「６７４」から始まる接尾辞である。
【００３０】
同様に任意のｃｏｎｔｅｘｔに対し、繰り返しＬＦ−ｍａｐｐｉｎｇ処理が実行されれば、当該ｃｏｎｔｅｘｔに対応する文書番号及び文書内位置を特定できる。
【００３１】
なお、ＬＦ−ｍａｐｐｉｎｇ処理が実行されるためには、ＢＷＴ（例えば、非特許文献２参照）という文字列１０７を構築する必要がある。ＢＷＴはBurrows-Wheeler Transformの略であり、各々のソートされた接尾辞１０４について、元の文書で１文字左に出現する文字を並べて得られる文字列である。ただし、文書全体に一致する接尾辞は左の文字が存在しないが、便宜上、その文書の末尾を表す「＄」をＢＷＴに挿入する。例えば、図２０の例のＢＷＴは「市市都小府と＄都都＄京京京京都」である。
【００３２】
ＢＷＴを非特許文献２に記載されたウェーブレット木形式で格納すれば、ＬＦ−ｍａｐｐｉｎｇ処理を効率よく計算できることが知られている。なお、本明細書では、ＢＷＴのｉ番目の文字をＢＷＴ［ｉ］と記載する。
【００３３】
接尾辞の文書番号及び文書内位置をサンプリングすると、検索キーワードで始まる接尾辞が出現するｃｏｎｔｅｘｔ範囲を２分探索により求めることが困難になるが、非特許文献２に記載されているbackward searchと呼ばれる技術を使えば、検索キーワードに対応するｃｏｎｔｅｘｔ範囲を計算できる。
【先行技術文献】
【特許文献】
【００３４】
【非特許文献１】Gusfield, D., Algorithms on strings, trees and sequences, Cambridge university press, 1997.
【非特許文献２】Navarro, G. and Makinen, V., Compressed full-text indexes, ACM Computing Surveys 39(1): Article 2, 2007.
【発明の概要】
【発明が解決しようとする課題】
【００３５】
図２３は、検索キーワード「特徴」が出現する文書番号及び文書内位置の算出する従来法の説明図である。
【００３６】
検索キーワードに対応するｃｏｎｔｅｘｔ範囲３０１は、非特許文献２に記載されたbackward searchによって算出できる。
【００３７】
しかし、このｃｏｎｔｅｘｔ範囲３０１には、文書番号及び文書内位置がサンプリングされている接尾辞は二つしかない。このため、他の接尾辞の文書番号及び文書内位置はＬＦ−ｍａｐｐｉｎｇ処理を実行することによって特定する必要がある。
【００３８】
ここで、ｃｏｎｔｅｘｔ範囲３０１のすべての接尾辞の文書番号及び文書内位置が特定されるために実行されるＬＦ−ｍａｐｐｉｎｇ処理を、図２３の破線の矢印３０２で示した。図２３では、合計７回のＬＦ−ｍａｐｐｉｎｇ処理が必要となる。
【００３９】
ここで、検索キーワードがで始まる接尾辞のｃｏｎｔｅｘｔの数をｎ、サンプリング間隔をbとすれば、平均ｎ（ｂ−１）／２回のLF-mapping処理が必要である。
【００４０】
ｎはキーワードの出現回数であるので、文書中に高頻度で出現するキーワードではｗが非常に大きくなり、このＬＦ−ｍａｐｐｉｎｇ処理の実行回数が検索性能のボトルネックになる。このため、大規模な検索システムへの適用は困難であった。
【００４１】
本発明は、検索キーワードが出現する文書内位置を計算するために必要なＬＦ−ｍａｐｐｉｎｇ処理（一文字前接尾辞特定処理）の実行回数を削減する文書検索システムを提供することを目的とする。
【課題を解決するための手段】
【００４２】
本発明の代表的な一例を示せば、プログラムを実行するプロセッサと、前記プロセッサによって実行されるプログラムを格納するメモリと、を備え、検索キーワードの入力を受け付け、文書における前記入力された検索キーワードの文書内位置を検索する文書検索システムであって、前記プロセッサが、前記文書を構成する接尾辞を辞書順に並べた接尾辞配列データを生成する接尾辞配列データ生成部と、前記プロセッサが、前記接尾辞配列データにおいて前記辞書順に並べられた接尾辞のうち一部の接尾辞の文書内位置をサンプリングするサンプリング部と、前記プロセッサが、前記文書内で前記接尾辞の前にある一文字を追加した接尾辞の前記接尾辞配列データにおける対応箇所を特定する一文字前接尾辞特定処理を実行する一文字前接尾辞特定処理実行部と、前記プロセッサが、前記サンプリング部によって前記文書内位置がサンプリングされなかった前記接尾辞に対して、前記一文字前接尾辞特定処理を繰り返し実行することによって、当該接尾辞の直近のサンプリングされた接尾辞の文書内位置に基づいて、当該接尾辞の文書内位置を特定する文書内位置特定部と、を備え、前記文書内位置特定部は、前記接尾辞配列データから前記検索キーワードから始まる区間に含まれる接尾辞を特定し、前記特定した接尾辞の一文字前にある文字が一致するすべての接尾辞の中から最初の接尾辞及び最後の接尾辞を特定し、前記一文字前接尾辞特定処理実行部は、前記特定した最初の接尾辞及び最後の接尾辞に対して、前記一文字前接尾辞特定処理を実行し、前記文書内位置特定部は、前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間を、前記接尾辞の一文字前にある文字が一致するすべての接尾辞に対する前記一文字前接尾辞特定処理の結果とし、前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間に、前記文書内位置がサンプリングされた接尾辞が存在する場合には、当該文書内位置に前記一文字前接尾辞特定処理の実行回数を加算した値を、前記文書内位置がサンプリングされた接尾辞に対応する前記一文字前接尾辞特定処理の実行前の接尾辞の文書内位置に決定し、前記接尾辞配列データから前記検索キーワードから始まる区間に含まれる全ての接尾辞の文書内位置が特定されない場合には、前記最初の接尾辞及び最後の接尾辞に対する前記一文字前接尾辞特定処理の実行によって特定された二つの接尾辞に挟まれる区間の接尾辞の一文字前にある文字が一致するすべての接尾辞の中から最初の接尾辞及び最後の接尾辞を特定し、前記一文字前接尾辞特定処理実行部は、前記特定した最初の接尾辞及び最後の接尾辞に対して、前記一文字前接尾辞特定処理を実行することを特徴とする。
【発明の効果】
【００４３】
本発明によれば、検索キーワードが出現する文書内位置を計算するために必要な一文字前接尾辞特定処理の実行回数を削減する文書検索システムを提供できる。
【図面の簡単な説明】
【００４４】
【図１】本発明の第１実施形態の文書検索装置の構成の説明図である。
【図２】本発明の第１の実施形態の接尾辞配列、ＢＷＴ及びサンプリングされた接尾辞配列の構築処理の概要の説明図である。
【図３】本発明の第１実施形態の接尾辞配列、ＢＷＴ、及びサンプリングされた接尾辞配列の構築処理のデータの流れの説明図である。
【図４】本発明の第１実施形態のサンプリング手段によって実行されるサンプリング処理のフローチャートである。
【図５】本発明の第１実施形態の検索手段による検索処理のデータの流れの説明図である。
【図６】本発明の第１実施形態の文書内位置特定処理のフローチャートである。
【図７】本発明の第１実施形態のＢＷＴが同じ文字の接尾辞のＬＦ−ｍａｐｐｉｎｇ先が連続区間であることの第１説明図である。
【図８】本発明の第１実施形態のＢＷＴが同じ文字の接尾辞のＬＦ−ｍａｐｐｉｎｇ先が連続区間であることの第２説明図である。
【図９】本発明の第１実施形態の文書内位置特定処理の説明図である。
【図１０】本発明の第２実施形態の文書検索装置の構成の説明図である。
【図１１】本発明の第２実施形態の接尾辞配列、ＢＷＴ、サンプリングされた接尾辞配列、サンプル距離配列の構築処理の概要の説明図である。
【図１２】本発明の第２実施形態の接尾辞配列、ＢＷＴ、サンプリングされた接尾辞配列、及びサンプル距離配列の構築処理のデータの流れの説明図である。
【図１３】本発明の第２実施形態のサンプリング処理のフローチャートである。
【図１４】本発明の第２実施形態のサンプル距離配列を格納するウェーブレット木のデータ構造の説明図である。
【図１５】本発明の第２実施形態の検索手段による検索処理のデータの流れの説明図である。
【図１６】本発明の第２実施形態の文書内位置特定処理の説明図である。
【図１７】本発明の第３実施形態の追加サンプリングされた接尾辞の説明図である。
【図１８】本発明の第３実施形態の追加サンプリング処理のフローチャートである。
【図１９】本発明の第３実施形態の２００４年に出願公開された特許出願のうち、追加サンプリングされる文字数の説明図である。
【図２０】従来の、文書検索技術の一例を示す概略図である。
【図２１】従来の、仮想文書での文書内位置を接尾辞配列に記憶する方法の説明図である。
【図２２】従来の、ＬＦ−ｍａｐｐｉｎｇ処理による文書番号及び文書内位置の計算方法の説明図である。
【図２３】従来の、検索キーワード「特徴」が出現する文書番号及び文書内位置の算出方法の説明図である。
【発明を実施するための形態】
【００４５】
以下、本発明の実施の形態について図面を参照しつつ説明する。
【００４６】
（第１の実施形態）
以下、本発明の第１実施の形態について、図１〜図９を用いて説明する。
【００４７】
図１は、本発明の第１実施形態の文書検索装置１の構成の説明図である。
【００４８】
文書検索装置１は、ＣＰＵ（Central Processing Unit）（プロセッサ）４０１、主記憶装置（メモリ）４０２、補助記憶装置４０３、リムーバブルメディア４０４、及びユーザインタフェース部４０６を備える。この文書検索装置１は、ＬＡＮ（Local Area Network）等のネットワーク４０５を介して外部のネットワークに接続されている。
【００４９】
ＣＰＵ４０１は、主記憶装置４０２に格納されたプログラム（接尾辞配列構築手段４０７、ＢＷＴ構築手段４０８、サンプリング手段４０９、及び、検索手段４１０の機能を実現するプログラム）を実行する中央演算装置である。
【００５０】
接尾辞配列構築手段４０７は、文書集合データ１０１から接尾辞配列１０５（図２参照）を構築する。
【００５１】
ＢＷＴ構築手段４０８は、接尾辞配列の各接尾辞の一つ前の文字を格納した配列であるＢＷＴ１０７を構築する。
【００５２】
サンプリング手段４０９は、接尾辞配列１０５の一部の接尾辞の文書内位置をサンプリングし、サンプリングされた接尾辞配列を構築する。
【００５３】
検索手段４１０は、文書検索装置１に入力された検索キーワードを含む文書及び当該検索キーワードの文書内位置を検索する。
【００５４】
主記憶装置４０２は、接尾辞配列構築手段４０７、ＢＷＴ構築手段４０８、サンプリング手段４０９、及び、検索手段４１０の機能を実現するプログラム、当該プログラムの実行に用いるサンプリングされた接尾辞配列２０４、及びＢＷＴ１０７等を記憶するＲＡＭ（Random Access Memory）等の記憶装置である。文書集合データ１０１、及び接尾辞配列１０５も、必要があれば一時的に記憶する。補助記憶装置４０３は、文書集合データ１０１、サンプリングされた接尾辞配列２０４、及びＢＷＴ１０７等を記憶するＨＤＤ等の記憶装置である。
【００５５】
リムーバブルメディア４０４は、文書集合データ１０１、サンプリングされた接尾辞配列２０４、及びＢＷＴ１０７等を記録したＣＤ−ＲＯＭ及びＤＶＤ等の記録媒体である。補助記憶装置４０３及びリムーバブルメディア４０４に記録された各データは、必要に応じて文書検索装置１の起動時に主記憶装置４０２に読み出される。
【００５６】
ユーザインタフェース部４０６は、ユーザインタフェースを提供する入出力装置（例えば、キーボード、マウス、及びディスプレイ等）である。
【００５７】
以上に示す装置構成において、ＣＰＵ４０１は、主記憶装置４０２、補助記憶装置４０３、リムーバブルメディア４０４、又は、ネットワーク４０５を介した外部から、必要に応じて文書集合データ１０１を取得する。その後、ＣＰＵ４０１は、取得した文書集合データ１０１に基づいて、接尾辞配列、ＢＷＴ１０７、及びサンプリングされた接尾辞配列２０４を構築する。
【００５８】
なお、接尾辞配列構築手段４０７、ＢＷＴ構築手段４０８、サンプリング手段４０９、及び検索手段４１０は、これらのプログラムが他の計算機によって実行されることによって実現されてもよい。このため、接尾辞配列手段４０７、ＢＷＴ構築手段４０８、サンプリング手段４０９、及び検索手段４１０を実現する計算機をまとめて、文書検索システムという。
【００５９】
図２は、本発明の第１の実施形態の接尾辞配列１０５、ＢＷＴ１０７及びサンプリングされた接尾辞配列２０４の構築処理の概要の説明図である。
【００６０】
（１）接尾辞配列１０５の構築
まず、接尾辞配列構築手段４０７は、文書検索装置１に入力された文書集合データ１０１に基づいて、接尾辞配列１０５を構築する。具体的には、接尾辞配列構築手段４０７は、文書集合データ１０１に含まれるすべての文書１０２（図２０参照）のすべての接尾辞１０３を抽出する。次に、接尾辞配列構築手段４０７は、抽出された各接尾辞を辞書順にソートすることによって、ソート結果１０４（図７参照）を生成し、接尾辞配列１０５を構築する。接尾辞配列構築手段４０７によって構築される接尾辞配列１０５は、すべての接尾辞の文書番号及び文書内位置を含む。
【００６１】
なお、接尾辞配列構築手段４０７は、他の方法によって接尾辞配列１０５を構築してもよい。接尾辞配列１０５を構築する他の具体的な方法は、例えば、Puglisi et al., A taxonomy of suffix array construction algorithms, ACM computing surveys, 39(2):Article 4, 2007に記載されている。
【００６２】
（２）ＢＷＴ１０７の構築
ＢＷＴ構築手段４０８は、接尾辞配列１０５の各接尾辞のＢＷＴ１０７を構築する。具体的には、ＢＷＴ構築手段４０８は、接尾辞配列１０５において、ｃｏｎｔｅｘｔ  ｉの文書番号が「ｄ」で文書内位置が「ｐ」であれば、文書ｄの位置「ｐ−１」の文字をＢＷＴのｉ番目の文字ＢＷＴ[ｉ]にセットすればよい。ただし、ｐ＝０である場合、ＢＷＴ[ｉ]に「＄」をセットする。
【００６３】
なお、ＢＷＴ構築手段４０８は、他の方法によってＢＷＴ１０７を構築してもよい。ＢＷＴ１０７を構築する他の具体的な方法は、例えば、Makinen, V. and Navarro, G., Dynamic entropy-compressed sequences and full-text indexes, ACM Transactions on algorithms, 4(3):Article 32, 2008に記載されている。
【００６４】
（３）接尾辞配列１０５のサンプリング
サンプリング手段４０９は、接尾辞配列１０５の文書内位置pがサンプリング間隔bで割り切れる接尾辞の文書番号及び文書内位置を抽出する（サンプリングする）ことによってサンプリングされた接尾辞配列２０４を構築する。なお、サンプリング手段４０９による処理は、図４で詳細を説明する。
【００６５】
図３は、本発明の第１実施形態の接尾辞配列１０５、ＢＷＴ１０７、及びサンプリングされた接尾辞配列２０４の構築処理のデータの流れの説明図である。
【００６６】
まず、ユーザインタフェース部４０６を介して文書集合データ１０１が文書検索装置１に入力され、ＣＰＵ４０１は、入力された文書集合データをメモリ４０２に格納する。文書集合データ１０１は、ユーザインタフェース部４０６に限らず、補助記憶装置４０３、リムーバブルメディア４０４、又はネットワーク４０５を介して文書検索装置１に入力してもよい。
【００６７】
次に、ＣＰＵ４０１は、接尾辞配列構築手段４０７として機能するプログラムを実行し、メモリ４０２上に接尾辞配列１０５を構築する。
【００６８】
次に、ＣＰＵ４０１は、ＢＷＴ構築手段４０８として機能するプログラムを実行し、接尾辞配列１０５の各ｃｏｎｔｅｘｔに対応する文書番号及び文書内位置を参照し、メモリ４０２上でＢＷＴ１０７を構築し、構築したＢＷＴ１０７をウェーブレット木形式で補助記憶装置４０３又はネットワーク４０５に接続される記憶領域に格納する。
【００６９】
次に、ＣＰＵ４０１は、サンプリング手段４０９として機能するプログラムを実行し、文書内位置がサンプリング間隔で割り切れる接尾辞の文書番号及び文書内位置を抽出し、抽出した文書番号及び文書内位置をサンプリングされた接尾辞配列２０４として補助記憶装置４０３又はネットワーク４０５に接続される記憶領域に格納する。
【００７０】
ＣＰＵ４０１は、以上の処理の実行が終了すると、構築処理終了通知をユーザインタフェース部４０６に出力する。
【００７１】
このため、接尾辞配列１０５は補助記憶装置４０３に格納されることはなく、サンプリングされた接尾辞配列２０４が補助記憶装置４０３に格納される。このため、検索キーワードの文書内位置を検索する場合、サンプリングされた接尾辞配列２０４に基づいて、文書内位置が検索される。
【００７２】
図４は、本発明の第１実施形態のサンプリング手段４０９によって実行されるサンプリング処理のフローチャートである。サンプリング処理は、ＣＰＵ４０１によって実行される。
【００７３】
まず、ＣＰＵ４０１は、文書番号を示す変数ｄに「０」をセットする（Ｓ７０１）。そして、ＣＰＵ４０１は、サンプリング間隔を示す変数ｂにパラメータとして与えられるサンプリング間隔をセットする（Ｓ７０２）。
【００７４】
ＣＰＵ４０１は、すべての文書に対してサンプリング処理を実行したか否かを判定するために、変数ｄがすべての文書数以上であるか否かを判定する（Ｓ７０３）。
【００７５】
Ｓ７０３の処理で、すべての文書に対してサンプリング処理が実行されたと判定された場合、つまり、変数ｄがすべての文書数以上であると判定された場合（Ｓ７０３：ＹＥＳ）、サンプリング処理を終了する。
【００７６】
一方、Ｓ７０３の処理で、すべての文書に対してサンプリング処理が実行されていないと判定された場合、つまり、変数ｄがすべての文書数未満であると判定された場合（Ｓ７０３：ＮＯ）、ＣＰＵ４０１は、文書内位置を示す変数ｐに文書番号を示す変数ｄによって特定される文書の文書長をセットし、ｃｏｎｔｅｘｔを示す変数ｉに文書番号を示す変数ｄにセットされた値をセットする（Ｓ７０４）。
【００７７】
Ｓ７０４の処理で、ｃｏｎｔｅｘｔを示す変数ｉに変数ｄにセットされた値をセットする理由について説明する。
【００７８】
Ｓ７０４では、文書内位置を示す変数ｐには、変数ｄによって特定される文書の文書長がセットされるため、変数ｐが示す文書内位置は、当該文書の最後の接尾辞である「＄」となる。この接尾辞「＄」は前述の通り、「＄」以外のすべての文字よりも辞書順が小さく、「＄」同士では文書番号によって辞書順が決まるので、当該接尾辞「＄」の接尾辞配列１０５におけるｃｏｎｔｅｘｔ番号は文書番号を示す変数ｄと同じ値となる。このため、Ｓ７０４の処理では、変数ｉに変数ｄにセットされた値をセットする。
【００７９】
以降の処理で当該ｃｏｎｔｅｘｔからＬＦ−ｍａｐｐｉｎｇ処理（一文字前接尾辞特定処理）が繰り返し実行されるので、本サンプリング処理では、文書番号を示す変数ｄによって特定される文書を右から左に走査しつつサンプリングするか否かを判定していくことになる。
【００８０】
次に、ＣＰＵ４０１は、サンプリングの要否判定処理を実行する（Ｓ７０５）。具体的には、ＣＰＵ４０１は、文書内位置を示す変数ｐがサンプリング間隔を示す変数ｂで割り切れる場合、サンプリングが必要と判定し、変数ｐが変数ｂで割り切れない場合、サンプリングは不要と判定する。
【００８１】
Ｓ７０５の処理で、サンプリングが必要と判定された場合、ＣＰＵ４０１は、接尾辞配列１０５のｃｏｎｔｅｘｔ  ｉの文書番号を変数ｄの値から、文書内位置を変数ｐの値から抽出し、抽出した文書番号及び文書内位置をサンプリングされた接尾辞配列２０４に格納し（Ｓ７０６）、Ｓ７０７の処理に移行する。
【００８２】
一方、Ｓ７０５の処理で、サンプリングが不要と判定された場合、直ちにＳ７０７の処理に移行する。
【００８３】
ＣＰＵ４０１は、変数ｄによって特定される文書のすべての文字に対してサンプリングの要否を判定したか否かを判定する（Ｓ７０７）。具体的には、ＣＰＵ４０１は、文書内位置を示す変数ｐが０より大きければ、文書内位置が文書の先頭に達しておらず、変数ｄによって特定される文書のすべての文字に対してサンプリングの要否を判定していないとする。一方、ＣＰＵ４０１は、文書内位置を示す変数ｐが０以下であれば、文書内位置が文書の先頭に達しており、変数ｄによって特定される文書のすべての文字に対してサンプリングの要否を判定したものとする。
【００８４】
Ｓ７０７の処理で、変数ｄによって特定される文書に未処理の位置があると判定された場合、ＣＰＵ４０１は、文書内位置を示す変数ｐから１を減じた値を変数ｐにセットし、ｃｏｎｔｅｘｔを示す変数ｉにＬＦ（ｉ）をセットし（Ｓ７０８）、Ｓ７０５の処理に移行する。ＬＦ（ｉ）は、ｃｏｎｔｅｘｔ  ｉにＬＦ−ｍａｐｐｉｎｇ処理を実行することによって、ｃｏｎｔｅｘｔ  ｉが示す接尾辞の一文字左（一文字前）の接尾辞のｃｏｎｔｅｘｔを示す。
【００８５】
一方、Ｓ７０７の処理で、変数ｄによって特定される文書に未処理の位置がないと判定された場合、ＣＰＵ４０１は、文書番号を示す変数ｄに１を加えた値を変数ｄにセットし（Ｓ７０９）、Ｓ７０３の処理に移行する。
【００８６】
以上によって、サンプリング間隔の接尾辞ごとに文書番号及び文書内位置を抽出したサンプリングされた接尾辞配列２０４が構築される。
【００８７】
図５は、本発明の第１実施形態の検索手段４１０による検索処理のデータの流れの説明図である。
【００８８】
まずＣＰＵ４０１は、ＢＷＴ構築手段４０８が構築したＢＷＴ１０７及びサンプリング手段４０９が構築したサンプリングされた接尾辞配列２０４を補助記憶装置４０３、リムーバブルメディア４０４又はネットワーク４０５を介して接続される記憶領域からメモリ４０２上にロードする（５０３、５０４）。
【００８９】
次に、ユーザインタフェース部４０６を介してユーザから検索キーワードが文書検索装置１に入力される（５０５）。
【００９０】
ＣＰＵ４０１は、検索キーワードが入力された場合、サンプリングされた接尾辞配列２０４を参照し、検索キーワードから始まる接尾辞の範囲であるｃｏｎｔｅｘｔ範囲を取得する（５０６）。
【００９１】
そして、ＣＰＵ４０１は、ＢＷＴ１０７を参照し、５０６の処理で取得したｃｏｎｔｅｘｔ範囲の各接尾辞のＢＷＴ１０７を取得する（５０７）。
【００９２】
文書番号及び文書内位置はサンプリング間隔で抽出されているので、５０６の処理で取得したｃｏｎｔｅｘｔ範囲に属するすべてのｃｏｎｔｅｘｔの文書番号及び文書内位置が抽出されているとは限らない。このため、ＣＰＵ４０１は、５０７の処理で取得したＢＷＴ１０７を用いて、ｃｏｎｔｅｘｔ範囲に属するｃｏｎｔｅｘｔにＬＦ−ｍａｐｐｉｎｇ処理を繰り返し実行することによって、ｃｏｎｔｅｘｔ範囲に属するすべてのｃｏｎｔｅｘｔの文書番号及び文書内位置を特定し（５０８）、検索キーワードが出現する文書番号及び文書内位置をユーザインタフェース部４０６に表示する（５０９）。
【００９３】
なお、５０６〜５０８の処理（文書内位置特定処理；文書内位置特定部）は、図６〜図１０で詳細を説明する。
【００９４】
図６は、本発明の第１実施形態の文書内位置特定処理のフローチャートである。文書内位置特定処理は、検索手段４１０の機能の一部であり、ＣＰＵ４０１によって実行される。以下、図６の処理について説明する。処理例を、図９を用いて後述する。
【００９５】
まず、ＣＰＵ４０１は、サンプリングされた接尾辞配列２０４を参照し、検索キーワードｗで始まる接尾辞が出現するｃｏｎｔｅｘｔの範囲を求める（Ｓ９０１）。また、接尾辞１０３は辞書順にソートされているので、検索キーワードｗで始まる接尾辞はある範囲に集まっている。このような、特定のキーワードで始まる接尾辞が出現するｃｏｎｔｅｘｔの範囲を以下ではｃｏｎｔｅｘｔ範囲といい、当該範囲を［ｃ１、ｃ２］と表記する。ここに、ｃ１はｃｏｎｔｅｘｔ範囲の最初のｃｏｎｔｅｘｔ番号（開始ｃｏｎｔｅｘｔ番号）であり、ｃ２はｃｏｎｔｅｘｔ範囲の最後のｃｏｎｔｅｘｔ番号（終了ｃｏｎｔｅｘｔ番号）である。なお、検索キーワードｗが検索対象文書集合１０１に存在しない場合は、ｃｏｎｔｅｘｔ範囲［ｃ１，ｃ２］が存在せず、以降の処理は行なわない。
【００９６】
なお、Ｓ９０１でｃｏｎｔｅｘｔ範囲を求める具体的な方法には、非特許文献２に記載されたｂａｃｋｗａｒｄ  ｓｅａｒｃｈを用いることができる。
【００９７】
以降の処理では、処理対象となるｃｏｎｔｅｘｔ範囲を示す処理対象集合Ｓ、並びに、検索キーワードｗが出現する位置を計算した結果を格納する集合Ｈを使用する。なお、処理対象集合Ｓの個々の要素は、（１）処理対象となるｃｏｎｔｅｘｔ範囲の開始ｃｏｎｔｅｘｔ番号、（２）終了ｃｏｎｔｅｘｔ番号、及び（３）当該ｃｏｎｔｅｘｔ範囲に至るまでに実行されたＬＦ−ｍａｐｐｉｎｇ処理の実行回数の、３つの値からなる数値の三つ組みである。
【００９８】
ＣＰＵ４０１は、Ｓ９０１で求めたｃｏｎｔｅｘｔ範囲を処理対象集合Ｓにセットし、文書内位置集合Ｈを空集合としてセットする、初期化処理を実行する（Ｓ９０２）。具体的には、ＣＰＵ４０１は、処理対象集合Ｓに、Ｓ９０１の処理で求めたｃｏｎｔｅｘｔ範囲の開始ｃｏｎｔｅｘｔ番号、終了ｃｏｎｔｅｘｔ番号、及びＬＦ−ｍａｐｐｉｎｇ処理実行回数「０」の３つの数値からなる三つ組み（ｃ１、ｃ２、０）をＳの最初の要素として格納する。
【００９９】
なお、Ｓ９０１の処理で、複数のｃｏｎｔｅｘｔ範囲が求められていれば、処理対象集合Ｓには複数の要素がセットされる。
【０１００】
次に、ＣＰＵ４０１は、処理対象集合Ｓが空集合であるか否かを判定する（Ｓ９０３）。
【０１０１】
Ｓ９０３の処理で、処理対象集合Ｓが空集合であると判定された場合、全ｃｏｎｔｅｘｔ範囲の処理が完了しているため、ＣＰＵ４０１は、文書内位置集合Ｈの内容をユーザインタフェース部に出力し（Ｓ９０９）、文書内位置特定処理を終了する。
【０１０２】
一方、Ｓ９０３の処理で、処理対象集合Ｓが空集合でないと判定された場合、ＣＰＵ４０１は、処理対象集合Ｓから任意の一つの要素を取り出す（Ｓ９０４）。Ｓ９０４の処理で取り出された要素を（ｃ１、ｃ２、ｊ）とする。ＣＰＵ４０１は、Ｓ９０４で取り出された要素を処理対象集合Ｓから削除する。
【０１０３】
なお、Ｓ９０４の処理では、ＣＰＵ４０１が、ＬＦ−ｍａｐｐｉｎｇ実行回数（ｊ）が小さい要素から取り出すようにしてもよい。
【０１０４】
次に、ＣＰＵ４０１は、Ｓ９０４の処理で取り出された要素（ｃ１、ｃ２、ｊ）に対して、ＬＦ−ｍａｐｐｉｎｇ処理を実行する必要があるか否かを判定する（Ｓ９０５）。
【０１０５】
具体的には、ＣＰＵ４０１は、Ｓ９０４の処理で取り出された要素に含まれるＬＦ−ｍａｐｐｉｎｇ実行回数（ｊ）がサンプリング間隔（ｂ）未満であれば、ＬＦ−ｍａｐｐｉｎｇ処理の実行が必要と判定し、Ｓ９０４の処理で取り出された要素に含まれるＬＦ−ｍａｐｐｉｎｇ実行回数（ｊ）がサンプリング間隔（ｂ）以上であれば、ＬＦ−ｍａｐｐｉｎｇ処理の実行が不要と判定する。
【０１０６】
ＬＦ−ｍａｐｐｉｎｇ処理が必要か否かの判定に、ＬＦ−ｍａｐｐｉｎｇ実行回数（ｊ）とサンプリング間隔（ｂ）とを用いる理由について説明する。
【０１０７】
所定の文字からサンプリング間隔の間にある文字の文書番号及び文書内位置は必ず抽出されているので、サンプリング間隔の回数だけＬＦ−ｍａｐｐｉｎｇ処理を実行すれば、所定の文字の直近の文字の文書番号及び文書内位置を必ず取得でき、取得した文書番号及び文書内位置から当該所定の文字の文書番号及び文書内位置を特定できる。このため、ＬＦ−ｍａｐｐｉｎｇ実行回数（ｊ）がサンプリング間隔（ｂ）以上であれば、処理の実行が不要と判定するようにしている。
【０１０８】
さらに、Ｓ９０５の処理では、ＣＰＵ４０１は、Ｓ９０１の処理で求められたｃｏｎｔｅｘｔ範囲に含まれるすべての接尾辞の文書内位置が特定されているか否かを判定する処理を追加してもよい。この処理では、ＣＰＵ４０１は、すべての接尾辞の文書内位置が特定されている場合、処理の実行が不要と判定し、すべての接尾辞の文書内位置が特定されていない場合、ＬＦ−ｍａｐｐｉｎｇ処理の実行が必要と判定する。
【０１０９】
具体的には、文書内位置集合Ｈに格納された文書番号及び文書内位置の個数がＳ９０１の処理で求められたｃｏｎｔｅｘｔ範囲に含まれる接尾辞の個数に達している場合、処理の実行が不要と判定し、文書内位置集合Ｈに格納された文書番号及び文書内位置の個数がＳ９０１の処理で求められたｃｏｎｔｅｘｔ範囲に含まれる接尾辞の個数に達していない場合、処理の実行が必要と判定してもよい。
【０１１０】
Ｓ９０５の処理で、ＬＦ−ｍａｐｐｉｎｇ処理の実行が不要であると判定された場合、ＣＰＵ４０１は、Ｓ９０３に処理を移行する。
【０１１１】
一方、Ｓ９０５の処理で、ＬＦ−ｍａｐｐｉｎｇ処理によって文書番号及び文書内位置を取得する処理が必要であると判定された場合、ＣＰＵ４０１は、Ｓ９０４の処理で取得された要素に含まれるｃｏｎｔｅｘｔ範囲で抽出された文書番号及び文書内位置を取得し、取得した文書番号、及び取得した文書内位置にＬＦ−ｍａｐｐｉｎｇ処理実行回数（ｊ）を加えた値を、文書内位置集合Ｈに格納する（Ｓ９０６）。
【０１１２】
ここで、文書内位置集合Ｈに値を格納する場合、文書内位置にＬＦ−ｍａｐｐｉｎｇ処理実行回数（ｊ）を加える理由について説明する。
【０１１３】
Ｓ９０４の処理で取得された要素に含まれるｃｏｎｔｅｘｔ範囲は、Ｓ９０１の処理で求められたｃｏｎｔｅｘｔ範囲（つまり、検索キーワードで始まる接尾辞が出現するｃｏｎｔｅｘｔ範囲）に対してＬＦ−ｍａｐｐｉｎｇ処理がｊ回実行された範囲である。したがって、Ｓ９０４の処理で取得された要素に含まれるｃｏｎｔｅｘｔ範囲の接尾辞の文書内位置は、検索キーワードがで始まる接尾辞からｊ文字左の文字の位置となる。このため、Ｓ９０４の処理で取得された要素に含まれるｃｏｎｔｅｘｔ範囲の接尾辞の文書内位置にＬＦ−ｍａｐｐｉｎｇ実行回数（ｊ）を加えることによって、検索キーワードが出現する文書内位置を算出している。
【０１１４】
Ｓ９０６の処理の実行後、ＣＰＵ４０１は、Ｓ９０４の処理で取得された要素に含まれるｃｏｎｔｅｘｔ範囲のＢＷＴ１０７の文字を取得し、取得した文字を文字集合Ｅに格納する（Ｓ９０７）。なお、ＢＷＴ１０７の文字は、ＢＷＴ１０７を格納するウェーブレット木を走査することによって取得される。この方法は、Makinen, V. and Navarro, G., Rank and select revisited and extended, Theoretical Computer Science 387:322-347, 2007に記載されている。本発明におけるウェーブレット木の使用方法は、図１４を用いて後述する。
【０１１５】
次に、ＣＰＵ４０１は、文字集合Ｅに格納された各文字ａに対して、Ｓ９０４の処理で取得された要素に含まれるｃｏｎｔｅｘｔ範囲においてＢＷＴ１０７が文字ａであるｃｏｎｔｅｘｔ番号が最小のｃｏｎｔｅｘｔ  ｉ１及び最大のｃｏｎｔｅｘｔ  ｉ２に対して、ＬＦ−ｍａｐｐｉｎｇ処理を実行し、これらのｃｏｎｔｅｘｔのＬＦ−ｍａｐｐｉｎｇ先のｃｏｎｔｅｘｔ（ＬＦ（ｉ１）及びＬＦ（ｉ２））を計算する。そして、数値の三つ組（ＬＦ(ｉ１)，ＬＦ（ｉ２），ｊ＋１）を新たな要素として処理対象集合Ｓに格納し（Ｓ９０８）、Ｓ９０３の処理に移行する。
【０１１６】
これによって、ＢＷＴ１０７が同じ文字であるｃｏｎｔｅｘｔ範囲のＬＦ−ｍａｐｐｉｎｇ先のｃｏｎｔｅｘｔ範囲は、当該ｃｏｎｔｅｘｔ範囲のすべてのｃｏｎｔｅｘｔにＬＦ−ｍａｐｐｉｎｇ処理を実行することなく、ＬＦ(ｉ１)，ＬＦ（ｉ２）を計算することのみによって算出できる。換言すれば、あるｃｏｎｔｅｘｔ範囲の全てのＬＦ−ｍａｐｐｉｎｇの結果を、当該ｃｏｎｔｅｘｔ範囲の大きさに関係なく、ＬＦ−ｍａｐｐｉｎｇ処理を２回実行するだけ算出できる。
【０１１７】
以下、この方法でよい理由について、図７及び図８を用いて説明する。
【０１１８】
図７は、本発明の第１実施形態において、ＢＷＴ１０７が同じ文字の接尾辞のＬＦ−ｍａｐｐｉｎｇ先が連続区間であることの、第１説明図である。
【０１１９】
図７及び図８では、検索キーワードは「特徴」であり、ＬＦ−ｍａｐｐｉｎｇ先のｃｏｎｔｅｘｔ範囲を算出するＢＷＴの文字ａが「を」である場合について説明する。
【０１２０】
図７及び図８では、ｃｏｎｔｅｘｔ  ｉ１に対応する接尾辞１０４をｘとし、ｃｏｎｔｅｘｔ  ｉ２に対応する接尾辞１０４をｙとする。ｃｏｎｔｅｘｔ  ｉ１及びｉ２のＬＦ−ｍａｐｐｉｎｇ先はＬＦ（ｉ１）及びＬＦ（ｉ２）とする。
【０１２１】
ｃｏｎｔｅｘｔ  ｉ１のＢＷＴ１０７の文字は「ａ」であるので、ＬＦ（ｉ１）に対応する接尾辞１０４は、ｃｏｎｔｅｘｔ  ｉ１に対応する接尾辞１０４であるｘにａを加えたａｘである。同じく、ＬＦ（ｉ２）に対応する接尾辞１０４はａｙである。
【０１２２】
図７のｃｏｎｔｅｘｔ  ｉ３のＬＦ−ｍａｐｐｉｎｇ先について検討する。ｃｏｎｔｅｘｔ  ｉ３は、ｉ１＜ｉ３＜ｉ２かつＢＷＴ［ｉ３］＝ａを満たすｃｏｎｔｅｘｔである。
【０１２３】
ここで、ｃｏｎｔｅｘｔ  ｉ３に対応する接尾辞１０４をｚとすると、ｉ１＜ｉ３＜ｉ２であるので、ｘ＜ｚ＜ｙが成立する。そして、ｃｏｎｔｅｘｔ  ｉ１〜ｉ３のＢＷＴ１０７はすべてａであるので、ＬＦ−ｍａｐｐｉｎｇ先の接尾辞もａｘ＜ａｚ＜ａｙとなる。このため、ＬＦ−ｍａｐｐｉｎｇ先のｃｏｎｔｅｘｔ番号も、ＬＦ（ｉ１）＜ＬＦ（ｉ３）＜ＬＦ（ｉ２）となる。
【０１２４】
つまり、ＢＷＴ１０７の文字が同一である二つのｃｏｎｔｅｘｔ  ｉ１，ｉ２に挟まれる任意のｃｏｎｔｅｘｔｉ３は、二つのｃｏｎｔｅｘｔとＢＷＴ１０７の文字が同じであれば、ＬＦ−ｍａｐｐｉｎｇ先ＬＦ（ｉ３）でもＬＦ（ｉ１），ＬＦ（ｉ２）に挟まれる。
【０１２５】
図８は、本発明の第１実施形態において、ＢＷＴ１０７が同じ文字の接尾辞のＬＦ−ｍａｐｐｉｎｇ先が連続区間であることの、第２説明図である。
【０１２６】
図８では、ＬＦ（ｉ１）＜ｉ４’＜ＬＦ（ｉ２）を満たす任意のｃｏｎｔｅｘｔ  ｉ４’について検討する。
【０１２７】
この場合、ＬＦ（ｉ１）及びＬＦ（ｉ２）の接尾辞はａで始まるため、ｃｏｎｔｅｘｔ  ｉ４’の接尾辞もａで始まる。このため、ｃｏｎｔｅｘｔ  ｉ４’の接尾辞は、ある文字列ｔを用いてａｔと表記できる。
【０１２８】
ＬＦ（ｉ１）＜ｉ４’＜ＬＦ（ｉ２）であるのでａｘ＜ａｔ＜ａｙであり、ａは同じ文字あるのでｘ＜ｗ＜ｙである。ｘ、ｙは、ＬＦ（ｉ１）及びＬＦ（ｉ２）にＬＦ−ｍａｐｐｉｎｇ処理が実行される前のｃｏｎｔｅｘｔ  ｉ１及びｉ２に対応する接尾辞１０４であり、ｔは、ｉ４’にＬＦ−ｍａｐｐｉｎｇ処理が実行される前のｃｏｎｔｅｘｔ  ｉ４に対応する接尾辞１０４である。このため、ｘ＜ｔ＜ｙが成立するので、ｉ１＜ｉ４＜ｉ２が成立する。したがって、ＬＦ（ｉ１）とＬＦ（ｉ２）に挟まれるｃｏｎｔｅｘｔへＬＦ−Ｍａｐｐｉｎｇされるｃｏｎｔｅｘｔは、全てｉ１とｉ２の間にある。
【０１２９】
以上より、ＢＷＴが同じｃｏｎｔｅｘｔの範囲（［ｉ１、ｉ２］）が、連続領域（［ＬＦ（ｉ１）、ＬＦ（ｉ２）］にＬＦ−ｍａｐｐｉｎｇされることがわかる。したがって、ｃｏｎｔｅｘｔ  ｉ１及びｃｏｎｔｅｘｔ  ｉ２のみに対してＬＦ−ｍａｐｐｉｎｇ処理を実行することによって、連続領域［ｉ１，ｉ２］の全てのｃｏｎｔｅｘｔのＬＦ−ｍａｐｐｉｎｇ結果を、連続領域［ＬＦ（ｉ１）、ＬＦ（ｉ２）］として計算できる。
【０１３０】
図９は、本発明の第１実施形態の文書内位置特定処理の説明図である。
【０１３１】
図６に示す文書内位置特定処理について、図９に示す接尾辞配列を用いて説明する。
【０１３２】
図９では、検索キーワードｗを「特徴」とし、サンプリング間隔ｂは４であるとする。
【０１３３】
Ｓ９０１の処理で、検索キーワードｗで始まる接尾辞に対応するｃｏｎｔｅｘｔ範囲として、ｃ１〜ｃ２の範囲が求められる。
【０１３４】
Ｓ９０２の処理で、処理対象集合Ｓに要素（ｃ１、ｃ２、０）がセットされ、文書内位置集合Ｈは空集合としてセットされる。
【０１３５】
Ｓ９０３の処理では処理対象集合Ｓは空集合ではないと判定され、Ｓ９０４の処理に進み、（ｃ１、ｃ２、０）が取り出される。
【０１３６】
Ｓ９０５の処理では、ＬＦ−ｍａｐｐｉｎｇ実行回数は０であり、サンプリング間隔ｂ＝４より小さいので、処理が必要であると判定し、Ｓ９０６の処理に進む。
【０１３７】
Ｓ９０６の処理では、図９に示すｃ１〜ｃ２のｃｏｎｔｅｘｔ範囲の文書番号及び文書内位置（９５９−８４３２、及び９１３−３３８０）が取得され、文書内位置集合Ｈに格納される。この場合、ＬＦ−ｍａｐｐｉｎｇ実行回数は０であるので、取得された文書内位置がそのまま文書内位置集合Ｈに格納される。
【０１３８】
Ｓ９０７の処理では、図９に示すｃ１〜ｃ２のｃｏｎｔｅｘｔ範囲のＢＷＴ１０７「を」及び「能」が取得され、文字集合Ｅに格納される。
【０１３９】
Ｓ９０８の処理では、文字集合Ｅに格納された「を」のｃｏｎｔｅｘｔのＬＦ−ｍａｐｐｉｎｇ先の範囲とＬＦ−ｍａｐｐｉｎｇ回数、及び、文字集合Ｅに格納された「能」のｃｏｎｔｅｘｔのＬＦ−ｍａｐｐｉｎｇ先の範囲とＬＦ−ｍａｐｐｉｎｇ回数が、処理対象集合Ｓに格納される。
【０１４０】
具体的には、文字集合Ｅに格納された「を」については、ｃｏｎｔｅｘｔ番号が最小のｃ１のＬＦ−ｍａｐｐｉｎｇ先がｃ３、ｃｏｎｔｅｘｔ番号が最大のｃ２のＬＦ−ｍａｐｐｉｎｇ先がｃ４であり、ＬＦ−ｍａｐｐｉｎｇ実行回数は１なので、処理対象集合Ｓには要素（ｃ３、ｃ４、１）が格納される。このＬＦ−ｍａｐｐｉｎｇ処理を図９で１００１として示す。
【０１４１】
また、文字集合Ｅに格納された「能」のｃｏｎｔｅｘｔは一つであり、当該ｃｏｎｔｅｘｔのＬＦ−ｍａｐｐｉｎｇ先はｃ５であり、ＬＦ−ｍａｐｐｉｎｇ実行回数は１回目なので、処理対象集合Ｓには要素（ｃ５、ｃ５、１）が格納される。
【０１４２】
次に、Ｓ９０８の処理が実行された後、Ｓ９０３の処理に戻り、処理対象集合Ｓが空集合か否かが判定されるが、処理対象集合Ｓには、二つの要素があるので、Ｓ９０４の処理に進む。
【０１４３】
Ｓ９０４の処理では、処理対象集合Ｓから要素（ｃ３、ｃ４、１）が取り出されるものとする。
【０１４４】
Ｓ９０５の処理では、Ｓ９０４の処理で取り出された要素のＬＦ−ｍａｐｐｉｎｇ実行回数は１であり、サンプリング回数未満であるので、処理が必要であると判定し、Ｓ９０６の処理に進む。
【０１４５】
Ｓ９０６の処理では、図９に示すｃ３〜ｃ４のｃｏｎｔｅｘｔ範囲の文書番号及び文書内位置（６５８−８５６０、及び９６２−２１７２）が取得され、文書内位置にＬＦ−ｍａｐｐｉｎｇ実行回数「１」が加算された値（６５８−８５６１、及び９６２−２１７３）が文書内位置集合Ｈに格納される。
【０１４６】
Ｓ９０７の処理では、図９に示すｃ３〜ｃ４のｃｏｎｔｅｘｔ範囲のＢＷＴ１０７「品」、「と」及び「能」が取得され、文字集合Ｅに格納される。
【０１４７】
Ｓ９０８の処理では、文字集合Ｅに格納された「品」のｃｏｎｔｅｘｔのＬＦ−ｍａｐｐｉｎｇ先の範囲、文字集合Ｅに格納された「と」のｃｏｎｔｅｘｔのＬＦ−ｍａｐｐｉｎｇ先の範囲、及び、文字集合Ｅに格納された「能」のｃｏｎｔｅｘｔのＬＦ−ｍａｐｐｉｎｇ先の範囲が、ＬＦ−ｍａｐｐｉｎｇ回数（いずれも２）とともに処理対象集合Ｓに格納される。
【０１４８】
このようにして、処理対象集合Ｓに格納された要素のＬＦ−ｍａｐｐｉｎｇ実行回数がサンプリング間隔に達するまで、処理対象集合Ｓに格納されたｃｏｎｔｅｘｔ範囲にＬＦ−ｍａｐｐｉｎｇ処理を実行して、文書番号及び文書内位置を取得する。
【０１４９】
上述したように、本実施形態では、あるｃｏｎｔｅｘｔ範囲のうちＢＷＴが同じｃｏｎｔｅｘｔ範囲に対してＬＦ−ｍａｐｐｉｎｇ処理が実行された範囲（ＬＦ−ｍａｐｐｉｎｇ範囲）を算出する場合、当該ｃｏｎｔｅｘｔ範囲の中でｃｏｎｔｅｘｔ番号が最小のｃｏｎｔｅｘｔ及び最大のｃｏｎｔｅｘｔの二つにのみＬＦ−ｍａｐｐｉｎｇ処理を実行して算出されるＬＦ−ｍａｐｐｉｎｇ先のｃｏｎｔｅｘｔ番号を算出し、算出したｃｏｎｔｅｘｔ番号に挟まれる範囲をＬＦ−ｍａｐｐｉｎｇ範囲として算出する。
【０１５０】
これによって、あるＬＦ−ｍａｐｐｉｎｇ範囲を算出するために実行するＬＦ−ｍａｐｐｉｎｇ処理の実行回数を大幅に減少させることができ、文書検索装置１の処理負荷を軽減できる。
【０１５１】
（第２実施形態）
以下、本発明の第２実施形態を図１０〜図１６を用いて説明する。
【０１５２】
第１実施形態では、Ｓ９０５の処理で、ＬＦ−ｍａｐｐｉｎｇ実行回数がサンプリング間隔未満であれば、処理の実行が必要と判定されるまで、検索キーワードで始まる接尾辞が出現するｃｏｎｔｅｘｔ範囲のすべての接尾辞の文書番号及び文書内位置が特定されていても、ＬＦ−ｍａｐｐｉｎｇ範囲を算出してしまう。
【０１５３】
例えば、図９では、処理対象集合Ｓに対してＬＦ−ｍａｐｐｉｎｇ処理を２回実行すれば、検索キーワードで始まる接尾辞が出現するｃｏｎｔｅｘｔ範囲のすべての接尾辞の文書番号及び文書内位置が特定されるが、まだ、ＬＦ−ｍａｐｐｉｎｇ実行回数がサンプリング回数に達していないので、処理対象集合Ｓに対して３回目のＬＦ−ｍａｐｐｉｎｇ処理が実行されてしまう（図９に示す１００２）。
【０１５４】
第２実施形態は、サンプル距離配列を用いて不要なＬＦ−ｍａｐｐｉｎｇ処理が実行されないようにする実施形態である。
【０１５５】
図１０は、本発明の第２実施形態の文書検索装置２の構成の説明図である。
【０１５６】
第２実施形態の文書検索装置２の構成のうち第１実施形態の文書検索装置１と同じ構成は、同じ符号を付与し、説明を省略する。
【０１５７】
文書検索装置２は、第１実施形態と同じく、ＣＰＵ（Central Processing Unit）４０１、主記憶装置（メモリ）４０２、補助記憶装置４０３、リムーバブルメディア４０４、及びユーザインタフェース部４０６を備える。
【０１５８】
サンプル距離配列１１０１が、メモリ４０２、補助記憶装置４０３、リムーバブルメディア４０４、及び、ネットワーク４０５を介して接続された記憶領域に格納される。
【０１５９】
サンプル距離配列１１０１は、ある接尾辞から文書番号及び文書内位置がサンプリングされた接尾辞まで最小の文字数（距離）が格納された配列である。換言すれば、サンプル距離配列１１０１は、ある接尾辞に対して文書番号及び文書内位置が取得されるまでに実行するＬＦ−ｍａｐｐｉｎｇ処理の回数が格納された配列ともいえる。
【０１６０】
サンプリング手段１１０２は、サンプル距離配列１１０１を生成する点が第１実施形態のサンプリング手段４０９と異なる。
【０１６１】
検索手段１１０３は、サンプル距離配列１１０１を参照して検索キーワードを文書から検索する点が第１実施形態の検索手段と異なる。
【０１６２】
図１１は、本発明の第２実施形態の接尾辞配列１０５、ＢＷＴ１０７、サンプリングされた接尾辞配列２０４、サンプル距離配列１１０１の構築処理の概要の説明図である。
【０１６３】
第２実施形態の構築処理のうち図２に示す第１実施形態の構築処理と同じ処理については、同じ符号を付与し、説明を省略する。
【０１６４】
サンプリング手段１１０２は、サンプリング処理に、接尾辞配列１０５の文書内位置pがサンプリング間隔bで割り切れる接尾辞の文書番号及び文書内位置を抽出する他に、サンプル距離配列１１０１を構築する。第２実施形態のサンプリング処理は、図１３で詳細を説明する。
【０１６５】
図１２は、本発明の第２実施形態の接尾辞配列１０５、ＢＷＴ１０７、サンプリングされた接尾辞配列２０４、及びサンプル距離配列１１０１の構築処理のデータの流れの説明図である。
【０１６６】
第２実施形態の構築処理のデータの流れのうち図３に示す第１実施形態の構築処理のデータ流れと同じものについては説明を省略する。
【０１６７】
図１２では、ＣＰＵ４０１は、サンプリング手段１１０２として機能するプログラムを実行し、サンプル距離配列１１０１をメモリ４０２上で構築し、構築したサンプル距離配列１１０１をウェーブレット木化して、補助記憶装置４０３又はネットワーク４０５に接続される記憶領域に格納する。
【０１６８】
図１３は、本発明の第２実施形態のサンプリング処理のフローチャートである。
【０１６９】
サンプリング処理は、サンプリング手段１１０２の機能の一部であり、ＣＰＵ４０１によって実行される。
【０１７０】
第２実施形態のサンプリング処理のうち図４に示す第１実施形態のサンプリング処理と同じ処理は、同じ符号を付与し、説明を省略する。
【０１７１】
ＣＰＵ４０１は、Ｓ７０１の処理で、文書番号を示す変数ｄに「０」をセットし、Ｓ７０２の処理で、サンプリング間隔を示す変数ｂにサンプリング間隔をセットし、検索対象となるすべての文書の文書長の和に等しい長さの配列Ｄを作成する（Ｓ１４０１）。この配列Ｄにサンプリング距離ｘが格納されることによってサンプル距離配列１１０１が構築される。
【０１７２】
Ｓ７０３の処理で、ＣＰＵ４０１は、変数ｄがすべての文書数以上であるか否かを判定する。
【０１７３】
Ｓ７０３の処理で、変数ｄがすべての文書数以上であると判定された場合、ＣＰＵ４０１は、配列Ｄをウェーブレット木ＴDに格納し（Ｓ１４０６）、サンプリング処理を終了する。
【０１７４】
Ｓ７０３の処理で、変数ｄが検索対象文書数未満であると判定された場合、Ｓ７０４の処理で、ＣＰＵ４０１は、文書内位置を示す変数ｐに変数ｄによって特定される文書の文書長をセットし、ｃｏｎｔｅｘｔを示す変数ｉに変数ｄにセットされた値をセットする。
【０１７５】
次に、ＣＰＵ４０１は、文書番号及び文書内位置がサンプリングされた接尾辞までの距離（サンプル距離）を示す変数ｘに、サンプリング間隔を示す変数ｂにセットされた値をセットする（Ｓ１４０２）。
【０１７６】
なお、Ｓ１４０２の処理で変数ｘにセットされる値は、サンプリング間隔と同じ回数分ＬＦ−ｍａｐｐｉｎｇ処理を実行しても、サンプリングされた文書内位置に到達できないことを示すものであるので、サンプリング間隔ｂ以上の値であれば、ｂの値に一致する必要はない。
【０１７７】
次に、ＣＰＵ４０１は、第１実施形態と同様のＳ７０５の処理を実行し、サンプリングの要否を判定する。Ｓ７０５の処理で、サンプリングが必要と判定された場合、ＣＰＵ４０１は、Ｓ７０６の処理で変数ｐによって特定される文書内位置の接尾辞の文書番号及び文書内位置を抽出する。そして、ＣＰＵ４０１は、サンプル距離を示す変数ｘに「０」をセットし（Ｓ１４０３）、Ｓ１４０５の処理に移行する。
【０１７８】
一方、Ｓ７０５の処理で、サンプリングが不要と判定された場合、ＣＰＵ４０１は、変数ｘにセットされた値に１を加えた値を変数ｘにセットし（Ｓ１４０４）、Ｓ１４０５の処理に移行する。
【０１７９】
ＣＰＵ４０１は、配列Ｄの要素のうちｉ番目に対応する要素に、サンプル距離を示す変数ｘにセットされた値を格納し（Ｓ１４０５）、Ｓ７０７の処理で、変数ｄによって特定される文書のすべての文字に対してサンプリングの要否を判定したか否かを判定する。
【０１８０】
Ｓ１４０５の処理で、変数ｘにセットされた値がサンプリング間隔を示す変数ｂにセットされた値以上である場合、ＣＰＵ４０１は、配列Ｄの要素のうち文書内位置を示す変数ｉに対応する要素に、変数ｂにセットされた値を格納する。
【０１８１】
そして、Ｓ７０７の処理で、変数ｄによって特定される文書の処理が完了していないと判定された場合、ＣＰＵ４０１は、Ｓ７０８の処理に移行し、文書内位置を示す変数ｐの値から１を減じた値を変数ｐにセットし、ｃｏｎｔｅｘｔを示す変数ｉにＬＦ（ｉ）をセットし、Ｓ７０８の処理に移行する。
【０１８２】
一方、Ｓ７０７の処理で、変数ｄによって特定される文書の処理が完了したと判定された場合、Ｓ７０９の処理で、ＣＰＵ４０１は、文書番号を示す変数ｄの値に１を加えた値を変数ｄにセットし、Ｓ７０３の処理に移行する。
【０１８３】
図１４は、本発明の第２実施形態のサンプル距離配列１１０１を格納するウェーブレット木のデータ構造の説明図である。
【０１８４】
ウェーブレット木というデータ構造は、Makinen, V. and Navarro, G., Rank and select revisited and extended, Theoretical Computer Science 387:322-347, 2007に記載されている。
【０１８５】
ウェーブレット木のデータ構造は、長方形［０,ｘ］×［０,ｙ］（ｘ,ｙは整数）の2次元領域１５０１上に配置された点の位置を記憶可能なデータ構造である。当該データ構造では、水平方向に必ず一つの点を設ける必要があるが、垂直方向には複数の点を設けてもよいし、点を設けなくてもよい。
【０１８６】
図１４のウェーブレット木は、後述する図１６に示すｃｏｎｔｅｘｔのサンプル距離配列の例を格納したものであり、ｘ方向（第２軸）はサンプル距離配列に対応し、ｙ方向（第１軸）はｃｏｎｔｅｘｔに対応する。
【０１８７】
すなわち、２次元領域内に、ｙ方向が示す各ｃｏｎｔｅｘｔに対応する接尾辞のサンプル距離をｘ方向の点として格納する。
【０１８８】
ＣＰＵ４０１は、ウェーブレット木を参照することによって、任意の長方形［ｘ１,ｘ２］×［ｙ１,ｙ２］の領域１５０２の内部の点１５０３の総数を、効率よく計算できる。
【０１８９】
図１５は、本発明の第２実施形態の検索手段１１０３による検索処理のデータの流れの説明図である。
【０１９０】
第２実施形態の検索処理のデータの流れのうち図５に示す第１実施形態の検索処理のデータ流れと同じものについては説明を省略する。
【０１９１】
ＣＰＵ４０１は、５０４でＢＷＴを補助記憶装置４０３又はネットワーク４０５を介して接続される記憶領域からメモリ４０２上にロードした後、補助記憶装置４０３又はネットワーク４０５を介して接続される記憶領域に記憶されたサンプル距離配列１１０１をメモリ４０２上にロードする（１５０１）。
【０１９２】
さらに、ＣＰＵ４０１は、１５０１でメモリ４０２上にロードされたサンプル距離配列１１０１を参照しながら、文書内位置を特定する（１５０２）。
【０１９３】
次に、本発明の第２実施形態の文書内位置特定処理について説明する。
【０１９４】
第２実施形態の文書内位置特定処理は、図６に示す第１実施形態の文書内位置特定処理のＳ９０５の処理を次に述べるＳ９０５’に変更したものであり、その他の処理は同じである。
【０１９５】
Ｓ９０５’の処理では、ＣＰＵ４０１は、サンプル距離配列１１０１を格納したウェーブレット木を参照し、Ｓ９０４の処理で処理対象集合Ｓから取り出された要素（ｃ１、ｃ２、ｊ）の文書番号及び文書内位置がすでに取得されているか否かを判定する。
【０１９６】
ＣＰＵ４０１は、当該要素に到達するまでに実行されたＬＦ−ｍａｐｐｉｎｇ処理の回数（ｊ）が、当該要素の範囲［ｃ１、ｃ２］のサンプル距離の最大値よりも小さければ、ＬＦ−ｍａｐｐｉｎｇ処理の実行が必要と判定する。
【０１９７】
具体的には、ＣＰＵ４０１は、サンプル距離配列１１０１を格納したウェーブレット木において、長方形［ｊ＋１，ｂ］×［ｃ１，ｃ２］の内部にある点の数が「０」であるか否かを判定する。
【０１９８】
当該長方形内にある点の数が「０」でない場合、ＣＰＵ４０１は、Ｓ９０４の処理で処理対象集合Ｓから取り出された要素（ｃ１、ｃ２、ｊ）の文書番号及び文書内位置が未取得であり、ＬＦ−ｍａｐｐｉｎｇ処理によって文書番号及び文書内位置を取得する処理が必要であると判定し、Ｓ９０６の処理に移行する。
【０１９９】
一方、当該長方形内にある点の数が「０」である場合、ＣＰＵ４０１は、Ｓ９０４の処理で処理対象集合Ｓから取り出された要素（ｃ１、ｃ２、ｊ）の文書番号及び文書内位置が取得済であり、ＬＦ−ｍａｐｐｉｎｇ処理によって文書番号及び文書内位置を取得する処理が不要であると判定し、Ｓ９０３の処理に移行する。
【０２００】
上記の処理が正しい理由を述べる。サンプル距離配列Ｄ１００１のｉ番目の要素Ｄ［ｉ］には、ｃｏｎｔｅｘｔ  ｉに対応する接尾辞の位置から何文字右（後）の文字の文書番号及び文書内位置がサンプリングされているかが格納される。なお、文書番号及び文書内位置がサンプリングされた接尾辞のｃｏｎｔｅｘｔ  ｉでは、Ｄ［ｉ］＝０となる。
【０２０１】
このため、Ｓ９０４の処理で取り出された処理対象集合Ｓの要素が、Ｓ９０１の処理で求められた検索キーワードで始まる接尾辞が出現するｃｏｎｔｅｘｔ範囲に対してｊ回ＬＦ−ｍａｐｐｉｎｇ処理が実行された範囲［ｃ１、ｃ２］である場合、ｃ１≦ｉ≦ｃ２となるすべてのｃｏｎｔｅｘｔ  ｉでＤ［ｉ］≦ｊであれば、ｃｏｎｔｅｘｔ  ｉに対応するすべての接尾辞の直近のサンプリングされた文書番号及び文書内位置をすでに特定していることになる。
【０２０２】
図１６は、本発明の第２実施形態の文書内位置特定処理の説明図である。
【０２０３】
図１４を参照しながら、図１６について説明する。図１６は、検索キーワードが「特徴」である場合の例となっている。
【０２０４】
「特徴」から始まる接尾辞の区間のうち、ＢＷＴ１０７が「を」の区間にＬＦ−ｍａｐｐｉｎｇ処理１００１が実行された「を特徴」から始まる区間では、ＢＷＴ１０７が「と」の接尾辞の文書番号及び文書内位置は全て特定されている。このため、本来であれば、１７０１のＬＦ−ｍａｐｐｉｎｇ処理の実行は不要である。
【０２０５】
しかし、ＣＰＵ４０１が、「を特徴」から始まる区間に含まれる各接尾辞に対して文書番号及び文書内位置が特定済か否かを個別に判定すれば、ＣＰＵ４０１の処理負荷が増大し、この判定処理がボトルネックとなってしまう。
【０２０６】
ここで、本実施形態では、「を特徴」から始まる区間にＬＦ−ｍａｐｐｉｎｇ処理１７０１を実行する。そして、「とを特徴」から始まる接尾辞が存在する区間１７０２に対して、図１４に示すサンプル距離配列１１０１を参照し、ＬＦ−ｍａｐｐｉｎｇ処理の実行の要否判定処理を実行する。
【０２０７】
具体的には、図１６に示す区間１７０２は、図１４に示す区間１７０２に対応している。ＣＰＵ４０１は、図１６において、当該区間１７０２に到達するまでに実行したＬＦ−ｍａｐｐｉｎｇ処理の実行回数（２回）に１を加算した値（３回）からサンプリング間隔（４回）までの領域１７０３に点が存在するか否かを判定し、当該領域１７０３に点が存在しないので、ＬＦ−ｍａｐｐｉｎｇ処理を実行不要と判定する。
【０２０８】
これによって、ＣＰＵ４０１は、ある区間において、一括してＬＦ−ｍａｐｐｉｎｇ処理を実行できるので、ＣＰＵ４０１の処理負荷を軽減しつつ、無駄なＬＦ−ｍａｐｐｉｎｇ処理の実行しないようにすることができる。
【０２０９】
（第３実施形態）
以下、本発明の第３実施形態を図１７〜図１９を用いて説明する。
【０２１０】
第３実施形態では、第１、第２実施形態でサンプリングされなかったｃｏｎｔｅｘｔであっても、当該ｃｏｎｔｅｘｔを中心とする所定範囲にＢＷＴ１０７が一致する接尾辞がない場合、当該接尾辞の文書内位置をサンプリング（追加サンプリング）する。これによって、一括してＬＦ−ｍａｐｐｉｎｇを実行することによる高速化ができないｃｏｎｔｅｘｔの文書番号および文書内位置がサンプリングされているので、当該ｃｏｎｔｅｘｔに対して個別にＬＦ−ｍａｐｐｉｎｇ処理を実行する必要がなくなり、高速に検索処理を実行できる。
【０２１１】
図１７は、本発明の第３実施形態において追加サンプリングされたｃｏｎｔｅｘｔの説明図である。
【０２１２】
図１７のうち、第２実施形態の図１６に示す構成と同じ構成は、同じ符号を付与し、説明を省略する。
【０２１３】
１８０１〜１８０３の三つのｃｏｎｔｅｘｔの接尾辞の文書番号及び文書内位置が追加サンプリングによって抽出される。
【０２１４】
例えば、１８０３では、当該ｃｏｎｔｅｘｔのＢＷＴ１０７「能」が当該ｃｏｎｔｅｘｔを中心とする所定範囲に存在しないので、当該ｃｏｎｔｅｘｔの接尾辞の文書番号及び文書内位置が追加サンプリングされている。
【０２１５】
このため、図１７では、第１実施形態及び第２実施形態では、１８０１〜１８０３の接尾辞の文書番号及び文書内位置を特定するためにＬＦ−ｍａｐｐｉｎｇ処理は実行されない。
【０２１６】
図１８は、本発明の第３実施形態の追加サンプリング処理のフローチャートである。
【０２１７】
追加サンプリング処理は、第１実施形態のサンプリング手段４０９及び第２実施形態のサンプリング手段１１０２の機能の一部であり、ＣＰＵ４０１によって実行される。
【０２１８】
当該追加サンプリング処理は、第１実施形態の図４に示すサンプリング処理のＳ７０５の処理、及び第２実施形態の図１３に示すサンプリング処理のＳ７０５の処理を拡張して実現する。その処理の内容を、図１８を用いて説明する。
【０２１９】
まず、ＣＰＵ４０１は、文書内位置を示す変数ｐがサンプリング間隔を示す変数ｂで割り切れるか否かを判定する（Ｓ１９０１）。
【０２２０】
Ｓ１９０１の処理で、文書内位置を示す変数ｐがサンプリング間隔を示す変数ｂで割り切れると判定された場合（Ｓ１９０１；ＹＥＳ）、ＣＰＵ４０１は、サンプリングが必要と判定し（１９０３）、追加サンプリング処理を終了する。
【０２２１】
一方、Ｓ１９０１の処理で、文書内位置を示す変数ｐがサンプリング間隔を示す変数ｂで割り切れないと判定された場合（Ｓ１９０１；ＮＯ）、ＣＰＵ４０１は、変数ｐに対応する接尾辞のｃｏｎｔｅｘｔを示す変数ｉの値を中心とした所定範囲［ｉ−ｖ，ｉ＋ｖ］のＢＷＴの文字を検査する。
【０２２２】
そして、それらの文字の中に、ＢＷＴ［ｉ］と同じ文字がＢＷＴに出現するｃｏｎｔｅｘｔが存在するか否かを判定する（Ｓ１９０２）。
【０２２３】
換言すれば、ＣＰＵ４０１は、（ｉ−ｖ）≦ｉ’≦（ｉ＋ｖ）、ｉ’≠ｉ、かつＢＷＴ［ｉ’］＝ＢＷＴ［ｉ］が成立するｃｏｎｔｅｘｔ  ｉ’が存在するか否かを判定する。
【０２２４】
Ｓ１９０２の処理で、そのようなｃｏｎｔｅｘｔ ｉ'が存在しないと判定された場合、（Ｓ１９０２；ＮＯ）、ＣＰＵ４０１は、Ｓ１９０２の処理に処理を移行し、サンプリングが必要と判定する。
【０２２５】
一方、Ｓ１９０２の処理で、所定範囲［ｉ−ｖ，ｉ＋ｖ］に、当該変数ｉが示すｃｏｎｔｅｘｔのＢＷＴ１０７と同じ文字のｃｏｎｔｅｘｔが存在すると判定された場合（Ｓ１９０２；ＹＥＳ）、ＣＰＵ４０１は、サンプリングは不要と判定する（Ｓ１９０４）。
ただし、ｖはＢＷＴ１０７に同じ文字があるかを調べる範囲を調整するためのパラメータで、ユーザが指定する。
【０２２６】
第３実施形態では、図６に示す文書内位置特定処理において、一つの接尾辞の出現位置に重複が出る場合がある。
【０２２７】
すなわち、追加サンプリングで抽出された文書番号及び文書内位置と、別の位置での追加サンプリングや第２実施形態と同様の等間隔サンプリング処理で抽出された文書番号及び文書内位置に基づいて算出される文書番号及び文書内位置とが、重複してＨに格納される場合がある。
【０２２８】
この場合、図６に示す文書内位置特定処理で、文書内位置集合Ｈに格納された文書番号及び文書内位置が重複している場合、重複する一方の文書番号及び文書内位置を削除する。
【０２２９】
これによって、ＣＰＵ４０１は、文書番号及び文書内位置が重複した場合であっても、重複する文書番号及び文書内位置を削除するため、一つの文書番号及び文書内位置としてユーザインタフェース部４０６に表示することができる。
【０２３０】
図１９は、本発明の第３実施形態で２００４年に出願公開された特許出願のうち２万件を検索対象文書集合１０１とするとき、追加サンプリングされる文字数を見積もったものである。
【０２３１】
２００４年に出願公開された特許出願の２万件のデータの総文字数は２．９×１０8である。このデータに基づいてＢＷＴ１０７を構築した場合、構築したＢＷＴ１０７で同じ文字が続く長さの平均は２．７である。また、隣接するｃｏｎｔｅｘｔのうち、ＢＷＴ１０７の文字が前後のＢＷＴの文字と異なるｃｏｎｔｅｘｔ数は６．９×１０7であり、総文字数のうち２３％を占める。
【０２３２】
このデータで、ｖ＝１として図１８に示す追加サンプリング処理を実行すると、追加サンプリング処理で文書内位置がサンプリングされるｃｏｎｔｅｘｔの数は、総文字数の２３％となり、約１／４の文字の文書内位置がサンプリングされ、データ量も増大する。
【０２３３】
このため、第３実施形態では、データ量を減少させるため、サンプリング間隔ｂを第１実施形態及び第２実施形態よりも大きくすることが望ましい。
【０２３４】
上述した実施形態では、サンプリング手段４０９及び１１０２は、文書番号及び文書内位置の両方を抽出したが、上述した図２１を示す方法を用いれば文書内位置だけで文書番号及び文書内位置を特定できる。
【０２３５】
このため、サンプリング手段４０９及び１１０２は、文書番号及び文書内位置を抽出しなくても、仮想文書内における文書内位置だけ抽出すればよい。
【０２３６】
また、上述した実施形態では、横書きの文書を想定し、ＬＦ−ｍａｐｐｉｎｇ処理は、ある接尾辞の一文字左の接尾辞のｃｏｎｔｅｘｔを特定する処理としたが、縦書きの文書の場合、ＬＦ−ｍａｐｐｉｎｇ処理は、ある接尾辞の一文字上の接尾辞のｃｏｎｔｅｘｔを特定する処理となる。すなわち、ＬＦ−ｍａｐｐｉｎｇ処理は、ある接尾辞の一文字前の接尾辞のｃｏｎｔｅｘｔを特定する処理である。
【０２３７】
また、ＢＷＴについても、横書きの文書を想定し、ある接尾辞の一文字左にある文字が格納されるとしたが、縦書きの文書の場合、ある接尾辞の一文字上にある文字が格納される。すなわち、ＢＷＴには、ある接尾辞の一文字上にある文字が格納される。
【０２３８】
以上、本発明の各実施形態について説明したが、上記実施形態は本発明の適用例を示したものであり、本発明の技術的範囲を上記各実施形態の具体的構成に限定する趣旨ではない。本発明の要旨を逸脱しない範囲において種々変更可能である。
【符号の説明】
【０２３９】
１  第１実施形態の文書検索装置
２  第２実施形態の文書検索装置
４０１  ＣＰＵ（中央演算装置）
４０２  主記憶装置
４０３  補助記憶装置
４０４  リムーバブルメディア
４０５  ネットワーク
４０６  ユーザインタフェース部
４０７  接尾辞配列構築手段
４０８  ＢＷＴ構築手段
４０９  第１実施形態のサンプリング手段
４１０  第１実施形態の検索手段
１１０２  第２実施形態のサンプリング手段
１１０３  第２実施形態の検索手段
【図１】
0005582358.tif 000002
【図２】
0005582358.tif 000003
【図３】
0005582358.tif 000004
【図４】
0005582358.tif 000005
【図５】
0005582358.tif 000006
【図６】
0005582358.tif 000007
【図７】
0005582358.tif 000008
【図８】
0005582358.tif 000009
【図９】
0005582358.tif 000010
【図１０】
0005582358.tif 000011
【図１１】
0005582358.tif 000012
【図１２】
0005582358.tif 000013
【図１３】
0005582358.tif 000014
【図１４】
0005582358.tif 000015
【図１５】
0005582358.tif 000016
【図１６】
0005582358.tif 000017
【図１７】
0005582358.tif 000018
【図１８】
0005582358.tif 000019
【図１９】
0005582358.tif 000020
【図２０】
0005582358.tif 000021
【図２１】
0005582358.tif 000022
【図２２】
0005582358.tif 000023
【図２３】
0005582358.tif 000024