(57)【要約】【課題】一側面において、文書データに対する文字列検索の対象絞り込みにおける絞り込みノイズを抑制することを目的とする。【解決手段】  一態様によれば、コンピュータが、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイルタ内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、分割して得られたデータごとに、各データが所定の文字情報を含むか否かを示すインデックス情報を生成する。
2013179348.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、
前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、
分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する、
処理を実行させることを特徴とする生成プログラム。
【請求項２】
前記コンピュータに、
前記文書要素又は前記文書要素よりも上位の文書要素の階層の文書要素のデータサイズが所定値よりも大きい場合には、さらに１階層下位の文書要素ごとに前記制御を実行させる、
処理を実行させることを特徴とする請求項１に記載の生成プログラム。
【請求項３】
前記文書ファイルに含まれる各文書要素は、前記文書ファイルに含まれるタグの開始タグから終了タグの範囲に含まれる文字情報群である、
ことを特徴とする請求項１または請求項２に記載の生成プログラム。
【請求項４】
コンピュータに、
文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、
前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、
分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する、
処理を実行させることを特徴とする生成方法。
【請求項５】
文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかを切り換え、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割する分割部と、
分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する生成部と、
を含むことを特徴とする生成装置。
【請求項６】
コンピュータに、
検索文字列を受け付けると、前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を参照し、
前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定し、
特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう、
処理を実行させることを特徴とする検索プログラム。
【請求項７】
コンピュータに、
検索文字列を受け付けると、前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を参照し、
前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定し、
特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう、
処理を実行させることを特徴とする検索方法。
【請求項８】
検索文字列を受け付ける受付部と、
前記受付部が受け付けた前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を記憶する記憶部と、
前記記憶部に記憶された前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定する絞込部と、
特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう検索部と、
を含むことを特徴とする検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、文書データの検索技術に関する。
【背景技術】
【０００２】
小説、学術書、辞書などの複数ジャンルの書籍が、電子的に情報が保存された電子書籍の形態で販売されている。複数の文書データに対する検索が行なわれる場合に、文字情報が複数の文書データのいずれに含まれるかの対応関係を、文字情報の種類ごとに示すインデックス情報を用いる技術がある。例えば、予め生成されたインデックス情報によって、検索文字列中のある文字情報Ｃを含むことが示される文書データを検索文字列に基づく文字列検索の検索対象とする一方で、他の文書データを文字列検索の対象から除く制御が行なわれる。それは、他の文書データには前述の文字情報Ｃを含まないことがインデックス情報に示されているため、検索文字列の文字列検索を行なわなくとも、他の文書データに検索文字列が含まれないことが明らかなためである。【０００３】
また、インデックス情報を、文字情報がファイル中のどの文書要素(章、節、項などの単位)に存在するかを示すビットを文書要素単位で割り当てたビット列とする技術が知られている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平８−３１４９６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
小説、学術書、辞書などの電子書籍は、例えば、ＨＴＭＬ（Ｈｙｐｅｒ Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）などのマークアップ言語で記述されている。ＨＴＭＬで記述されたた文書データは、文書データ内のタグ情報などにより文書を構成する文書要素に区切られる。例えば、あるタグについて開始タグから終了タグまでのデータが１つの文書要素である。ある文書要素に対して、その文書要素内に含まれる別の開始タグから終了タグまでのデータは、先述のある文書要素の子要素となる。このように、開始タグと終了タグとによる組に示される範囲の包含関係に応じて、文書要素間の階層関係が示される。【０００６】
文書データのファイルを、ファイル内に含まれるある階層の文書要素ごとにブロック分割したとしても、分割して得られる各ブロックは互いにデータサイズが同じとは限らない。各ブロックでデータサイズが異なると、それぞれのブロックに含まれる文字情報の種類の数も異なる傾向にある。例えば、章立てされた学術書において、ある章だけ長い場合には、その章に対応するブロックだけ、文字情報の種類が多くなってしまうことがある。そういった場合には、インデックス情報において、特定のブロックが際立って多くの種類の文字情報の存在が示されることとなる。【０００７】
また、圧縮されたインデックス情報を用いる技術があるが、インデックス情報の圧縮により、多くの種類の文字情報の存在が示されるブロックについて、インデックス情報を用いた文字列検索の対象の絞込みにおいて、ノイズが発生しやすくなる。圧縮されたインデックス情報とは、文字情報が複数の文書データのいずれに含まれるかの対応関係を示す情報が、複数の文字情報について重畳されたインデックス情報である。すなわち、圧縮されたインデックス情報においては、複数の文字情報のうちのいずれかを含むか否かを示す情報が各ブロックと対応付けられる。すると、複数の文字情報についての存否情報が重畳されるので、インデックス情報自体のデータサイズが抑制される。一方で、ファイル絞り込みにおいて、インデックス情報で重畳された他の文字情報の存在もインデックス情報から抽出されてしまうため、絞込みノイズが発生する。圧縮率を高くする（重畳する文字情報の数を多くする）と、ノイズの発生確率が高くなる（絞込みノイズが発生しやすい）という関係がある。しかしながら、ブロック同士でブロック内に含まれる文字情報の種類の数が異なるので、各ブロックで圧縮率が共通であってもブロックによってノイズの発生確率はまちまちである。すると、文字情報の種類が多いブロックの方が絞り込みノイズを発生しやすくなってしまう。【０００８】
前述のように、特定の階層の文書要素の境目でファイル内のデータをブロックに分割するにしても、各々の文書要素のデータサイズが異なることに起因して、それぞれのブロックにおける絞り込みノイズの発生しやすさが異なる。【０００９】
しかしながら、単純にブロックのデータサイズが均一になるように文書データのファイルを分割すると、文書要素の境目以外、もしくは、下位の文書要素（部・章・節・目と章立てされた文書の目など）の境目で分割されることがある。【００１０】
例えば、第１章に相当するファイルを、第１節と第２節の一部を含む第１のブロックと、第２節の一部と第３節を含む第２のブロックとに分割したとする。例えば、学術書においては、同じ節に含まれる項同士は関連する内容を含むことが多い。そのため、第２節内の各項に特徴的な用語に含まれる文字情報は、第１のブロックと第２のブロックの双方に存在することがある。この場合においては、節単位での境目でブロック分割をすると（例えば、第１節、第２節および第３節で、それぞれ第１のブロック、第２のブロック及び第３のブロック）、第２節に特徴的な用語に含まれる文字情報が第２のブロックのみに存在することとなり得る（その特徴的な用語が第１節および第３節の双方に存在していない場合）。【００１１】
学術書などの階層的な構造を有する文書においては、章内の各節に共通して用いられる用語、節内の各項に共通して用いられる用語、項内の各目に共通して用いられる用語などが存在しがちである。【００１２】
一方、辞書においては、各項目で内容が独立しているため、同じ節に含まれる項同士で関連する内容を含むことは少ない。そのため、第２節のある項において特徴的な用語であっても、第２節内の他の項においては、用いられないことがある。すると、第１節と第２節の一部を含む第１のブロックと、第２節の一部と第３節を含む第２のブロックとに分割したとしても、先述の第２節のある項に特徴的な用語に含まれる文字情報は、第１のブロックまたは第２のブロックのいずれかにしか含まれないことがある。【００１３】
上記の通り、学術書のように、同じ上位要素に含まれ、内容が関連する子要素同士を同じブロックに含めることで、文字列検索対象の絞り込みノイズの抑制が見込まれる。一方、辞書のように、同じ上位要素（例えば、章など）の子要素を同じブロックに含めても絞込みノイズが抑制されにくい場合もある。そのような場合には、各ブロックのデータサイズが平準化されることで絞り込みノイズの抑制が見込まれることもある。【００１４】
本開示の一側面において、文書データに対する文字列検索の対象絞り込みにおける絞り込みノイズを抑制することを目的とする。
【課題を解決するための手段】
【００１５】
一態様によれば、生成プログラムは、コンピュータに、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する、処理を実行させる。【００１６】
一態様によれば、コンピュータに、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかの切り換えを行ない、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割し、分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する、処理を実行させる生成方法が用いられる。【００１７】
一態様によれば、生成装置は、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかを切り換え、前記切り換えに応じた前記制御により、前記文書ファイルを前記複数のブロックに分割する分割部と、分割して得られたブロックごとに、各ブロックが所定の文字情報を含むか否かを示すインデックス情報を生成する生成部と、を含むことを特徴とする。【００１８】
一態様によれば、検索プログラムは、コンピュータに、検索文字列を受け付けると、前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を参照し、前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定し、特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう、処理を実行させる。【００１９】
一態様によれば、コンピュータに、検索文字列を受け付けると、前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を参照し、前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定し、特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう、処理を実行させる検索方法が用いられる。【００２０】
一態様によれば、検索装置は、検索文字列を受け付ける受付部と、前記受付部が受け付けた前記検索文字列に含まれる文字情報に基づいて、文書ファイルに所定数以上の子要素を有する文書要素が存在するか否かに応じて、前記文書ファイル内のデータを複数のブロックのいずれに含めるかの制御を、前記子要素の階層の文書要素ごとに行なうか、もしくは、前記文書要素又は前記文書要素よりも上位の要素の階層の文書要素ごとに行なうかで切り換えて行なわれた分割により得られた各ブロックに、前記各ブロックが前記文字情報を含むか否かが対応付けられたインデックス情報を記憶する記憶部と、
前記記憶部に記憶された前記インデックス情報の参照により、前記インデックス情報に前記文字情報を含む旨が示されるブロックを特定する絞込部と、特定された前記ブロックに対して、前記検索文字列による文字列検索を行なう検索部と、を含む。
【発明の効果】
【００２１】
本発明の一側面によれば、文書データに対する文字列検索の対象絞り込みにおける絞り込みノイズを抑制することができる。
【図面の簡単な説明】
【００２２】
【図１Ａ−Ｂ】図１Ａ及びＢは、インデックス情報の例と、インデックス情報に基づき生成されるビット列例とを示す。
【図２Ａ】図２Ａは、文書データの階層構造例を示す。
【図２Ｂ】図２Ｂは、文書データの階層構造例を示す。
【図３】図３は、コンピュータ１の機能ブロックの例を示す。
【図４】図４は、生成部１３の機能ブロックの例を示す。
【図５】図５は、ブロック番号とブロック読出し位置との対応関係を示す。
【図６】図６は、絞込部１５の機能ブロックの例を示す。
【図７】図７は、コンピュータ１のハードウェア構成の例を示す。
【図８】図８は、コンピュータ１で動作するソフトウェアの構成例を示す。
【図９】図９は、インデックス生成の処理手順例を示す。
【図１０Ａ】図１０Ａは、文書構造解析処理の処理手順例を示す。
【図１０Ｂ】図１０Ｂは、文書構造解析処理の処理手順例を示す。
【図１１】図１１は、文書構造テーブルの例を示す。
【図１２Ａ】図１２Ａは、ファイル分割処理の処理手順例を示す。
【図１２Ｂ】図１２Ｂは、ファイル分割処理の処理手順例を示す。
【図１３】図１３は、全文検索処理の処理手順例を示す。
【図１４】図１４は、インデックス参照処理の処理手順を示す。
【図１５】図１５は、検索結果を格納するテーブルの例を示す。
【発明を実施するための形態】
【００２３】
詳細を説明する前に、インデックス情報を用いた文字列検索の対象ファイルの絞り込みについて説明する。
【００２４】
図１Ａは、検索対象のファイル群Ｆ１〜Ｆｎに基づくインデックス情報Ｉ１を示す。インデックス情報Ｉ１の最上段に示されるファイル番号は、検索対象のファイル群Ｆ１〜Ｆｎそれぞれに対応する番号である。インデックス情報において、文字情報群Ｃ１〜Ｃｍのそれぞれが、ファイル群Ｆ１〜Ｆｎにおける存否に関するビット列と対応付けられる。
【００２５】
文字情報群Ｃ１〜Ｃｍに含まれる文字情報Ｃｊは、例えば、１文字もしくは複数の文字の組み合わせによる文字列である。もしくは、文字情報Ｃｊは、文字情報に対応するバイナリコードの一部分でもよい。文字情報群Ｃ１〜Ｃｍは、使用が想定される文字（たとえばＪＩＳコードが割り当てられている文字）の全通りの組み合わせでもよい。例えば、ファイル群Ｆ１〜ＦｎのうちのあるファイルＦｉ（ファイル番号はｉ）が、「人生はクローズアップで見れば悲劇  ロングショットで見れば喜劇」という文字列を含むファイルであるとする。その場合、ファイルＦｉは、「人」、「生」、「は」、・・・、「劇」という文字情報を含むファイルであり、「人生」、「生は」、「はク」、・・・、「喜劇」という文字情報を含むファイルでもある。本実施形態においては、文字情報群Ｃ１〜Ｃｍのそれぞれは２文字の文字情報である場合を例示する。
【００２６】
文字情報Ｃｊがファイル群Ｆ１〜Ｆｎのいずれに含まれるかは、１〜ｎのそれぞれの数ｉについて、文字情報ＣｊとファイルＦｉとに対応する記憶領域に、文字情報ＣｊがファイルＦｉに含まれるか否かに関する情報が記憶されることで示される。例えば、インデックス情報Ｉ１において、ファイルＦｉに文字情報Ｃｊが含まれるか否かに関する存否情報の格納先は、文字情報Ｃｊに対応するバイナリコードをハッシュ関数に代入して得られるアドレスＰｊと、ファイル番号ｉにより示される。文字情報に対応するバイナリコードとは、例えば、文字情報「喜劇」に対応するバイナリコード（ＪＩＳに基づく文字コード）であれば、０ｘ３４６Ｅ３７６０（０ｘは１６進数表記を意味する）である。
【００２７】
１つの文字情報Ｃｊに対して１つのアドレスＰｊが割り当てられる場合には、文字情報Ｃｊの存否情報は、ファイルＦｉに文字情報Ｃｊが存在すれば「１」の値のビットで示され、ファイルＦｉに文字情報Ｃｊが存在しなければ、「０」の値のビットで示される。一方、複数の文字情報（例えば、文字情報Ｃｊと文字情報Ｃｋ）が１つのアドレスＰｊに割り当てられている場合もある。その場合には、存否情報は、ファイルＦｉに文字情報Ｃｊ及び文字情報Ｃｋのうちの少なくとも１つが存在すれば「１」の値のビットで示され、ファイルＦｉに文字情報Ｃｊ及び文字情報Ｃｋのいずれも存在しなければ、「０」の値のビットで示される。ちなみに、存否情報がどのように示されるかは適宜変更されてよく、値が「１」で不存在が示され、値が「０」で存在が示されてもよい。さらには、複数ビットにより存否が示されてもよい。図１Ａに示すインデックス情報においては、文字情報を含む旨は「１」の値のビットで示されている。
【００２８】
例えば、アドレスＰｊに対応する文字情報が「喜劇」のみである場合には、インデックス情報Ｉ１のアドレスＰｊに示されるビット列により、「喜劇」がファイル番号２，３，ｉのファイルそれぞれに含まれることが明らかになる。また、例えば、１つのアドレスＰｋに「劇王」と「見れ」との双方が対応する場合には、インデックス情報Ｉ１のアドレスＰｋに示されるビット列は、ファイル群Ｆ１〜Ｆｎのそれぞれについて、「劇王」と「見れ」との少なくとも一方を含むか、「劇王」と「見れ」とのいずれも含まないか、のいずれかを示す。例えば、ファイル番号ｉ，ｎ−１のファイルは、「劇王」と「見れ」の少なくとも一方を含むことが示され、ファイル番号１，２，３、ｊ、ｋなどのファイルは、「劇王」と「見れ」とのいずれも含まないことが示される。
【００２９】
図１Ａに示すように、ファイルＦｉは、「喜劇」以外の文字情報も含むため、「喜劇」だけでなく、「人生」、「生は」、・・・など、検索文字列中の他の文字情報に対応する位置のビットも「１」の値を示す。また、図１Ａでは省略されているが、ファイル群Ｆ１〜Ｆｎのそれぞれについても、各ファイルに含まれる文字情報に対応する位置のビットが「１」の値を示す。
【００３０】
ファイル群Ｆ１〜Ｆｎに対して検索を行なう場合に、図１Ａに示すインデックス情報Ｉ１を用いて文字列検索対象のファイルの絞り込みが行なわれる。例えば「喜劇王」という検索文字列を含む検索要求を受け付けたとする。検索文字列の「喜劇王」には、「喜劇」という文字情報と「劇王」という文字情報とが含まれている。この場合、文字列検索対象となるファイルは、例えば、「喜劇」に基づき算出されるアドレス（図１ＡではＰｊ）に示されるビット列と、「劇王」に基づき算出されるアドレス（図１ＡではＰｋ）に示されるビット列とにより絞り込まれる。例えば、アドレスＰｊに対応するビット列と、アドレスＰｋに対応するビット列との論理積演算結果であるビット列Ａ１は、図１Ｂに示す通りとなる。
【００３１】
図１Ｂに示すビット列Ａ１において、「１」となるビットに対応するファイル（図１Ｂにおいては、ファイル番号ｉのファイル）が、文字列検索対象のファイルとなる。図１Ａの例においては、アドレスＰｋに複数の文字情報（例えば、「見れ」及び「劇王」）が対応する。ファイルＦｉは、「劇王」は含まないが、「見れ」を含む。そのため、「見れ」及び「劇王」に対応するポインタＰｋに対応するビット列における、ファイルＦｉのビットも「１」となってしまう。そのようなインデックス情報Ｉ１を用いて、文字情報「喜劇」および「劇王」で検索対象のファイルを絞り込むと、ファイルＦｉに「劇王」が含まれないにも関わらず、「喜劇」と「劇王」の双方を含むファイルと判断され、検索対象のファイルとなる。
【００３２】
半角文字を用いた場合も同様である。例えば、ファイルＦｉが「Ｌｉｆｅ  ｉｓ  ａ  ｔｒａｇｅｄｙ  ｗｈｅｎ  ｓｅｅｎ  ｉｎ  ｃｌｏｓｅ−ｕｐ，  ｂｕｔ  ａ  ｃｏｍｅｄｙ  ｉｎ  ｌｏｎｇ−ｓｈｏｔ．」という文字列を含むとする。すると、例えば、インデックス情報において、文字情報「ｃｏｍｅ」に基づき算出されたアドレスＰｊと、ファイル番号ｉに示される位置のビットが「１」を示す。また、例えば、文字情報「ｍｅｄｙ」に基づき算出されたアドレスＰｋと、ファイル番号ｉに示される位置のビットが「１」を示す。検索文字列が「ｃｏｍｅｄｉａｎ」であると、例えば、検索対象のファイルが、インデックス情報に基づいて、「ｃｏｍｅ」および「ｄｉａｎ」の双方を含むファイルに絞り込まれるとする。その際に、たまたま文字情報「ｄｉａｎ」に基づき算出したアドレスが、文字情報「ｍｅｄｙ」に基づいて算出したアドレスＰｋと同じであると、ファイルＦｉは「ｄｉａｎ」を含まないにも関わらず、「ｃｏｍｅｄｉａｎ」の検索対象のファイルとなる。
【００３３】
上述のように、異なる複数の文字情報に対応するアドレスが重複することにより、ファイル絞り込みにノイズが生じうる。これは、ファイルＦｉに含まれない文字情報（「劇王」、「ｄｉａｎ」など）と、ファイルＦｉに含まれる文字情報（「見れ」、「ｍｅｄｙ」など）とで、存否情報の格納位置を示すポインタが重複しているためである。ファイルＦｉに含まれる文字情報（「見れ」、「ｍｅｄｙ」など）の存在により、ビットが「１」の状態になるため、ファイルＦｉに含まれない文字情報（「劇王」、「ｄｉａｎ」など）が存在しないことがインデックス情報に示されなくなってしまう。ちなみに、対応するポインタが重複する複数の文字情報の双方を含まない場合には、ビットが「０」の状態になるため、インデックス情報、複数の文字情報のどちらに対しても不存在が明らかとなる。
【００３４】
つまり、ファイル内に含まれる文字情報のポインタと、ファイル内に含まれない文字情報のポインタとが重複しやすいファイルほど、絞込みノイズを生じやすい。学術書などの電子書籍を例にあげると、本編のファイルよりも、索引や目次などのファイルの方が、多くの文字種類を含みやすく、同じ電子書籍内のファイルであっても、ファイルに含まれる文字情報の種類数には、差があることがある。また、本編のファイル同士でも、データサイズが大きいファイルと小さいファイルとでは、ファイルに含まれる文字情報の種類に差が出やすい。ファイル内に含まれる文字情報の種類の数が異なるファイル同士では、一方のファイル（ファイル内の文字種類が多い）の方が、アドレスの重複により、文字情報の不存在が示されなくなる事態が、他方のファイル（ファイル内の文字種類の数が少ない）に比べて発生しやすくなる。これは、学術書だけでなく、新書などにおいても同様の特徴を有している。
【００３５】
上述の理由により、ファイル群Ｆ１〜Ｆｎのインデックス情報が全体的に疎な行列になると、多くの種類の文字情報を含むファイルに、文字情報同士のポインタ重複による絞り込みノイズが発生しやすくなる。先述の通り、多くの文字種類を含むファイルの一例として、ファイルサイズが他のファイルよりも大きいファイルが挙げられる。ファイルサイズが大きいファイルが絞り込みノイズになると、他のファイルよりも無駄な文字列検索の処理量が大きくなる。
【００３６】
インデックス情報は、ファイル単位ではなく、ファイルを分割して得られるブロックごとに、文字情報を含むか否かに関する情報を対応づけてもよい。すると、絞込みノイズとなって文字列検索が行なわれる際に読み出すデータ量が抑制される。
【００３７】
ところで、文書データによって文書構造が大きく異なることがある。例えば、辞書などは、特定の階層の文書要素（例えば、節や項などに対応する文書要素）が羅列される文書構造を有している。この場合、文書要素のそれぞれは、独立した意味内容を有しており、例えば、隣り合う文書要素同士で共通の用語が含まれないことが多い（共通でない用語が多く含まれる）。一方、学術書などは、文書要素同士が階層的な関係を有する文書構造であり、共通の親要素を有する子要素同士は共通する用語が用いられやすい。さらに、小説などは、例えば、１階層のみで文書要素の数は少ない傾向にある。小説においては、本編を通して共通の用語が用いられやすい。
【００３８】
先述の通り、辞書などにおいては、特定の文書要素の羅列が含まれがちである。文書要素の羅列とは、独立した別個の事象についての情報が、何か共通の形式で表現される場合に用いられることが多い。例えば、辞書の形式であれば、各項目について単語が対応しており、列挙される各項目は、単語と、その単語に関する情報（意味・用法など）であるいう共通の形式で表現される。この場合、例えば、「あ」を先頭の文字である単語群を親要素とする子要素は、「あしか」や「足柄山」などである。
【００３９】
例えば、ファイルを分割して得られるブロックごとに文字情報を含む否かに関する情報を対応付けてインデックス情報を生成するとする。先述の通り、辞書などの文書要素の羅列を含む文書構造において、子要素同士は、必ずしも共通の用語が含まれるわけではない。
【００４０】
図２Ａは、ＨＴＭＬ（Ｈｙｐｅｒ Ｔｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）などのマークアップ言語により記述された文書データの階層構造の例を示す。あるファイルの＜ｂｏｄｙ＞タグと、＜ｈ１＞タグや＜ｈ２＞タグなどの見出しタグとの関係が図２Ａの通りとすると、＜ｈ１＞タグで識別される要素を共通の親要素とする子要素が多数含まれている。この場合には、先述の通り、１つ目の＜ｈ１＞タグを親要素とする子要素（＜ｈ２＞タグで識別される要素）同士で、用いる用語の共通性は薄いと考えられる。そのため、＜ｈ１＞タグで識別される親要素単位での分割を試みなくとも、＜ｈ２＞タグで識別される子要素単位での分割が行なわれればよい。例えば、図２Ａに示す（Ａ）のようにブロックＡＡ−１とブロックＡＡ−２のように分割してもよい。
【００４１】
一方、学術書などは、先述の通り、共通の親要素を有する子要素同士で共通の用語を含みやすい。例えば、チャップリンに関する考察が述べられた文書があるとすると、当然全文書に渡って、「映画」や「喜劇」などの単語が含まれることになる。一方、映画の特徴が述べられる箇所（章、節、項など）においては、「登場」、「作風」、「物語」などの単語や、思想を表す単語が用いられ、生涯について述べられる箇所においては、「結婚」や「移住」などの単語が用いられがちである。映画の特徴が述べられる箇所にも、例えば、役柄について述べられる箇所や音楽の特徴を述べられる箇所に細分される。また、生涯について述べられる箇所についても、例えば、生い立ちについて述べられる箇所やスキャンダルについて述べられる箇所に細分される。
【００４２】
例えば、ブロック分割により、映画の特徴が述べられる箇所（親要素１）のうちの音楽的な特徴が述べられる箇所（子要素１−２）と、生涯について述べられる箇所（親要素２）と、を含むブロックが得られるとする。すると、そのブロックには、子要素１−２に、「登場」、「作風」、「物語」や、思想を表す単語などの親要素１に特徴的な単語と、「結婚」や「移住」などの親要素２に特徴的な単語との双方が含まれてしまいがちである。例えば、このように分割されたブロックに対応するインデックス情報に基づいて文字列検索の対象ファイルの絞り込みを行なうとすると、「作風」という検索文字列について親要素１も親要素２も絞り込まれてしまうことになる。
【００４３】
一方、親要素１で１ブロック、親要素２で１ブロックとした場合には、親要素１のブロックは、「結婚」や「移住」などの親要素２に特徴的な単語を含まないかもしれないし、親要素２のブロックは、「登場」、「作風」、「物語」などの親要素１に特徴的な単語を含まないかもしれない。親要素の２のブロックが、親要素１に特徴的な単語を含まないのであれば、「作風」などの検索文字列で文字列検索の対象を絞りこむと、親要素２のブロックまでも絞り込まれずに済む。
【００４４】
図２Ｂは文書データの階層構造の例を示す。図２Ｂに示す（Ａ）、（Ｂ）、（Ｃ）のそれぞれは、ファイルのブロック分割例を示す。分割例（Ａ）では、＜ｈ１＞タグに対応する階層の要素で分割され、ブロックＢＡ−１及びブロックＢＡ−２が得られている。一方の分割例（Ｂ）においては、＜ｈ３＞タグに対応する階層の要素で分割され、ブロックＢＢ−１及びブロックＢＢ−２が得られている。一方の分割例（Ｃ）においては、＜ｈ３＞タグに対応する階層の要素で分割され、ブロックＢＣ−１及びブロックＢＣ−２が得られている。分割例（Ｂ）のように分割された場合には、＜ｈ１＞タグに識別される要素のうち１つ目の要素において特徴的な用語が検索文字列に含まれていると、その要素の一部の子要素がブロックＢＢ−２に含まれるので、ブロックＢＢ−２も文字列検索の対象になる。同様に、分割例（Ｃ）のように分割されると、ブロックＢＣ−１も、＜ｈ１＞タグに識別される要素のうち１つ目の要素において特徴的な用語が検索文字列に含まれる場合には、文字列検索の対象となる。
【００４５】
上述するように、インデックス情報生成においてブロック分割する場合に、データサイズの大きいブロックを含まないことと、一部の文書構造を有する文書データについては上位階層の単位に併せて分割することとが、文字列検索の対象の効率的な絞り込みに寄与する。すなわち、文書構造に応じてブロック分割位置を決める判断基準の優先度の制御により、生成されるインデックス情報によるファイル絞り込みのノイズを抑制する。
【００４６】
ちなみに、複数の子要素を含む親要素が１つしかないなど、小説などの文書構造においては、ブロック分割しても、分割されたブロック同士で、共通の単語を用いられることが考えられる。しかしながら、ブロック分割しておくことで、ブロック同士で共通でない単語の検索が行なわれる場合にも、文字列検索による読出し量が抑制される。
【００４７】
図２Ａに示す文書データの階層構造を、１つの要素に所定数以上の子要素が存在する例として用いた。例えば、広辞苑第五版（１９９８）においては、頭文字が「し」の単語数は１５９２１、頭文字が「か」の単語数が１３８９５である。また、「ぬ」、「る」、「を」、「ん」などを頭文字とする単語は少ないが、頭文字が「ぬ」の単語数は６６２、頭文字が「る」の単語数は４４４、頭文字が「を」の単語数は６、頭文字が「ん」の単語数は８である。「を」や「ん」を除くと、それぞれの頭文字を親要素として、それぞれの子要素が４４４以上存在している。
【００４８】
一方、例えば、Ｈａｄｏｏｐ第２版（Ｔｏｍ  Ｗｈｉｔｅ著、２０１１）においては、第１２章と第１５章において、第８節まで存在している程度である。この例においては、１つの親要素に対して子要素の数は８以下である。
【００４９】
上述の例であれば、文書構造を判断するのに用いる所定数は、例えば、「１０」でも「１００」でもよい。所定数が「１０」だとすると、１つの要素に１０以上の子要素が存在する場合に、その子要素の階層でブロック分割を行なうように制御される。
【００５０】
同様の階層構造の違いは、データベースにおいても存在する。データベースにおいてもレコード単位やページ単位に対して、それぞれの文字情報の存否を示すインデックス情報が検索に用いられる。レコード単位やページ単位でなく、複数のレコードまたは複数のページを含むように区切られたブロック単位に対して、それぞれの文字情報の存否を示すインデックス情報が検索に用いられてもよい。
【００５１】
データベースにおいても電子書籍と同様に階層構造に特徴がある。管理情報やログ情報などを蓄積するデータベースは、各事象の記録であるレコードを追加していくため、レコード単位でデータが羅列される。一方、各事象により、記録するデータのパターンが変更される場合には、それぞれの事象の記録において必要とされる情報が異なる。
【００５２】
例えば、顧客情報のデータベースであれば、各顧客に関して、ＩＤ、会社名、部署、担当者、住所、電話番号などの項目に対応する情報が格納されたデータベースがある。この様なデータベースは、顧客情報である各レコードが列挙される形式であり、電子辞書における辞書と類似の階層構造を有している。
【００５３】
例えば、製薬の治験データを格納するデータベースにおいては、１回の投与ごとに、投与の履歴情報が格納される。履歴情報には、投与時刻、投与薬剤、治験者の状態（体温など）、副作用症状などの情報を含むレコードが生成される。しかしながら、治験者の特性（治験者自身が有する疾患など）に応じて、治験者の状態を表す情報が格納される項目を設ける、もしくは、副作用に関する情報が格納される項目を設けるなど、治験者に応じてデータ構造が異なる。このように事象の特性に応じて階層が決定されるので、電子辞書における学術書に類似の階層構造を有している。また、データは、副作用が発生しなければ少量のデータで済むが、副作用が発生した場合にはデータ量が多くなる。
【００５４】
上述のように、データベースにおいても階層構造の特徴が異なる。そのため、電子書籍と同様に、ブロック分割を階層構造の特徴に応じて行なうことにより、文字列検索対象の絞り込みのノイズが発生することが抑制される。
【００５５】
図３は、第１の実施形態におけるコンピュータ１の機能ブロックの例を示す。コンピュータ１は、処理部１１および記憶部１２を含む。処理部１１は、インデックス情報を生成し、生成したインデックス情報を用いた検索を行なう。記憶部１２は、処理部１１の処理に用いられる情報（例えば、検索対象となるファイル群Ｆ１〜Ｆｎやインデックス情報など）を記憶する。
【００５６】
処理部１１は、生成部１３を含む。生成部１３は、インデックス情報を生成し、記憶部１２に記憶する。
【００５７】
図４は、生成部１３の機能ブロックの例を示す。生成部１３は、制御部１３１、読出し部１３２、解析部１３３および判定部１３４を含む。制御部１３１は、ファイルＦ１からファイルＦｎを順に指定し、指定したファイルについて、読出し部１３２、解析部１３３及び判定部１３４にそれぞれの処理を実行させる。読出し部１３２は、ファイル群Ｆ１〜Ｆｎのうち、制御部１３１により指定されたファイルＦｉを記憶部１２から読み出す。解析部１３３は、読出し部１３２が読みだしたファイルごとにファイル内の文書構造を解析する。制御部１３１は、解析部１３３の解析結果に基づいて、ファイルの分割を行なう。判定部１３４は、制御部１３１により分割されたブロック（分割されない場合はファイルそのものに相当する）ごとに、設定された文字情報群Ｃ１〜Ｃｍのうちの各文字情報Ｃｊについて、Ｃｊを含むか否かを判定する。判定部１３４の判定結果が、文字情報Ｃｊを含む旨を示す場合に、制御部１３１は、文字情報Ｃｊ及びブロックＢｉのファイル番号ｉに基づいてアドレスを算出し、算出したアドレスに示される記憶場所に、文字情報Ｃｊを含む旨を示す情報を格納する。
【００５８】
図５は、ブロック番号とブロックの読み出し位置と対応関係を格納するテーブルＴ１の例を示す。制御部１３１は、分割して得られたブロックのそれぞれに番号を割り当て、ブロックの読み出し位置と、ブロック番号とを対応付けてテーブルＴ１に格納する。テーブルＴ１の情報は、後述の文字列検索部１６により参照される。
【００５９】
図３に示す通り、処理部１１は、さらに、検索制御部１４、絞込部１５および文字列検索部１６を含む。検索制御部１４は、絞込部１５と文字列検索部１６とを制御することにより、検索要求に応じた検索処理を行なう。絞込部１５は、生成部１３により生成されるインデックス情報を用いて、検索対象ファイルの絞り込みを行なう。例えば、検索制御部１４が、受け付けた検索要求に含まれる検索文字列から文字情報Ｃａを抽出して、抽出された文字情報Ｃａを絞込部１５に通知する。絞込部１５は、ブロック群Ｂ１〜Ｂｐのうち、検索制御部１４に通知された文字情報Ｃａを含まないファイルを除いたブロックのブロック番号を検索制御部１４に通知する。文字列検索部１６は、絞込部１５により絞り込まれたブロックについて、テーブルＴ１に格納された読み出し位置からブロックのデータを読み出し、検索制御部１４が受け付けた検索要求に基づく文字列検索を行なう。
【００６０】
図６は、絞込部１５の機能ブロックの例を示す。絞込部１５は、参照部１５１および判定部１５２を含む。参照部１５１は、記憶部１２に記憶されたインデックス情報のうち、検索制御部１４から通知された文字情報Ｃａに対応する部分を読み出す。文字情報Ｃａに対応する部分を示すアドレスは、文字情報Ｃａに応じて算出される。例えば、参照部１５１は、文字情報Ｃａに基づいてアドレスを算出し、そのアドレスに対応するビット列を読み出す。判定部１５２は、参照部１５１が読み出したビット列に基づいて、文字情報Ｃａを含まないブロックを判定し、ブロック群Ｂ１〜Ｂｐのなかで文字情報Ｃａを含まないブロックを除いてブロック番号を文字列検索部１６に通知する。
【００６１】
検索制御部１４は、検索文字列から複数の文字情報（例えば文字情報Ｃａ、文字情報Ｃｂ）を抽出してもよい。すると、参照部１５１は、複数の文字情報Ｃａ，Ｃｂのそれぞれについて、インデックス情報の対応するビット列を読み出す。また、判定部１５２は、文字情報Ｃａに対応するビット列に含まれる存否情報と、文字情報Ｃｂに対応するビット列に含まれる存否情報との論理積（ＡＮＤ）を算出し、その算出結果に基づいて各ファイルにおける文字情報Ｃａ，Ｃｂの存否を判定する。文字情報Ｃａ，Ｃｂのいずれかが含まれないと判断されたファイルのファイル番号は、文字列検索部１６に通知しない。
【００６２】
図７は、コンピュータ１のハードウェア構成例を示す。図３、４及び６に示す各機能ブロックは、例えば、図７に示すハードウェア構成により実現される。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０などを含む。それぞれのハードウェアはバス３１１を介して接続されている。通信Ｉ／Ｆ３１０はネットワーク４を介した通信の制御を行なう。入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる。
【００６３】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【００６４】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。
【００６５】
また、記憶媒体３０５に記憶される情報は、ネットワーク４を介して接続されたコンピュータ２に制御される記憶装置３に記憶されてもよい。その場合には、記憶装置３に記憶された情報を、プロセッサ３０１が通信インターフェース３１０を介して取得することで、読出し部１３２や文字列検索部１６などによるブロックの読み出しが行なわれる。
【００６６】
プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って処理部１１の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１２の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムやファイル群Ｆ１〜Ｆｎを記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図８を用いて説明する。
【００６７】
図８は、コンピュータ１で動作するソフトウェアの構成例を示す。コンピュータ１において、図７に示すハードウェア群２１の制御を行なうＯＳ２２（オペレーションシステム）が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア２１の制御・管理が行なわれることにより、アプリケーションプログラムやミドルウェアによる処理がハードウェア２１により実行される。さらに、コンピュータ１において、例えば、インデックス生成プログラム２３ａや検索処理プログラム２３ｂなどが、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。また、プロセッサ３０１がインデックス生成プログラム２３ａに基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア２１を制御して）生成部１３の機能が実現される。さらに、プロセッサ３０１が検索処理プログラム２３ｂに基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア２１を制御して）検索制御部１４、絞込部１５および文字列検索部１６の機能が実現される。図８にはインデックス生成プログラム２３ａと検索処理プログラム２３ｂとが別のプログラムとして示されているが、両プログラムを併せて１つのプログラムとしてもよい。
【００６８】
図９は、インデックス生成の処理手順例を示す。インデックス生成プログラム２３ａが起動される（Ｓ１００）と、制御部１３１は、前処理を行なう（Ｓ１０１）。Ｓ１０１の前処理は、例えば、検索対象ファイル群Ｆ１〜Ｆｎのファイルパスのリストや文字情報群Ｃ１〜Ｃｍを記憶部１２に読み出す処理などである。制御部１３１は、インデックス情報の生成が要求されるか否かを判断し（Ｓ１０２）、インデックス情報の生成が要求されるまで繰り返し判断を行なう（Ｓ１０２：ＮＯ）。インデックス情報の生成が要求される（Ｓ１０２：ＹＥＳ）と、制御部１３１は、インデックス情報を記憶する記憶領域を確保する（Ｓ１０３）。例えば、Ｓ１０３において確保された記憶領域内の各ビットは「０」にセットしておく。
【００６９】
読出し部１３２は、ファイルパスのリストを参照し、検索対象ファイル群Ｆ１〜Ｆｎを読み出し、解析部１３３は、読み出されたファイルのそれぞれについて文書構造を解析する処理を行なう（Ｓ１０４）。制御部１３１は、解析部１３３の文書構造の解析結果に応じて、ファイルを分割し、分割により得られたブロックについて、ブロック番号とブロックの読み出し位置を示す情報とを図５に示すテーブルＴ１に格納する（Ｓ１０５）。Ｓ１０４及びＳ１０５の詳細な処理については後述する。  
【００７０】
制御部１３１は、図５に示すテーブルＴ１から、ブロック番号ｉを選択し、選択したブロック番号ｉのブロックＢｉを読出し部１３２に読み出させる（Ｓ１０６）。例えば、Ｓ１０６において、制御部１３１は、テーブルＴ１内のレコードをブロック番号順に選択する。次に、判定部１３４は、文字情報Ｃ１〜Ｃｍのうちの１つの文字情報Ｃｊを選択する（Ｓ１０７）。例えば、Ｓ１０７において、記憶部１２が保持する文字情報Ｃ１〜Ｃｍのリストから、判定部１３４が文字情報を順に選択してもよいし、所定の数値範囲内で文字コードをインクリメントすることにより、文字情報を順に生成してもよい。判定部１３４は、ブロックＢｉが文字情報Ｃｊを含むか否か判定する（Ｓ１０８）。ブロックＢｉが文字情報Ｃｊを含むと判定した場合（Ｓ１０８：ＹＥＳ）は、制御部１３１は、ブロック番号ｉと文字情報Ｃｊに基づいてアドレスを算出する。制御部１３１は、算出したアドレスに対応する位置のビットを「１」に更新する（Ｓ１０９）。すなわち、制御部１３１は、算出したアドレスに対応する位置のビットと、「１」との論理和（ＯＲ）演算の結果を、算出したアドレスに対応する位置に格納する。例えば、文字情報Ｃｊのバイナリコードを所定のハッシュ関数に代入して得られる値に対応するビット列のｉ番目のビットを「１」とする。制御部１３１によりビットの更新が行なわれると、判定部１３４はＳ１１０の処理を行なう。判定部１３４によりブロックＢｉが文字情報Ｃｊを含まないと判定された場合（Ｓ１０８：ＮＯ）は、判定部１３４は、Ｓ１１０の処理を行なう。文字情報Ｃ１〜Ｃｍのなかで、未選択の文字情報が存在する場合には、判定部１３４は、再度Ｓ１０７の処理を行なう（Ｓ１１０）。文字情報Ｃ１〜Ｃｍのなかで未選択の文字情報が存在しない場合には、Ｓ１１１の処理が行なわれる。Ｓ１１１では、ブロック群Ｂ１〜Ｂｐのなかで未選択のファイルがあれば、読出し部１３２がＳ１０６の処理を再度行なう。また、ブロック群Ｂ１〜Ｂｐのなかで未選択のファイルがなければ、Ｓ１１２の処理が行なわれる。
【００７１】
制御部１３１は、ファイル群Ｆ１〜Ｆｎのインデックス情報の生成処理が完了した旨の通知を行なう（Ｓ１１２）。Ｓ１１２において、制御部１３１は、さらに、Ｓ１０３で確保した領域内の情報をインデックスファイルとして保存する。Ｓ１１２の処理後、終了指示を受けていたか否か判定する（Ｓ１１３）。終了指示を受けていた場合（Ｓ１１３：ＹＥＳ）は、処理部１１は、インデックス生成プログラム２３ａを終了する（Ｓ１１４）。終了指示を受けていない場合（Ｓ１１３：ＮＯ）には、Ｓ１０２の処理を再度行なう。
【００７２】
次にＳ１０４の文書構造解析処理について説明する。図１０Ａ及び図１０Ｂは、文書構造解析処理の処理手順例を示す。文書構造解析処理では、各ファイルについて、ファイル内に含まれる各文書要素が有する子要素の数の計数を行なう。
【００７３】
文書構造解析処理が行われる（Ｓ２００）と、制御部１３１はファイルＦ１〜Ｆｎから順にファイルを選択し、読出し部１３２は選択されたファイルＦｉを読み出す（Ｓ２０１）。解析部１３３は、ファイルＦｉから順にタグ情報を読み出す（Ｓ２０２）。解析部１３３は、Ｓ２０２で読み出したタグ情報が＜／ｂｏｄｙ＞タグであるかを判定する（Ｓ２０３）。Ｓ２０２で読み出したタグ情報が＜／ｂｏｄｙ＞タグである場合（Ｓ２０３：ＹＥＳ）には、解析部１３３は、ファイルＦｉについて作成した文書構造テーブルを記憶部１２に格納する（Ｓ２０４）。解析部１３３は、文書構造解析処理が行われていないファイルがあれば、Ｓ２０１の処理を行ない、文書構造解析処理が行われていないファイルがなければ、文書構造解析処理を終了し（Ｓ２０６）、Ｓ１０５の処理を行なう（Ｓ２０５）。
【００７４】
Ｓ２０２で読み出したタグ情報が＜／ｂｏｄｙ＞タグでない場合（Ｓ２０３：ＮＯ）には、Ｓ２０２で読み出したタグ情報が文書構造の階層を示すタグ情報であるか否かを判定する（Ｓ２０７）。文書構造の階層を示すタグ情報とは、例えば、＜ｂｏｄｙ＞、＜ｈ１＞、＜ｈ２＞…などである。Ｓ２０２で読み出したタグ情報が、階層を示すタグ情報でない場合（Ｓ２０７：ＮＯ）には、再度Ｓ２０２の処理が行われる。
【００７５】
Ｓ２０２で読み出したタグ情報が階層を示すタグ情報である場合（Ｓ２０７：ＹＥＳ）には、解析部１３３は、読み出したタグ情報が開始を示すタグ情報であるか否かを判定する（Ｓ２０８）。開始を示すタグ情報とは、例えば、＜ｂｏｄｙ＞タグでいえば、＜ｂｏｄｙ＞が開始を示し、＜／ｂｏｄｙ＞が終了である。例えば、＜ｈ１＞については、＜ｈ１＞が開始を示し、＜／ｈ１＞は終了を示す。Ｓ２０２で読み出したタグ情報が開始を示すタグでない場合（Ｓ２０８：ＮＯ）には、解析部１３３は、後述する子要素数計数の終了フラグをセットする（Ｓ２１４）。
【００７６】
Ｓ２０２で読み出したタグ情報が開始を示すタグである（Ｓ２０８：ＹＥＳ）場合に、解析部１３３は、文書構造テーブルＴ２にレコードを生成する（Ｓ２０９）。各ファイルについての初回には、解析部１３３は、文書構造テーブルＴ２の格納領域を確保する。Ｓ２０９において、解析部１３３は、新しいタグＩＤを生成して、生成したタグＩＤを文書構造テーブルのタグＩＤ項目に格納する。例えば、タグＩＤは前回に生成したＩＤの値をインクリメントして生成される。
【００７７】
図１１は、文書構造テーブルＴ２を示す。文書構造テーブルＴ２は、タグＩＤ，階層数、子要素数及びフラグの項目を含む。タグＩＤの項目には、文書内に含まれるタグ情報に割り当てられるＩＤが格納される。階層数は、タグ情報が示す階層の数が格納される。子要素数は、タグ情報が有する子要素の数が格納される。また、フラグは、文書構造テーブルに格納されたタグ情報についての子要素の数の計数が終了したか否かを示すフラグである。文書構造テーブルＴ２は、ファイルＦ１〜Ｆｎのそれぞれについて生成される。
【００７８】
解析部１３３は、文書構造テーブルＴ２にレコードを生成すると、生成したレコードの階層数の項目に、読み出しタグ情報に示す階層数を格納する（Ｓ２１０）。読み出したタグ情報が、例えば、＜ｂｏｄｙ＞であれば階層数は０であり、＜ｈ１＞であれば階層数は１であり、＜ｈ２＞であれば階層数は２であり、＜ｈ３＞であれば階層数は３である。次に、解析部１３３は、階層数を計数する（Ｓ２１１〜Ｓ２１３）。解析部１３３は、読み出したタグ情報の階層数から１引いた数をｊとして、Ｓ２１２の処理を行なう。Ｓ２１２の処理を行なうと、ｊから１を引いた数をｊとして、さらにＳ２１２の処理を繰り返す。この処理は、ｊが０になるまで繰り返し行なう。Ｓ２１２において、解析部１３３は、文書構造テーブルＴ２のレコードのうち、階層数がｊのレコードを、Ｓ２０９で生成したレコードからタグＩＤが小さくなる方向に探索して抽出する。解析部１３３は、抽出したレコードの子要素数の項目の値をインクリメントして生成する。Ｓ２１１〜Ｓ２１３の処理を終えると、解析部１３３は、再度Ｓ２０２の処理を行なう。
【００７９】
次にＳ１０５のファイル分割処理について説明する。図１２Ａ及び図１２Ｂは、ファイル分割処理の処理手順例を示す。ファイル分割処理において、判定部１３４は、各ファイルから読み出したデータが所定のデータサイズを超えるか否かを判定する。
【００８０】
ファイル分割処理が開始される（Ｓ３００）と、制御部１３１は、ファイルＦ１〜Ｆｎのいずれかを選択する（Ｓ３０１）。すなわち、１〜ｎのうちの１つを選択する。制御部１３１は、Ｓ３０１で選択したファイルに対応する文書構造テーブルＴ２を読み出す（Ｓ３０２）。次に、判定部１３４は、読み出した文書構造テーブルＴ２に子要素数が所定数以上であるレコードを抽出する（Ｓ３０３）。文書構造テーブルＴ２に子要素数が所定数以上であるレコードが存在する場合（Ｓ３０３：ＹＥＳ）に、子要素数が所定数以上であるレコードのうちの階層数がもっとも小さいレコードの階層数を選択する（Ｓ３０４）。また、所定数以上の子要素が存在しない場合（Ｓ３０３：ＮＯ）には、階層数に０を選択する（Ｓ３０５）。
【００８１】
次に、判定部１３４は、ファイルＦｉから、選択された階層数を示す要素を読み出す。さらに、判定部１３４は、読み出した要素のデータ量を計数する（Ｓ３０６）。例えば、判定部１３４は、選択された階層数が階層数の項目に格納されたレコードを、文書構造テーブルＴ２から順に抽出する。Ｓ３０６で、判定部１３４は、抽出したレコードに示されるタグ情報から、対応する終了タグまでのデータをファイルＦｉから読み出す。
【００８２】
次に、判定部１３４は、Ｓ３０６で読み出したデータ量が第１の所定値よりも小さいか否かを判定する（Ｓ３０７）。Ｓ３０６で読み出したデータ量が第１の所定値よりも小さい場合（Ｓ３０７：ＹＥＳ）は、ファイルＦｉ内に読み出していないデータがあるか否かを判定する（Ｓ３０８）。
【００８３】
ファイルＦｉ内に読み出していないデータがある場合（Ｓ３０８：ＹＥＳ）に、判定部１３４は、積算値ＳにＳ３０６で計数したデータ量を加算する（Ｓ３０９）。各ファイルにおいて、積算値は０である。判定部１３４は、積算値が第２の所定値よりも大きいか否かを判定する（Ｓ３１０）。積算値が第２の所定値よりも大きくない場合（Ｓ３１０：ＮＯ）には、判定部１３４は、Ｓ３０６の処理を再度行なう。積算値が第２の所定値よりも大きい場合（Ｓ３１０：ＹＥＳ）に、Ｓ３０６でデータを読み出した際の読出し終了位置を、図５に示すテーブルＴ１に格納する（Ｓ３１１）。例えば、ファイルＦｉからデータ読み出しを開始して、１回目に積算値が第２の所定値を超えた場合には、ファイルＦｉの２番目のブロックの読出し位置としてテーブルＴ１に読出し位置を記憶する。さらに、判定部１３４は、積算値をクリアする（Ｓ３１２）。さらに、Ｓ３１２の処理を終えると、判定部１３４は、Ｓ３０６の処理を再度行なう。
【００８４】
第２の所定値は、例えば、第１の所定値よりも小さい値を用いる。先述の通り、上位の階層の要素でブロック分割できた方が、絞込みノイズが発生しにくいと考えられるので、データサイズが多少大きくなっても、上位階層の要素でブロック分割するメリットがあるためである。
【００８５】
Ｓ３０６で読み出したデータ量が第１の所定値よりも小さくない場合（Ｓ３０７：ＮＯ）は、Ｓ３０６のデータ読出しの直前の読み出し位置をテーブルＴ１に記憶する（Ｓ３１７）。さらに、判定部１３４は、データを読み出す単位を決定する階層数をインクリメントする（Ｓ３１８）。これにより、判定部１３４は、より細かい単位でファイルをブロック単位に分割できる。次に、判定部１３４は、Ｓ３１８で決定された階層数に基づいて、ファイルＦｉからデータを読出し、データ量を計数する（Ｓ３１９）。また、判定部３１７は、Ｓ３１９で読み出したデータ量が第１の所定値より小さいか否かを判定する（Ｓ３２０）。Ｓ３１９で読み出したデータ量が第１の所定値より小さくない場合（Ｓ３２０：ＮＯ）には、判定部１３４は、再度Ｓ３１８を行なう。
【００８６】
Ｓ３１９で読み出したデータ量が第１の所定値より小さい場合（Ｓ３２０：ＹＥＳ）には、判定部１３４は、Ｓ３１８で選択された階層数の１つ上の階層（階層数−１）のデータ（直前のＳ３０６読み出したデータなど）がＳ３１８で選択された階層数ですべて読み出された否かを判定する（Ｓ３２１）。Ｓ３２１ですべて読み出したと判定された場合（Ｓ３２１：ＹＥＳ）には、判定部１３４は、Ｓ３０９の処理を行なう（Ｓ３２２）。判定部１３４は、Ｓ３１０と同様の判定を行ない（Ｓ３２３）、Ｓ３２３でＹＥＳと判定される（Ｓ３２３：ＹＥＳ）と、Ｓ３１１及びＳ３１２と同様の処理を行なって（Ｓ３２４及びＳ３２５）、再度、Ｓ３１９の処理を行なう。Ｓ３２３でＮＯと判定された場合（Ｓ３２３：ＮＯ）に、判定部１３４は、Ｓ３１９の処理を行なう。
【００８７】
Ｓ３２１でまだ読み出されていないと判定された（Ｓ３２１：ＮＯ）場合には、判定部１３４はＳ３１１及びＳ３１２と同様の処理を行なう（Ｓ３２６及びＳ３２７）。次に、判定部１３４は、選択する階層数をデクリメントする（Ｓ３２８）。判定部１３４は、選択される階層数が０、または、Ｓ３０４で選択された階層数であるか否かは判定する（Ｓ３２９）。Ｓ３２９の判定において、選択される階層数が０、または、Ｓ３０４で選択された階層数である場合（Ｓ３２９：ＹＥＳ）には、判定部１３４は、Ｓ３０６の処理を再度行なう。Ｓ３２９の判定において、いずれも満たされない場合（Ｓ３２９：ＮＯ）には、判定部１３４は、Ｓ３１９の処理を再度行なう。
【００８８】
ファイルＦｉ内に読み出していないデータがなくなった場合（Ｓ３０８：ＮＯ）には、判定部１３４は、積算値をクリアする（Ｓ３１３）。ファイルＦｉがファイルＦｎでなければ、生成部１３は、Ｓ３０１から再度処理を行なう（Ｓ３１４）。ファイルＦｉがファイルＦｎである場合には、ファイルＦ１〜Ｆｎを分割して得られたブロックの総数をｐとする（Ｓ３１５）。さらに、生成部１３は、Ｓ１０６の処理を行なう（Ｓ３１６）。
【００８９】
ちなみに、例えば、Ｓ３０７でＮＯと判定した場合や、Ｓ３１０でＹＥＳと判定した場合には、読出し位置を、直線に句点を読み出した読出し位置まで戻すこととしてもよい。すると、ブロックに分割された場合の境目が分の途中となることが回避される。さらに、例えば、読出し位置が、直前の改行まで戻されることとしてもよい。
【００９０】
図１３は、全文検索の処理手順例を示す。検索処理プログラム２３が起動される（Ｓ４００）と、検索制御部１４は、前処理を行なう（Ｓ４０１）。Ｓ４０１の前処理は、図５に示すテーブルＴ１の読出しや、インデックス情報の読出しである。検索制御部１４は、検索要求を受けたか否かを判断し（Ｓ４０２）、検索要求を受けるまでＳ４０２の判断を繰り返す（Ｓ４０２：ＮＯ）。検索要求を受けた場合（Ｓ４０２：ＹＥＳ）には、インデックス参照処理が実行される（Ｓ４０３）。
【００９１】
図１４は、インデックス情報の参照処理手順の例を示す。Ｓ４０３が実行される（Ｓ５００）と、検索制御部１４は、検索要求に含まれる検索文字列を取り出し、文字情報Ｃ１〜Ｃｍのうちの検索文字列に含まれる文字情報Ｃａ，Ｃｂ，・・・を抽出する（Ｓ５０１）。
【００９２】
絞込部１５は、検索制御部１４が文字情報Ｃａ，Ｃｂ，・・・を抽出すると、ブロック群Ｂ１〜Ｂｐのそれぞれについて、抽出された文字情報Ｃａ，Ｃｂ，・・・のいずれか１つでも含まないブロックであるかどうかを判断する。具体的には、まず、抽出された文字情報のうちの１つを選択する（Ｓ５０２）。参照部１５１は、選択された文字情報に基づいてアドレスを算出し、算出されたアドレスに示される位置に格納された情報を読み出す（Ｓ５０３）。Ｓ５０３において、参照部１５１は、Ｓ１０９と同様の演算によりアドレスを算出する。その際に、例えば、参照部１５１は、選択された文字情報のバイナリコードを所定のハッシュ関数に代入して得られる値に対応するビット列を読み出す。絞込部１５は、抽出された文字情報Ｃａ，Ｃｂ，・・・のなかに未選択の文字情報がある場合には、Ｓ５０２の処理を再度行ない、抽出された文字情報Ｃａ，Ｃｂ，・・・に未選択の文字情報がない場合には、インデックス参照処理を終了する（Ｓ５０４，Ｓ５０５）。
【００９３】
インデックス参照処理が終了すると、絞込部１５は、検索対象のブロックのブロック番号を抽出する（Ｓ４０４）。Ｓ４０４において、例えば、判定部１５２は、文字情報Ｃａ，Ｃｂ，・・・のそれぞれについて参照部１５１により読み出されたビット列同士の論理積（ＡＮＤ）を算出する。判定部１５２は、算出されたビット列において「１」であるビットが何番目であるかを示す番号を生成する。例えば、判定部１５２は、算出されたビット列において、ｘ番目のビットとｙ番目のビットが「１」であれば、ｘ，ｙを生成する。
【００９４】
検索制御部１４は、判定部１５２により生成された番号ｘ，ｙ，・・・のいずれかである番号ｉを選択する（Ｓ４０５）。文字列検索部１６は、選択された番号ｉがブロック番号であるブロックＢｉを読み出す（Ｓ４０６）。文字列検索部１６は、図５に示すテーブルＴ１においてブロック番号ｉと対応づけられた読出し位置からブロックを読み出す。文字列検索部１６は、読み出したブロックＢｉを検索文字列で検索する（Ｓ４０７）。例えば、文字列検索部１６は、ブロックＢｉ内に検索文字列と一致する文字列を検出した場合には、一致した文字列のブロックＢｉ内の位置を示す情報を生成し、ブロックＢｉのブロック番号ｉと関連付けて記憶部１２に記憶する（図１５参照）。例えば、検索文字列と照合を行なったデータの量をカウントするカウンタを予め設けておき、文字列の一致を検出した際のカウンタの値を、ファイル内の位置を示す情報とする。
【００９５】
図１５は、検索結果を格納する  テーブルの例を示す。図１５に示すテーブルＴ２は、検索文字列と一致する文字列が存在した位置を示すレコードを含む。検索文字列と一致する文字列の位置は、例えば、文字列が含まれるブロックの番号と、各ブロックの文字情報を読み出すたびにインクリメントされるカウンタの値とで示される。カウンタの値は、例えば、一致検出時に読出される。
【００９６】
Ｓ４０７の処理後、検索制御部１４は、判定部１５２により生成された番号ｘ，ｙ，・・・のなかで未選択の番号があればＳ４０５の処理を行なう（Ｓ４０８）。検索制御部１４は、判定部１５２により生成された番号ｘ，ｙ，・・・のなかに未選択の番号がない場合には、Ｓ４０９の処理を行なう。
【００９７】
検索制御部１４は、検索結果の出力処理を行なう（Ｓ４０９）。例えば、Ｓ４０７の処理で図１５に示すテーブルＴ２に格納された情報に示される位置の近傍の文字列を抽出して、抽出した文字列を、ブロック番号に対応するファイルのファイル名などと併せて表示デバイスに表示させるなどの処理を行なう。
【００９８】
Ｓ４０９処理後に、処理部１１は、終了の指示があったか否かを判断する（Ｓ４１０）。終了の指示がない場合（Ｓ４１０：ＮＯ）には、検索制御部１４はＳ４０２の処理を行なう。終了の指示があった場合（Ｓ４１０：ＹＥＳ）には、処理部１１は、検索処理プログラム２２ｂを終了させる（Ｓ４１１）。
【符号の説明】
【００９９】
１      コンピュータ
２      コンピュータ
３      記憶装置
４      ネットワーク
１１    処理部
１２    記憶部
１３    生成部
１４    検索制御部
１５    絞込部
１６    文字列検索部
１３１  制御部
１３２  読出し部
１３３  解析部
１３４  判定部
１５１  参照部
１５２  判定部
【図１Ａ−Ｂ】
2013179348.tif 000003
【図３】
2013179348.tif 000004
【図４】
2013179348.tif 000005
【図５】
2013179348.tif 000006
【図７】
2013179348.tif 000007
【図８】
2013179348.tif 000008
【図９】
2013179348.tif 000009
【図１０Ａ】
2013179348.tif 000010
【図１０Ｂ】
2013179348.tif 000011
【図１１】
2013179348.tif 000012
【図１２Ａ】
2013179348.tif 000013
【図１２Ｂ】
2013179348.tif 000014
【図１３】
2013179348.tif 000015
【図１４】
2013179348.tif 000016
【図１５】
2013179348.tif 000017
【図２Ａ】
2013179348.tif 000018
【図２Ｂ】
2013179348.tif 000019
【図６】
2013179348.tif 000020
【国際調査報告】
2013179348.tif 000021
2013179348.tif 000022
2013179348.tif 000023
2013179348.tif 000024