"コンピュータに、それぞれ文字情報を含む複数のファイルを記憶手段に記憶し、所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報を前記記憶手段に記憶し、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報を前記記憶手段に記憶し、前記第1の文字情報と、前記文字情報群に含まれる第2の文字情報と、を含むファイルを前記複数のファイルから抽出させる要求を受け付けた場合に、前記第1のインデックス情報及び前記第2のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する、処理を実行させること特徴とする抽出方法。前記使用頻度が、前記複数の文字情報のそれぞれについて、前記1または複数のファイルに含まれる回数を計数し、計数された回数に基づいて予め算出される、ことを特徴とする請求項1に記載の抽出方法。前記コンピュータに、前記第2の文字情報と前記所定部分と異なる他の所定部分に共通する情報を含む複数の文字情報のうち、使用頻度が前記所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれか少なくとも1つを前記複数のファイルのうちのどのファイルが含むかを示す第3のインデックス情報を、さらに前記記憶手段に記憶し、前記第1の文字情報と、前記第2の文字情報と、を含むファイルを前記複数のファイルから抽出させる要求を受け付けた場合に、前記第1のインデックス情報、前記第2のインデックス情報及び前記第3のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する、処理を実行させることを特徴とする請求項1または請求項2に記載の抽出方法。コンピュータに、それぞれ文字情報を含む複数のファイルを記憶手段に記憶し、所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報を前記記憶手段に記憶し、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報を前記記憶手段に記憶し、前記第1の文字情報と、前記文字情報群に含まれる第2の文字情報と、を含むファイルを前記複数のファイルから抽出させる要求を受け付けた場合に、前記第1のインデックス情報及び前記第2のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する、ことを実行させること特徴とする抽出プログラム。第1の文字情報と第2の文字情報とを含むファイルを複数のファイルから抽出させる要求を送信する送信手段、を含む第1の装置と、それぞれ文字情報を含む複数のファイルと、所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報と、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報と、を記憶する記憶手段と、前記要求を受信した場合に、前記第1のインデックス情報及び前記第2のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する抽出手段と、を含む第2の装置と、を含むことを特徴とする抽出システム。それぞれ文字情報を含む複数のファイルと、所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報と、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報と、を記憶する記憶手段と、前記第1の文字情報と、前記文字情報群に含まれる第2の文字情報と、を含むファイルを前記複数のファイルから抽出させる要求を受け付けた場合に、前記第1のインデックス情報及び前記第2のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する抽出手段と、を含むこと特徴とする抽出装置。コンピュータに、所定部分に共通する情報を含む複数の文字情報のうち、複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報を生成し、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報を生成する、処理を実行させること特徴とする情報生成方法。コンピュータに、前記複数の文字情報のそれぞれについて、前記1または複数のファイルに含まれる回数を計数し、計数された回数に基づく使用頻度に応じて、前記複数の文字情報のそれぞれが、前記複数の文字情報のうち使用頻度が前記所定の頻度未満である文字情報か、使用頻度が前記所定の頻度以上であるか、判定する、処理を実行させることを特徴とする請求項7に記載の情報生成方法。前記コンピュータに、前記第2の文字情報と前記所定部分と異なる他の所定部分に共通する情報を含む複数の文字情報のうち、使用頻度が前記所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれか少なくとも1つを前記複数のファイルのうちのどのファイルが含むかを示す第3のインデックス情報を生成する、処理を実行させることを特徴とする請求項8に記載の情報生成方法。前記第2の文字情報は2グラムで構成される文字情報であり、前記所定部分が、前記2グラムのうちの一方を2分割した一方についての文字コード部分と、前記2グラムのうちの2分割されない一方についての文字コードと、の組み合わせであり、前記他の所定部分が、前記2グラムのうちの一方を2分割した文字コードのうち前記所定部分に用いられない文字コードと、前記2グラムのうちの2分割されない一方についての文字コードと、の組み合わせである、ことを特徴とする請求項9に記載の情報生成方法。前記第2の文字情報が2グラムで構成される文字であって、前記コンピュータに、前記2グラムのうちの一方の1グラムを2分割した第1の文字コード部分及び第2の文字コード部分と、前記2グラムのうちのもう一方の1グラムを2分割した第1の文字コード部分及び第2の文字コード部分と、を作成し、前記第1の文字コード部分と前記第3の文字コード部分を組み合わせた第1の所定部分を作成し、前記第1の文字コード部分と前記第4の文字コード部分を組み合わせた第2の所定部分を作成し、前記第2の文字コード部分と前記第3の文字コード部分を組み合わせた第3の所定部分を作成し、前記第2の文字コード部分と前記第4の文字コード部分を組み合わせた第4の所定部分を作成し、前記第1の所定部分、前記第2の所定部分、前記第3の所定部分及び前記第4の所定部分のそれぞれについて、それぞれの所定部分のコードが、前記第1の文字情報と同一である文字情報群のうち、前記文字情報群に含まれる第2の文字情報以外のいずれか少なくとも1つの文字情報を、前記複数のファイルのいずれが含むかを示すインデックス情報を生成する、処理を実行させることを特徴とする請求項7に記載の情報生成方法。前記第2の文字情報が2グラムで構成される文字であって、前記コンピュータに、前記2グラムのうちの一方の1グラムをn分割した第1の文字コード部分群と、前記2グラムのうちのもう一方の1グラムをm分割した第2の文字コード部分群と、を作成し、前記第1文字コード部分群のうちのいずれかと前記第2の文字コード部分群のうちのいずれかと、を組み合わせて部分指定を複数作成し、作成された複数の部分指定のそれぞれについて、それぞれの部分指定された箇所のコードが、前記第1の文字情報と共通する文字情報群のうち、前記文字情報群に含まれる第1の文字情報以外のいずれか少なくとも1つの文字情報を、前記複数のファイルのいずれが含むかを示すインデックス情報を生成する、処理を実行させることを特徴とする請求項7に記載の情報生成方法。コンピュータに、所定部分に共通する情報を含む複数の文字情報のうち、複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報を生成し、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報を生成する、ことを実行させることを特徴とする情報生成プログラム。複数のファイルと、所定部分に共通する情報を含む複数の文字情報のうち、複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報と、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報と、を含むことを特徴とする情報コンテンツ。前記第2の文字情報と前記所定部分と異なる他の所定部分に共通する情報を含む複数の文字情報のうち、使用頻度が前記所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれか少なくとも1つを前記複数のファイルのうちのどのファイルが含むかを示す第3のインデックス情報、をさらに含むことを特徴とする請求項14に記載の情報コンテンツ。文字コードの一部を用いて作成したマップに基づいて検索を行うと、検索対象の文字を含まないファイルであって、マップの作成に用いた文字コードの一部が同一である検索対象以外の文字を含むファイルについても抽出されてしまう。1つの側面では、本発明は、マップサイズの縮小することにより生じる検索ノイズを抑制することを目的とする。本発明の抽出方法では、コンピュータに、それぞれ文字情報を含む複数のファイルを記憶手段に記憶し、所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報を前記記憶手段に記憶し、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報を前記記憶手段に記憶し、前記第1の文字情報と、前記文字情報群に含まれる第2の文字情報と、を含むファイルを前記複数のファイルから抽出させる要求を受け付けた場合に、前記第1のインデックス情報及び前記第2のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する、ことを実行させる。本発明の抽出プログラムでは、コンピュータに、それぞれ文字情報を含む複数のファイルを記憶手段に記憶し、所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報を前記記憶手段に記憶し、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報を前記記憶手段に記憶し、前記第1の文字情報と、前記文字情報群に含まれる第2の文字情報と、を含むファイルを前記複数のファイルから抽出させる要求を受け付けた場合に、前記第1のインデックス情報及び前記第2のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する、ことを実行させる。本発明の抽出システムは、第1の文字情報と第2の文字情報とを含むファイルを複数のファイルから抽出させる要求を送信する送信手段、を含む第1の装置と、それぞれ文字情報を含む複数のファイルと、所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報と、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報と、を記憶する記憶手段と、前記要求を受信した場合に、前記第1のインデックス情報及び前記第2のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する抽出手段と、を含む第2の装置と、を含む。本発明の抽出装置は、それぞれ文字情報を含む複数のファイルと、所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報と、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報と、を記憶する記憶手段と、前記第1の文字情報と、前記文字情報群に含まれる第2の文字情報と、を含むファイルを前記複数のファイルから抽出させる要求を受け付けた場合に、前記第1のインデックス情報及び前記第2のインデックス情報を参照して、いずれにおいても文字情報を含むことが示されるファイルを前記複数のファイルから抽出する抽出手段と、含む。本発明の情報生成方法では、コンピュータに、所定部分に共通する情報を含む複数の文字情報のうち、複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報を生成し、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報を生成する、ことを実行させる。本発明の情報生成プログラムでは、コンピュータに、所定部分に共通する情報を含む複数の文字情報のうち、複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報を生成し、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報を生成する、ことを実行させる。本発明の情報コンテンツは、複数のファイルと、所定部分に共通する情報を含む複数の文字情報のうち、複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が所定の頻度未満である文字情報群に含まれる文字情報のうちのいずれかを少なくとも1つ含むファイルがどれであるかを示す第1のインデックス情報と、前記所定部分に共通する情報を含む複数の文字情報のうち、前記複数のファイルのうちどの程度の数のファイルに含まれるかを示す使用頻度が少なくとも前記所定の頻度以上である第1の文字情報を前記複数のファイルのうちのどのファイルが含むかを示す第2のインデックス情報と、を含む。本発明の一側面によれば、マップサイズの縮小することにより生じる検索ノイズを抑制することができる。以下に添付図面を参照して、本発明の実施の形態を詳細に説明する。なお、本明細書において、文字情報とは、テキストデータを構成する、単一文字、基礎単語、分割文字コードなどである。対象ファイル群は、たとえば、文書ファイル、Webページ、電子メールなどの電子データであり、たとえば、テキスト形式、HTMLHyperTextMarkupLanguage形式、XMLExtensibleMarkupLanguage形式の電子データである。また、単一文字とは、1つの文字コードで表現される文字である。単一文字の文字コード長は、文字コード種により異なる。たとえば、UTFUnicodeTransformationFormat16の場合は16ビットコード、ASCIIAmericanStandardCodeforInformationInterchangeコードの場合は8ビットコード、シフトJISJapaneseIndustrialStandardコードの場合は8ビットコードである。シフトJISコードで日本語の文字を表現する場合は、2個の8ビットコードを組み合わせることとなる。また、基礎単語とは、小中学校で学習する基本的な単語や、特定の文字列で表現される予約語をいう。Thisisa.の英文を例にするとThis、is、aなどの単語であり、千語レベル、2千語レベル、数千語レベルに分類され、英和辞典には、、、マークが付与されている。また、予約語とは、予め決められた文字列であり、たとえば、HTMLのタグたとえば、<br>が挙げられる。また、分割文字コードとは、単一文字を、上位のコードと下位のコードに分割した各々のコードである。本実施の形態では、後述するように、単一文字を、上位のコードと下位のコードに分割する場合がある。たとえば、芝という単一文字の文字コードは、UTF16の場合、9D82で表現されるが、上位分割文字コード0x9Dと下位分割文字コード0x82に分割される。また、グラムとは、文字単位である。たとえば、単一文字については、その1文字分が1グラムとなる。分割文字コードについては、分割文字コード単独で1グラムとなる。したがって、単一文字芝は2グラムとなる。なお、本実施の形態では、文字コードとしてUTF16を例に挙げて説明する。また、本明細書では、ビットをONとした場合は、そのビットの値を1にし、ビットをOFFとした場合は、そのビットの値を0として説明する。なお、ビットをONとした場合は、そのビットの値を0にし、ビットをOFFとした場合は、そのビットの値を1にしてもよい。<圧縮符号マップの分割>まず、図1~図23を用いて、圧縮符号マップの分割について説明する。圧縮符号マップとは、文字情報ごとの出現マップをまとめたビットマップである。出現マップとは、文字情報を指定するポインタと文字情報の各対象ファイルでの存否を示すビット列を連結したビット列である。検索処理時には、このビット列を、ビットのONOFFに応じて検索対象の文字情報を含むか否かを示すインデックスとして用いることができる。文字情報を指定するポインタとしては、たとえば、文字情報の圧縮符号が採用される。2グラム文字列の圧縮符号マップについては、第1グラムの圧縮符号と第2グラムの圧縮符号を組み合わせた圧縮符号列となる。2グラム文字列とは、1グラムの文字コードが連接する文字列である。たとえば、人形芝居という文字列には、2連接文字人形、形芝、芝居が含まれている。2連接文字人形の人、形はそれぞれ分割されない単一文字であるため、2連接文字人形はそのまま2グラム文字列となる。芝は上述したように分割されるため、単一文字形と芝の上位分割文字コード0x9Dの組み合わせが2グラム文字列となる。また、上位分割文字コード0x9Dと下位分割文字コード0x82の組み合わせも2グラム文字列となる。さらに、下位分割文字コード0x82と分割されない単一文字居の組み合わせも2グラム文字列となる。基礎単語により、対象ファイル群が圧縮されている場合、圧縮符号マップの生成時や検索時に1パスでアクセスすることが可能である。なお、対象ファイル群を圧縮しない場合は、文字情報を指定するポインタとしては、文字情報の文字コードをそのまま採用してもよい。図1は、2グラム文字列の圧縮符号マップのサイズ縮小を示す説明図である。Aは分割前の2グラム文字列の圧縮符号マップのサイズを示している。Aでは、第1グラム先頭グラムの圧縮符号マップへのポインタとして10ビット使用し、第2グラム末尾グラムの圧縮符号マップへのポインタとして10ビット使用している例を示している。この場合、210×210=220パターンの文字列それぞれに対応するビット列を格納するメモリサイズが必要となり、サイズ爆発を引き起こすこととなる。Bでは、第2グラムの圧縮符号マップへのポインタを5ビットで分割している。この場合、メモリサイズは、210×25×2=216となり、大幅なサイズ縮小を図ることができる。Bの場合、分割された2つの圧縮符号マップからそれぞれ特定される2つの出現マップでAND演算することで、2グラム文字列が存在する対象ファイルの絞込みをおこなうことができる。Cでは、さらに、第1グラムの圧縮符号マップへのポインタを5ビットで分割している。したがって、メモリサイズは、25×25×4=212となり、大幅なサイズ縮小を図ることができる。Cの場合、分割された4つの圧縮符号マップからそれぞれ特定される4つの出現マップでAND演算することで、2グラム文字列が存在する対象ファイルの絞込みをおこなうことができる。なお、分割に際し、B,Cのいずれの分割をおこなうかは、あらかじめ決めておく。また、Bの2分割の場合、第1グラムと第2グラムのうちいずれを分割するかについてもあらかじめ決めておく。図2は、2グラム文字列の圧縮符号マップの分割時のサイズを示す図表である。図1のAのように非分割の場合、2グラム文字列の組み合わせでの合計サイズは、1.64Mとなる。一方、図1のBのような2分割の場合、2グラム文字列の組み合わせでの合計メモリサイズは、144Kとなる。さらに、図1のCのような4分割の場合、2グラム文字列の組み合わせでの合計メモリサイズは、10Kとなる。このように、分割することで、出現マップのサイズ縮小を図り、省メモリ化を図ることができる。2グラム文字列の圧縮符号マップの分割例図3は、2グラム文字列の圧縮符号マップの分割例を示す説明図である。図3において、2グラム文字列群とは、対象ファイル群から特定された2グラム文字列の集合である。本実施の形態では、2グラム文字列の出現頻度に応じて、2グラム文字列の圧縮符号マップMの分割をおこなう。たとえば、出現頻度の高い2グラム文字列群以下、高位2グラム文字列群と称す。については、図1に示したような2分割または4分割をおこなわない。一方、出現頻度が低い2グラム文字列群以下、低位2グラム文字列群と称す。については、2分割または4分割をおこなう。たとえば、2分割の場合、低位2グラム文字列群について、第1分割圧縮符号マップM2aと第2分割圧縮符号マップM2bとが生成される。第1グラムを分割する場合、第1分割圧縮符号マップM2aは、第1グラムの圧縮符号の上位コード以下、第1グラム上位コードというと第2グラムの圧縮符号との連結符号で指定される第1分割出現マップの集合である。また、第2分割圧縮符号マップM2bは、第1グラムの圧縮符号の下位コード以下、第1グラム下位コードというと第2グラムの圧縮符号との連結符号で指定される第2分割出現マップの集合である。また、第2グラムを分割する場合、第1分割圧縮符号マップM2aは、第1グラムの圧縮符号と第2グラムの圧縮符号の上位コード以下、第2グラム上位コードというとの連結符号で指定される第1分割出現マップの集合である。また、第2分割圧縮符号マップM2bは、第1グラムの圧縮符号と第2グラムの圧縮符号の下位コード以下、第2グラム下位コードというとの連結符号で指定される第2分割出現マップの集合である。たとえば、4分割の場合、低位2グラム文字列群について、第1分割圧縮符号マップM4a~第4分割圧縮符号マップM4dが生成される。第1分割圧縮符号マップM2aは、第1グラム上位コードと第2グラム上位コードとの連結符号で指定される第1分割出現マップの集合である。第2分割圧縮符号マップM2bは、第1グラム上位コードと第2グラム下位コードとの連結符号で指定される第2分割出現マップの集合である。第3分割圧縮符号マップM4cは、第1グラム下位コードと第2グラム上位コードとの連結符号で指定される第3分割出現マップの集合である。第4分割圧縮符号マップM4dは、第1グラム下位コードと第2グラム下位コードとの連結符号で指定される第4分割出現マップの集合である。このように、高位2グラム文字列について分割をおこなわないようにすることで、圧縮符号マップのサイズ縮小を図るとともに、低位2グラム文字列の圧縮符号マップに重畳される検索ノイズを除去することができる。以下、図4~図16を用いて、低位2グラム文字列の圧縮符号マップに重畳される検索ノイズとその除去方法について、圧縮符号マップを図1Cに示した4分割をおこなう場合を例にあげて説明する。なお、図1Bに示した2分割については4分割の一部を流用すればよいため説明を省略する。図4は、2グラム文字列の圧縮符号マップを示す説明図である。図4において、2グラム文字列を指定するポインタには、2グラム文字列の圧縮符号列たとえば、20ビットが採用されている。また、図4において、する,例えは高位2グラム文字列、るめは低位2グラム文字列とする。図4では、出現頻度による分割は行われていないため、高位2グラム文字列と低位2グラム文字列とが混在した2グラム文字列の圧縮符号マップとなっている。図5は、対象ファイル群内に存在する文字列の一例を示す説明図である。文字列するめには、高位2グラム文字列すると低位2グラム文字列るめが含まれている。図6は、図5に示した2グラム文字列するの4分割例を示す説明図である。2グラム文字列については、第1グラムであるすの圧縮符号および第2グラムであるるの圧縮符号をそれぞれ上下2分割し、たすきがけにより4種類の連結符号を生成する。図7は、図5に示した2グラム文字列るめの4分割例を示す説明図である。図7においても、図6と同様、第1グラムであるるの圧縮符号および第2グラムであるめの圧縮符号をそれぞれ上下2分割し、たすきがけにより4種類の連結符号を生成する。図8は、図4に示した2グラム文字列例えの4分割例を示す説明図である。例えは、例えばの一部を構成する2グラム文字列であり、出現頻度が高い高位2グラム文字列である。図8においても、図6および図7と同様、第1グラムである例の圧縮符号および第2グラムであるえの圧縮符号をそれぞれ上下2分割し、たすきがけにより4種類の連結符号を生成する。図9は、第1分割圧縮符号マップM4aの一例を示す説明図である。第1分割圧縮符号マップM4aとは、第1グラム上位コードおよび第2グラム上位コードを連結した連結符号以下、第1連結符号と称す。をポインタとした、圧縮符号マップである。図10は、第2分割圧縮符号マップM4bの一例を示す説明図である。第2分割圧縮符号マップM4bとは、第1グラム上位コードおよび第2グラム下位コードを連結した連結符号以下、第2連結符号と称す。をポインタとした、圧縮符号マップである。図10において、ポインタとなる第2連結符号0x8B0x30による連結符号は、低位2グラム文字列るめの第2連結符号であるとともに、高位2グラム文字列例えの第2連結符号でもあるため、同一となる。したがって、低位2グラム文字列るめが出現しない対象ファイルであっても、高位2グラム文字列例えが出現する対象ファイルである場合、当該対象ファイルのビットがON1に設定される。図10の例では、低位2グラム文字列るめのるの上位コードとめの下位コードとの組み合わせは対象ファイルF1,F3,Fnにしか存在しないが、高位2グラム文字列例えの例の上位コードとえの下位コードの組み合わせが対象ファイルF1~Fnに存在する。したがって、第2分割圧縮符号マップM4b内の第2連結符号0x8B0x30による連結符号の出現マップについては、低位2グラム文字列るめの第2連結符号の出現マップと高位2グラム文字列例えの第2連結符号の出現マップとをOR演算したビット列となる。これにより、低位2グラム文字列るめが存在しない対象ファイルを検索対象に含めてしまう場合がある。図11は、第3分割圧縮符号マップM4cの一例を示す説明図である。第3分割圧縮符号マップM4cとは、第1グラム下位コードおよび第2グラム上位コードを連結した連結符号以下、第3連結符号と称す。をポインタとした、圧縮符号マップである。図12は、第4分割圧縮符号マップM4dの一例を示す説明図である。第4分割圧縮符号マップM4dとは、第1グラム下位コードおよび第2グラム下位コードを連結した連結符号以下、第4連結符号と称す。の圧縮符号列をポインタとした、圧縮符号マップである。第4分割圧縮符号マップM4dについても、図10に示した第2分割圧縮符号マップM4bと同様、ポインタとなる第4連結符号0x300x30による連結符号は、低位2グラム文字列るめの第4連結符号であるとともに、高位2グラム文字列するの第4連結符号でもあるため、同一となる。したがって、低位2グラム文字列るめが出現しない対象ファイルであっても、高位2グラム文字列するが出現する対象ファイルである場合、当該対象ファイルのビットがON1に設定される。図12の例では、低位2グラム文字列るめのるの下位コードとめの下位コードとの組み合わせは対象ファイルF2,F3にしか存在しないが、高位2グラム文字列するのすの下位コードとるの下位コードとの組み合わせが対象ファイルF1~Fnに存在する。したがって、第4分割圧縮符号マップM4d内の第4連結符号0x300x30による連結符号の出現マップについては、低位2グラム文字列るめの第4連結符号の出現マップと高位2グラム文字列するの第4連結符号の出現マップとをOR演算したビット列となる。これにより、低位2グラム文字列るめが存在しない対象ファイルを検索対象に含めてしまう場合がある。図13は、するめについてのAND結果を示す説明図である。Aは、するについての4種の出現マップのAND結果1301を示しており、Bは、るめについての4種の出現マップのAND結果1302を示している。Cは、A,Bの両AND結果1301,1302のAND演算によるAND結果1303を示している。CのAND結果では、するめは、対象ファイルF1~F3、Fn-1に存在している可能性があることがわかり、それ以外の対象ファイルには存在しないことがわかる。図14は、第2分割圧縮符号マップの修正例を示す説明図である。図14において、高位2グラム文字列例えの上位下位コード列の出現マップを、NULLbitオール0変換する。これにより、低位2グラム文字列るめの第2連結符号の出現マップとOR演算しても、高位2グラム文字列例えの第2連結符号の出現マップでのビットの値を除去することができる。図15は、第4分割圧縮符号マップの修正例を示す説明図である。図15において、高位2グラム文字列するの第4連結符号の出現マップを、NULLbitオール0変換する。これにより、低位2グラム文字列るめの第2連結符号の出現マップとOR演算しても、高位2グラム文字列するの第4連結符号の出現マップでのビットの値を除去することができる。図16は、するめについての図14および図15による修正された出現マップを用いた場合のAND結果を示す説明図である。Aは、図13のAND演算と同一内容であるため、AND結果1301,1601は同一となる。Bは、4種類の出現マップのうち、第2分割圧縮符号マップM4b内の出現マップと第4分割圧縮符号マップM4d内の出現マップについては、図14および図15の出現マップを採用している。したがって、BのAND結果1602は、図13のAND結果1302と異なる。Cは、A,Bの両AND結果1601,1602のAND演算によるAND結果1603を示している。CのAND結果1603では、するめは、対象ファイルF3に存在している可能性があることがわかり、それ以外の対象ファイルには存在しないことがわかる。図13のCのAND結果1303と比較すると、対象ファイルの絞込みの精度が向上していることがわかる。<圧縮符号マップ生成の前処理>つぎに、圧縮符号マップ生成の前処理について説明する。圧縮符号マップを生成する場合、生成に先立って、対象ファイル群から文字情報の出現回数を集計し、2N分枝無節点ハフマン木を生成しておく必要がある。2N分枝無節点ハフマン木とは、根から分岐する枝が2N本あり、1または複数本の枝で葉を直接ポイントするハフマン木である。節点内部節点はない。節点がなく直接葉にヒットするため、節点を有する通常のハフマン木に比べて、伸長速度の高速化を図ることができる。葉は、該当する文字情報とその圧縮符号を含む構造体である。葉の構造体とも呼ぶ。葉に割り当てられる枝数は、割当先の葉に存在する圧縮符号の圧縮符号長に依存する。以下、前処理例について説明する。図17は、圧縮符号マップ生成の前処理例を示す説明図である。1出現回数の集計まず、コンピュータは、対象ファイル群Fsに存在する文字情報の出現回数を計数する。集計結果は、出現回数の降順にソートされ、出現回数の大きい方から昇順の順位がつけられる。なお、ここでは、文字情報の総種類数は、例として1305個<2048=211とする。1出現回数の集計の詳細は図18で説明する。2圧縮符号長算出つぎに、1で得られた集計結果を基にして、コンピュータは、文字情報ごとの圧縮符号長を算出する。具体的には、コンピュータは、文字情報ごとに、出現率を算出する。出現率は、文字情報の出現回数を全文字情報の総出現回数で割ることで得られる。そして、コンピュータは、出現率に対応する生起確率を求め、生起確率から圧縮符号長を導き出す。生起確率は、1/2xで表現される。xはべき数である。圧縮符号長は、生起確率のべき数xとなる。具体的には、出現率が生起確率の以下のどの範囲であるかで圧縮符号長が決定される。ARは出現率である。1/20>AR≧1/21圧縮符号長は1ビット。1/21>AR≧1/22圧縮符号長は2ビット。1/22>AR≧1/23圧縮符号長は3ビット。1/23>AR≧1/24圧縮符号長は4ビット。1/2N1>AR≧1/2N圧縮符号長はNビット。2圧縮符号長算出の詳細は図19で説明する。3葉数特定つぎに、コンピュータは、圧縮符号長ごとに葉数を集計することで圧縮符号長ごとの葉数を特定する。図17では、最大圧縮符号長は17ビットとする。また、葉数とは、文字情報の種類数である。したがって、圧縮符号長5ビットの葉数が2である場合、5ビットの圧縮符号が割り当てられる文字情報が2つ存在することを示している。4葉数補正つぎに、コンピュータは、葉数を補正する。具体的には、コンピュータは、枝数の上限2Nのべき数Nが最大圧縮符号長となるように補正する。たとえば、べき数N=11の場合、圧縮符号長11ビット~17ビットまでの葉数の総和を、補正後の圧縮符号長11ビットの葉数にする。そして、コンピュータは、圧縮符号長ごとに葉当たりの枝数を割り当てる。具体的には、補正後の圧縮符号長に対し、その降順に、20、21、22、23、24、25、26、27として葉当たりの枝数を決定する。たとえば、図17では、圧縮符号長11ビットの圧縮符号が割り当てられる文字情報の総数葉数は1215個であるが、その葉当たりの枝数は1である。圧縮符号長11ビットの圧縮符号が割り当てられる文字情報については、それぞれ1本の枝しか割り当てられないこととなる。一方、圧縮符号長6ビットの圧縮符号が割り当てられる文字情報の総数葉数は6個であるが、その葉当たりの枝数は32である。圧縮符号長6ビットの圧縮符号が割り当てられる文字情報については、それぞれ32本の枝が割り当てられることとなる。4葉数補正は、必要な場合に実行すればよく、実行しなくてもよい。5葉の構造体生成つぎに、コンピュータは、葉の構造体を生成する。葉の構造体とは、文字情報とその圧縮符号長とその圧縮符号長での圧縮符号が対応付けられたデータ構造体である。たとえば、出現順位が1位である文字0の圧縮符号長は6ビットであり、圧縮符号は000000となる。図17の例では、文字情報の種類数葉数は1305個であるため、葉L1の構造体~葉L1305の構造体が生成されることとなる。3葉数特定~5葉の構造体生成の詳細N=11は、図20で説明する。6葉へのポインタ生成つぎに、コンピュータは、葉の構造体ごとに葉へのポインタを生成する。葉へのポインタは、そのポイント先となる葉の構造体内の圧縮符号に、その葉当たりの枝数分の番号に相当するビット列を連結したビット列である。たとえば、葉L1である文字0に割り当てられた圧縮符号000000の圧縮符号長は6ビットであるため、葉L1当たりの枝数は32本である。したがって、葉L1へのポインタの先頭6ビットは、圧縮符号000000となる。後続ビット列は、葉L1当たりの枝数で表現される32=25種のビット列となる。すなわち、32種の5ビットのビット列が圧縮符号000000の後続ビット列となる。したがって、葉L1へのポインタは、先頭6ビットが000000で固定された32種の11ビットのビット列となる。なお、葉当たりの枝数が1本の場合は、葉へのポインタは1個であり、圧縮符号とその葉へのポインタは同一ビット列となる。6葉へのポインタ生成の詳細は、図22で説明する。72N分枝無節点ハフマン木の構築最後に、コンピュータは、2N分枝無節点ハフマン木を構築する。具体的には、葉のポインタを根とすることで、葉の構造体を直接指定する2N分枝無節点ハフマン木が構築される。圧縮符号列が、先頭6ビットが000000の11ビットのビット列である場合、後続の5ビットが32種のいずれのビット列であっても、2N分枝無節点ハフマン木により文字0の葉L1の構造体をポイントすることができる。72N分枝無節点ハフマン木の構築の詳細は、図23で説明する。図18は、1出現回数の集計の詳細を示す説明図である。図18において、コンピュータは、A対象ファイル群Fsからの集計、B出現頻度の降順でのソート、C目標出現率の順位までの抽出という3つのフェーズを実行する。以下、基礎単語と単一文字に分けて説明する。A1まず、コンピュータは、対象ファイル群Fsを読み込んで、基礎単語の出現頻度出現回数を計数する。コンピュータは、基礎単語の構造体を参照して、基礎単語の構造体内の基礎単語に一致する文字列が対象ファイルに存在する場合に、当該基礎単語の出現頻度初期値は0を1加算する。基礎単語の構造体とは、基礎単語が記述されたデータ構造体である。B1対象ファイル群Fsにおいて基礎単語の集計が終了すると、コンピュータは、基礎単語出現頻度集計テーブルを、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い基礎単語から順位付けをおこなう。A2、また、コンピュータは、対象ファイル群Fsを読み込んで、単一文字の出現頻度を計数する。具体的には、コンピュータは、単一文字の出現頻度初期値は0を1加算する。B2対象ファイル群Fsにおいて単一文字の集計が終了すると、コンピュータは、単一文字出現頻度集計テーブルを、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い単一文字から順位付けをおこなう。つぎに、コンピュータは、B1ソート後の基礎単語出現頻度集計テーブルを参照して、目標出現率Pwまでの順位の基礎単語を抽出する。具体的には、コンピュータは、全基礎単語の出現頻度の総和総出現頻度を分母とし、順位が1位の基礎単語から降順に出現頻度を累計して分子とし、各順位までの出現率Pwを算出する。たとえば、総出現頻度が40000、1位からy位までの基礎単語群の累計出現頻度が30000とすると、y位までの出現頻度は、40000/30000×100=75[]となる。ここで、目標出現率Pwが75[]である場合は、上位y位までの基礎単語を抽出することとなる。C21つぎに、コンピュータは、B2ソート後の単一文字出現頻度集計テーブルを参照して、目標出現率Pcまでの順位の単一文字を抽出する。具体的には、コンピュータは、全単一文字の出現頻度の総和総出現頻度を分母とし、順位が1位の単一文字から降順に出現頻度を累計して分子とし、各順位までの出現率を算出する。たとえば、総出現頻度が50000、1位からy位までの単一文字群の累計出現頻度が40000とすると、y位までの出現頻度は、50000/40000×100=80[]となる。ここで、目標出現率Pcが80[]である場合は、上位y位までの単一文字を抽出することとなる。なお、C21で抽出された単一文字を、元の単一文字群と区別するために、特定単一文字群と称す。C22また、単一文字群のうち特定単一文字群から外された単一文字以下、非特定単一文字群は、出現頻度が各特定単一文字よりも低いため、その文字コードを分割する。具体的には、非特定単一文字の文字コードを、上位ビットの文字コードと、下位ビットの文字コードに分割する。たとえば、単一文字がUTF16ビット文字コードで表現されている場合は、上位8ビットの文字コードと下位8ビットの文字コードに分割する。この場合、分割されたいずれの文字コードも、0x00~0xFFのコードで表現される。このように、上位ビットの文字コードが上位分割文字コードであり、下位ビットの文字コードが下位分割文字コードである。図19は、図17の2圧縮符号長算出の詳細N=11を示す説明図である。図19の文字情報テーブルは、図17の1での集計結果を反映したテーブルであり、文字情報ごとに順位項目、伸長種別項目、コード項目、文字項目、出現回数項目、総回数項目、出現率項目、補正前での生起確率項目および圧縮符号長項目が設定されている。このうち、順位項目~総回数項目までが再ソート結果で得られた情報である。ここで、順位項目には、文字情報の出現回数の降順に順位昇順が書き込まれている。文字情報項目のうち伸長種別項目には、文字情報の種別が書き込まれる。16は16ビットコードの単一文字を示している。8は8ビットの分割文字コードを示している。特は基礎単語を示している。文字情報項目のうちコード項目には、特定単一文字または分割文字コードが書き込まれている。基礎単語の場合は空欄とする。文字情報項目のうち文字項目には、文字や基礎単語が書き込まれている。分割文字コードの場合は空欄とする。出現回数項目には、対象ファイル群Fsでの文字情報の出現回数が書き込まれている。総回数項目には、全文字情報の総出現回数が書き込まれている。出現率項目には、出現回数を総回数で割り算した値が出現率として書き込まれている。補正前項目の生起確率項目には、出現率に対応する生起確率が書き込まれている。圧縮符号長項目には、生起確率に応じた圧縮符号長、すなわち、生起確率1/2yのべき数yが圧縮符号長として書き込まれている。図20は、図17の3葉数特定~5葉の構造体生成の詳細N=11を示す説明図である。図19の文字情報テーブルを圧縮符号長単位で葉数文字情報の総種類数を集計した結果が、図19における補正前の葉数となる。ここで、補正Aとは、圧縮符号長の上限長Nすなわち、2N分枝無節点ハフマン木の最大枝数2Nのべき数N以上の圧縮符号長に割り当てられた葉数を、圧縮符号長の上限長Nに集約する補正である。この場合、補正前での最大圧縮符号長は17ビットであるが、文字情報の総種類数が1305種であるため、圧縮符号長の上限長Nは、N=11となる。したがって、補正Aでは、圧縮符号長11ビットの葉数が、圧縮符号長が11ビット~17ビットの葉数の総和1190個となる。そして、コンピュータは、生起確率総和を求める。圧縮符号長ごとの生起確率は決められているため5ビットなら1/25、圧縮符号長ごとに生起確率を葉数で乗じることで、圧縮符号長ごとの乗算結果が得られる。たとえば、補正Aにおける圧縮符号長5ビットの葉数は2である。圧縮符号長5ビットの生起確率は、1/25である。したがって、補正Aにおける圧縮符号長5ビットの生起確率は、2×1/25=1/24となる。圧縮符号長6ビット以降も同様に補正Aにおける圧縮符号長生起確率を求める。そして、補正A後における各圧縮符号長の生起確率を合計することで、補正Aでの生起確率総和が得られる。そして、コンピュータは、生起確率総和が1以下であるか否かを判断する。しきい値tは0<t≦1である。しきい値tを設けたくない場合は、t=1とすればよい。しきい値t未満であれば、補正Bに移行する。しきい値t以上1以下である場合は、補正Bに移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正Bは、補正Aでの圧縮符号長群5ビット~12ビットは変えずに、葉数を更新する補正である。具体的には、補正Aでの生起確率総和が、しきい値t以上1以下でない場合におこなわれる補正である。より具体的には、補正Bは2種類ある。1つ目は、生起確率総和がしきい値t未満である場合、生起確率総和が1以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を増加させる補正以下、補正Bである。もう1つは、生起確率総和が1より大きい場合、生起確率総和が1以下に割り込んでから1以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を減少させる補正以下、補正Bである。図20に示した例では、補正Aでの生起確率総和が1.146であるため、補正Bをおこなうこととなる。なお、補正Bおよび補正Bのいずれの補正Bであっても、葉数を生起確率総和で割るという同じ補正をおこなう。まず、補正Bの1回目補正B1では、圧縮符号長ごとの補正Aでの葉数を、前回の補正この場合は補正Aの生起確率の総和1.146で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Aでの圧縮符号長の上限長NN=11ビットについては、前回の補正この場合は補正Aの生起確率総和1.146で割ることはせず、葉の総数1305個から、補正B1での圧縮符号長ごとの葉の総数圧縮符号長の上限長Nの葉数除くを引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1208個である。このあと、コンピュータは、補正Aの場合と同様の計算処理により、補正B1での生起確率総和を求める。そして、コンピュータは、補正B1での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B1での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの2回目補正B2に移行する。最大漸近値に収束した場合は、補正B2に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B1で更新された生起確率総和1.042は1より大きいため、最大漸近値に収束しておらず、補正B2に移行する。補正B2では、圧縮符号長ごとの補正B1での葉数を、前回の補正この場合は補正B1の生起確率総和1.042で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正B1での圧縮符号長の上限長NN=11ビットについては、前回の補正この場合は補正B1の生起確率総和1.042で割ることはせず、葉の総数1305個から、補正B2での圧縮符号長ごとの葉の総数圧縮符号長の上限長Nの葉数除くを引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1215個である。このあと、コンピュータは、補正B1の場合と同様の計算処理により、補正B2での生起確率総和を求める。そして、コンピュータは、補正B2での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B2での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの3回目補正B3に移行する。最大漸近値に収束した場合は、補正B3に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B2で更新された生起確率総和0.982は1以下であるが、最大漸近値に収束しているかが不明であるため、補正B3に移行する。補正B3では、圧縮符号長ごとの補正B2での葉数を、前回の補正この場合は補正B2の生起確率総和0.982で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正B2での圧縮符号長の上限長NN=11ビットについては、前回の補正この場合は補正B2の生起確率総和0.982で割ることはせず、葉の総数1305個から、補正B3での圧縮符号長ごとの葉の総数圧縮符号長の上限長Nの葉数除くを引くことで、圧縮符号長の上限長Nの葉数を求める。この場合は、1215個である。このあと、コンピュータは、補正B2の場合と同様の計算処理により、補正B3での生起確率総和を求める。そして、コンピュータは、補正B3での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B3での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの4回目補正B4に移行する。最大漸近値に収束した場合は、補正B4に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B3で更新された生起確率総和0.982は、補正B2で更新された生起確率総和0.982と同じ値である。すなわち、補正B3での各圧縮符号長の葉数と補正B2での各圧縮符号長の葉数とは同じである。この場合、コンピュータは、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。このようにして、葉数が確定するまで補正Bを継続することとなる。図20の例では、補正B3で圧縮符号長ごとの葉数が確定したこととなる。このあと、コンピュータは、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長Nこの場合はN=11ビットから降順に、20、21、22、23、24、25、26として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。図21は、文字情報ごとの補正結果を示す説明図である。図21において、文字情報テーブルには、補正A、補正B1~補正B2までの補正結果が追加されている。図21に示したように、補正により圧縮符号長別の葉数が更新されるため、順位項目の1位の文字情報から短い圧縮符号長が割り当てられることとなる。たとえば、補正B2で確定した場合、圧縮符号長6ビットでは葉数が6、圧縮符号長7ビットでは葉数が18、...、圧縮符号長11ビットでは葉数が1215となっている。したがって、順位が1位から6位までの文字情報葉数6個分については6ビットの圧縮符号長、順位が7位から24位までの文字情報葉数18個分については7ビットの圧縮符号長、...、順位が91位から1305位までの文字情報葉数1215個分については11ビットの圧縮符号長が割り当てられる。そして、コンピュータは、文字情報と文字情報に割り当てられた圧縮符号長と圧縮符号長ごとの葉数とに基づいて、文字情報ごとに圧縮符号を割り当て、葉の構造体を生成することとなる。たとえば、出現率1位の単一文字0は5ビットの圧縮符号長が割り当てられているため、圧縮符号が000000となる。したがって、圧縮符号000000、圧縮符号長6、文字情報0を含む葉L1の構造体が生成されることとなる。なお、上述した補正処理では、圧縮符号長が5ビット~11ビットとしたが、2グラム文字列の圧縮符号マップを分割する場合もあるため、圧縮符号長は偶数ビットとなるように、補正してもよい。具体的には、たとえば、圧縮符号長5ビットおよび7ビットの文字情報については6ビット、9ビットの文字情報については8ビット、11ビットの文字情報については10ビットとする。図22は、図17の6葉へのポインタ生成の詳細N=11を示す説明図である。図22は、圧縮符号長の上限Nが11ビットの場合の葉へのポインタを示している。図22において、圧縮符号長が6ビットの葉数は6個であるため、圧縮符号は000000~000101が割り当てられる。また、圧縮符号長が6ビットの葉当たりの枝数は、32本である。したがって、圧縮符号長が6ビットの圧縮符号についての葉へのポインタは、32=25個生成される。具体的には、葉へのポインタの先頭6ビットが圧縮符号で後続5ビットが32種のビット列となる。したがって、圧縮符号長が6ビットの圧縮符号の各々について、32種の葉へのポインタが生成されることとなる。なお、図示はしないが、圧縮符号長が7ビットの葉数は18個であるため、圧縮符号0001100~0011111が割り当てられる。また、圧縮符号長が7ビットの葉当たりの枝数は、16本である。したがって、圧縮符号長が7ビットの圧縮符号についての葉へのポインタは、16=24個生成される。具体的には、葉へのポインタの先頭7ビットが圧縮符号で後続4ビットが16種のビット列となる。したがって、圧縮符号長が7ビットの圧縮符号の各々について、16種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が8ビットの葉数は23個であるため、圧縮符号01000000~01010110が割り当てられる。また、圧縮符号長が8ビットの葉当たりの枝数は、8本である。したがって、圧縮符号長が8ビットの圧縮符号についての葉へのポインタは、8=23個生成される。具体的には、葉へのポインタの先頭8ビットが圧縮符号で後続3ビットが8種のビット列となる。したがって、圧縮符号長が8ビットの圧縮符号の各々について、8種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が9ビットの葉数は23個であるため、圧縮符号010101110~011000100が割り当てられる。また、圧縮符号長が9ビットの葉当たりの枝数は、4本である。したがって、圧縮符号長が9ビットの圧縮符号についての葉へのポインタは、4=22個生成される。具体的には、葉へのポインタの先頭9ビットが圧縮符号で後続2ビットが4種のビット列となる。したがって、圧縮符号長が9ビットの圧縮符号の各々について、4種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が10ビットの葉数は20個であるため、圧縮符号0110000110~0110011101が割り当てられる。また、圧縮符号長が10ビットの葉当たりの枝数は、2本である。したがって、圧縮符号長が10ビットの圧縮符号についての葉へのポインタは、2=21個生成される。具体的には、葉へのポインタの先頭10ビットが圧縮符号で後続1ビットが2種のビット列となる。したがって、圧縮符号長が10ビットの圧縮符号の各々について、2種の葉へのポインタが生成されることとなる。同様に、圧縮符号長が11ビットの葉数は1215個であるため、圧縮符号01100111100~11111111010が割り当てられる。また、圧縮符号長が11ビットの葉当たりの枝数は、1本である。したがって、圧縮符号長が11ビットの圧縮符号についての葉へのポインタは、1=20個生成される。具体的には、圧縮符号がそのまま葉へのポインタとなる。したがって、圧縮符号長が11ビットの圧縮符号の各々について、1種の葉へのポインタが生成されることとなる。図23は、図17の72N分枝無節点ハフマン木の構築の詳細N=11を示す説明図である。図23では、N=11とした場合の2048=211分枝無節点ハフマン木を示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図22に示したように32個生成される。したがって、葉L1の構造体については、根の構造体に32個の葉L1へのポインタL1P1~L1P32が格納される。葉L2の構造体~葉L6の構造体についても同様である。葉L7以降の構造体については、図23のとおりである。図24は、葉の構造体を示す説明図である。葉の構造体は、第1領域~第4領域を有するデータ構造体である。葉の構造体は、第1領域には、圧縮符号およびその圧縮符号長が格納される。第2領域には、葉の標識と伸長種別図19参照が格納される。第3領域には、伸長種別に応じて特定単一文字である16ビットの文字コード、非特定単一文字の文字コードが分割された8ビットの分割文字コード、または基礎単語へのポインタが格納される。基礎単語へのポインタにより基礎単語の構造体内の基礎単語が指定される。また、照合フラグも格納されている。照合フラグはデフォルトでは0である。0の場合は、伸長する文字をそのまま伸長バッファに書き出し、1の場合は、<color>タグと</color>タグで挟み込んで伸長バッファに書き出す。第4領域には、符号種別と符号区分が格納される。符号種別とは、文字コードが数字、英字、特殊記号、カタカナ、ひらがな、漢字のいずれに該当するか、または予約語へのポインタであるかを識別する情報である。符号区分とは、文字コードが16ビットであるか8ビットであるかを識別する情報である。16ビットの文字コードである場合または予約語である場合、符号区分として1を割り当て、8ビットの分割文字コードの場合、符号区分として0を割り当てる。図25は、特定単一文字の構造体を示す説明図である。特定単一文字の構造体2500は、特定単一文字コードe♯とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、特定単一文字の構造体2500に特定単一文字コードe♯を格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、特定単一文字の構造体2500における特定文字コードe♯へのポインタを格納する。また、特定単一文字コードe♯へのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各特定単一文字コードe♯に対応する葉へのポインタを、特定単一文字の構造体2500内の対応する特定単一文字コードe♯に関連付けて格納する。これにより、特定単一文字の構造体2500が生成される。図26は、分割文字コードの構造体を示す説明図である。分割文字コードの構造体2600は、分割文字コードとその葉L♯へのポインタを格納する。具体的には、たとえば、コンピュータは、対象ファイル群Fsからの集計結果が得られたときに、コンピュータが、分割文字コードの構造体2600に分割文字コードを格納する。そして、コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、分割文字コードの構造体2600における分割文字コードへのポインタを格納する。また、分割文字コードへのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各分割文字コードに対応する葉へのポインタを、分割文字コードの構造体2600内の対応する分割文字コードに関連付けて格納する。これにより、分割文字コードの構造体2600が生成される。図27は、基礎単語の構造体を示す説明図である。基礎単語の構造体2700は、特基礎単語とその葉L♯へのポインタを格納するデータ構造体である。基礎単語の構造体2700には、あらかじめ基礎単語が格納されている。コンピュータは、2N分枝無節点ハフマン木が構築されると、2N分枝無節点ハフマン木における各葉の構造体に格納された圧縮符号に対応する、基礎単語の構造体2700における基礎単語へのポインタを格納する。また、基礎単語へのポインタが対応する葉の構造体に格納されると、コンピュータは、2N分枝無節点ハフマン木における各基礎単語に対応する葉へのポインタを、基礎単語の構造体2700内の対応する基礎に関連付けて格納することとなる。<圧縮符号マップの生成例>2N分枝無節点ハフマン木が生成されると、単一文字の圧縮符号マップ、上位分割文字コードの圧縮符号マップ、下位分割文字コードの圧縮符号マップ、単語の圧縮符号マップ、2グラム文字列の圧縮符号マップを生成することができる。以下、単一文字の圧縮符号マップ、上位分割文字コードの圧縮符号マップ、下位分割文字コードの圧縮符号マップ、2グラム文字列の圧縮符号マップの詳細な生成例について説明する。なお、基礎単語の圧縮符号マップは、単一文字の圧縮符号マップと同様に行われるため省略する。図28は、圧縮符号マップの生成例を示す説明図である。図28では、対象ファイルFi内に竜馬は脱藩したという文字列が記述されているものとする。Aまず、先頭文字竜が対象文字である。対象文字竜は特定単一文字であるため、2N分枝無節点ハフマン木にアクセスして特定単一文字竜の圧縮符号を取得し、特定単一文字竜の出現マップを特定する。未生成の場合は、特定単一文字竜の圧縮符号をポインタとし、かつ、対象ファイルの存否を示すビット列をオール0にした特定単一文字竜の出現マップを生成する。そして、特定単一文字竜の出現マップについて対象ファイルFiのビットをON0→1にする。Bつぎに、対象文字を1グラムシフトして、対象文字を馬にする。対象文字馬は特定単一文字であるため、2N分枝無節点ハフマン木にアクセスして特定単一文字馬の圧縮符号を取得し、特定単一文字馬の出現マップを特定する。未生成の場合は、特定単一文字馬の圧縮符号をポインタとし、かつ、対象ファイルの存否を示すビット列をオール0にした特定単一文字馬の出現マップを生成する。そして、特定単一文字馬の出現マップについて対象ファイルFiのビットをON0→1にする。また、対象文字が馬にシフトされた場合、竜馬という2グラム文字列が得られるため、竜の圧縮符号と馬の圧縮符号を結合した竜馬の圧縮符号列により、2グラム文字列竜馬の出現マップを特定する。未生成の場合は、竜馬の圧縮符号列をポインタとし、かつ、対象ファイルの存否を示すビット列をオール0にした2グラム文字列竜馬の出現マップを生成する。そして、2グラム文字列竜馬の出現マップにおいて対象ファイルFiのビットをON0→1にする。Cつぎに、対象文字を1グラムシフトして、対象文字をはにする。対象文字はについてもBと同様に処理することで、特定単一文字はの出現マップについて対象ファイルFiのビットをON0→1にする。同様に、2グラム文字列馬はの出現マップにおいて対象ファイルFiのビットをON0→1にする。Dつぎに、対象文字を1グラムシフトして、対象文字を脱にする。対象文字脱は特定単一文字ではないため、対象文字脱の文字コード0x8131を、上位分割文字コード0x81と下位分割文字コード0x31に分割する。そして、対象文字を上位分割文字コード0x81にする。上位分割文字コード0x81についても、特定単一文字と同様に処理することで、上位分割文字コード0x81の出現マップについて対象ファイルFiのビットをON0→1にする。同様に、2グラム文字列は0x81の出現マップにおいて対象ファイルFiのビットをON0→1にする。Eつぎに、対象文字を1グラムシフトして、文字脱の下位分割文字コード0x31を、対象文字にする。下位分割文字コード0x31についても、同様に処理することで、下位分割文字コード0x31の出現マップについて対象ファイルFiのビットをON0→1にする。同様に、2グラム文字列0x810x31の出現マップにおいて対象ファイルFiのビットをON0→1にする。F~Iについても同様の処理をおこない、最後の対象ファイルFnについても処理を完了することで、単一文字の圧縮符号マップ、上位分割文字コードの圧縮符号マップ、下位分割文字コードの圧縮符号マップ、2グラム文字列の圧縮符号マップが生成される。ただし、図3に示したように、2グラム文字列の出現頻度が低い場合後述の分割順位R2g以降は、2グラム文字列に対し第1連結符号~第4連結符号を生成する4分割の場合。そして、第1連結符号~第4連結符号をポインタとする出現マップ群を生成し、対象ファイルFiのビットをON0→1にすることになる。これにより、マップサイズの縮小および検索ノイズの低減化を図ることができる。<コンピュータのハードウェア構成例>図29は、実施の形態にかかるコンピュータのハードウェア構成例を示すブロック図である。図29において、コンピュータは、CPUCentralProcessingUnit2901と、ROMReadOnlyMemory2902と、RAM2903RandomAccessMemory2903と、磁気ディスク2905ドライブ2904と、磁気ディスク2905と、光ディスクドライブ2906と、光ディスク2907と、ディスプレイ2908と、I/FInterface2909と、キーボード2910と、マウス2911と、スキャナ2912と、プリンタ2913と、を備えている。また、各構成部はバス2900によってそれぞれ接続されている。ここで、CPU2901は、コンピュータの全体の制御を司る。ROM2902は、ブートプログラムなどのプログラムを記憶している。また、ROM2902は、圧縮符号マップを生成するプログラム、圧縮符号マップまたは符号マップを用いて検索を行うプログラムを記憶している。RAM2903は、CPU2901のワークエリアとして使用され、CPU2901は、ROM2902に記憶されたプログラムをRAM2903に読み出して実行することができる。磁気ディスク2905ドライブ2904は、CPU2901の制御にしたがって磁気ディスク2905に対するデータのリード/ライトを制御する。磁気ディスク2905は、磁気ディスク2905ドライブ2904の制御で書き込まれたデータを記憶する。光ディスクドライブ2906は、CPU2901の制御にしたがって光ディスク2907に対するデータのリード/ライトを制御する。光ディスク2907は、光ディスクドライブ2906の制御で書き込まれたデータを記憶したり、光ディスク2907に記憶されたデータをコンピュータに読み取らせたりする。ディスプレイ2908は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ2908は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。インターフェース以下、I/Fと略する。2909は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク2914に接続され、このネットワーク2914を介して他の装置に接続される。そして、I/F2909は、ネットワーク2914と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F2909には、たとえばモデムやLANアダプタなどを採用することができる。キーボード2910は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス2911は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。スキャナ2912は、画像を光学的に読み取り、コンピュータ内に画像データを取り込む。なお、スキャナ2912は、OCROpticalCharacterReader機能を持たせてもよい。また、プリンタ2913は、画像データや文書データを印刷する。プリンタ2913には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。また、コンピュータは、サーバや据置き型のパーソナルコンピュータのほか、携帯電話機、スマートフォン、電子書籍端末、ノート型パソコンなどの携帯型端末であってもよい。また、図76に示すように、本実施の形態は、複数のコンピュータに応じて実施されても良い。図76に示すシステムは、図29に示す各ハードウェアを含みうるコンピュータ7601~7603、ネットワーク7604、スイッチ7605、無線基地局7607を含む。コンピュータ7603に含まれるI/Fは、無線通信機能を備える。例えば、複数のファイルを含むコンテンツについての圧縮符号マップまたは符号マップを生成する処理をコンピュータ7601で実行し、コンピュータ7602及びコンピュータ7603に配信し、コンピュータ7602およびコンピュータ7603のそれぞれで配信されたコンテンツについての検索処理を実行しても良い。また、複数のファイルを含むコンテンツについての圧縮符号マップまたは符号マップを生成する処理をコンピュータ7601で実行し、コンピュータ7602またはコンピュータ7603からコンテンツについての検索依頼をコンピュータ7601が受け付けて、検索処理を実行し、実行した検索処理の結果をコンピュータ7602、コンピュータ7603のそれぞれに返すように構成しても良い。図29のコンピュータと同様に、コンピュータ7601~7603のそれぞれは、サーバや据置き型のパーソナルコンピュータのほか、携帯電話機、スマートフォン、電子書籍端末、ノート型パソコンなどの携帯型端末であってもよい。<圧縮符号マップ生成処理手順>つぎに、コンピュータが生成プログラムにより実行する圧縮符号マップ生成処理手順例について説明する。図30は、コンピュータが生成プログラムにより実行する圧縮符号マップ生成処理手順例を示すフローチャートである。コンピュータは、集計処理ステップS3001、マップ割当数決定処理ステップS3002、再集計処理ステップS3003、ハフマン木生成処理ステップS3004、分割順位決定処理ステップS3005、マップ生成処理ステップS3006を実行する。集計処理ステップS3001とは、対象ファイル群Fs内の単一文字や基礎単語の出現回数出現頻度ともいうを計数する処理である。マップ割当数決定処理ステップS3002とは、集計処理ステップS3001で集計された単一文字および基礎単語についてのマップ割当数を決定する処理である。マップ割当数に対応する出現順位の単一文字および基礎単語が、それぞれ特定単一文字および基礎単語となる。再集計処理ステップS3003とは、単一文字のうち特定単一文字以外の非特定単一文字を分割して、上位分割文字コードおよび下位分割文字コードとし、それぞれの出現回数を集計する処理である。また、再集計処理ステップS3003では、2グラム文字列の出現回数も集計する。ハフマン木生成処理ステップS3004とは、図19~図24に示したように、2N分枝無節点ハフマン木を生成する処理である。分割順位決定処理ステップS3005とは、分割順位を決定する処理である。分割順位とは、再集計処理ステップS3003で再集計された2グラム文字列の圧縮符号マップを分割させる2グラム文字列の出現順位である。これにより、分割順位以降の2グラム文字列について分割されることとなる。マップ生成処理ステップS3006とは、特定単一文字、基礎単語、上位分割文字コード、下位分割文字コード、2グラム文字列についての圧縮符号マップを生成する処理である。2グラム文字列の圧縮符号マップのうち、分割順位決定処理ステップS3005で決定された分割順位以降の2グラム文字列については分割される。これにより、検索ノイズの低減化を図ることができる。集計処理ステップS3001図31は、図30に示した集計処理ステップS3001の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、ファイル番号iをi=1に設定しステップS3101、対象ファイルFiを読み込むステップS3102。そして、コンピュータは、対象ファイルFiの集計処理を実行するステップS3103。対象ファイルFiの集計処理ステップS3103の詳細については、図32で説明する。このあと、コンピュータは、ファイル番号iがi>nnは対象ファイルF1~Fnの総数であるか否かを判断するステップS3104。i>nでない場合ステップS3104:No、コンピュータは、iをインクリメントしステップS3105、ステップS3102に戻る。一方、i>nである場合ステップS3104:Yes、コンピュータは、図30に示したマップ割当数決定処理ステップS3002に移行して、集計処理ステップS3001を終了する。この集計処理ステップS3001によれば、対象ファイルFiごとに対象ファイルFiの集計処理ステップS3103を実行することができる。対象ファイルFiの集計処理ステップS3103図32は、図31に示した対象ファイルFiの集計処理ステップS3103の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、対象文字を対象ファイルFiの先頭文字としステップS3201、基礎単語集計処理を実行するステップS3202。基礎単語集計処理ステップS3202の詳細については図34で説明する。このあと、コンピュータは、文字出現頻度集計テーブルにおいて対象文字の出現回数を1増加するステップS3203。図33は、文字出現頻度集計テーブルを示す説明図である。文字出現頻度集計テーブル3300は、RAM2903や磁気ディスク2905などの記憶装置に記憶されており、該当する文字が出現する都度出現回数を1ずつ増加させる。図32に戻り、コンピュータは、対象文字が対象ファイルFiの末尾文字であるか否かを判断するステップS3204。対象文字が対象ファイルFiの末尾文字でない場合ステップS3204:No、コンピュータは、対象文字を末尾方向へ1文字シフトしステップS3205、ステップS3202に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合ステップS3204:Yes、コンピュータは、ステップS3104に移行して、対象ファイルFiの集計処理ステップS3103を終了する。この対象ファイルFiの集計処理ステップS3103によれば、対象ファイル群Fsに存在する基礎単語および単一文字の出現頻度を集計することができる。基礎単語集計処理ステップS3202図34は、図32に示した基礎単語集計処理ステップS3202の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、最長一致検索処理を実行しステップS3401、最長一致した基礎単語があったか否かを判断するステップS3402。最長一致検索処理ステップS3402の詳細については図36で説明する。最長一致した基礎単語があった場合ステップS3402:Yes、コンピュータは、基礎単語出現頻度集計テーブルにおいて最長一致した基礎単語の出現回数を1増加しステップS3403、ステップS3203に移行する。図35は、基礎単語出現頻度集計テーブルを示す説明図である。基礎単語出現頻度集計テーブル3500は、RAM2903や磁気ディスク2905などの記憶装置に記憶されており、該当する基礎単語が出現する都度出現回数を1ずつ増加させる。図34に戻り、最長一致した基礎単語がなかった場合ステップS3402:No、ステップS3203に移行する。これにより、基礎単語集計処理ステップS3202を終了する。この基礎単語集計処理ステップS3202によれば、最長一致検索処理ステップS3401により基礎単語を計数することができるため、文字列が長い基礎単語を優先的に計数することができる。最長一致検索処理ステップS3401図36は、図34に示した最長一致検索処理ステップS3401の詳細な処理手順を示すフローチャートである。まず、コンピュータは、c=1とするステップS3601。cは対象文字からの文字数対象文字含むである。c=1の場合は、対象文字だけである。つぎに、コンピュータは、対象文字からc文字目までの対象文字列と前方一致する基礎単語を2分探索するステップS3602。そして、コンピュータは、検索により基礎単語があるか否かを判断するステップS3603。2分探索により基礎単語がヒットしなかった場合ステップS3603:No、ステップS3606に移行する。一方、2分探索により基礎単語がヒットした場合ステップS3603:Yes、コンピュータは、ヒットした基礎単語と対象文字列とが完全一致するか否かを判断するステップS3604。そして、完全一致しない場合ステップS3604:No、ステップS3606に移行する。一方、完全一致する場合ステップS3604:Yes、コンピュータは、最長一致候補として記憶装置に保持しステップS3605、ステップS3606に移行する。ステップS3606では、コンピュータは、対象文字列について2分探索が終了したか否かを判断するステップS3606。具体的には、コンピュータは、末尾の基礎単語まで2分探索したか否かを判断する。2分探索が終了していない場合ステップS3606:No、コンピュータは、ステップS3602に移行して、2分探索が終了するまで継続する。一方、対象文字列について2分探索が終了した場合ステップS3606:Yes、コンピュータは、c文字目の文字が対象ファイルFiの末尾文字であるか否かを判断するステップS3607。c文字目の文字が対象ファイルFiの末尾文字である場合ステップS3607:Yes、ステップS3610に移行する。一方、c文字目の文字が対象ファイルFiの末尾文字でない場合ステップS3607:No、コンピュータは、c>cmaxであるか否かを判断するステップS3608。cmaxは予め設定された値であり、これにより対象文字列の上限文字数が設定される。c>cmaxでない場合ステップS3608:No、コンピュータは、cをインクリメントしてステップS3609、ステップS3602に戻る。一方、c>cmaxである場合ステップS3608:Yes、コンピュータは、最長一致候補があるか否かを判断するステップS3610。具体的には、コンピュータは、ステップS3605において1つでも最長一致候補がメモリに保持されているか否かを判断する。最長一致候補がある場合ステップS3610:Yes、コンピュータは、最長一致候補のうち最長文字列を、最長一致した基礎単語に決定するステップS3611。そして、ステップS3402に移行する。一方、ステップS3610において、最長一致候補が1つもない場合ステップS3610:No、ステップS3402に移行する。これにより、最長一致検索処理ステップS3401を終了する。この最長一致検索処理ステップS3401によれば、基礎単語の構造体にある基礎単語の中から、完全一致した文字列の中でかつ最長の文字列を基礎単語として検索することができる。マップ割当数決定処理ステップS3002図37は、図30に示したマップ割当数決定処理ステップS3002の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、集計処理ステップS3001による基礎単語ごとの出現頻度を示す基礎単語出現頻度集計テーブル3500と単一文字ごとの出現頻度を示す文字出現頻度集計テーブル3300を出現頻度の高い順にソートするステップS3701。そして、コンピュータは、ソート後の基礎単語出現頻度集計テーブル3500を参照して、基礎単語の出現順位RwをRw=1としステップS3702、出現順位Rwまでの累積出現回数Arwを計数するステップS3703。そして、コンピュータは、下記式1を満たすか否かを判断するステップS3704。Arw>Pw×Aw1Awは集計された基礎単語の総出現回数である。上記1式を満たさない場合ステップS3704:No、コンピュータは、出現順位RwをインクリメントしてステップS3705、ステップS3703に戻る。すなわち、上記式1を満たすまで出現順位Rwを下げ続ける。そして、上記式1を満たした場合ステップS3704:Yes、コンピュータは、基礎単語のマップ割当数NwをNw=Rw-1とするステップS3706。ここで、マップ割当数Nwとは、マップ生成処理ステップS3006で生成される基礎単語出現マップに割り当てられる基礎単語数であり、基礎単語出現マップのレコード数行数を意味する。また、コンピュータは、単一文字の出現順位RcをRc=1としステップS3707、出現順位Rcまでの累積出現回数Arcを計数するステップS3708。そして、コンピュータは、下記式2を満たすか否かを判断するステップS3709。Arc>Pc×Ac2Acは集計された単一文字の総出現回数である。上記2式を満たさない場合ステップS3709:No、コンピュータは、出現順位RcをインクリメントしてステップS3710、ステップS3708に戻る。すなわち、上記式2を満たすまで出現順位Rcを下げ続ける。そして、上記式2を満たした場合ステップS3709:Yes、コンピュータは、単一文字のマップ割当数NcをNc=Rc-1とするステップS3711。ここで、マップ割当数Ncとは、マップ生成処理ステップS3006で生成される特定単一文字出現マップに割り当てられる特定単一文字数であり、特定単一文字出現マップのレコード数行数を意味する。この後、再集計処理ステップS3003に移行して、マップ割当数決定処理ステップS3002を終了する。このマップ割当数決定処理ステップS3002によれば、マップ生成処理ステップS3006において目標出現率Pwに応じた数の基礎単語分について基礎単語出現マップを生成することができる。したがって、すべての基礎単語についてマップ割当をおこなう必要はなく、目標出現率Pwにしたがって決められるため、マップサイズの最適化を図ることができる。また、単一文字についても、マップ生成処理ステップS3006において目標出現率Pcに応じた数の単一文字分について特定単一文字の圧縮符号マップを生成することができる。したがって、すべての単一文字についてマップ割当をおこなう必要はなく、目標出現率Pcにしたがって決められるため、マップサイズの最適化を図ることができる。再集計処理ステップS3003図38は、図30に示した再集計処理ステップS3003の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、ファイル番号iをi=1に設定しステップS3801、対象ファイルFiを読み込むステップS3802。そして、コンピュータは、対象ファイルFiの再集計処理を実行するステップS3803。対象ファイルFiの再集計処理ステップS3803の詳細については、図39で説明する。このあと、コンピュータは、ファイル番号iがi>nnは対象ファイルF1~Fnの総数であるか否かを判断するステップS3804。i>nでない場合ステップS3804:No、コンピュータは、iをインクリメントしステップS3805、ステップS3802に戻る。一方、i>nである場合ステップS3804:Yes、コンピュータは、図30に示したハフマン木生成処理ステップS3004に移行して、再集計処理ステップS3003を終了する。この再集計処理ステップS3003によれば、対象ファイルFiごとに対象ファイルFiの再集計処理ステップS3803を実行することができる。対象ファイルFiの再集計処理ステップS3803図39は、対象ファイルFiの再集計処理ステップS3803の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、対象文字を対象ファイルFiの先頭文字としステップS3901、対象文字が特定単一文字であるか否かを判断するステップS3902。特定単一文字である場合ステップS3902:Yes、分割せずにステップS3904に移行する。一方、特定単一文字でない場合ステップS3902:No、コンピュータは、対象文字の文字コードを上位分割文字コードと下位分割文字コードとに分割するステップS3903。そして、ステップS3904に移行する。ステップS3904では、コンピュータは、上位分割文字コード出現頻度集計テーブルに対し、ステップS3903で得られた上位分割文字コードと同一分割文字コードの出現回数を1加算するステップS3904。図40は、上位分割文字コード出現頻度集計テーブルを示す説明図である。上位分割文字コード出現頻度集計テーブル4000は、RAM2903や磁気ディスク2905などの記憶装置に記憶されており、該当する上位分割文字コードが出現する都度出現回数を1ずつ増加させる。また、図39において、コンピュータは、下位分割文字コード出現頻度集計テーブルに対し、ステップS3903で得られた下位分割文字コードと同一分割文字コードの出現回数を1加算するステップS3905。図41は、下位分割文字コード出現頻度集計テーブルを示す説明図である。下位分割文字コード出現頻度集計テーブル4100は、RAM2903や磁気ディスク2905などの記憶装置に記憶されており、該当する下位分割文字コードが出現する都度出現回数を1ずつ増加させる。また、図39において、コンピュータは、2グラム文字列特定処理を実行するステップS3906。2グラム文字列特定処理ステップS3906では、対象文字を基点とする2グラム文字列を特定する。2グラム文字列特定処理ステップS3906の詳細は図42で説明する。コンピュータは、2グラム文字列出現頻度集計テーブルに対し、2グラム文字列特定処理ステップS3906で特定された2グラム文字列の出現回数を1加算するステップS3907。図42は、図39で示した2グラム文字列特定処理ステップS3906の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字に対し、対象文字は分割されたか否かを判断するステップS4201。すなわち、コンピュータは、対象文字が分割文字コードか否かを判断する。分割されていない場合ステップS4201:No、すなわち、単一文字の場合、コンピュータは、1つ前の文字があるか否かを判断するステップS4202。1つ前の文字がある場合ステップS4202:Yes、コンピュータは、1つ前の文字は分割されたか否かを判断するステップS4203。すなわち、コンピュータは、1つ前の文字が分割文字コードか否かを判断する。分割されていない場合ステップS4203:No、すなわち、単一文字の場合、コンピュータは、対象文字の1つ前の単一文字と対象文字単一文字からなる文字列を、2グラム文字列に決定するステップS4204。そして、ステップS3907に移行する。一方、ステップS4203において、1つ前の文字が分割された場合ステップS4203:Yes、すなわち、分割文字コードである場合、その1つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、コンピュータは、1つ前の文字である下位分割文字コードと対象文字からなる文字列を、2グラム文字列に決定するステップS4205。そして、ステップS3907に移行する。また、ステップS4202において、1つ前の文字がない場合ステップS4202:No、対象文字だけとなるため、2グラム文字列を決定せずに、ステップS3907に移行する。また、ステップS4201において、対象文字が分割された場合ステップS4201:Yes、すなわち、分割文字コードである場合、コンピュータは、その分割文字コードが上位分割文字コードか下位分割文字コードであるかを判断するステップS4206。上位分割文字コードである場合ステップS4206:上位、コンピュータは、1つ前の文字は分割されたか否かを判断するステップS4207。すなわち、1つ前の文字が分割文字コードか否かを判断する。分割されていない場合ステップS4207:No、すなわち、単一文字の場合、コンピュータは、対象文字の1つ前の単一文字と対象文字から分割された上位分割文字コードからなる文字列を、2グラム文字列に決定するステップS4208。そして、ステップS3907に移行する。一方、ステップS4207において、1つ前の文字が分割された場合ステップS4207:Yes、すなわち、分割文字コードである場合、その1つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、コンピュータは、1つ前の文字である下位分割文字コードと対象文字から分割された上位分割文字コードからなる文字列を、2グラム文字列に決定するステップS4209。そして、ステップS3907に移行する。また、ステップS4206において、下位分割文字コードである場合ステップS4206:下位、コンピュータは、対象文字から分割された上位分割文字コードおよび下位分割文字コードからなる文字列を、2グラム文字列に決定するステップS4210。そして、ステップS3907に移行する。この2グラム文字列特定処理ステップS3906によれば、対象文字が分割された場合であっても2グラム文字列を特定することができる。また、1文字シフトにしたがって2グラム文字列を特定するため、基礎単語の圧縮符号マップおよび特定単一文字の圧縮符号マップと同時並行で生成することができる。このように、上述した情報生成によれば、目標出現率Pw,Pcにより、マップ生成される基礎単語数および単一文字数が制限されるため、無駄なマップ生成がなくなり、マップ生成の高速化およびマップサイズの最適化を同時に実現することができる。また、1文字シフトにより複数種類のマップ生成を同時並行で実行することができ、高精度な検索に用いる複数種類のマップ生成の効率化を図ることができる。図43は、2グラム文字列出現頻度集計テーブルを示す説明図である。2グラム文字列出現頻度集計テーブル4300は、RAM2903や磁気ディスク2905などの記憶装置に記憶されており、該当する2グラム文字列が出現する都度出現回数を1ずつ増加させる。このあと、コンピュータは、対象文字の後続文字が対象ファイルFi内にあるか否かを判断しステップS3908、後続文字がある場合ステップS3908:Yes、後続文字を対象文字に設定しステップS3909、ステップS3902に戻る。一方、後続文字がない場合ステップS3908:No、対象ファイルFiの再集計処理ステップS3803を終了して、ステップS3804に移行する。これにより、対象ファイルFiごとに、対象ファイルFi内に存在する上位分割文字コード、下位分割文字コード、および2グラム文字列の出現回数を集計することができる。ハフマン木生成処理ステップS3004図44は、図30に示したハフマン木生成処理ステップS3004の詳細な処理手順例を示すフローチャートである。図44において、コンピュータは、圧縮符号長の上限長Nを決定するステップS4401。つぎに、コンピュータは、補正処理を実行するステップS4402。ここで、補正処理とは、図19~図21で説明したように、文字情報ごとの生起確率および圧縮符号長を、圧縮符号長の上限長Nを用いて補正する処理である。つぎに、コンピュータは、文字情報ごとに葉の構造体を生成するステップS4403。そして、コンピュータは、枝数特定処理を実行するステップS4006。枝数特定処理ステップS4404では、圧縮符号長ごとの葉当たりの枝数を特定する。枝数特定処理ステップS4404の詳細は図45で説明する。そして、コンピュータは、構築処理を実行するステップS4405。枝数特定処理ステップS4404により葉の構造体ごとの枝数が特定されるため、まず、コンピュータは、葉の構造体ごとに、枝数分の葉へのポインタ群を生成する。そして、生成された各葉の構造体についての葉へのポインタ群を集約して根の構造体とする。これにより、2N分枝無節点ハフマン木が生成されることとなる。なお、生成された2N分枝無節点ハフマン木は、コンピュータ内の記憶装置RAM2903や磁気ディスク2905などに格納される。このあと、図30の分割順位決定処理ステップS3005に移行する。図45は、図44に示した枝数特定処理ステップS4404の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、最大圧縮符号長CLmax=Nと最小圧縮符号長CLmin=Mとの差分D=N-Mを算出するステップS4501。たとえば、N=11の場合、図19を参照すると、M=6である。したがって、D=5である。つぎに、コンピュータは、2のべき数の変数jをj=0とし、圧縮符号長の変数CLをCL=NとするステップS4502。そして、コンピュータは、j>Dであるか否かを判断するステップS4503。j>Dでない場合ステップS4503:No、コンピュータは、圧縮符号長CLの葉当たりの枝数bCLを算出するステップS4504。圧縮符号長CLの葉当たりの枝数bCLは、bCL=2jで算出される。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの葉当たりの枝数b11は、b11=2j=20=1となる。つぎに、コンピュータは、圧縮符号長CLの総枝数BLを算出するステップS4505。圧縮符号長CLの総枝数BLは、BL=LCL×bCLで算出される。LCLは、圧縮符号長CLでの葉数文字情報の種類数である。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの総枝数BLは、1216×20=1216となる。このあと、コンピュータは、jをインクリメントし、圧縮符号長CLをデクリメントしてステップS4506、ステップS4503に戻り、インクリメント後のjがj>Dであるか否かが判断される。なお、N=11の場合は、j=Dになるとj=D=5となり、CL=M=6となる。したがって、ステップS4504では、圧縮符号長CL5ビットの葉当たりの枝数b6は、b6=26=64となる。同様に、総枝数BLは、B6=0×26=0となる。そして、j>Dである場合ステップS4503:Yes、構築処理ステップS4405に移行する。図46は、図44に示した構築処理ステップS4405の詳細な処理手順を示すフローチャートである。まず、コンピュータは、圧縮符号長CLをCL=CLmin=MとするステップS4601。つぎに、コンピュータは、圧縮符号長CLでの未選択の葉があるか否かを判断するステップS4602。未選択の葉がある場合ステップS4602:Yes、コンピュータは、葉へのポインタ生成処理ステップS4603を実行して、ステップS4602に戻る。葉へのポインタ生成処理ステップS4603では、葉の構造体ごとに、圧縮符号長CLに応じた枝数分の葉へのポインタ群を生成する。なお、葉へのポインタ生成処理ステップS4603の詳細は図47で説明する。一方、ステップS4602において、未選択の葉がない場合ステップS4602:No、コンピュータは、CL>Nであるか否かを判断するステップS4604。CL>Nでない場合ステップS4604:No、コンピュータは、CLをインクリメントしてステップS4605、ステップS4602に戻る。一方、CL>Nである場合ステップS4604:Yes、2N分枝無節点ハフマン木が構築されたこととなり、図30の分割順位決定処理ステップS3005に移行することとなる。図47は、図46に示した葉へのポインタ生成処理ステップS4603の詳細な処理手順を示すフローチャートである。まず、コンピュータは、未選択の葉Lを選択しステップS4701、選択葉へのポインタ数kをk=1に設定するステップS4702。そして、コンピュータは、選択葉へのポインタPLkの先行ビット列を、選択葉の圧縮符号に設定するステップS4703。たとえば、上限長N=11については、選択葉が、文字情報0の葉の構造体である場合、圧縮符号は000000である。したがって、選択葉へのポインタPLkの先行ビット列も、000000となる。つぎに、コンピュータは、選択葉へのポインタPLkの後続ビット列のビット長を、最大圧縮符号長Nから選択葉の圧縮符号長CLを引いた差分とし、後続ビット列の初期値をオール0に設定するステップS4704。たとえば、選択葉が、文字情報0の葉の構造体である場合、圧縮符号長CLは6ビットであるため、後続ビット列のビット長は5ビット=11-6となる。k=1の場合は、後続ビット列はオール0となるため、後続ビット列は、5ビットの00000となる。そして、コンピュータは、選択葉へのポインタPLkを根の構造体に格納するステップS4705。このあと、コンピュータは、k>bCLであるか否かを判断するステップS4706。bCLは、選択葉の圧縮符号長CLの葉当たりの枝数である。k>bCLでない場合ステップS4706:No、選択葉に割り当てられたすべての枝について葉へのポインタが生成されていないため、コンピュータは、kをインクリメントするステップS4707。そして、コンピュータは、現在の後続ビット列をインクリメントして、インクリメント後の後続ビット列を先行ビット列の末端に連結することで、あらたに、選択葉へのポインタPLkを生成するステップS4708。そして、コンピュータは、選択葉へのポインタPLkを根の構造体に格納しステップS4709、ステップS4706に戻る。ステップS4706~ステップS4709を繰り返すことで、葉当たりの枝数分の葉へのポインタ群が生成されることとなる。そして、ステップS4706において、k>bCLである場合ステップS4706:Yes、ステップS4602に移行する。このように、対象ファイル群Fsに出現する文字情報の種類数に応じて、2N分枝無節点ハフマン木の最大枝数2Nを最適な本数に設定することができるため、2N分枝無節点ハフマン木のサイズの適正化を図ることができる。また、本実施の形態によれば、上限長Nが2~4の整数倍でない場合たとえば、上限長N=11,13であっても、圧縮効率のよい2N分枝無節点ハフマン木を生成することができる。このあと、コンピュータは、2N分枝無節点ハフマン木の各葉の構造体と、基礎単語の構造体,特定文字コードの構造体,分割文字コードの構造体とを、図21の文字情報テーブルを参照して、相互に関連付ける。具体的には、上述したように、葉の構造体には、当該葉に格納されている圧縮符号に対応する特定文字、分割文字コードおよびへのポインタや基礎単語へのポインタを格納する。また、コンピュータは、基礎単語の構造体の基礎単語ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、コンピュータは、特定文字コードの構造体の特定文字ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、コンピュータは、分割文字コードの構造体の分割文字コードごとに、対応する圧縮符号を格納する葉へのポインタを格納する。分割順位決定処理ステップS3005図48は、図30に示した分割順位決定処理ステップS3005の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、2グラム文字列出現頻度集計テーブル4300について出現回数の高い順にソートするステップS4801。つぎに、コンピュータは、2グラム文字列の出現順位R2gをR2g=1とするステップS4802。そして、コンピュータは、2グラム文字列出現頻度集計テーブル4300を参照して、出現順位R2gまでの累積出現回数Ar2gを計数するステップS4803。そして、コンピュータは、下記式3を満たすか否かを判断するステップS4804。Ar2g>P2g×A2g3P2gは2グラム文字列の目標出現率であり、A2gは集計された2グラム文字列の総出現回数である。上記3式を満たさない場合ステップS4804:No、コンピュータは、出現順位R2gをインクリメントしてステップS4805、ステップS4803に戻る。すなわち、上記式3を満たすまで出現順位R2gを下げ続ける。そして、上記式3を満たした場合ステップS4804:Yes、コンピュータは、図30に示したマップ生成処理ステップS3006に移行する。上記式3を満たしたときの出現順位R2gが分割順位となる。これにより、分割順位R2g以降の2グラム文字列について分割されることとなる。マップ生成処理ステップS3006図49は、図30に示したマップ生成処理ステップS3006の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、ファイル番号iをi=1に設定しステップS4901、対象ファイルFiを読み込むステップS4902。そして、コンピュータは、対象ファイルFiのマップ生成処理を実行するステップS4903。対象ファイルFiのマップ生成処理ステップS4903の詳細は、図50で説明する。このあと、コンピュータは、ファイル番号iがi>nnは対象ファイルF1~Fnの総数であるか否かを判断するステップS4904。i>nでない場合ステップS4904:No、コンピュータは、iをインクリメントしステップS4905、ステップS4902に戻る。一方、i>nである場合ステップS4904:Yes、マップ生成処理ステップS3006が終了する。このマップ生成処理ステップS3006によれば、対象ファイルFiごとに対象ファイルFiのマップ生成処理ステップS4903を実行することができる。図50は、図49に示した対象ファイルFiのマップ生成処理ステップS4903の詳細な処理手順を示すフローチャートである。まず、コンピュータは、対象文字を対象ファイルFiの先頭文字としステップS5001、基礎単語出現マップ生成処理ステップS5002、特定単一文字出現マップ生成処理ステップS5003、2グラム文字列出現マップ生成処理ステップS5004を実行する。基礎単語出現マップ生成処理ステップS5002の詳細は図51で説明する。また、特定単一文字出現マップ生成処理ステップS5003の詳細は図52で説明する。さらに、2グラム文字列出現マップ生成処理ステップS5004の詳細は図54で説明する。このあと、コンピュータは、対象文字が対象ファイルFiの末尾文字であるか否かを判断するステップS5005。対象文字が対象ファイルFiの末尾文字でない場合ステップS5005:No、コンピュータは、対象文字を末尾方向へ1文字シフトしステップS5006、ステップS5002に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合ステップS5005:Yes、ステップS4904に移行して、対象ファイルFiのマップ生成処理ステップS4903を終了する。この対象ファイルFiのマップ生成処理ステップS4903によれば、基礎単語出現マップ、特定単一文字出現マップおよび2グラム文字列出現マップを、対象文字を1文字ずつシフトしながら、同時並行で生成することができる。図51は、図50で示した基礎単語出現マップ生成処理ステップS5002の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、対象文字について最長一致検索処理を実行するステップS5101。最長一致検索処理ステップS5101の詳細な処理手順は、図36に示した最長一致検索処理ステップS3401と同一処理内容であるため説明を省略する。そして、コンピュータは、最長一致した基礎単語、すなわち、基礎単語があるか否かを判断するステップS5102。最長一致した基礎単語がない場合ステップS5102:No、特定単一文字出現マップ生成処理ステップS5003に移行する。一方、最長一致した基礎単語がある場合ステップS5102:Yes、コンピュータは、その最長一致した基礎単語について、基礎単語出現マップが設定済みであるか否かを判断するステップS5103。設定済みである場合ステップS5103:Yes、ステップS5106に移行する。一方、設定済みでない場合ステップS5103:No、コンピュータは、2N分枝無節点ハフマン木における最長一致した基礎単語の葉にアクセスして、その圧縮符号を取得するステップS5104。そして、コンピュータは、取得した圧縮符号を、最長一致した基礎単語についての基礎単語出現マップへのポインタに設定してステップS5105、ステップS5106に移行する。このあと、ステップS5106では、コンピュータは、最長一致した基礎単語についての基礎単語出現マップの対象ファイルFiのビットをONにするステップS5106。これにより、基礎単語出現マップ生成処理ステップS5002を終了し、特定単一文字出現マップ生成処理ステップS5003に移行する。この基礎単語出現マップ生成処理ステップS5002によれば、対象文字ごとに最長一致した基礎単語を基礎単語としてマップ生成することができる。図52は、図50で示した特定単一文字出現マップ生成処理ステップS5003の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、特定単一文字の構造体に対して対象文字の2分探索をおこないステップS5201、一致したか否かを判断するステップS5202。一致する単一文字がなかった場合ステップS5202:No、コンピュータは、分割文字コード出現マップ生成処理を実行してステップS5203、2グラム文字列出現マップ生成処理ステップS5004に移行する。分割文字コード出現マップ生成処理ステップS5203の詳細は図53で説明する。一方、ステップS5202において、2分探索により対象文字と一致する単一文字があった場合ステップS5202:Yes、コンピュータは、2N分枝無節点ハフマン木における2分探索された単一文字の葉にアクセスして、その圧縮符号を取得するステップS5204。そして、コンピュータは、その取得された圧縮符号について、特定単一文字出現マップが設定済みであるか否かを判断するステップS5205。設定済みである場合ステップS5205:Yes、ステップS5207に移行する。一方、設定済みでない場合ステップS5205:No、コンピュータは、取得した圧縮符号を、2分探索された単一文字についての特定単一文字出現マップへのポインタに設定してステップS5206、ステップS5207に移行する。このあと、ステップS5207では、2分探索された単一文字についての特定単一文字出現マップの対象ファイルFiのビットをONにするステップS5207。これにより、特定単一文字出現マップ生成処理ステップS5003を終了し、2グラム文字列出現マップ生成処理ステップS5004に移行する。この特定単一文字出現マップ生成処理ステップS5003によれば、2分探索された対象文字を特定単一文字としてマップ生成することができる。図53は、図52で示した分割文字コード出現マップ生成処理ステップS5203の詳細な処理手順例を示すフローチャートである。まず、コンピュータは、対象文字を分割しステップS5301、2N分枝無節点ハフマン木における上位分割文字コードの葉にアクセスして、圧縮符号を取得するステップS5302。そして、コンピュータは、その取得された圧縮符号について、上位分割文字コード出現マップが設定済みであるか否かを判断するステップS5303。設定済みである場合ステップS5303:Yes、ステップS5305に移行する。一方、設定済みでない場合ステップS5303:No、コンピュータは、取得した圧縮符号を、上位分割文字コードの出現マップへのポインタに設定してステップS5304、ステップS5305に移行する。このあと、ステップS5305では、コンピュータは、対象文字から分割された上位分割文字コードの出現マップの対象ファイルFiのビットをONにするステップS5305。また、コンピュータは、2N分枝無節点ハフマン木における下位分割文字コードの葉にアクセスして、圧縮符号を取得するステップS5306。そして、コンピュータは、その取得された圧縮符号について、下位分割文字コードの出現マップが設定済みであるか否かを判断するステップS5307。設定済みである場合ステップS5307:Yes、ステップS5309に移行する。一方、設定済みでない場合ステップS5307:No、コンピュータは、取得した圧縮符号を、下位分割文字コードの出現マップへのポインタに設定してステップS5308、ステップS5309に移行する。このあと、ステップS5309では、コンピュータは、対象文字から分割された下位分割文字コードの出現マップの対象ファイルFiのビットをONにするステップS5309。これにより、分割文字コード出現マップ生成処理ステップS5203を終了し、2グラム文字列出現マップ生成処理ステップS5004に移行する。この分割文字コード出現マップ生成処理ステップS5203によれば、目標出現率Pcに応じた順位よりも下位の単一文字については、出現頻度が低いため、OFFのビットが多数出現することとなる。しかしながら、目標出現率Pcに応じた順位よりも下位の単一文字については特定単一文字の出現マップの生成対象外とすることで、特定単一文字の圧縮符号マップのマップサイズの最適化を図ることができる。また、分割することで、目標出現率Pcに応じた順位よりも下位の単一文字については、上位分割文字コードの圧縮符号マップおよび下位分割文字コードの圧縮符号マップといったマップサイズが固定化されたマップに設定される。したがって、目標出現率Pcをどのような出現率に設定しても、マップサイズの増大化を防止でき、省メモリ化を図ることができる。図54は、図50に示した2グラム文字列圧縮符号マップ生成処理ステップS5004の詳細な処理手順例を示すフローチャートである。図54において、まず、コンピュータは、2グラム文字列特定処理を実行するステップS5401。2グラム文字列特定処理ステップS5401の詳細な処理手順は、図42に示した2グラム文字列特定処理ステップS3906と同一処理内容であるため説明を省略する。つぎに、コンピュータは、2グラム文字列特定処理ステップS5401により2グラム文字列が特定されたか否かを判断するステップS5402。特定されなかった場合ステップS5402:No、図50のステップS5005に移行する。一方、特定された場合ステップS5402:Yes、特定された2グラム文字列の出現順位が、分割順位決定処理ステップS3005で決定された分割順位R2gより上であるか否かを、ソートされた2グラム文字列出現頻度集計テーブル4300を参照して判断するステップS5403。分割順位R2gより上である場合ステップS5403:Yes、コンピュータは、2グラム文字列出現マップ非分割生成処理を実行してステップS5404、ステップS5005に移行する。2グラム文字列出現マップ非分割生成処理ステップS5404では、図1B,Cに示したような分割はされないこととなる。一方、分割順位R2g以下である場合ステップS5403:No、コンピュータは、2グラム文字列出現マップ分割生成処理を実行してステップS5405、ステップS5005に移行する。2グラム文字列出現マップ分割生成処理ステップS5405では、図1B,Cに示したような分割がされることとなる。図55は、2グラム文字列出現マップ非分割生成処理ステップS5404の詳細な処理手順例を示すフローチャートである。図55において、まず、コンピュータは、図54の2グラム文字列特定処理ステップS5401で特定された2グラム文字列の第1グラム特定単一文字または分割文字コードについて、2N分枝無節点ハフマン木の葉にアクセスして、圧縮符号を取得するステップS5501。同様に、コンピュータは、第2グラム特定単一文字または分割文字コードについて、2N分枝無節点ハフマン木におけるの葉にアクセスして、圧縮符号を取得するステップS5502。そして、コンピュータは、第1グラムの圧縮符号と第2グラムの圧縮符号を連結するステップS5504。そして、コンピュータは、連結圧縮符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5504。設定済みである場合ステップS5504:Yes、ステップS5506に移行する。一方、設定済みでない場合ステップS5504:No、コンピュータは、連結圧縮符号を、特定された2グラム文字列の出現マップへのポインタに設定するステップS5505。このあと、ステップS5506では、コンピュータは、特定された2グラム文字列の出現マップの対象ファイルFiのビットをONにするステップS5506。これにより、2グラム文字列出現マップ非分割生成処理ステップS5404を終了し、ステップS5005に移行する。この2グラム文字列出現マップ非分割生成処理ステップS5404によれば、目標出現率Pcに応じた順位よりも上位の2グラム文字列については分割されずに、出現マップが生成される。したがって、分割された2グラムの出現マップに検索ノイズが重畳されないこととなる。つぎに、図54に示した2グラム文字列出現マップ分割生成処理ステップS5405の詳細な処理手順例について説明する。2グラム文字列出現マップ分割生成処理ステップS5405は、分割方法によって3種類存在する。いずれを実行するかはデフォルトで決めておくことになる。図56は、図54に示した2グラム文字列出現マップ分割生成処理ステップS5405の詳細な処理手順例その1を示すフローチャートである。図56は、分割順位R2g以降の2グラム文字列のうち第1グラム特定単一文字または分割文字コードについて分割し、第2グラム特定単一文字または分割文字コードについては分割しない例である。図56において、まず、コンピュータは、図54の2グラム文字列特定処理ステップS5401で特定された2グラム文字列の第1グラム特定単一文字または分割文字コードについて、2N分枝無節点ハフマン木の葉にアクセスして、圧縮符号を取得するステップS5601。そして、コンピュータは、取得した第1グラムの圧縮符号を上位コードと下位コードとに分割するステップS5602。つぎに、コンピュータは、第2グラム特定単一文字または分割文字コードについても2N分枝無節点ハフマン木の葉にアクセスして、圧縮符号を取得するステップS5603。このあと、コンピュータは、第1グラムの圧縮符号の上位コード第1グラム上位コードと第2グラムの圧縮符号とを連結するステップS5604。そして、コンピュータは、ステップS5604での連結符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5605。設定済みである場合ステップS5605:Yes、ステップS5607に移行する。一方、設定済みでない場合ステップS5605:No、コンピュータは、連結符号をポインタに設定するステップS5606。このあと、ステップS5607では、コンピュータは、連結符号の出現マップの対象ファイルFiのビットをONにするステップS5607。ステップS5602で分割された下位コードについても同様に、コンピュータは、第1グラムの圧縮符号の下位コード第1グラム下位コードと第2グラムの圧縮符号とを連結するステップS5608。そして、コンピュータは、ステップS5608での連結符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5609。設定済みである場合ステップS5609:Yes、ステップS5611に移行する。一方、設定済みでない場合ステップS5609:No、コンピュータは、連結符号をポインタに設定するステップS5610。このあと、ステップS5611では、コンピュータは、連結符号の出現マップの対象ファイルFiのビットをONにするステップS5611。これにより、2グラム文字列出現マップ分割生成処理ステップS5405を終了し、ステップS5005に移行する。この2グラム文字列出現マップ分割生成処理ステップS5405によれば、目標出現率Pcに応じた順位以降の2グラム文字列の圧縮符号マップが2分割されるため、検索ノイズが重畳されずにメモリサイズの縮小を図ることができる。図57は、図54に示した2グラム文字列出現マップ分割生成処理ステップS5405の詳細な処理手順例その2を示すフローチャートである。図57は、分割順位R2g以降の2グラム文字列のうち第2グラム特定単一文字または分割文字コードについて分割し、第1グラム特定単一文字または分割文字コードについては分割しない例である。図57において、まず、コンピュータは、図54の2グラム文字列特定処理ステップS5401で特定された2グラム文字列の第1グラム特定単一文字または分割文字コードについて、2N分枝無節点ハフマン木の葉にアクセスして、圧縮符号を取得するステップS5701。同様に、コンピュータは、第2グラム特定単一文字または分割文字コードについても2N分枝無節点ハフマン木の葉にアクセスして、圧縮符号を取得するステップS5702。そして、コンピュータは、取得した第2グラムの圧縮符号を上位コードと下位コードとに分割するステップS5703。このあと、コンピュータは、第1グラムの圧縮符号と第2グラムの圧縮符号の上位コード第2グラム上位コードとを連結するステップS5704。そして、コンピュータは、ステップS5704での連結符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5705。設定済みである場合ステップS5705:Yes、ステップS5707に移行する。一方、設定済みでない場合ステップS5705:No、コンピュータは、連結符号をポインタに設定するステップS5706。このあと、ステップS5707では、コンピュータは、連結符号の出現マップの対象ファイルFiのビットをONにするステップS5707。ステップS5703で分割された下位コードについても同様に、コンピュータは、第1グラムの圧縮符号と第2グラムの圧縮符号の下位コード第2グラム下位コードとを連結するステップS5708。そして、コンピュータは、ステップS5708での連結符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5709。設定済みである場合ステップS5709:Yes、ステップS5711に移行する。一方、設定済みでない場合ステップS5709:No、コンピュータは、連結符号をポインタに設定するステップS5710。このあと、ステップS5711では、コンピュータは、連結符号の出現マップの対象ファイルFiのビットをONにするステップS5711。これにより、2グラム文字列出現マップ分割生成処理ステップS5405を終了し、ステップS5005に移行する。この2グラム文字列出現マップ分割生成処理ステップS5405によれば、目標出現率Pcに応じた順位以降の2グラム文字列の圧縮符号マップが2分割されるため、検索ノイズが重畳されずにメモリサイズの縮小を図ることができる。図58および図59は、図54に示した2グラム文字列出現マップ分割生成処理ステップS5405の詳細な処理手順例その3を示すフローチャートである。図58および図59は、分割順位R2g以降の2グラム文字列の第1グラム特定単一文字または分割文字コードおよび第2グラム特定単一文字または分割文字コードについて分割する例である。図58において、まず、コンピュータは、図54の2グラム文字列特定処理ステップS5401で特定された2グラム文字列の第1グラム特定単一文字または分割文字コードについて、2N分枝無節点ハフマン木の葉にアクセスして、圧縮符号を取得するステップS5801。そして、コンピュータは、取得した第1グラムの圧縮符号を上位コードと下位コードとに分割するステップS5802。つぎに、コンピュータは、第2グラム特定単一文字または分割文字コードについても2N分枝無節点ハフマン木の葉にアクセスして、圧縮符号を取得するステップS5803。そして、コンピュータは、取得した第2グラムの圧縮符号を上位コードと下位コードとに分割するステップS5804。このあと、コンピュータは、第1グラムの圧縮符号の上位コード第1グラム上位コードと第2グラムの圧縮符号の上位コード第2グラム上位コードとを連結するステップS5805。そして、コンピュータは、ステップS5805での連結符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5806。設定済みである場合ステップS5806:Yes、ステップS5808に移行する。一方、設定済みでない場合ステップS5806:No、コンピュータは、連結符号をポインタに設定するステップS5807。このあと、ステップS5808では、コンピュータは、連結符号の出現マップの対象ファイルFiのビットをONにするステップS5808。そして、図59のステップS5901に移行する。また、図59において、同様に、コンピュータは、第1グラム上位コードと第2グラムの圧縮符号の下位コード第2グラム下位コードとを連結するステップS5901。そして、コンピュータは、ステップS5901での連結符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5902。設定済みである場合ステップS5902:Yes、ステップS5904に移行する。一方、設定済みでない場合ステップS5902:No、コンピュータは、連結符号をポインタに設定するステップS5903。このあと、ステップS5904では、コンピュータは、連結符号の出現マップの対象ファイルFiのビットをONにするステップS5904。また、同様に、コンピュータは、第1グラムの圧縮符号の下位コード第1グラム下位コードと第2グラム上位コードとを連結するステップS5905。そして、コンピュータは、ステップS5905での連結符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5906。設定済みである場合ステップS5906:Yes、ステップS5908に移行する。一方、設定済みでない場合ステップS5906:No、コンピュータは、連結符号をポインタに設定するステップS5907。このあと、ステップS5908では、コンピュータは、連結符号の出現マップの対象ファイルFiのビットをONにするステップS5908。また、同様に、コンピュータは、第1グラム下位コードと第2グラム下位コードとを連結するステップS5909。そして、コンピュータは、ステップS5909での連結符号をポインタとする出現マップが設定済みであるか否かを判断するステップS5910。設定済みである場合ステップS5910:Yes、ステップS5912に移行する。一方、設定済みでない場合ステップS5910:No、コンピュータは、連結符号をポインタに設定するステップS5911。このあと、ステップS5912では、コンピュータは、連結符号の出現マップの対象ファイルFiのビットをONにするステップS5912。これにより、2グラム文字列出現マップ分割生成処理ステップS5405を終了し、ステップS5005に移行する。この2グラム文字列出現マップ分割生成処理ステップS5405によれば、目標出現率Pcに応じた順位以降の2グラム文字列の圧縮符号マップが4分割されるため、検索ノイズが重畳されずにメモリサイズの縮小を図ることができる。<圧縮処理の具体例>つぎに、対象ファイルFiの圧縮処理の具体例について説明する。上述のように、圧縮符号マップを生成した場合は、検索文字列を圧縮した圧縮符号列により圧縮符号マップ内の出現マップをポイントすることが可能となる。以下、圧縮処理の具体例について説明する。図60は、2N分枝無節点ハフマン木を用いた圧縮処理の具体例を示す説明図である。まず、コンピュータは、対象ファイル群Fsから1文字目の圧縮対象文字コードを取得し、対象ファイルFi上の位置を保持しておく。そして、コンピュータは、基礎単語の構造体に対して2分木探索をおこなう。基礎単語は2文字以上の文字コード列であるため、1文字目の圧縮対象文字コードがヒットした場合、2文字目の文字コードを圧縮対象文字コードとして取得する。そして、2文字目の文字コードは、1文字目の圧縮対象文字コードがヒットした位置から探索する。3文字目以降も、不一致の圧縮対象文字コードが出現するまで繰り返し2分木探索をおこなう。一致する基礎単語raaは葉の番号が探索された場合、基礎単語の構造体において対応付けされている葉Laへのポインタにより葉Laの構造体にアクセスする。そして、コンピュータは、アクセス先の葉Laの構造体に格納されている基礎単語raの圧縮符号を探索して、圧縮バッファ6000に格納する。一方、不一致の圧縮文字コードが出現した場合、基礎単語の構造体に対する2分木探索を終了するEOTEndOfTransmissionまで進む。そして、コンピュータは、1文字目の圧縮対象文字コードを再度レジスタにセットして、特定単一文字の構造体に対する2分木探索をおこなう。一致する文字コードebbは葉の番号が探索された場合、コンピュータは、その葉Lbへのポインタにより葉Lbの構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lbの構造体に格納されている文字コードebの圧縮符号を探索して、圧縮バッファ6000に格納する。一方、一致する文字コードが出現せず2分木探索を終了した場合、圧縮対象文字コードは特定単一文字コードではないため、コンピュータは、上位8ビットと下位8ビットに分割する。そして、コンピュータは、上位8ビットの分割文字コードについて、分割文字コードの構造体に対する2分木探索をおこなう。一致する分割文字コードDc1c1は葉の番号が探索された場合、コンピュータは、その葉Lc1へのポインタにより葉Lc1の構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lc1の構造体に格納されている分割文字コードDc1の圧縮符号を探索して、圧縮バッファ6000に格納する。引き続き、コンピュータは、下位8ビットの分割文字コードについて、分割文字コードの構造体に対する2分木探索をおこなう。一致する分割文字コードDc2c2は葉の番号が探索された場合、コンピュータは、その葉Lc2へのポインタにより葉Lc2の構造体にアクセスする。そして、コンピュータは、アクセス先の葉Lc2の構造体に格納されている分割文字コードDc2の圧縮符号を探索して、圧縮バッファ6000に格納する。これにより、対象ファイルFiが圧縮されることとなる。<対象ファイル群Fsの圧縮処理>つぎに、対象ファイル群Fsの圧縮処理の処理手順について説明する。図61は、コンピュータが自動実行する2N分枝無節点ハフマン木を用いた対象ファイル群Fsの圧縮処理手順例を示すフローチャートである。まず、コンピュータは、ファイル番号:pをp=1としステップS6101、対象ファイルFpを読み込むステップS6102。つぎに、コンピュータは、圧縮処理を実行してステップS6103、ファイル番号:pをインクリメントするステップS6104。圧縮処理ステップS6103の詳細は図62で説明する。そして、コンピュータは、p>nであるか否かを判断するステップS6105。nは対象ファイル群Fsの総数である。p>nでない場合ステップS6105:No、ステップS6102に戻る。一方、p>nである場合ステップS6105:Yes、対象ファイル群Fsの圧縮処理を終了する。図62は、図61に示した圧縮処理ステップS6103の詳細な処理手順を示すフローチャートその1である。図62において、まず、コンピュータは、対象ファイル群Fsに圧縮対象文字コードがあるか否かを判断するステップS6201。ある場合ステップS6201:Yes、コンピュータは、圧縮対象文字コードを取得してレジスタにセットするステップS6202。そして、コンピュータは、先頭の圧縮対象文字コードか否かを判断するステップS6203。ここで、先頭の圧縮対象文字コードとは、未圧縮の1文字目の文字コードをいう。先頭である場合ステップS6203:Yes、コンピュータは、その圧縮対象文字コードの対象ファイル群Fs上の位置先頭位置となるポインタを取得しステップS6204、ステップS6205に移行する。一方、先頭でない場合ステップS6203:No、先頭位置を取得せずにステップS6205に移行する。そして、コンピュータは、基礎単語の構造体に対して2分木探索をおこなうステップS6205。圧縮対象文字コードが一致した場合ステップS6206:Yes、コンピュータは、連続して一致した文字コード列が基礎単語の文字コード列に該当するか否かを判断するステップS6207。該当しない場合ステップS6207:No、コンピュータは、ステップS6202に戻って後続の文字コードを圧縮対象文字コードとして取得する。この場合、後続の文字コードは先頭ではないため、先頭位置は取得しないこととなる。一方、ステップS6207において、基礎単語に該当する場合ステップS6207:Yes、コンピュータは、該当する基礎単語の葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6208。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている基礎単語の圧縮符号を抽出するステップS6209。この後、コンピュータは、抽出された圧縮符号を圧縮バッファ6000に格納してステップS6210、ステップS6201に戻る。このループが基礎単語の圧縮処理の流れとなる。ステップS6201において、圧縮対象文字コードがない場合ステップS6201:No、コンピュータは、対象ファイルFpから圧縮された圧縮ファイルfpを圧縮バッファ6000からファイル出力して保存するステップS6211。そして、ステップS6104に移行する。一方、ステップS6206において不一致となった場合ステップS6206:No、16ビットの文字コードの圧縮処理のループに入る。図63は、図61に示した圧縮処理ステップS6103の詳細な処理手順を示すフローチャートその2である。図63において、コンピュータは、ステップS6204で取得された先頭位置のポインタを参照して、対象ファイル群Fsから圧縮対象文字コードを取得してレジスタにセットするステップS6301。つぎに、コンピュータは、圧縮対象文字コードについて、特定単一文字コードの構造体に対して2分木探索をおこなうステップS6302。一致した場合ステップS6303:Yes、コンピュータは、該当する文字の葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6304。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている圧縮対象文字コードの圧縮符号を抽出するステップS6305。この後、コンピュータは、探索された圧縮符号を圧縮バッファ6000に格納してステップS6306、ステップS6201に戻る。このループが16ビットの文字コードの圧縮処理の流れとなる。一方、ステップS6303において一致する文字コードが存在しなかった場合ステップS6303:No、分割文字コードの圧縮処理のループに入る。図64は、図61に示した圧縮処理ステップS6103の詳細な処理手順を示すフローチャートその3である。図64において、まず、コンピュータは、圧縮対象文字コードを上位8ビットと下位8ビットとに分割しステップS6401、上位8ビットの分割文字コードを抽出するステップS6402。そして、コンピュータは、分割文字コードの構造体に対して2分木探索をおこなうステップS6403。そして、コンピュータは、探索された分割文字コードの葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS6404。そして、コンピュータは、ポイントされた葉L♯の構造体に格納されている分割文字コードの圧縮符号を抽出するステップS6405。この後、コンピュータは、探索された圧縮符号を圧縮バッファ6000に格納するステップS6406。つぎに、コンピュータは、下位8ビットが探索済みか否かを判断しステップS6407、探索済みでない場合ステップS6407:No、コンピュータは、下位8ビットの分割文字コードを抽出してステップS6408、ステップS6403~S6406を実行する。一方、下位8ビットが探索済みである場合ステップS6407:Yes、ステップS6201に戻り、基礎単語の圧縮処理のループに入る。このように、2N分枝無節点ハフマン木を用いた圧縮処理では、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉L♯の構造体に格納されている文字情報を抽出して、圧縮バッファ6000に書き込むだけでよい。したがって、圧縮処理の高速化を図ることができる。また、圧縮対象文字コードが格納されている葉L♯の構造体を、基礎単語の構造体、特定単一文字コードの構造体および分割文字コードの構造体により即座に特定することができる。したがって、2N分枝無節点ハフマン木の葉を探索する必要がなく、圧縮処理の高速化を図ることができる。また、低位文字コードを上位ビットコードと下位ビットコードに分割することで、非特定単一文字を256種の分割文字コードの圧縮符号に圧縮することができる。したがって、圧縮率の向上を図ることができる。<検索処理>つぎに、圧縮符号マップを用いた検索処理の流れA~Dについて図65~図67を用いて説明する。ここでは、検索文字列をするめとした場合について説明する。図65は、圧縮符号マップを用いた検索処理の流れAを示す説明図である。図65において、A検索処理では、検索文字列を構成する各文字情報す、る、めについて、圧縮処理と同様の処理により、2N分枝無節点ハフマン木にアクセスして圧縮符号を取得する。そして、コンピュータは、検索文字列を構成する文字情報す、る、めごとに、特定単一文字の圧縮符号マップからすの出現マップ、るの出現マップ、めの出現マップを取得する。図66は、圧縮符号マップを用いた検索処理の流れBを示す説明図である。図65のAのあと、検索文字列するめを構成する2グラム文字列する、るめについて、分割順位以降であるか否かを判断する。するは分割順位よりも上位であるため、コンピュータは、すの圧縮符号およびるの圧縮符号を連結した圧縮符号列でポイントすることにより、2グラム文字列の圧縮符号マップからするの出現マップを取得する。一方、るめについては、分割順位以降であるため、コンピュータは、第1グラムるの圧縮符号の上位コード第1グラム上位コードと第2グラムめの圧縮符号の上位コード第2グラム上位コードとの連結符号でポイントする。これにより、コンピュータは、第1グラム上位コードおよび第2グラム上位コードの圧縮符号マップから、2グラム文字列について第1グラムるの上位コード0x8Bおよび第2グラムめの上位コード0x81となる出現マップを取得する。同様に、コンピュータは、第1グラムるの圧縮符号の上位コード第1グラム上位コードと第2グラムめの圧縮符号の下位コード第2グラム下位コードとの連結符号でポイントする。これにより、コンピュータは、第1グラム上位コードおよび第2グラム下位コードの圧縮符号マップから、2グラム文字列について第1グラムるの上位コード0x8Bおよび第2グラムめの下位コード0x30となる出現マップを取得する。同様に、コンピュータは、第1グラムるの圧縮符号の下位コード第1グラム下位コードと第2グラムめの圧縮符号の上位コード第2グラム上位コードとの連結符号でポイントする。これにより、コンピュータは、第1グラム下位コードおよび第2グラム上位コードの圧縮符号マップから、2グラム文字列について第1グラムるの下位コード0x30および第2グラムめの上位コード0x81となる出現マップを取得する。同様に、コンピュータは、第1グラムるの圧縮符号の下位コード第1グラム下位コードと第2グラムめの圧縮符号の下位コード第2グラム下位コードとの連結符号でポイントする。これにより、コンピュータは、第1グラム下位コードおよび第2グラム下位コードの圧縮符号マップから、2グラム文字列について第1グラムるの下位コード0x30および第2グラムめの下位コード0x30となる出現マップを取得する。図67は、圧縮符号マップを用いた検索処理の流れC、Dを示す説明図である。Cでは、コンピュータが、図66のBにおいて取得された各出現マップをAND演算することでするめが存在する可能性がある圧縮ファイルfiを圧縮ファイル群fsから絞り込むことができる。Dそして、コンピュータは、検索文字列を2N分枝無節点ハフマン木で圧縮した圧縮文字列を用いて、Cで絞り込まれた圧縮ファイルfiを圧縮状態のまま、圧縮文字列と照合し、置換たとえば、カラー表示のタグでの挟み込みしながら圧縮ファイルfiを伸張する。<照合伸張例>つぎに、図67のDによる照合伸張例について具体的に説明する。ここでは、検索文字列するめの圧縮符号列を用いて圧縮ファイルfiについて照合しながら伸張する例について説明する。なお、例として、特定単一文字すの圧縮符号を110001001110ビットとし、特定単一文字るの圧縮符号を01000100108ビットとし、特定単一文字めの圧縮符号を101001010010ビットとする。また、伸長処理では、レジスタに圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。抽出した圧縮符号を、1パス1枝分のアクセスで2N分枝無節点ハフマン木の根から探索する。そして、アクセスした葉L♯の構造体に格納されている文字コードを読み出して伸長バッファに格納する。また、圧縮符号を抽出するため、マスクパターンのマスク位置をオフセットする。また、マスクパターンの初期値を0xFFF00000とする。このマスクパターンは先頭12ビットが1であり、後続の20ビットが0のビット列である。図68~図70は、図67のDによる照合伸張例を示す説明図である。図68では、特定単一文字すについて照合伸張する例Aを示している。図68において、まず、CPUは、ビットアドレスabiとバイトオフセットbyosとビットオフセットbiosとを算出する。ビットアドレスabiは、抽出された圧縮符号のビット位置を示す値であり、今回のビットアドレスabiは、前回のビットアドレスabiに前回抽出された圧縮符号の圧縮符号長legを加算した値となる。なお、初期状態では、ビットアドレスabiはabi=0とする。バイトオフセットbyosは、メモリに保持されている圧縮符号列のバイト境界を示す値であり、ビットアドレスabi/8の商で求められる。たとえば、バイトオフセットbyos=0のときは、メモリに記憶されている先頭からの圧縮符号列をレジスタにセットし、バイトオフセットbyos=1のときは、メモリに記憶されている先頭1バイト目からの圧縮符号列をレジスタにセットする。また、ビットオフセットbiosは、マスクパターンのマスク位置FFFをオフセットする値であり、ビットアドレスabi/8の余りである。たとえば、ビットオフセットbios=0のときは、マスク位置はシフトされないこととなり、マスクパターンは、0xFFF00000となる。一方、ビットオフセットbios=4のときは、マスク位置は末尾方向に4ビットシフトすることとなり、マスクパターンは、0x0FFF0000となる。レジスタシフト数rsは、マスクパターンとのAND演算後のレジスタ内の圧縮符号列を末尾方向にシフトするビット数であり、rs=32-12-biosで求められる。このシフトにより、シフト後のレジスタの末尾mビットのビット列を対象ビット列として抽出する。対象ビット列の抽出後はレジスタをクリアする。なお、メモリ内のブロックは1バイトのビット列を示しており、内部の数字は、バイト境界となるバイト位置を示している。図68では、ビットアドレスabi=0により、バイトオフセットbyos=0、ビットオフセットbios=0となる。バイトオフセットbyos=0により、メモリに保持されている圧縮符号列のうち先頭から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=0により、マスクパターンは、0xFFF00000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0xFFF00000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=0により、レジスタシフト数rsは、rs=32-m―bios=32-12-0=20となる。したがって、レジスタ内のAND結果を末尾方向に20ビット分シフトする。このシフトによりレジスタには、110001001100が残されるため、末尾12ビットを対象ビット列として抽出する。この場合は、110001001100が対象ビット列として抽出される。抽出後、レジスタはクリアされる。2N分枝無節点ハフマン木の根の構造体には、抽出された対象ビット列110001001100があるため、この対象ビット列と一致する葉L♯へのポインタ枝番号を探索する。この場合、葉L691へのポインタ群の中の1つと一致するため、該当する葉L691へのポインタを読み出して、葉L691の構造体にアクセスする。葉L691の構造体には、文字コード0x5930が格納されているため、当該文字コード0x5930を抽出して伸長バッファに格納する。また、葉L691の構造体には、文字コード0x5930の圧縮符号長leg=10ビットも格納されているため、文字コード0x5930の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=010=10となる。図69では、特定単一文字るについて照合伸張する例Bを示している。具体的には、図68の状態Aからレジスタをバイトオフセットbios分シフトした場合、前回であるAのビットアドレスabiはabi=0、圧縮符号長legは10ビットであるため、Bのビットアドレスabiはabi=10ビットとなる。また、このビットアドレスabi=10により、バイトオフセットbyos=1、ビットオフセットbios=2となる。バイトオフセットbyos=1により、メモリに保持されている圧縮符号列のうち先頭1バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=2により、マスクパターンは、0x3FFC0000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x3FFC0000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=2により、レジスタシフト数rsは、rs=32-m―bios=32-12-2=18となる。したがって、レジスタ内のAND結果を末尾方向に18ビット分シフトする。このシフトによりレジスタには、00000100010010が残されるため、末尾14ビットを対象ビット列として抽出する。この場合は、0100010010が対象ビット列として抽出される。抽出後、レジスタはクリアされる。2N分枝無節点ハフマン木の根の構造体には、抽出された対象ビット列0100010010があるため、このビット列と一致する葉L♯へのポインタ枝番号を探索する。この場合、対象ビット列0100010010が葉L24へのポインタ群の中の1つと一致するため、該当する葉L24へのポインタを読み出して、葉L24の構造体にアクセスする。葉L24の構造体には、文字コード0x8B30が格納されているため、当該文字コード0x8B30を抽出して伸長バッファに格納する。また、葉L24の構造体には、文字コード0x8B30の圧縮符号長leg=8ビットも格納されているため、文字コード0x8B30の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=108=18となる。図70では、特定単一文字めについて照合伸張する例Cを示している。具体的には、図69の状態Bからレジスタをバイトオフセットbios分シフトした場合、前回であるBのビットアドレスabiはabi=10、圧縮符号長legは8ビットであるため、Cのビットアドレスabiはabi=18ビットとなる。また、このビットアドレスabi=18により、バイトオフセットbyos=2、ビットオフセットbios=2となる。バイトオフセットbyos=2により、メモリに保持されている圧縮符号列のうち先頭2バイト目から4バイト分図中、網掛けの圧縮符号列をレジスタにセットする。また、ビットオフセットbios=2により、マスクパターンは、0x3FFC0000である。したがって、レジスタにセットされた圧縮符号列とマスクパターン0x3FFC0000を論理積AND演算することにより、AND結果が得られる。また、ビットオフセットbios=2により、レジスタシフト数rsは、rs=32-m―bios=32-12-2=18となる。したがって、レジスタ内のAND結果を末尾方向に18ビット分シフトする。このシフトによりレジスタには、00001010010000が残されるため、末尾14ビットを対象ビット列として抽出する。この場合は、1010010000が対象ビット列として抽出される。抽出後、レジスタはクリアされる。2N分枝無節点ハフマン木の根の構造体には、抽出された対象ビット列1010010000があるため、このビット列と一致する葉L♯へのポインタ枝番号を探索する。この場合、対象ビット列1010010000が葉L167へのポインタ群の中の1つと一致するため、該当する葉L167へのポインタを読み出して、葉L167の構造体にアクセスする。葉L167の構造体には、文字コード0x8130が格納されているため、当該文字コード0x8130を抽出して伸長バッファに格納する。また、葉L167の構造体には、文字コード0x8130の圧縮符号長leg=10ビットも格納されているため、文字コード0x8130の圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=1810=28となる。<検索処理手順>図71は、本実施の形態にかかる検索処理手順を示すフローチャートである。まず、コンピュータは、検索文字列の入力を待ち受けステップS7101:No、検索文字列が入力された場合ステップS7101:Yes、ファイル絞込み処理ステップS7102、伸長処理ステップS7103を実行する。ファイル絞込み処理ステップS7102は、図67のCに示したように、圧縮ファイル群fsの中から検索文字列を構成する文字情報が存在する対象ファイルFiの圧縮ファイルfiを絞り込む。ファイル絞込み処理ステップS7102の詳細は、図72および図73で説明する。伸長処理ステップS7103は、ファイル絞込み処理ステップS7102で絞り込まれた圧縮ファイルfiを伸長する過程で、図67のDに示したように、伸長対象となる圧縮符号列と検索文字列の圧縮文字列とを照合する。伸長処理ステップS7103の詳細は、図74および図75で説明する。図72は、図71に示したファイル絞込み処理ステップS7102の詳細な処理手順を示すフローチャートその1である。まず、コンピュータは、検索文字列を対象文字列に設定しステップS7201、最長一致検索処理を実行するステップS7202。最長一致検索処理ステップS7202は、図36に示した最長一致検索処理ステップS3401と同一処理であるため説明を省略する。そして、コンピュータは、基礎単語の構造体において、最長一致検索処理ステップS7202で得られた最長一致検索結果を2分探索するステップS7203。最長一致検索結果が、基礎単語の構造体で探索された場合ステップS7203:Yes、対象文字列である基礎単語について、その基礎単語の出現マップを基礎単語の出現マップ群から取得するステップS7204。そして、コンピュータは、対象文字列に後続があるか否かを判断するステップS7205。後続がある場合ステップS7205:Yes、コンピュータは、後続文字列を対象文字列に設定してステップS7206、最長一致検索処理ステップS7202に戻る。一方、後続がない場合ステップS7205:No、これまでに取得された出現マップ群のAND演算で対象ファイルを絞り込むステップS7207。これにより、ファイル絞込み処理ステップS7102は終了し、伸長処理ステップS7103に移行する。また、ステップS7203において、最長一致検索結果が、基礎単語の構造体で探索されなかった場合ステップS7203:No、図73のステップS7301に移行する。具体的には、最長一致検索結果が基礎単語の構造体に登録されていない場合、または、最長一致検索で最長一致候補がなかった場合ステップS7203:Noに、図73のステップS7301に移行する。図73は、図71に示したファイル絞込み処理ステップS7102の詳細な処理手順を示すフローチャートその2である。図73では、対象文字列を構成する文字ごとに、出現マップを取得する処理を示している。まず、コンピュータは、対象文字列の先頭文字を対象文字に設定するステップS7301。つぎに、コンピュータは、特定単一文字の構造体において対象文字を2分探索するステップS7302。対象文字が探索された場合ステップS7303:Yes、コンピュータは、特定単一文字の圧縮符号マップから対象文字の出現マップを取得するステップS7304。そして、図72のステップS7205に戻る。一方、ステップS7303において、探索されなかった場合ステップS7303:No、コンピュータは、対象文字を上位8ビットと下位8ビットに分割するステップS7305。そして、コンピュータは、上位分割文字コードの圧縮符号マップの中から、ステップS7305の分割で得られた上位分割文字コードの出現マップを取得するステップS7306。このあと、コンピュータは、2グラム文字列特定処理を実行するステップS7309。2グラム文字列特定処理ステップS7309は、図42に示した2グラム文字列特定処理ステップS3906と同一処理であるため説明を省略する。また、コンピュータは、下位分割文字コードの圧縮符号マップの中から、ステップS7305の分割で得られた下位分割文字コードの出現マップを取得するステップS7307。また、コンピュータは、対象文字やステップS7505で分割された分割文字コードについて、2N分枝無節点ハフマン木の葉にアクセスし、照合フラグをONにするステップS7308。このあと、コンピュータは、2グラム文字列特定処理を実行するステップS7309。そして、コンピュータは、2グラム文字列特定処理ステップS7309で2グラム文字列が特定されなかった場合ステップS7310:No、図72のステップS7205に戻る。一方、2グラム文字列が特定された場合ステップS7310:Yes、特定された2グラム文字列の出現順位が分割順位R2gより上位であるか否かを判断するステップS7311。分割順位R2gより上位である場合ステップS7311:Yes、コンピュータは、非分割の2グラム文字列の出現マップを取得するステップS7312。具体的には、たとえば、コンピュータは、第1グラムの圧縮符号および第2グラムの圧縮符号を2N分枝無節点ハフマン木にアクセスすることで取得、連結し、2グラム文字列の圧縮符号マップから連結圧縮符号で指定された出現マップを取得する。一方、分割順位R2g以降である場合ステップS7311:No、コンピュータは、連結符号群を生成するステップS7313。具体的には、たとえば、コンピュータは、第1グラムの圧縮符号および第2グラムの圧縮符号を2N分枝無節点ハフマン木にアクセスすることで取得する。つぎに、4分割の場合、コンピュータは、第1グラムの圧縮符号および第2グラムの圧縮符号をそれぞれ上位コードと下位コードとに分割する。そして、第1グラム上位コードおよび第2グラム上位コードを連結した第1の連結符号、第1グラム上位コードおよび第2グラム下位コードを連結した第2の連結符号、第1グラム下位コードおよび第2グラム上位コードを連結した第3の連結符号、第1グラム下位コードおよび第2グラム下位コードを連結した第4の連結符号を生成する。そして、コンピュータは、2グラム文字列の出現マップ群を取得するステップS7314。具体的には、たとえば、コンピュータは、第1分割圧縮符号マップから、ステップS7313で生成された第1の連結符号で指定された出現マップを取得する。また、コンピュータは、第2分割圧縮符号マップから、ステップS7313で生成された第2の連結符号で指定された出現マップを取得する。コンピュータは、第3分割圧縮符号マップから、ステップS7313で生成された第3の連結符号で指定された出現マップを取得する。コンピュータは、第4分割圧縮符号マップから、ステップS7313で生成された第4の連結符号で指定された出現マップを取得する。そして、図72のステップS7205に戻る。このように、図73に示した処理手順により、対象文字についての出現マップ群と2グラム文字列についての出現マップ群を取得することができる。したがって、図72のステップS7207でのAND演算により圧縮ファイルfiの絞込みができることとなる。図74は、図71に示した2N分枝無節点ハフマン木を用いた伸長処理ステップS7103の詳細な処理手順例を示すフローチャートその1である。図74において、まず、コンピュータは、ビットアドレスabiをabi=0としステップS7401、バイトオフセットbyosを算出しステップS7402、ビットオフセットbiosを算出するステップS7403。そして、コンピュータは、バイトオフセットbyosの位置からの圧縮符号列をレジスタr1にセットするステップS7404。つぎに、コンピュータは、レジスタr2にセットされたマスクパターンをビットオフセットbios分、末尾方向にシフトしてステップS7405、レジスタr1にセットされた圧縮符号列とのAND演算をおこなうステップS7406。このあと、コンピュータは、レジスタシフト数rsを算出してステップS7407、AND演算後のレジスタr2をレジスタシフト数rs分、末尾にシフトするステップS7408。図75は、図71に示した2N分枝無節点ハフマン木を用いた伸長処理ステップS7103の詳細な処理手順例を示すフローチャートその2である。ステップS7408のあと、図75において、コンピュータは、シフト後のレジスタr2から末尾Nビットを対象ビット列として抽出するステップS7501。つぎに、コンピュータは、2N分枝無節点ハフマン木の根の構造体から葉L♯へのポインタを特定しステップS7502、ポイント先となる葉L♯の構造体に1パスでアクセスするステップS7503。このあと、コンピュータは、アクセス先の葉L♯の構造体の照合フラグがONであるか否かを判断するステップS7504。照合フラグがONである場合ステップS7504:Yes、アクセス先の葉L♯の構造体内の文字情報について置換文字を伸長バッファに書き出してステップS7505、ステップS7507に移行する。一方、照合フラグがOFFの場合ステップS7504:No、アクセス先の葉L♯の構造体内の文字情報伸長文字を伸長バッファに書き出してステップS7506、ステップS7507に移行する。ステップS7507では、コンピュータは、アクセス先の葉L♯の構造体から圧縮符号長legを抽出しステップS7507、ビットアドレスabiを更新するステップS7508。このあと、コンピュータは、メモリに圧縮符号列があるか否か、具体的には、マスクパターンによるマスク処理が施されていない圧縮符号列があるか否かを判断するステップS7509。たとえば、バイトオフセットbyosに該当するバイト位置があるか否かにより判断する。圧縮符号列がある場合ステップS7509:Yes、図74のステップS7402に戻る。一方、圧縮符号列がない場合ステップS7509:No、伸長処理ステップS7103を終了する。このような伸長処理ステップS7103により、圧縮状態のまま照合伸長をおこなうことができ、伸長速度の高速化を図ることができる。以上説明したように、本実施の形態によれば、分割順位以降の2グラム文字列については2分割または4分割の出現マップ群を生成することで、圧縮符号マップのサイズ縮小と検索ノイズの低減化を図ることができる。また、対象ファイル群Fsでの2グラム文字列の存否を示すビット列を連結符号で指定することで、圧縮符号マップの効率的なサイズ縮小を図ることができる。また、対象ファイル群Fsを圧縮しない場合は、圧縮符号ではなく文字コードをそのまま利用することで、圧縮符号マップの分割処理の効率化を図ることができる。さらに、目標出現率に応じて分割順位を決定するため、2グラム文字列の総出現回数のうちどの程度の出現回数までの2グラム文字列の出現マップを分割対象外とするかを、容易に決定することができる。また、目標出現率を入力装置から操作入力することにより、利用者の要求に応じて分割順位を決定することができる。したがって、この程度までの目標出現率であれば、検索ノイズを許容することができるといったように、利用者の意図に応じて自由に決定することができ、圧縮符号マップの分割の自由度を高めることができる。また、目標出現率ではなく、単に2グラム文字列の出現回数について降順の順位により分割順位を決定することとしてもよい。この場合、目標出現率を用いた分割順位の計算を省略することができ、圧縮符号マップの分割処理の高速化を図ることができる。また、対象ファイル群Fsに対しあらたに対象ファイルを追加する場合、追加後の対象ファイル群Fsについて図30に示した一連の処理を実行することで、圧縮符号マップの最適化を図ることができる。たとえば、対象ファイルFiが電子メールである場合、電子メールを送信または受信する都度、電子メールが保存されるため、あらたに保存された電子メールを追加した保存済みの電子メール群に対し、図30に示した一連の処理を実行することとなる。また、圧縮符号を利用する場合、本実施の形態では、2N分枝無節点ハフマン木を採用している。2N分枝無節点ハフマン木を採用することで、文字情報ごとに圧縮符号に1パスでアクセスすることができるため、連結符号の生成の高速化を図ることができる。また、2N分枝無節点ハフマン木を用いることで、非圧縮の検索文字列が入力されても1パスで圧縮符号列に圧縮することができる。また、この圧縮符号列から連結符号を取り出すことで、分割された圧縮符号マップ内の出現マップに直接指定することができる。したがって、該当する出現マップを高速に抽出することができ、対象ファイル群Fsを圧縮した圧縮ファイル群fsから、2グラム文字列の圧縮符号列を含む圧縮ファイルfiを高速かつ高精度に絞り込むことができる。そして、このように絞り込まれた圧縮ファイルfiに対し、圧縮状態のまま圧縮文字列との照合、伸長をおこなうことで、メモリ使用量を最小限に抑えた検索処理を高速に実現することができる。また、上述した実施の形態では、2N分枝無節点ハフマン木および圧縮符号マップの生成と、検索と、を同一のコンピュータで実行する例について説明したが、別々のコンピュータで実行することとしてもよい。この場合、2N分枝無節点ハフマン木および圧縮符号マップを生成したコンピュータは、他のコンピュータに、対象ファイル群Fsまたは圧縮ファイル群fs、2N分枝無節点ハフマン木および圧縮符号マップを送信する。そして、他のコンピュータは、送信されてきた対象ファイル群Fsまたは圧縮ファイル群fs、2N分枝無節点ハフマン木および圧縮符号マップを用いて検索処理を実行することとなる。なお、本実施の形態においてフローチャートで説明した各処理は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することにより実現することができる。また、これらの処理について記述されたプログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。"