"コンピュータに、複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第1の情報と、前記複数のファイルの少なくともいずれかが前記所定の文字情報を含むか否かを示す第2の情報と、を記憶手段に記憶し、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示すことが検出されると、前記第1の情報に基づいて前記所定の文字情報を含むファイルを抽出する、ことを実行させることを特徴とする抽出方法。前記コンピュータに、さらに、前記検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示さないことが検出されると、前記複数のファイルが前記所定の文字情報を含まないと判定する、ことを実行させることを特徴とする請求項1に記載の抽出方法。前記第1の情報は、前記複数のファイルのそれぞれについて前記所定の文字情報を含むか否かを示すビットによるビット列であり、前記第2の情報は、前記ビット列に含まれる各ビットを演算して得られるビットである、ことを特徴とする請求項1又は2に記載の抽出方法。前記コンピュータに、前記記憶手段に、さらに、前記複数のファイルのそれぞれについて検索対象とするか否かを示す第3の情報を記憶し、前記検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示すことが検出されると、前記第1の情報及び前記第3の情報に基づいて、検索対象であり、且つ前記所定の文字情報を含むファイルを抽出する、ことを実行させることを特徴とする請求項1~3のいずれか1項に記載の抽出方法。前記コンピュータに、前記記憶手段に、さらに、前記複数のファイルの少なくともいずれかが検索対象であるか否かを示す第4の情報を記憶し、前記検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示し、且つ前記第4の情報が前記複数のファイルの少なくともいずれかが検索対象である旨を示すことを検出すると、前記第1の情報に基づいて前記所定の文字情報を含むファイルを抽出する、ことを実行させることを特徴とする請求項1~3のいずれか1項に記載の抽出方法。コンピュータに、複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第1の情報と、前記複数のファイルのうちの一部のファイルについて、前記一部のファイルの少なくともいずれかが前記所定の文字情報を含むか否かを示す第2の情報と、を記憶手段に記憶し、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示すことが検出されると、前記第1の情報に基づいて前記複数のファイルから前記所定の文字情報を含むファイルを抽出し、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示さないことが検出されると、前記複数のファイルのうちの前記一部のファイルに含まれないファイルから、前記第1の情報に基づいて前記所定の文字情報を含むファイルを抽出する、ことを実行させることを特徴とする抽出方法。コンピュータに、複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第1の情報と、前記複数のファイルの少なくともいずれかが前記所定の文字情報を含むか否かを示す第2の情報と、を記憶手段に記憶し、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示すことが検出されると、前記第1の情報に基づいて前記所定の文字情報を含むファイルを抽出する、ことを実行させることを特徴とする抽出プログラム。コンピュータに、複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第1の情報と、前記複数のファイルのうちの一部のファイルについて、前記一部のファイルの少なくともいずれかが前記所定の文字情報を含むか否かを示す第2の情報と、を記憶手段に記憶し、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示すことが検出されると、前記第1の情報に基づいて前記複数のファイルから前記所定の文字情報を含むファイルを抽出し、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示さないことが検出されると、前記複数のファイルのうちの前記一部のファイルに含まれないファイルから、前記第1の情報に基づいて前記所定の文字情報を含むファイルを抽出する、ことを実行させることを特徴とする抽出プログラム。複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第1の情報と、前記複数のファイルの少なくともいずれかが前記所定の文字情報を含むか否かを示す第2の情報と、を記憶する記憶手段と、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示すことが検出されると、前記第1の情報に基づいて前記所定の文字情報を含むファイルを抽出する抽出手段と、を備えることを特徴とする抽出装置。複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第1の情報と、前記複数のファイルのうちの一部のファイルについて、前記一部のファイルの少なくともいずれかが前記所定の文字情報を含むか否かを示す第2の情報と、を記憶する記憶手段と、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示すことが検出されると、前記第1の情報に基づいて前記複数のファイルから前記所定の文字情報を含むファイルを抽出し、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示さないことが検出されると、前記複数のファイルのうちの前記一部のファイルに含まれないファイルから、前記第1の情報に基づいて前記所定の文字情報を含むファイルを抽出する抽出手段と、を備えることを特徴とする抽出装置。複数のコンピュータと、割当装置と、を含む抽出システムであって、前記割当装置が、複数のファイルを分割して得られる複数のファイル群のそれぞれについて、それぞれのファイル群に含まれる少なくとも1つのファイルが所定の文字情報を含むかを示す情報を保持する保持手段と、前記所定の文字情報についての検索要求を受けた場合に、前記保持手段に保持された情報に前記所定の文字情報を含むファイルを少なくとも1つ旨を示されるファイル群の数に応じて、前記複数のファイル群を前記複数のコンピュータのそれぞれに割り当てる割当手段と、を含み、前記複数のコンピュータのそれぞれが、前記複数のファイル群のそれぞれについて、それぞれのファイル群に含まれるいずれのファイルが所定の文字情報を含むかを示すインデックス情報を記憶する記憶手段と、前記記憶手段に記憶された前記複数のファイル群それぞれについてのインデックス情報のうち、前記割当装置に割り当てられたファイル群についての前記インデックス情報に基づいて前記所定の文字情報を含むファイルを抽出する抽出手段と、を含む、ことを特徴とする抽出システム。しかしながら、検索対象のファイル数が増大すると、それに合わせてインデックス情報のサイズも増大する。インデックス情報のサイズ増大により、インデックス情報を参照する処理に要する時間が増大するため、結果として検索処理の時間が増大するという問題があった。本発明は、上述した従来技術による問題点を解消するため、ファイル数増大に応じた検索処理時間の増大を抑制することができる抽出方法、抽出プログラム、抽出装置、および抽出システムを提供することを目的とする。上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第1の情報と、前記複数のファイルの少なくともいずれかが前記所定の文字情報を含むか否かを示す第2の情報と、を記憶手段に記憶し、前記所定の文字情報についての検索要求を受けた際に、前記第2の情報が前記所定の文字情報を含む旨を示すことが検出されると、前記第1の情報に基づいて前記所定の文字情報を含むファイルを抽出する抽出方法、抽出プログラム、抽出装置、および抽出システムが提案される。本発明の一側面によれば、ファイル数増大に応じた検索処理時間の増大を抑制することができるという効果を奏する。以下に添付図面を参照して、本発明の実施の形態を詳細に説明する。なお、本明細書において、文字情報とは、テキストデータを構成する、単一文字、基礎単語、分割文字コードなどである。対象ファイル群は、たとえば、文書ファイル、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にしてもよい。出現マップとは、全文検索のためのインデックスであり、文字情報を指定するポインタと文字情報の各対象ファイルでの存否を示すビット列を連結したビット列である。検索処理時には、このビット列を、ビットのONOFFに応じて検索対象の文字情報を含むか否かを示すインデックスとして用いることができる。文字情報を指定するポインタとしては、たとえば、文字情報の圧縮符号が採用される。文字情報を指定するポインタは、たとえば、文字情報そのものを用いても良い。圧縮符号マップとは、圧縮符号のポインタで示される文字情報ごとの出現マップをまとめたビットマップである。2グラム文字列の圧縮符号マップについては、第1グラムの圧縮符号と第2グラムの圧縮符号を組み合わせた圧縮符号列となる。2グラム文字列とは、1グラムの文字コードが連接する文字列である。たとえば、人形芝居という文字列には、2連接文字人形、形芝、芝居が含まれている。2連接文字人形の人、形はそれぞれ分割されない単一文字であるため、2連接文字人形はそのまま2グラム文字列となる。芝は上述したように分割されるため、単一文字形と芝の上位分割文字コード0x9Dの組み合わせが2グラム文字列となる。また、上位分割文字コード0x9Dと下位分割文字コード0x82の組み合わせも2グラム文字列となる。さらに、下位分割文字コード0x82と分割されない単一文字居の組み合わせも2グラム文字列となる。基礎単語により、対象ファイル群が圧縮されている場合、圧縮符号マップの生成時や検索時に1パスでアクセスすることが可能である。なお、対象ファイル群を圧縮しない場合は、文字情報を指定するポインタとしては、文字情報の文字コードをそのまま採用してもよい。また、削除マップとは、対象ファイルの存在または削除をビット列で示したインデックスである。なお、削除マップにおいてON=1に該当するビットに対応するファイル番号の対象ファイルは、存在していることを意味する。一方、OFF=0になると、当該対象ファイルは削除されたことを意味する。これにより、圧縮符号マップを用いて検索を行う場合に、対象ファイルそのものを削除しなくても、対象ファイルに対応する削除マップをOFFにすることで、対象ファイルを検索対象から除くことができる。図1は、本実施の形態にかかる圧縮符号マップの分散化を示す説明図である。圧縮符号マップは、所定のファイル数n単位たとえば、n=256で分割されている。分割された各々を、セグメントと称す。セグメントsg01は、圧縮ファイルf1~fnまでの圧縮符号マップを有するセグメントであり、セグメントsg02は、圧縮ファイルfn1~f2nまでの圧縮符号マップを有するセグメントであり、セグメントsg03は、圧縮ファイルf2n1~f3nまでの圧縮符号マップを有するセグメントである。セグメントは初期状態では、セグメントsg01のみが存在し、ファイル追加によりファイル数がnを超えると、セグメントsg02が生成され、ファイル数が2nを超えると、セグメントsg03が生成される。このように、ファイル数増加により、最後尾のセグメントsg0Kは、圧縮ファイルfK-1n1~fKnまでの圧縮符号マップを有するセグメントとなるただし、Kは現在のセグメント数を示す。Kは1以上の整数である。。各セグメントは、管理領域A1~AK管理領域群Asを有する。管理領域A1~AKには、先行セグメントへのポインタ、後続セグメントへのポインタ、自セグメント内の圧縮符号マップを構成する各出現マップへのポインタ、自セグメント内の削除マップへのポインタ、自セグメント内の各圧縮ファイルへのポインタが格納されている。先頭のセグメントsg01については、先行セグメントがないため、先行セグメントへのポインタとして、たとえば、00000000hが格納される。アドレス00000000hは、先頭のセグメントsg01を指定する論理アドレスである。同様に、最後尾のセグメントsg0Kについては、後続セグメントがないため、後続セグメントへのポインタとして、たとえば、0FFFFFFFhが格納される。還元すれば、後続セグメントへのポインタとして0FFFFFFFhが格納されているセグメントが最後尾のセグメントである。K=1の場合、すなわち、セグメントsg01しか存在しない場合、セグメントsg01の先行セグメントへのポインタは00000000hであり、後続セグメントへのポインタは0FFFFFFFhである。ファイル追加によりK=2になると、セグメントsg01の後続セグメントへのポインタは、0FFFFFFFhからセグメントsg02へのポインタに変更される。また、セグメントsg02の先行セグメントへのポインタには、セグメントsg01へのポインタセグメントsg01のアドレス00000000hが格納される。また、セグメントsg02の後続セグメントへのポインタには、0FFFFFFFhが格納される。このように、セグメントごとに先行セグメントおよび後続セグメントとの関連付けをしておくことで、セグメント単位での検索を連携しておこなうことができる。各セグメントの圧縮符号マップM1~MK圧縮符号マップMsは、文字情報が同じである出現マップを有するが、担当するファイル番号が異なる。各セグメントの圧縮符号マップM1~MKにおいて担当するファイル番号は、自セグメントが保持する圧縮ファイルのファイル番号となる。たとえば、セグメントsg0Kの圧縮符号マップMKでは、各文字情報の出現マップについてファイル番号K-1n~Knの存否を示すビット列を有することとなる。各セグメントの削除マップD1~DK削除マップDsについても圧縮符号マップ群Msと同様、担当するファイル番号が異なる。各削除マップD1~DKにおいて担当するファイル番号は、自セグメントが保持する圧縮ファイルのファイル番号となる。たとえば、セグメントsg0Kの削除マップDKでは、各文字情報の出現マップについてファイル番号K-1n~Knについての存在または削除を示すビット列を有することとなる。図2は、セグメント群を記憶したサーバを示す説明図である。サーバ200は、データベース201を有する。データベース201には、アーカイブファイル202が格納されている。アーカイブファイル202は、バッチ部211と、追加部212と、を有する。バッチ部211には、c個のセグメントsg01~sg0cがデフォルトで格納されている。追加部212には、追加されたセグメントsg0c1~sg0Kが格納されている。なお、追加部212に空き領域がなくなった場合は、サーバ200とネットワークを介して通信可能な他のサーバに格納させるものとする。図3は、対象ファイルが追加された場合の圧縮符号マップの追加例を示す説明図である。Aでは、セグメントsg01,sg02が登録済みであり、文字情報LT1~LTzの圧縮符号PLT1~PLTzについての出現マップにおいて、ファイル番号1~2nまでのインデックス情報が格納されている。Bは、Aの状態から出現マップ群を圧縮した状態を示している。圧縮手法については後述するが、圧縮するタイミングとしては、たとえば、1セグメントのファイル数nの倍数になった場合に圧縮するものとする。この場合、ファイル数がnの倍数2nであるため、出現マップごとにインデックス情報であるビット列を圧縮する。また、文字情報LT1~LTzの存否を確認する場合には、伸長されるものとする。伸長手法についても後述する。このように、通常は圧縮して保存しておき、必要なときにだけ伸長することで、省メモリ化を図ることができる。Cは、Bの状態からあらたな圧縮ファイルf2n1が追加された状態を示している。Bでの最後尾のセグメントであるセグメントsg02では圧縮ファイルf2n1を格納できないため、あらたにセグメントsg03が設定され、圧縮ファイルf2n1が保存されることになる。また、セグメントsg03の圧縮符号マップには、圧縮符号ごとに圧縮ファイルf2n1についてのビットが設定される。Cの例では、文字情報LT1,LT2については1、LTzについては0が設定されている。Dは、Cの状態からセグメントsg03においてn個の圧縮ファイルf2n1~f3nが追加された状態を示している。Eは、Dの状態においてセグメントsg03でn個の圧縮ファイルf2n1~f3nが追加されたため、圧縮符号ごとにセグメントsg01~sg03のインデックス情報を圧縮した状態を示している。このように、セグメント単位で圧縮ファイルがn個たまると、出現マップの圧縮がおこなわれる。図4は、出現マップの階層化を示す説明図である。セグメント数が増加すると、圧縮符号ごとにインデックス情報となるビット列が冗長化する。冗長化した場合、圧縮符号ごと、すなわち、文字情報ごとに、全ファイル数について存否を示すビットのON/OFFを確認する必要があるが、存在しない箇所について確認作業をするのは無駄であり、検索時間の増大の原因となる。そこで、圧縮符号ごと、すなわち、文字情報ごとに、セグメントがm1個生成されたら、m個単位でインデックス情報を集約することにする。図4では、例として文字情報LTxの圧縮符号PLTxのインデックス情報を上位階層に集約する場合を例に挙げて説明する。なお、sgXYのXは、階層番号を示しており、Yはセグメント番号を示している。したがって、sgXYの場合は、第X階層のY番目のセグメントとなる。また、これまで説明してきたセグメントsg01~sg0Kは、第0階層のセグメントとなる。まず、基本階層である第0階層から上位階層である第1階層への集約例について説明する。集約のルールとしては、対象階層のセグメントのインデックス情報であるビット列がオール0、すなわち、文字情報LTxがそのセグメント内の対象ファイル群に存在しない場合、上位階層のインデックスとして0に集約する。一方、対象階層のセグメントのインデックス情報であるビット列1個でも1がある場合、すなわち、文字情報LTxがそのセグメント内の対象ファイル群の少なくともいずれか1つに存在する場合、上位階層のインデックスとして1に集約する。たとえば、セグメントsg01については、1が存在するため、上位階層のセグメントsg11には、1が設定される。同様に、セグメントsg0mについては、オール0であるため、上位階層のセグメントsg11には、0が設定される。この上位階層のセグメントsg11のビット位置は、下位のセグメントsg01~sg0mの位置を示している。このように、上位階層のセグメントのビットの値により下位のセグメントのインデックス情報の状態を特定することができる。また、このような集約は第0階層と第1階層との間だけではなく、最上位階層のセグメント数がm個になると、あらたに上位階層のセグメントが生成されることとなる。たとえば、第1階層でセグメントがセグメントsg1mまで出来上がると、上述したように第2階層のセグメントsg21が生成されることとなる。なお、図4では、第2階層までの例を示したが、追加される圧縮ファイル数が増加するにしたがって、第3階層以上の階層に集約されることになる。図5は、削除マップの階層化を示す説明図である。削除マップについても、図4と同様セグメント単位で上位階層に集約されることになる。図6は、階層化されたセグメント群の詳細を示す説明図である。図6の階層構造セグメント群では、第0階層に図1に示したようなm2個のセグメントsg01~sg0m2が生成されている。また、上位階層についても同様なデータ構造のセグメントsg11~sg1mが生成されている。たとえば、第1階層のセグメントsg11~sg1mでは、第0階層で集約された出現マップ集約出現マップが圧縮符号ごとに格納されている。同様に、第0階層で集約された削除マップ集約削除マップが圧縮符号ごとに格納されている。また、第0階層と同様、それぞれの管理領域に、先行セグメントへのポインタや後続セグメントへのポインタが設定されている。また、自セグメント内の集約出現マップへのポインタや集約削除マップへのポインタも格納される。また、管理領域には、下位階層のセグメント下位セグメントへのポインタがそれぞれ格納されている。たとえば、セグメントsg11では、下位階層のセグメントsg01へのポインタ~セグメントsg0mへのポインタが格納されており、セグメントsg01~セグメントsg0mを指定することができる。なお、第1階層以上のセグメントには、圧縮ファイルは格納されない。図7は、図6に示した階層構造セグメント群SGを実装したコンピュータシステムの構成例を示す説明図である。図7の階層構造セグメント群SGでは、m個のセグメントを1アーカイブファイルとする。なお、AXYはアーカイブファイルの符号であり、Xは、階層番号を示しており、Yはアーカイブ番号を示している。したがって、AXYの場合は、第X階層のY番目のアーカイブファイルとなる。たとえば、アーカイブファイルA01は、第0階層のセグメントsg01~sg0mの集合である。図7の例では、マスタサーバMSは、第1階層以上のアーカイブファイルを格納している。また、スレーブサーバS1,S2,...,S2m1,...は、マスタサーバMSにより割り当てられた1個のアーカイブファイルを格納している。図7のアーカイブファイルの割り当ては1例であり、マスタサーバMSが第1階層以上のアーカイブファイルをすべて担当する必要はなく、他のサーバに分散させてもよい。また、スレーブサーバS1,S2,...,S2m1,...についても1アーカイブファイルだけではなく、複数のアーカイブファイルを担当することとしてもよい。図8は、階層構造セグメント群SGを用いた圧縮ファイルの絞込み例を示す説明図である。図8では、説明を単純化するため、第0階層のセグメントのファイル数nをn=4とし、m=4とする。したがって、第0階層セグメントsg01~sg016まで存在することになるが、図示されていないセグメントについては説明を省略する。また、図8では、最上位階層を第2階層として説明する。また、図8において、実線矢印はAND結果にしたがって下位階層のセグメントを指定していることを示しており、点線矢印は実際には指定されないが、指定されたセグメントと対比するために図示している。また、図8では、検索文字列として人形が入力された場合を示す。Aにおいて、最上位階層である第2階層のセグメントsg21について、文字情報人の圧縮符号P人の集約出現マップと、文字情報形の圧縮符号P形の集約出現マップと、集約削除マップと、のAND演算をおこなう。AND結果は1100となり、下位階層である第1階層のセグメントsg11,sg12に、文字情報人および形が存在する可能性があることがわかる。また、下位セグメント番号3,4についてはAND結果が0である。したがって、セグメントsg13,sg14の各AND演算をおこなうまでもなく、セグメントsg13,sg14の各AND結果がオール0になることがわかる。Bでは、第2階層のAND結果から第1階層のセグメントsg11,sg12が指定されたため、セグメントsg11,sg12について、Aと同様AND演算を実行する。これにより、セグメントsg11からはセグメントsg01が指定され、セグメントsg12からはセグメントsg05が指定されることになる。セグメントsg12に着目すると、下位セグメント番号6~8についてはAND結果が0である。したがって、セグメントsg06~sg08の各AND演算をおこなうまでもなく、セグメントsg06~sg08の各AND結果がオール0になることがわかる。Cでは、第1階層のAND結果から第0階層のセグメントsg01,sg05が指定されたため、sg01,sg05について、A,Bと同様AND演算を実行する。これにより、セグメントsg01からはファイル番号3が指定され、セグメントsg05からはファイル番号19が指定されることになる。したがって、圧縮ファイルf3,f19に、文字情報人および形の両方が存在することがわかる。<コンピュータのハードウェア構成例>図9は、実施の形態にかかるコンピュータのハードウェア構成例を示すブロック図である。図9において、コンピュータは、CPUCentralProcessingUnit901と、ROMReadOnlyMemory902と、RAMRandomAccessMemory903と、磁気ディスクドライブ904と、磁気ディスク905と、光ディスクドライブ906と、光ディスク907と、ディスプレイ908と、I/FInterface909と、キーボード910と、マウス911と、スキャナ912と、プリンタ913と、を備えている。また、各構成部はバス900によってそれぞれ接続されている。ここで、CPU901は、コンピュータの全体の制御を司る。ROM902は、ブートプログラムなどのプログラムを記憶している。また、ROM902は、圧縮符号マップMsを生成管理するプログラム、圧縮符号マップMsを用いて検索を行うプログラムを記憶している。RAM903は、CPU901のワークエリアとして使用され、CPU901は、ROM902に記憶されたプログラムをRAM903に読み出して実行することができる。磁気ディスクドライブ904は、CPU901の制御にしたがって磁気ディスク905に対するデータのリード/ライトを制御する。磁気ディスク905は、磁気ディスクドライブ904の制御で書き込まれたデータを記憶する。光ディスクドライブ906は、CPU901の制御にしたがって光ディスク907に対するデータのリード/ライトを制御する。光ディスク907は、光ディスクドライブ906の制御で書き込まれたデータを記憶したり、光ディスク907に記憶されたデータを情報処理装置に読み取らせたりする。ディスプレイ908は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ908は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。インターフェース以下、I/Fと略する。909は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク914に接続され、このネットワーク914を介して他の装置に接続される。そして、I/F909は、ネットワーク914と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F909には、たとえばモデムやLANアダプタなどを採用することができる。キーボード910は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス911は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。スキャナ912は、画像を光学的に読み取り、コンピュータ内に画像データを取り込む。なお、スキャナ912は、OCROpticalCharacterReader機能を持たせてもよい。また、プリンタ913は、画像データや文書データを印刷する。プリンタ913には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。また、コンピュータは、上述した各種サーバや据置き型のパーソナルコンピュータのほか、携帯電話機、スマートフォン、電子書籍端末、ノート型パソコンなどの携帯型端末であってもよい。また、本実施の形態は、複数のコンピュータに応じて実施されてもよい。図10は、本実施の形態にかかるシステム構成例を示す説明図である。図10において、システムは、図9に示す各ハードウェアを含みうるコンピュータ1001~1003、ネットワーク1004、スイッチ1005、無線基地局1007を含む。情報処理装置1003に含まれるI/Fは、無線通信機能を備える。たとえば、複数のファイルを含むコンテンツについての圧縮符号マップを生成する処理をコンピュータ1001で実行し、コンピュータ1002,1003に配信し、コンピュータ1002,1003のそれぞれで配信されたコンテンツについての検索処理を実行してもよい。また、複数のファイルを含むコンテンツについての圧縮符号マップを生成する処理をコンピュータ1001で実行し、コンピュータ1002またはコンピュータ1003からコンテンツについての検索依頼をコンピュータ1001が受け付けて、検索処理を実行し、実行した検索処理の結果をコンピュータ1002、コンピュータ1003のそれぞれに返すように構成してもよい。図2と同様に、コンピュータ1001~1003のそれぞれは、上述した各種サーバや据置き型のパーソナルコンピュータのほか、携帯電話機、スマートフォン、電子書籍端末、ノート型パソコンなどの携帯型端末であってもよい。<機能的構成例1>図11は、本実施の形態にかかるコンピュータまたはコンピュータシステムの機能的構成例1を示すブロック図であり、図12は、図11に示したコンピュータまたはコンピュータシステムの集計部~第2圧縮部までの処理の流れを示す説明図である。図11において、コンピュータまたはコンピュータシステム以下、コンピュータ1100は、集計部1101と、第1生成部1102と、第1圧縮部1103と、作成部1104と、第2生成部1105と、第2圧縮部1106と、を備える。集計部1101~第2圧縮部1106は、具体的には、たとえば、図9に示したROM902、RAM903、磁気ディスク905などの記憶装置に記憶されたプログラムをCPU901に実行させることによりその機能を抽出装置として実現する。なお、集計部1101~第2圧縮部1106は、それぞれ実行結果を記憶装置に書き込んだり、他の部の実行結果を読み出したりして、それぞれ演算を実行する。以下、集計部1101~第2圧縮部1106について簡単に説明する。集計部1101は、対象ファイル群内の文字情報の出現回数を集計する。具体的には、たとえば、集計部1101は、図12のAに示したように、対象ファイル群Fs内の文字情報の出現回数を集計する。集計部1101では、特定単一文字、上位分割文字コード、下位分割文字コード、2グラム文字、基礎単語別に出現回数を計数する。集計部1101の詳細な処理内容については後述する。第1生成部1102は、集計部1101の集計結果に基づいて2N分枝無節点ハフマン木Hを生成する図12B。2N分枝無節点ハフマン木Hとは、根から分岐する枝が2N本あり、1または複数本の枝で葉を直接ポイントするハフマン木である。節点内部節点はない。節点がなく直接葉にヒットするため、節点を有する通常のハフマン木に比べて、伸長速度の高速化を図ることができる。葉は、該当する文字情報とその圧縮符号を含む構造体である。葉の構造体とも呼ぶ。葉に割り当てられる枝数は、割当先の葉に存在する圧縮符号の圧縮符号長に依存する。第1生成部1102の詳細な処理内容については後述する。第1圧縮部1103は、2N分枝無節点ハフマン木Hを用いて対象ファイル群Fsの各対象ファイルを圧縮して圧縮ファイル群fsにする図12C。第1圧縮部1103の詳細な処理内容については後述する。作成部1104は、集計部1101の集計結果と2N分枝無節点ハフマン木Hにおいて文字情報ごとに割り当てられた圧縮符号に基づいて、圧縮符号マップMsを作成する。作成部1104は、圧縮符号マップMsについても、特定単一文字、上位分割文字コード、下位分割文字コード、2グラム文字、基礎単語別に作成する。作成部1104は、圧縮符号マップMsにおいて該当する文字情報が1個の対象ファイルに1回でも出現したらそのファイル番号のビットをONにする図12D。また、初期状態では、削除マップDsは各対象ファイルですべてONにする。作成部1104の詳細な処理内容については後述する。第2生成部1105は、文字情報の出現確率に基づいて出現マップを圧縮する無節点ハフマン木hを生成する図12E。第2生成部1105の詳細な処理内容については後述する。また、図7に示したコンピュータシステムの場合、マスタサーバMSの第2生成部1105で生成された無節点ハフマン木は、スレーブサーバS1,S2,...に送信される。第2圧縮部1106は、第2生成部1105で生成された無節点ハフマン木を用いて各出現マップを圧縮する図12F。第2圧縮部1106の詳細な処理内容については後述する。また、図7に示したコンピュータシステムの場合、スレーブサーバS1,S2,...は、マスタサーバMSの第2生成部1105で生成され送信されてきたハフマン木を用いて、第2圧縮部1106により、スレーブサーバS1,S2,...内の出現マップを圧縮することとなる。<集計および圧縮符号マップMsの作成の詳細>つぎに、集計部1101による集計および作成部1104による圧縮符号マップMsの作成の詳細について説明する。圧縮符号マップMsを作成する場合、作成に先立って、集計部1101により、対象ファイル群Fsから文字情報の出現回数を集計し、第1生成部1102により、2N分枝無節点ハフマン木Hを生成しておく必要がある。図13は、集計部1101による集計および作成部1104による圧縮符号マップMsの作成例を示す説明図である。1出現回数の集計まず、コンピュータ1100は、対象ファイル群Fsに存在する文字情報の出現回数を計数する。集計結果は、出現回数の降順にソートされ、出現回数の大きい方から昇順の順位がつけられる。なお、ここでは、文字情報の総種類数は、例として1305個<2048=211とする。1出現回数の集計の詳細は図7で説明する。2圧縮符号長算出つぎに、1で得られた集計結果を基にして、コンピュータ1100は、文字情報ごとの圧縮符号長を算出する。具体的には、コンピュータ1100は、文字情報ごとに、出現率を算出する。出現率は、文字情報の出現回数を全文字情報の総出現回数で割ることで得られる。そして、コンピュータ1100は、出現率に対応する生起確率を求め、生起確率から圧縮符号長を導き出す。生起確率は、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圧縮符号長算出の詳細は図15で説明する。3葉数特定つぎに、コンピュータ1100は、圧縮符号長ごとに葉数を集計することで圧縮符号長ごとの葉数を特定する。ここでは、最大圧縮符号長は17ビットとする。また、葉数とは、文字情報の種類数である。したがって、圧縮符号長5ビットの葉数が2である場合、5ビットの圧縮符号が割り当てられる文字情報が2つ存在することを示している。4葉数補正つぎに、コンピュータ1100は、葉数を補正する。具体的には、コンピュータ1100は、枝数の上限2Nのべき数Nが最大圧縮符号長となるように補正する。たとえば、べき数N=11の場合、圧縮符号長11ビット~17ビットまでの葉数の総和を、補正後の圧縮符号長11ビットの葉数にする。そして、コンピュータ1100は、圧縮符号長ごとに葉当たりの枝数を割り当てる。具体的には、補正後の圧縮符号長に対し、その降順に、20、21、22、23、24、25、26として葉当たりの枝数を決定する。たとえば、図13では、圧縮符号長11ビットの圧縮符号が割り当てられる文字情報の総数葉数は1215個であるが、その葉当たりの枝数は1である。圧縮符号長11ビットの圧縮符号が割り当てられる文字情報については、それぞれ1本の枝しか割り当てられないこととなる。一方、圧縮符号長6ビットの圧縮符号が割り当てられる文字情報の総数葉数は6個であるが、その葉当たりの枝数は32である。圧縮符号長6ビットの圧縮符号が割り当てられる文字情報については、それぞれ32本の枝が割り当てられることとなる。4葉数補正は、必要な場合に実行すればよく、実行しなくてもよい。5葉の構造体生成つぎに、コンピュータ1100は、葉の構造体を生成する。葉の構造体とは、文字情報とその圧縮符号長とその圧縮符号長での圧縮符号が対応付けられたデータ構造体である。たとえば、出現順位が1位である文字0の圧縮符号長は6ビットであり、圧縮符号は000000となる。図13の例では、文字情報の種類数葉数は1305個であるため、葉L1の構造体~葉L1305の構造体が生成されることとなる。3葉数特定~5葉の構造体生成の詳細N=11は、図16で説明する。6葉へのポインタ生成つぎに、コンピュータ1100は、葉の構造体ごとに葉へのポインタを生成する。葉へのポインタは、そのポイント先となる葉の構造体内の圧縮符号に、その葉当たりの枝数分の番号に相当するビット列を連結したビット列である。たとえば、葉L1である文字0に割り当てられた圧縮符号000000の圧縮符号長は6ビットであるため、葉L1当たりの枝数は32本である。したがって、葉L1へのポインタの先頭6ビットは、圧縮符号000000となる。後続ビット列は、葉L1当たりの枝数で表現される32=25種のビット列となる。すなわち、32種の5ビットのビット列が圧縮符号000000の後続ビット列となる。したがって、葉L1へのポインタは、先頭6ビットが000000で固定された32種の11ビットのビット列となる。なお、葉当たりの枝数が1本の場合は、葉へのポインタは1個であり、圧縮符号とその葉へのポインタは同一ビット列となる。6葉へのポインタ生成の詳細は、図18で説明する。72N分枝無節点ハフマン木Hの構築最後に、コンピュータ1100は、2N分枝無節点ハフマン木Hを構築する。具体的には、葉のポインタを根とすることで、葉の構造体を直接指定する2N分枝無節点ハフマン木Hが構築される。圧縮符号列が、先頭6ビットが000000の11ビットのビット列である場合、後続の5ビットが32種のいずれのビット列であっても、2N分枝無節点ハフマン木Hにより文字0の葉L1の構造体をポイントすることができる。72N分枝無節点ハフマン木Hの構築の詳細は、図19で説明する。図14は、1出現回数の集計の詳細を示す説明図である。図14において、コンピュータ1100は、A対象ファイル群Fsからの集計、B出現頻度の降順でのソート、C目標出現率の順位までの抽出という3つのフェーズを実行する。以下、基礎単語と単一文字に分けて説明する。A1まず、コンピュータ1100は、対象ファイル群Fsを読み込んで、基礎単語の出現頻度出現回数を計数する。コンピュータ1100は、基礎単語の構造体を参照して、基礎単語の構造体内の基礎単語に一致する文字列が対象ファイルに存在する場合に、当該基礎単語の出現頻度初期値は0を1加算する。基礎単語の構造体とは、基礎単語が記述されたデータ構造体である。B1対象ファイル群Fsにおいて基礎単語の集計が終了すると、コンピュータ1100は、基礎単語出現頻度集計テーブルを、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い基礎単語から順位付けをおこなう。A2、また、コンピュータ1100は、対象ファイル群Fsを読み込んで、単一文字の出現頻度を計数する。具体的には、コンピュータ1100は、単一文字の出現頻度初期値は0を1加算する。B2対象ファイル群Fsにおいて単一文字の集計が終了すると、コンピュータ1100は、単一文字出現頻度集計テーブルを、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い単一文字から順位付けをおこなう。C1つぎに、コンピュータ1100は、B1ソート後の基礎単語出現頻度集計テーブルを参照して、目標出現率Pwまでの順位の基礎単語を抽出する。具体的には、コンピュータ1100は、全基礎単語の出現頻度の総和総出現頻度を分母とし、順位が1位の基礎単語から降順に出現頻度を累計して分子とし、各順位までの目標出現率Pwを算出する。たとえば、総出現頻度が40000、1位からy位までの基礎単語群の累計出現頻度が30000とすると、y位までの出現頻度は、40000/30000×100=75[]となる。ここで、目標出現率Pwが75[]である場合は、上位y位までの基礎単語を抽出することとなる。C21つぎに、コンピュータ1100は、B2ソート後の単一文字出現頻度集計テーブルを参照して、目標出現率Pcまでの順位の単一文字を抽出する。具体的には、コンピュータ1100は、全単一文字の出現頻度の総和総出現頻度を分母とし、順位が1位の単一文字から降順に出現頻度を累計して分子とし、各順位までの出現率を算出する。たとえば、総出現頻度が50000、1位からy位までの単一文字群の累計出現頻度が40000とすると、y位までの出現頻度は、50000/40000×100=80[]となる。ここで、目標出現率Pcが80[]である場合は、上位y位までの単一文字を抽出することとなる。なお、C21で抽出された単一文字を、元の単一文字群と区別するために、特定単一文字群と称す。C22また、単一文字群のうち特定単一文字群から外された単一文字以下、非特定単一文字群は、出現頻度が各特定単一文字よりも低いため、その文字コードを分割する。具体的には、非特定単一文字の文字コードを、上位ビットの文字コードと、下位ビットの文字コードに分割する。たとえば、単一文字がUTF16ビット文字コードで表現されている場合は、上位8ビットの文字コードと下位8ビットの文字コードに分割する。この場合、分割されたいずれの文字コードも、0x00~0xFFのコードで表現される。このように、上位ビットの文字コードが上位分割文字コードであり、下位ビットの文字コードが下位分割文字コードである。図15は、図13の2圧縮符号長算出の詳細N=11を示す説明図である。図15の文字情報テーブルは、図13の1での集計結果を反映したテーブルであり、文字情報ごとに順位項目、伸長種別項目、コード項目、文字項目、出現回数項目、総回数項目、出現率項目、補正前での生起確率項目および圧縮符号長項目が設定されている。このうち、順位項目~総回数項目までが再ソート結果で得られた情報である。ここで、順位項目には、文字情報の出現回数の降順に順位昇順が書き込まれている。文字情報項目のうち伸長種別項目には、文字情報の種別が書き込まれる。16は16ビットコードの単一文字を示している。8は8ビットの分割文字コードを示している。基は基礎単語を示している。文字情報項目のうちコード項目には、特定単一文字または分割文字コードが書き込まれている。基礎単語の場合は空欄とする。文字情報項目のうち文字項目には、文字や基礎単語が書き込まれている。分割文字コードの場合は空欄とする。出現回数項目には、対象ファイル群Fsでの文字情報の出現回数が書き込まれている。総回数項目には、全文字情報の総出現回数が書き込まれている。出現率項目には、出現回数を総回数で割り算した値が出現率として書き込まれている。補正前項目の生起確率項目には、出現率に対応する生起確率が書き込まれている。圧縮符号長項目には、生起確率に応じた圧縮符号長、すなわち、生起確率1/2yのべき数yが圧縮符号長として書き込まれている。図16は、図13の3葉数特定~5葉の構造体生成の詳細N=11を示す説明図である。図15の文字情報テーブルを圧縮符号長単位で葉数文字情報の総種類数を集計した結果が、図15における補正前の葉数となる。ここで、補正Aとは、圧縮符号長の上限長Nすなわち、2N分枝無節点ハフマン木Hの最大枝数2Nのべき数N以上の圧縮符号長に割り当てられた葉数を、圧縮符号長の上限長Nに集約する補正である。この場合、補正前での最大圧縮符号長は17ビットであるが、文字情報の総種類数が1305種であるため、圧縮符号長の上限長Nは、N=11となる。したがって、補正Aでは、圧縮符号長11ビットの葉数が、圧縮符号長が11ビット~17ビットの葉数の総和1190個となる。そして、コンピュータ1100は、生起確率総和を求める。圧縮符号長ごとの生起確率は決められているため5ビットなら1/25、圧縮符号長ごとに生起確率を葉数で乗じることで、圧縮符号長ごとの乗算結果が得られる。たとえば、補正Aにおける圧縮符号長5ビットの葉数は2である。圧縮符号長5ビットの生起確率は、1/25である。したがって、補正Aにおける圧縮符号長5ビットの生起確率は、2×1/25=1/24となる。圧縮符号長6ビット以降も同様に補正Aにおける圧縮符号長生起確率を求める。そして、補正A後における各圧縮符号長の生起確率を合計することで、補正Aでの生起確率総和が得られる。そして、コンピュータ1100は、生起確率総和が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である。図16に示した例では、補正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個である。このあと、コンピュータ1100は、補正Aの場合と同様の計算処理により、補正B1での生起確率総和を求める。そして、コンピュータ1100は、補正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個である。このあと、コンピュータ1100は、補正B1の場合と同様の計算処理により、補正B2での生起確率総和を求める。そして、コンピュータ1100は、補正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個である。このあと、コンピュータ1100は、補正B2の場合と同様の計算処理により、補正B3での生起確率総和を求める。そして、コンピュータ1100は、補正B3での生起確率総和が1以下の最大漸近値に収束したか否かを判断する。補正B3での生起確率総和が1以下の最大漸近値に収束していなければ、補正Bの4回目補正B4に移行する。最大漸近値に収束した場合は、補正B4に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正B3で更新された生起確率総和0.982は、補正B2で更新された生起確率総和0.982と同じ値である。すなわち、補正B3での各圧縮符号長の葉数と補正B2での各圧縮符号長の葉数とは同じである。この場合、コンピュータ1100は、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。このようにして、葉数が確定するまで補正Bを継続することとなる。図16の例では、補正B3で圧縮符号長ごとの葉数が確定したこととなる。このあと、コンピュータ1100は、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長Nこの場合はN=11ビットから降順に、20、21、22、23、24、25、26として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。図17は、文字情報ごとの補正結果を示す説明図である。図17において、文字情報テーブルには、補正A、補正B1~補正B2までの補正結果が追加されている。図17に示したように、補正により圧縮符号長別の葉数が更新されるため、順位項目の1位の文字情報から短い圧縮符号長が割り当てられることとなる。たとえば、補正B2で確定した場合、圧縮符号長6ビットでは葉数が6、圧縮符号長7ビットでは葉数が18、...、圧縮符号長11ビットでは葉数が1215となっている。したがって、順位が1位から6位までの文字情報葉数6個分については6ビットの圧縮符号長、順位が7位から24位までの文字情報葉数18個分については7ビットの圧縮符号長、...、順位が91位から1305位までの文字情報葉数1215個分については11ビットの圧縮符号長が割り当てられる。そして、コンピュータ1100は、文字情報と文字情報に割り当てられた圧縮符号長と圧縮符号長ごとの葉数とに基づいて、文字情報ごとに圧縮符号を割り当て、葉の構造体を生成することとなる。たとえば、出現率1位の単一文字0は5ビットの圧縮符号長が割り当てられているため、圧縮符号が000000となる。したがって、圧縮符号000000、圧縮符号長6、文字情報0を含む葉L1の構造体が生成されることとなる。なお、上述した補正処理では、圧縮符号長が5ビット~11ビットとしたが、2グラム文字列の圧縮符号マップMを分割する場合もあるため、圧縮符号長は偶数ビットとなるように、補正してもよい。具体的には、たとえば、圧縮符号長5ビットおよび7ビットの文字情報については6ビット、9ビットの文字情報については8ビット、11ビットの文字情報については10ビットとする。図18は、図13の6葉へのポインタ生成の詳細N=11を示す説明図である。図18は、圧縮符号長の上限Nが11ビットの場合の葉へのポインタを示している。図18において、圧縮符号長が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種の葉へのポインタが生成されることとなる。図19は、図13の72N分枝無節点ハフマン木Hの構築の詳細N=11を示す説明図である。図19では、N=11とした場合の2048=211分枝無節点ハフマン木Hを示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。具体的には、圧縮符号長が6ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図18に示したように32個生成される。したがって、葉L1の構造体については、根の構造体に32個の葉L1へのポインタL1P1~L1P32が格納される。葉L2の構造体~葉L6の構造体についても同様である。葉L7以降の構造体については、図19のとおりである。図20は、葉の構造体を示す説明図である。葉の構造体は、第1領域~第4領域を有するデータ構造体である。葉の構造体は、第1領域には、圧縮符号およびその圧縮符号長が格納される。第2領域には、葉の標識と伸長種別図15参照、出現率図15参照が格納される。第3領域には、伸長種別に応じて特定単一文字である16ビットの文字コード、非特定単一文字の文字コードが分割された8ビットの分割文字コード、または基礎単語へのポインタが格納される。基礎単語へのポインタにより基礎単語の構造体内の基礎単語が指定される。また、照合フラグも格納されている。照合フラグはデフォルトでは0である。0の場合は、伸長する文字をそのまま伸長バッファに書き出し、1の場合は、<color>タグと</color>タグで挟み込んで伸長バッファに書き出す。第4領域には、格納されている文字情報の出現率と出現マップの出現率領域が格納される。出現率とは、図15に示した文字情報の出現率である。出現マップの出現率領域については図55および図56で説明する。なお、第3領域には、そのほか、符号種別と符号区分が格納される。符号種別とは、文字コードが数字、英字、特殊記号、カタカナ、ひらがな、漢字のいずれに該当するか、または基礎単語へのポインタであるかを識別する情報である。符号区分とは、文字コードが16ビットであるか8ビットであるかを識別する情報である。16ビットの文字コードである場合または予約語である場合、符号区分として1を割り当て、8ビットの分割文字コードの場合、符号区分として0を割り当てる。なお、第1領域~第4領域内の情報は、後述する構築処理ステップS3905において格納されることとなる。図21は、特定単一文字の構造体を示す説明図である。特定単一文字の構造体2100は、特定単一文字コードe♯とその葉L♯へのポインタを格納するデータ構造体である。具体的には、たとえば、コンピュータ1100は、対象ファイル群Fsからの集計結果が得られたときに、コンピュータ1100が、特定単一文字の構造体2100に特定単一文字コードe♯を格納する。そして、コンピュータ1100は、2N分枝無節点ハフマン木Hが構築されると、2N分枝無節点ハフマン木Hにおける各葉の構造体に格納された圧縮符号に対応する、特定単一文字の構造体2100における特定文字コードe♯へのポインタを格納する。また、特定単一文字コードe♯へのポインタが対応する葉の構造体に格納されると、コンピュータ1100は、2N分枝無節点ハフマン木Hにおける各特定単一文字コードe♯に対応する葉へのポインタを、特定単一文字の構造体2100内の対応する特定単一文字コードe♯に関連付けて格納する。これにより、特定単一文字の構造体2100が生成される。図22は、分割文字コードの構造体を示す説明図である。分割文字コードの構造体2200は、分割文字コードとその葉L♯へのポインタを格納する。具体的には、たとえば、コンピュータ1100は、対象ファイル群Fsからの集計結果が得られたときに、コンピュータ1100が、分割文字コードの構造体2200に分割文字コードを格納する。そして、コンピュータ1100は、2N分枝無節点ハフマン木Hが構築されると、2N分枝無節点ハフマン木Hにおける各葉の構造体に格納された圧縮符号に対応する、分割文字コードの構造体2200における分割文字コードへのポインタを格納する。また、分割文字コードへのポインタが対応する葉の構造体に格納されると、コンピュータ1100は、2N分枝無節点ハフマン木Hにおける各分割文字コードに対応する葉へのポインタを、分割文字コードの構造体2200内の対応する分割文字コードに関連付けて格納する。これにより、分割文字コードの構造体2200が生成される。図23は、基礎単語の構造体を示す説明図である。基礎単語の構造体2300は、基礎単語とその葉L♯へのポインタを格納するデータ構造体である。基礎単語の構造体2300には、あらかじめ基礎単語が格納されている。コンピュータ1100は、2N分枝無節点ハフマン木Hが構築されると、2N分枝無節点ハフマン木Hにおける各葉の構造体に格納された圧縮符号に対応する、基礎単語の構造体2300における基礎単語へのポインタを格納する。また、基礎単語へのポインタが対応する葉の構造体に格納されると、コンピュータ1100は、2N分枝無節点ハフマン木Hにおける各基礎単語に対応する葉へのポインタを、基礎単語の構造体2300内の対応する基礎に関連付けて格納することとなる。<圧縮符号マップMsの作成例>第1生成部1102により2N分枝無節点ハフマン木Hが生成されると、作成部1104は、単一文字の圧縮符号マップMs、上位分割文字コードの圧縮符号マップMs、下位分割文字コードの圧縮符号マップMs、単語の圧縮符号マップMs、2グラム文字列の圧縮符号マップMsを作成する。以下、単一文字の圧縮符号マップMs、上位分割文字コードの圧縮符号マップMs、下位分割文字コードの圧縮符号マップMs、2グラム文字列の圧縮符号マップMsの詳細な作成例について説明する。なお、基礎単語の圧縮符号マップMsは、単一文字の圧縮符号マップMsと同様に行われるため省略する。図24は、圧縮符号マップMsの生成例を示す説明図である。図24では、対象ファイルFi内に竜馬は脱藩したという文字列が記述されているものとする。Aまず、先頭文字竜が対象文字である。対象文字竜は特定単一文字であるため、2N分枝無節点ハフマン木Hにアクセスして特定単一文字竜の圧縮符号を取得し、特定単一文字竜の出現マップを特定する。未生成の場合は、特定単一文字竜の圧縮符号をポインタとし、かつ、対象ファイルの存否を示すビット列をオール0にした特定単一文字竜の出現マップを生成する。そして、特定単一文字竜の出現マップについて対象ファイルFiのビットをON0→1にする。Bつぎに、対象文字を1グラムシフトして、対象文字を馬にする。対象文字馬は特定単一文字であるため、2N分枝無節点ハフマン木Hにアクセスして特定単一文字馬の圧縮符号を取得し、特定単一文字馬の出現マップを特定する。未生成の場合は、特定単一文字馬の圧縮符号をポインタとし、かつ、対象ファイルの存否を示すビット列をオール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グラム文字列のそれぞれについて、圧縮符号マップMsが生成される。<圧縮符号マップ生成処理手順>つぎに、作成部1104による圧縮符号マップ作成処理手順例について説明する。図25は、作成部1104による圧縮符号マップ作成処理手順例を示すフローチャートである。コンピュータ1100は、集計処理ステップS2501、マップ割当数決定処理ステップS2502、再集計処理ステップS2503、ハフマン木生成処理ステップS2504、マップ作成処理ステップS2505を実行する。コンピュータ1100は、集計部1101により集計処理ステップS2501~再集計処理ステップS2503を実行する。また、第1生成部1102によりハフマン木生成処理ステップS2504を実行し、作成部1104によりマップ作成処理ステップS2505を実行する。集計処理ステップS2501とは、対象ファイル群Fs内の単一文字や基礎単語の出現回数出現頻度ともいうを計数する処理である。マップ割当数決定処理ステップS2502とは、集計処理ステップS2501で集計された単一文字および基礎単語についてのマップ割当数を決定する処理である。マップ割当数に対応する出現順位の単一文字および基礎単語が、それぞれ特定単一文字および基礎単語となる。再集計処理ステップS2503とは、単一文字のうち特定単一文字以外の非特定単一文字を分割して、上位分割文字コードおよび下位分割文字コードとし、それぞれの出現回数を集計する処理である。また、再集計処理ステップS2503では、2グラム文字列の出現回数も集計する。ハフマン木生成処理ステップS2504とは、図15~図20に示したように、2N分枝無節点ハフマン木Hを生成する処理である。マップ作成処理ステップS2505とは、特定単一文字、基礎単語、上位分割文字コード、下位分割文字コード、2グラム文字列についての圧縮符号マップMを生成する処理である。集計処理ステップS2501図26は、図25に示した集計処理ステップS2501の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、ファイル番号iをi=1に設定しステップS2601、対象ファイルFiを読み込むステップS2602。そして、コンピュータ1100は、対象ファイルFiの集計処理を実行するステップS2603。対象ファイルFiの集計処理ステップS2603の詳細については、図27で説明する。このあと、コンピュータ1100は、ファイル番号iがi>nnは対象ファイルF1~Fnの総数であるか否かを判断するステップS2604。i>nでない場合ステップS2604:No、コンピュータ1100は、iをインクリメントしステップS2605、ステップS2602に戻る。一方、i>nである場合ステップS2604:Yes、コンピュータ1100は、図25に示したマップ割当数決定処理ステップS2502に移行して、集計処理ステップS2501を終了する。この集計処理ステップS2501によれば、対象ファイルFiごとに対象ファイルFiの集計処理ステップS2603を実行することができる。対象ファイルFiの集計処理ステップS2603図27は、図26に示した対象ファイルFiの集計処理ステップS2603の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、対象文字を対象ファイルFiの先頭文字としステップS2701、基礎単語集計処理を実行するステップS2702。基礎単語集計処理ステップS2702の詳細については図29で説明する。このあと、コンピュータ1100は、文字出現頻度集計テーブルにおいて対象文字の出現回数を1増加するステップS2703。図28は、文字出現頻度集計テーブルを示す説明図である。文字出現頻度集計テーブル2800は、RAM903や磁気ディスク905などの記憶装置に記憶されており、該当する文字が出現する都度出現回数を1ずつ増加させる。図27に戻り、コンピュータ1100は、対象文字が対象ファイルFiの末尾文字であるか否かを判断するステップS2704。対象文字が対象ファイルFiの末尾文字でない場合ステップS2704:No、コンピュータ1100は、対象文字を末尾方向へ1文字シフトしステップS2705、ステップS2702に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合ステップS2704:Yes、コンピュータ1100は、ステップS2604に移行して、対象ファイルFiの集計処理ステップS2603を終了する。この対象ファイルFiの集計処理ステップS2603によれば、対象ファイル群Fsに存在する基礎単語および単一文字の出現頻度を集計することができる。基礎単語集計処理ステップS2702図29は、図27に示した基礎単語集計処理ステップS2702の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、最長一致検索処理を実行しステップS2901、最長一致した基礎単語があったか否かを判断するステップS2902。最長一致検索処理ステップS2901の詳細については図31で説明する。最長一致した基礎単語があった場合ステップS2902:Yes、コンピュータ1100は、基礎単語出現頻度集計テーブルにおいて最長一致した基礎単語の出現回数を1増加しステップS2903、ステップS2703に移行する。図30は、基礎単語出現頻度集計テーブルを示す説明図である。基礎単語出現頻度集計テーブル3000は、RAM903や磁気ディスク905などの記憶装置に記憶されており、該当する基礎単語が出現する都度出現回数を1ずつ増加させる。図29に戻り、最長一致した基礎単語がなかった場合ステップS2902:No、ステップS2703に移行する。これにより、基礎単語集計処理ステップS2702を終了する。この基礎単語集計処理ステップS2702によれば、最長一致検索処理ステップS2901により基礎単語を計数することができるため、文字列が長い基礎単語を優先的に計数することができる。最長一致検索処理ステップS2901図31は、図29に示した最長一致検索処理ステップS2901の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、c=1とするステップS3101。cは対象文字からの文字数対象文字含むである。c=1の場合は、対象文字だけである。つぎに、コンピュータ1100は、対象文字からc文字目までの対象文字列と前方一致する基礎単語を2分探索するステップS3102。そして、コンピュータ1100は、検索により基礎単語があるか否かを判断するステップS3103。2分探索により基礎単語がヒットしなかった場合ステップS3103:No、ステップS3106に移行する。一方、2分探索により基礎単語がヒットした場合ステップS3103:Yes、コンピュータ1100は、ヒットした基礎単語と対象文字列とが完全一致するか否かを判断するステップS3104。そして、完全一致しない場合ステップS3104:No、ステップS3106に移行する。一方、完全一致する場合ステップS3104:Yes、コンピュータ1100は、最長一致候補として記憶装置に保持しステップS3105、ステップS3106に移行する。ステップS3106では、コンピュータ1100は、対象文字列について2分探索が終了したか否かを判断するステップS3106。具体的には、コンピュータ1100は、末尾の基礎単語まで2分探索したか否かを判断する。2分探索が終了していない場合ステップS3106:No、コンピュータ1100は、ステップS3102に移行して、2分探索が終了するまで継続する。一方、対象文字列について2分探索が終了した場合ステップS3106:Yes、コンピュータ1100は、c文字目の文字が対象ファイルFiの末尾文字であるか否かを判断するステップS3107。c文字目の文字が対象ファイルFiの末尾文字である場合ステップS3107:Yes、ステップS3110に移行する。一方、c文字目の文字が対象ファイルFiの末尾文字でない場合ステップS3107:No、コンピュータ1100は、c>cmaxであるか否かを判断するステップS3108。cmaxはあらかじめ設定された値であり、これにより対象文字列の上限文字数が設定される。c>cmaxでない場合ステップS3108:No、コンピュータ1100は、cをインクリメントしてステップS3109、ステップS3102に戻る。一方、c>cmaxである場合ステップS3108:Yes、コンピュータ1100は、最長一致候補があるか否かを判断するステップS3110。具体的には、コンピュータ1100は、ステップS3105において1つでも最長一致候補がメモリに保持されているか否かを判断する。最長一致候補がある場合ステップS3110:Yes、コンピュータ1100は、最長一致候補のうち最長文字列を、最長一致した基礎単語に決定するステップS3111。そして、ステップS2902に移行する。一方、ステップS3110において、最長一致候補が1つもない場合ステップS3110:No、ステップS2902に移行する。これにより、最長一致検索処理ステップS2901を終了する。この最長一致検索処理ステップS2901によれば、基礎単語の構造体にある基礎単語の中から、完全一致した文字列の中でかつ最長の文字列を基礎単語として検索することができる。マップ割当数決定処理ステップS2502図32は、図25に示したマップ割当数決定処理ステップS2502の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、集計処理ステップS2501による基礎単語ごとの出現頻度を示す基礎単語出現頻度集計テーブル3000と単一文字ごとの出現頻度を示す文字出現頻度集計テーブル2800を出現頻度の高い順にソートするステップS3201。そして、コンピュータ1100は、ソート後の基礎単語出現頻度集計テーブル3000を参照して、基礎単語の出現順位RwをRw=1としステップS3202、出現順位Rwまでの累積出現回数Arwを計数するステップS3203。そして、コンピュータ1100は、下記式1を満たすか否かを判断するステップS3204。Arw>Pw×Aw1Awは集計された基礎単語の総出現回数である。上記1式を満たさない場合ステップS3204:No、コンピュータ1100は、出現順位RwをインクリメントしてステップS3205、ステップS3203に戻る。すなわち、上記式1を満たすまで出現順位Rwを下げ続ける。そして、上記式1を満たした場合ステップS3204:Yes、コンピュータ1100は、基礎単語のマップ割当数NwをNw=Rw-1とするステップS3206。ここで、マップ割当数Nwとは、マップ作成処理ステップS3205で生成される基礎単語出現マップに割り当てられる基礎単語数であり、基礎単語出現マップのレコード数行数を意味する。また、コンピュータ1100は、単一文字の出現順位RcをRc=1としステップS3207、出現順位Rcまでの累積出現回数Arcを計数するステップS3208。そして、コンピュータ1100は、下記式2を満たすか否かを判断するステップS3209。Arc>Pc×Ac2Acは集計された単一文字の総出現回数である。上記2式を満たさない場合ステップS3209:No、コンピュータ1100は、出現順位RcをインクリメントしてステップS3210、ステップS3208に戻る。すなわち、上記式2を満たすまで出現順位Rcを下げ続ける。そして、上記式2を満たした場合ステップS3209:Yes、コンピュータ1100は、単一文字のマップ割当数NcをNc=Rc-1とするステップS3211。ここで、マップ割当数Ncとは、マップ作成処理ステップS2505で生成される特定単一文字出現マップに割り当てられる特定単一文字数であり、特定単一文字出現マップのレコード数行数を意味する。この後、再集計処理ステップS2503に移行して、マップ割当数決定処理ステップS2502を終了する。このマップ割当数決定処理ステップS2502によれば、マップ作成処理ステップS2505において目標出現率Pwに応じた数の基礎単語分について基礎単語出現マップを生成することができる。したがって、すべての基礎単語についてマップ割当をおこなう必要はなく、目標出現率Pwにしたがって決められるため、マップサイズの最適化を図ることができる。また、単一文字についても、マップ作成処理ステップS2505において目標出現率Pcに応じた数の単一文字分について特定単一文字の圧縮符号マップMを生成することができる。したがって、すべての単一文字についてマップ割当をおこなう必要はなく、目標出現率Pcにしたがって決められるため、マップサイズの最適化を図ることができる。再集計処理ステップS2503図33は、図25に示した再集計処理ステップS2503の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、ファイル番号iをi=1に設定しステップS3301、対象ファイルFiを読み込むステップS3302。そして、コンピュータ1100は、対象ファイルFiの再集計処理を実行するステップS3303。対象ファイルFiの再集計処理ステップS3303の詳細については、図33で説明する。このあと、コンピュータ1100は、ファイル番号iがi>nnは対象ファイルF1~Fnの総数であるか否かを判断するステップS3304。i>nでない場合ステップS3304:No、コンピュータ1100は、iをインクリメントしステップS3305、ステップS3302に戻る。一方、i>nである場合ステップS3304:Yes、コンピュータ1100は、図25に示したハフマン木生成処理ステップS3204に移行して、再集計処理ステップS3203を終了する。この再集計処理ステップS3203によれば、対象ファイルFiごとに対象ファイルFiの再集計処理ステップS3303を実行することができる。対象ファイルFiの再集計処理ステップS3303図34は、対象ファイルFiの再集計処理ステップS3303の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、対象文字を対象ファイルFiの先頭文字としステップS3401、対象文字が特定単一文字であるか否かを判断するステップS3402。特定単一文字である場合ステップS3402:Yes、分割せずにステップS3404に移行する。一方、特定単一文字でない場合ステップS3402:No、コンピュータ1100は、対象文字の文字コードを上位分割文字コードと下位分割文字コードとに分割するステップS3403。そして、ステップS3404に移行する。ステップS3404では、コンピュータ1100は、上位分割文字コード出現頻度集計テーブルに対し、ステップS3403で得られた上位分割文字コードと同一分割文字コードの出現回数を1加算するステップS3404。図35は、上位分割文字コード出現頻度集計テーブルを示す説明図である。上位分割文字コード出現頻度集計テーブル3500は、RAM903や磁気ディスク905などの記憶装置に記憶されており、該当する上位分割文字コードが出現する都度出現回数を1ずつ増加させる。また、図34において、コンピュータ1100は、下位分割文字コード出現頻度集計テーブルに対し、ステップS3403で得られた下位分割文字コードと同一分割文字コードの出現回数を1加算するステップS3405。図36は、下位分割文字コード出現頻度集計テーブルを示す説明図である。下位分割文字コード出現頻度集計テーブル3600は、RAM903や磁気ディスク905などの記憶装置に記憶されており、該当する下位分割文字コードが出現する都度出現回数を1ずつ増加させる。また、図34において、コンピュータ1100は、2グラム文字列特定処理を実行するステップS3406。2グラム文字列特定処理ステップS3406では、対象文字を基点とする2グラム文字列を特定する。2グラム文字列特定処理ステップS3406の詳細は図37で説明する。コンピュータ1100は、2グラム文字列出現頻度集計テーブルに対し、2グラム文字列特定処理ステップS3406で特定された2グラム文字列の出現回数を1加算するステップS3407。図37は、図34で示した2グラム文字列特定処理ステップS3406の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、対象文字に対し、対象文字は分割されたか否かを判断するステップS3701。すなわち、コンピュータ1100は、対象文字が分割文字コードか否かを判断する。分割されていない場合ステップS3701:No、すなわち、単一文字の場合、コンピュータ1100は、1つ前の文字があるか否かを判断するステップS3702。1つ前の文字がある場合ステップS3702:Yes、コンピュータ1100は、1つ前の文字は分割されたか否かを判断するステップS3703。すなわち、コンピュータ1100は、1つ前の文字が分割文字コードか否かを判断する。分割されていない場合ステップS3703:No、すなわち、単一文字の場合、コンピュータ1100は、対象文字の1つ前の単一文字と対象文字単一文字からなる文字列を、2グラム文字列に決定するステップS3704。そして、ステップS3407に移行する。一方、ステップS3703において、1つ前の文字が分割された場合ステップS3703:Yes、すなわち、分割文字コードである場合、その1つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、コンピュータ1100は、1つ前の文字である下位分割文字コードと対象文字からなる文字列を、2グラム文字列に決定するステップS3705。そして、ステップS3407に移行する。また、ステップS3702において、1つ前の文字がない場合ステップS3702:No、対象文字だけとなるため、2グラム文字列を決定せずに、ステップS3407に移行する。また、ステップS3701において、対象文字が分割された場合ステップS3701:Yes、すなわち、分割文字コードである場合、コンピュータ1100は、その分割文字コードが上位分割文字コードか下位分割文字コードであるかを判断するステップS3706。上位分割文字コードである場合ステップS3706:上位、コンピュータ1100は、1つ前の文字は分割されたか否かを判断するステップS3707。すなわち、1つ前の文字が分割文字コードか否かを判断する。分割されていない場合ステップS3707:No、すなわち、単一文字の場合、コンピュータ1100は、対象文字の1つ前の単一文字と対象文字から分割された上位分割文字コードからなる文字列を、2グラム文字列に決定するステップS3708。そして、ステップS3407に移行する。一方、ステップS3707において、1つ前の文字が分割された場合ステップS3707:Yes、すなわち、分割文字コードである場合、その1つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、コンピュータ1100は、1つ前の文字である下位分割文字コードと対象文字から分割された上位分割文字コードからなる文字列を、2グラム文字列に決定するステップS3709。そして、ステップS3407に移行する。また、ステップS3706において、下位分割文字コードである場合ステップS3706:下位、コンピュータ1100は、対象文字から分割された上位分割文字コードおよび下位分割文字コードからなる文字列を、2グラム文字列に決定するステップS3710。そして、ステップS3407に移行する。この2グラム文字列特定処理ステップS3406によれば、対象文字が分割された場合であっても2グラム文字列を特定することができる。また、1文字シフトにしたがって2グラム文字列を特定するため、基礎単語の圧縮符号マップMおよび特定単一文字の圧縮符号マップMと同時並行で生成することができる。このように、上述した情報生成によれば、目標出現率Pw,Pcにより、マップ作成される基礎単語数および単一文字数が制限されるため、無駄なマップ作成がなくなり、マップ作成の高速化およびマップサイズの最適化を同時に実現することができる。また、1文字シフトにより複数種類のマップ作成を同時並行で実行することができ、高精度な検索に用いる複数種類のマップ作成の効率化を図ることができる。図38は、2グラム文字列出現頻度集計テーブルを示す説明図である。2グラム文字列出現頻度集計テーブル3800は、RAM903や磁気ディスク905などの記憶装置に記憶されており、該当する2グラム文字列が出現する都度出現回数を1ずつ増加させる。このあと、コンピュータ1100は、対象文字の後続文字が対象ファイルFi内にあるか否かを判断しステップS3408、後続文字がある場合ステップS3408:Yes、後続文字を対象文字に設定しステップS3409、ステップS3402に戻る。一方、後続文字がない場合ステップS3408:No、対象ファイルFiの再集計処理ステップS3303を終了して、ステップS3304に移行する。これにより、対象ファイルFiごとに、対象ファイルFi内に存在する上位分割文字コード、下位分割文字コード、および2グラム文字列の出現回数を集計することができる。ハフマン木生成処理ステップS2504図39は、図25に示したハフマン木生成処理ステップS2504の詳細な処理手順例を示すフローチャートである。図39において、コンピュータ1100は、圧縮符号長の上限長Nを決定するステップS3901。つぎに、コンピュータ1100は、補正処理を実行するステップS3902。ここで、補正処理とは、図15~図17で説明したように、文字情報ごとの生起確率および圧縮符号長を、圧縮符号長の上限長Nを用いて補正する処理である。つぎに、コンピュータ1100は、文字情報ごとに葉の構造体を生成するステップS3903。そして、コンピュータ1100は、枝数特定処理を実行するステップS3904。枝数特定処理ステップS3904では、圧縮符号長ごとの葉当たりの枝数を特定する。枝数特定処理ステップS3904の詳細は図40で説明する。そして、コンピュータ1100は、構築処理を実行するステップS3905。枝数特定処理ステップS3904により葉の構造体ごとの枝数が特定されるため、まず、コンピュータ1100は、葉の構造体ごとに、枝数分の葉へのポインタ群を生成する。そして、生成された各葉の構造体についての葉へのポインタ群を集約して根の構造体とする。これにより、2N分枝無節点ハフマン木Hが生成されることとなる。なお、生成された2N分枝無節点ハフマン木Hは、コンピュータ1100内の記憶装置RAM903や磁気ディスク905などに格納される。このあと、図25のマップ作成処理ステップS2505に移行する。図40は、図39に示した枝数特定処理ステップS3904の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、最大圧縮符号長CLmax=Nと最小圧縮符号長CLmin=Mとの差分D=N-Mを算出するステップS4001。たとえば、N=11の場合、図26を参照すると、M=6である。したがって、D=5である。つぎに、コンピュータ1100は、2のべき数の変数jをj=0とし、圧縮符号長の変数CLをCL=NとするステップS4002。そして、コンピュータ1100は、j>Dであるか否かを判断するステップS4003。j>Dでない場合ステップS4003:No、コンピュータ1100は、圧縮符号長CLの葉当たりの枝数bCLを算出するステップS4004。圧縮符号長CLの葉当たりの枝数bCLは、bCL=2jで算出される。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの葉当たりの枝数b11は、b11=2j=20=1となる。つぎに、コンピュータ1100は、圧縮符号長CLの総枝数BLを算出するステップS4005。圧縮符号長CLの総枝数BLは、BL=LCL×bCLで算出される。LCLは、圧縮符号長CLでの葉数文字情報の種類数である。たとえば、j=0のとき、圧縮符号長CL=N=11であるため、圧縮符号長11ビットでの総枝数BLは、1216×20=1216となる。このあと、コンピュータ1100は、jをインクリメントし、圧縮符号長CLをデクリメントしてステップS4006、ステップS4003に戻り、インクリメント後のjがj>Dであるか否かが判断される。なお、N=11の場合は、j=Dになるとj=D=5となり、CL=M=6となる。したがって、ステップS4004では、圧縮符号長CL5ビットの葉当たりの枝数b6は、b6=26=64となる。同様に、総枝数BLは、B6=0×26=0となる。そして、j>Dである場合ステップS4003:Yes、構築処理ステップS3905に移行する。図41は、図39に示した構築処理ステップS3905の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、圧縮符号長CLをCL=CLmin=MとするステップS4101。つぎに、コンピュータ1100は、圧縮符号長CLでの未選択の葉があるか否かを判断するステップS4102。未選択の葉がある場合ステップS4102:Yes、コンピュータ1100は、葉へのポインタ生成処理ステップS4103を実行して、ステップS4102に戻る。葉へのポインタ生成処理ステップS4103では、葉の構造体ごとに、圧縮符号長CLに応じた枝数分の葉へのポインタ群を生成する。なお、葉へのポインタ生成処理ステップS4103の詳細は図42で説明する。一方、ステップS4102において、未選択の葉がない場合ステップS4102:No、コンピュータ1100は、CL>Nであるか否かを判断するステップS4104。CL>Nでない場合ステップS4104:No、コンピュータ1100は、CLをインクリメントしてステップS4105、ステップS4102に戻る。一方、CL>Nである場合ステップS4104:Yes、2N分枝無節点ハフマン木Hが構築されたこととなり、ステップS2505に移行することとなる。なお、第1領域~第5領域内の情報は、この構築処理ステップS3905において格納されることとなる。図42は、図41に示した葉へのポインタ生成処理ステップS4103の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、未選択の葉Lを選択しステップS4201、選択葉へのポインタ数kをk=1に設定するステップS4202。そして、コンピュータ1100は、選択葉へのポインタPLkの先行ビット列を、選択葉の圧縮符号に設定するステップS4203。たとえば、上限長N=11については、選択葉が、文字情報0の葉の構造体である場合、圧縮符号は000000である。したがって、選択葉へのポインタPLkの先行ビット列も、000000となる。つぎに、コンピュータ1100は、選択葉へのポインタPLkの後続ビット列のビット長を、最大圧縮符号長Nから選択葉の圧縮符号長CLを引いた差分とし、後続ビット列の初期値をオール0に設定するステップS4204。たとえば、選択葉が、文字情報0の葉の構造体である場合、圧縮符号長CLは6ビットであるため、後続ビット列のビット長は5ビット=11-6となる。k=1の場合は、後続ビット列はオール0となるため、後続ビット列は、5ビットの00000となる。そして、コンピュータ1100は、選択葉へのポインタPLkを根の構造体に格納するステップS4205。このあと、コンピュータ1100は、k>bCLであるか否かを判断するステップS4206。bCLは、選択葉の圧縮符号長CLの葉当たりの枝数である。k>bCLでない場合ステップS4206:No、選択葉に割り当てられたすべての枝について葉へのポインタが生成されていないため、コンピュータ1100は、kをインクリメントするステップS4207。そして、コンピュータ1100は、現在の後続ビット列をインクリメントして、インクリメント後の後続ビット列を先行ビット列の末端に連結することで、あらたに、選択葉へのポインタPLkを生成するステップS4208。そして、コンピュータ1100は、選択葉へのポインタPLkを根の構造体に格納しステップS4209、ステップS4206に戻る。ステップS4206~ステップS4209を繰り返すことで、葉当たりの枝数分の葉へのポインタ群が生成されることとなる。そして、ステップS4206において、k>bCLである場合ステップS4206:Yes、ステップS4102に移行する。このように、対象ファイル群Fsに出現する文字情報の種類数に応じて、2N分枝無節点ハフマン木Hの最大枝数2Nを最適な本数に設定することができるため、2N分枝無節点ハフマン木Hのサイズの適正化を図ることができる。また、本実施の形態によれば、上限長Nが2~4の整数倍でない場合たとえば、上限長N=11,13であっても、圧縮効率のよい2N分枝無節点ハフマン木Hを生成することができる。このあと、コンピュータ1100は、2N分枝無節点ハフマン木Hの各葉の構造体と、基礎単語の構造体,特定文字コードの構造体,分割文字コードの構造体とを、図17の文字情報テーブルを参照して、相互に関連付ける。具体的には、上述したように、葉の構造体には、当該葉に格納されている圧縮符号に対応する特定文字、分割文字コードおよび葉へのポインタや基礎単語へのポインタを格納する。また、コンピュータ1100は、基礎単語の構造体の基礎単語ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、コンピュータ1100は、特定文字コードの構造体の特定文字ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、コンピュータ1100は、分割文字コードの構造体の分割文字コードごとに、対応する圧縮符号を格納する葉へのポインタを格納する。マップ作成処理ステップS2505図43は、図25に示したマップ作成処理ステップS2505の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、ファイル番号iをi=1に設定しステップS4301、対象ファイルFiを読み込むステップS4302。そして、コンピュータ1100は、対象ファイルFiのマップ作成処理を実行するステップS4303。対象ファイルFiのマップ作成処理ステップS4303の詳細は、図44で説明する。このあと、コンピュータ1100は、ファイル番号iがi>ααは対象ファイルFsのファイル総数であるか否かを判断するステップS4304。i>αでない場合ステップS4304:No、コンピュータ1100は、iをインクリメントしステップS4305、ステップS4302に戻る。一方、i>αである場合ステップS4304:Yes、マップ作成処理ステップS2505が終了する。このマップ作成処理ステップS2505によれば、対象ファイルFiごとに対象ファイルFiのマップ作成処理ステップS4303を実行することができる。図44は、図43に示した対象ファイルFiのマップ作成処理ステップS4303の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、対象文字を対象ファイルFiの先頭文字としステップS4401、基礎単語出現マップ作成処理ステップS4402、特定単一文字出現マップ作成処理ステップS4403、2グラム文字列出現マップ作成処理ステップS4404を実行する。基礎単語出現マップ作成処理ステップS4402の詳細は図45で説明する。また、特定単一文字出現マップ作成処理ステップS4403の詳細は図46で説明する。さらに、2グラム文字列出現マップ作成処理ステップS4404の詳細は図48で説明する。このあと、コンピュータ1100は、対象文字が対象ファイルFiの末尾文字であるか否かを判断するステップS4405。対象文字が対象ファイルFiの末尾文字でない場合ステップS4405:No、コンピュータ1100は、対象文字を末尾方向へ1文字シフトしステップS4406、ステップS4402に戻る。一方、対象文字が対象ファイルFiの末尾文字である場合ステップS4405:Yes、ステップS4304に移行して、対象ファイルFiのマップ作成処理ステップS4303を終了する。この対象ファイルFiのマップ作成処理ステップS4303によれば、基礎単語出現マップ、特定単一文字出現マップおよび2グラム文字列出現マップを、対象文字を1文字ずつシフトしながら、同時並行で生成することができる。図45は、図44で示した基礎単語出現マップ作成処理ステップS4402の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、対象文字について最長一致検索処理を実行するステップS4501。最長一致検索処理ステップS4501の詳細な処理手順は、図31に示した最長一致検索処理ステップS2901と同一処理内容であるため説明を省略する。そして、コンピュータ1100は、最長一致した基礎単語、すなわち、基礎単語があるか否かを判断するステップS4502。最長一致した基礎単語がない場合ステップS4502:No、特定単一文字出現マップ作成処理ステップS4403に移行する。一方、最長一致した基礎単語がある場合ステップS4502:Yes、コンピュータ1100は、その最長一致した基礎単語について、基礎単語出現マップが設定済みであるか否かを判断するステップS4503。設定済みである場合ステップS4503:Yes、ステップS4506に移行する。一方、設定済みでない場合ステップS4503:No、コンピュータ1100は、2N分枝無節点ハフマン木Hにおける最長一致した基礎単語の葉にアクセスして、その圧縮符号を取得するステップS4504。そして、コンピュータ1100は、取得した圧縮符号を、最長一致した基礎単語についての基礎単語出現マップへのポインタに設定してステップS4505、ステップS4506に移行する。このあと、ステップS4506では、コンピュータ1100は、最長一致した基礎単語についての基礎単語出現マップの対象ファイルFiのビットをONにするステップS4506。これにより、基礎単語出現マップ作成処理ステップS4402を終了し、特定単一文字出現マップ作成処理ステップS4403に移行する。この基礎単語出現マップ作成処理ステップS4402によれば、対象文字ごとに最長一致した基礎単語を基礎単語としてマップ作成することができる。図46は、図44で示した特定単一文字出現マップ作成処理ステップS4403の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、特定単一文字の構造体に対して対象文字の2分探索をおこないステップS4601、一致したか否かを判断するステップS4602。一致する単一文字がなかった場合ステップS4602:No、コンピュータ1100は、分割文字コード出現マップ作成処理を実行してステップS4603、2グラム文字列出現マップ作成処理ステップS4404に移行する。分割文字コード出現マップ作成処理ステップS4603の詳細は図47で説明する。一方、ステップS4602において、2分探索により対象文字と一致する単一文字があった場合ステップS4602:Yes、コンピュータ1100は、2N分枝無節点ハフマン木Hにおける2分探索された単一文字の葉にアクセスして、その圧縮符号を取得するステップS4604。そして、コンピュータ1100は、その取得された圧縮符号について、特定単一文字出現マップが設定済みであるか否かを判断するステップS4605。設定済みである場合ステップS4605:Yes、ステップS4607に移行する。一方、設定済みでない場合ステップS4605:No、コンピュータ1100は、取得した圧縮符号を、2分探索された単一文字についての特定単一文字出現マップへのポインタに設定してステップS4606、ステップS4607に移行する。このあと、ステップS4607では、2分探索された単一文字についての特定単一文字出現マップの対象ファイルFiのビットをONにするステップS4607。これにより、特定単一文字出現マップ作成処理ステップS4403を終了し、2グラム文字列出現マップ作成処理ステップS4404に移行する。この特定単一文字出現マップ作成処理ステップS4403によれば、2分探索された対象文字を特定単一文字としてマップ作成することができる。図47は、図46で示した分割文字コード出現マップ作成処理ステップS4603の詳細な処理手順例を示すフローチャートである。まず、コンピュータ1100は、対象文字を分割しステップS4701、2N分枝無節点ハフマン木Hにおける上位分割文字コードの葉にアクセスして、圧縮符号を取得するステップS4702。そして、コンピュータ1100は、その取得された圧縮符号について、上位分割文字コード出現マップが設定済みであるか否かを判断するステップS4703。設定済みである場合ステップS4703:Yes、ステップS4705に移行する。一方、設定済みでない場合ステップS4703:No、コンピュータ1100は、取得した圧縮符号を、上位分割文字コードの出現マップへのポインタに設定してステップS4704、ステップS4705に移行する。このあと、ステップS4705では、コンピュータ1100は、対象文字から分割された上位分割文字コードの出現マップの対象ファイルFiのビットをONにするステップS4705。また、コンピュータ1100は、2N分枝無節点ハフマン木Hにおける下位分割文字コードの葉にアクセスして、圧縮符号を取得するステップS4706。そして、コンピュータ1100は、その取得された圧縮符号について、下位分割文字コードの出現マップが設定済みであるか否かを判断するステップS4707。設定済みである場合ステップS4707:Yes、ステップS4709に移行する。一方、設定済みでない場合ステップS4707:No、コンピュータ1100は、取得した圧縮符号を、下位分割文字コードの出現マップへのポインタに設定してステップS4708、ステップS4709に移行する。このあと、ステップS4709では、コンピュータ1100は、対象文字から分割された下位分割文字コードの出現マップの対象ファイルFiのビットをONにするステップS4709。これにより、分割文字コード出現マップ作成処理ステップS4603を終了し、2グラム文字列出現マップ作成処理ステップS4404に移行する。この分割文字コード出現マップ作成処理ステップS4603によれば、目標出現率Pcに応じた順位よりも下位の単一文字については、出現頻度が低いため、OFFのビットが多数出現することとなる。しかしながら、目標出現率Pcに応じた順位よりも下位の単一文字については特定単一文字の出現マップの生成対象外とすることで、特定単一文字の圧縮符号マップMsのマップサイズの最適化を図ることができる。また、分割することで、目標出現率Pcに応じた順位よりも下位の単一文字については、上位分割文字コードの圧縮符号マップMsおよび下位分割文字コードの圧縮符号マップMsといったマップサイズが固定化されたマップに設定される。したがって、目標出現率Pcをどのような出現率に設定しても、マップサイズの増大化を防止でき、省メモリ化を図ることができる。図48は、図44に示した2グラム文字列マップ作成処理ステップS4404の詳細な処理手順例を示すフローチャートである。図48において、まず、コンピュータ1100は、2グラム文字列特定処理を実行するステップS4801。2グラム文字列特定処理ステップS4801の詳細な処理手順は、図37に示した2グラム文字列特定処理ステップS4806と同一処理内容であるため説明を省略する。つぎに、コンピュータ1100は、2グラム文字列特定処理ステップS4801により2グラム文字列が特定されたか否かを判断するステップS4802。特定されなかった場合ステップS4802:No、図44のステップS4405に移行する。一方、特定された場合ステップS4802:Yes、コンピュータ1100は、2グラム文字列出現マップ生成処理を実行してステップS4803、ステップS4405に移行する。図49は、2グラム文字列出現マップ生成処理ステップS4803の詳細な処理手順例を示すフローチャートである。図49において、まず、コンピュータ1100は、図48の2グラム文字列特定処理ステップS4801で特定された2グラム文字列の第1グラム特定単一文字または分割文字コードについて、2N分枝無節点ハフマン木Hの葉にアクセスして、圧縮符号を取得するステップS4901。同様に、コンピュータ1100は、第2グラム特定単一文字または分割文字コードについて、2N分枝無節点ハフマン木Hの葉にアクセスして、圧縮符号を取得するステップS4902。そして、コンピュータ1100は、第1グラムの圧縮符号と第2グラムの圧縮符号を連結するステップS4903。そして、コンピュータ1100は、連結圧縮符号をポインタとする出現マップが設定済みであるか否かを判断するステップS4904。設定済みである場合ステップS4904:Yes、ステップS4906に移行する。一方、設定済みでない場合ステップS4904:No、コンピュータ1100は、連結圧縮符号を、特定された2グラム文字列の出現マップへのポインタに設定するステップS4905。このあと、ステップS4906では、コンピュータ1100は、特定された2グラム文字列の出現マップの対象ファイルFiのビットをONにするステップS4906。これにより、2グラム文字列出現マップ生成処理ステップS4803を終了し、ステップS4405に移行する。この2グラム文字列出現マップ生成処理ステップS4803によれば、2グラム文字列の連結圧縮符号により、2グラム文字列の出現マップを直接指定することができる。<圧縮処理の具体例>つぎに、対象ファイルFiの圧縮処理の具体例について説明する。上述のように、圧縮符号マップMsを生成した場合は、検索文字列を圧縮した圧縮符号列により圧縮符号マップMs内の出現マップをポイントすることが可能となる。以下、圧縮処理の具体例について説明する。図50は、2N分枝無節点ハフマン木Hを用いた圧縮処理の具体例を示す説明図である。まず、コンピュータ1100は、対象ファイル群Fsから1文字目の圧縮対象文字コードを取得し、対象ファイルFi上の位置を保持しておく。そして、コンピュータ1100は、基礎単語の構造体2300に対して2分木探索をおこなう。基礎単語は2文字以上の文字コード列であるため、1文字目の圧縮対象文字コードがヒットした場合、2文字目の文字コードを圧縮対象文字コードとして取得する。そして、2文字目の文字コードは、1文字目の圧縮対象文字コードがヒットした位置から探索する。3文字目以降も、不一致の圧縮対象文字コードが出現するまで繰り返し2分木探索をおこなう。一致する基礎単語raaは葉の番号が探索された場合、基礎単語の構造体2300において対応付けされている葉Laへのポインタにより葉Laの構造体にアクセスする。そして、コンピュータ1100は、アクセス先の葉Laの構造体に格納されている基礎単語raの圧縮符号を探索して、圧縮バッファ5000に格納する。一方、不一致の圧縮文字コードが出現した場合、基礎単語の構造体2300に対する2分木探索を終了するEOTEndOfTransmissionまで進む。そして、コンピュータ1100は、1文字目の圧縮対象文字コードを再度レジスタにセットして、特定単一文字の構造体2100に対する2分木探索をおこなう。一致する文字コードebbは葉の番号が探索された場合、コンピュータ1100は、その葉Lbへのポインタにより葉Lbの構造体にアクセスする。そして、コンピュータ1100は、アクセス先の葉Lbの構造体に格納されている文字コードebの圧縮符号を探索して、圧縮バッファ5000に格納する。一方、一致する文字コードが出現せず2分木探索を終了した場合、圧縮対象文字コードは特定単一文字コードではないため、コンピュータ1100は、上位8ビットと下位8ビットに分割する。そして、コンピュータ1100は、上位8ビットの分割文字コードについて、分割文字コードの構造体2200に対する2分木探索をおこなう。一致する分割文字コードDc1c1は葉の番号が探索された場合、コンピュータ1100は、その葉Lc1へのポインタにより葉Lc1の構造体にアクセスする。そして、コンピュータ1100は、アクセス先の葉Lc1の構造体に格納されている分割文字コードDc1の圧縮符号を探索して、圧縮バッファ5000に格納する。引き続き、コンピュータ1100は、下位8ビットの分割文字コードについて、分割文字コードの構造体に対する2分木探索をおこなう。一致する分割文字コードDc2c2は葉の番号が探索された場合、コンピュータ1100は、その葉Lc2へのポインタにより葉Lc2の構造体にアクセスする。そして、コンピュータ1100は、アクセス先の葉Lc2の構造体に格納されている分割文字コードDc2の圧縮符号を探索して、圧縮バッファ5000に格納する。これにより、対象ファイルFiが圧縮されることとなる。<対象ファイル群Fsの圧縮処理>つぎに、第1圧縮部1103による対象ファイル群Fsの圧縮処理の処理手順について説明する。図51は、第1圧縮部1103による2N分枝無節点ハフマン木Hを用いた対象ファイル群Fsの圧縮処理手順例を示すフローチャートである。まず、コンピュータ1100は、ファイル番号:pをp=1としステップS5101、対象ファイルFpを読み込むステップS5102。つぎに、コンピュータ1100は、圧縮処理を実行してステップS5103、ファイル番号:pをインクリメントするステップS5104。圧縮処理ステップS5103の詳細は図52で説明する。そして、コンピュータ1100は、p>αであるか否かを判断するステップS5105。αは対象ファイル群Fsのファイル総数である。p>αでない場合ステップS5105:No、ステップS5102に戻る。一方、p>αである場合ステップS5105:Yes、対象ファイル群Fsの圧縮処理を終了する。図52は、図51に示した圧縮処理ステップS5103の詳細な処理手順を示すフローチャートその1である。図52において、まず、コンピュータ1100は、対象ファイル群Fsに圧縮対象文字コードがあるか否かを判断するステップS5201。ある場合ステップS5201:Yes、コンピュータ1100は、圧縮対象文字コードを取得してレジスタにセットするステップS5202。そして、コンピュータ1100は、先頭の圧縮対象文字コードか否かを判断するステップS5203。ここで、先頭の圧縮対象文字コードとは、未圧縮の1文字目の文字コードをいう。先頭である場合ステップS5203:Yes、コンピュータ1100は、その圧縮対象文字コードの対象ファイル群Fs上の位置先頭位置となるポインタを取得しステップS5204、ステップS5205に移行する。一方、先頭でない場合ステップS5203:No、先頭位置を取得せずにステップS5205に移行する。そして、コンピュータ1100は、基礎単語の構造体2300に対して2分木探索をおこなうステップS5205。圧縮対象文字コードが一致した場合ステップS5206:Yes、コンピュータ1100は、連続して一致した文字コード列が基礎単語の文字コード列に該当するか否かを判断するステップS5207。該当しない場合ステップS5207:No、コンピュータ1100は、ステップS5202に戻って後続の文字コードを圧縮対象文字コードとして取得する。この場合、後続の文字コードは先頭ではないため、先頭位置は取得しないこととなる。一方、ステップS5207において、基礎単語に該当する場合ステップS5207:Yes、コンピュータ1100は、該当する基礎単語の葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS5208。そして、コンピュータ1100は、ポイントされた葉L♯の構造体に格納されている基礎単語の圧縮符号を抽出するステップS5209。この後、コンピュータ1100は、抽出された圧縮符号を圧縮バッファ5000に格納してステップS5210、ステップS5201に戻る。このループが基礎単語の圧縮処理の流れとなる。ステップS5201において、圧縮対象文字コードがない場合ステップS5201:No、コンピュータ1100は、対象ファイルFpから圧縮された圧縮ファイルfpを圧縮バッファ5000からファイル出力して保存するステップS5211。そして、ステップS5104に移行する。一方、ステップS5206において不一致となった場合ステップS5206:No、16ビットの文字コードの圧縮処理のループに入る。図53は、図51に示した圧縮処理ステップS5103の詳細な処理手順を示すフローチャートその2である。図53において、コンピュータ1100は、ステップS5204で取得された先頭位置のポインタを参照して、対象ファイル群Fsから圧縮対象文字コードを取得してレジスタにセットするステップS5301。つぎに、コンピュータ1100は、圧縮対象文字コードについて、特定単一文字の構造体2100に対して2分木探索をおこなうステップS5302。一致した場合ステップS5303:Yes、コンピュータ1100は、該当する文字の葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS5304。そして、コンピュータ1100は、ポイントされた葉L♯の構造体に格納されている圧縮対象文字コードの圧縮符号を抽出するステップS5305。この後、コンピュータ1100は、探索された圧縮符号を圧縮バッファ5000に格納してステップS5306、ステップS5201に戻る。このループが16ビットの文字コードの圧縮処理の流れとなる。一方、ステップS5303において一致する文字コードが存在しなかった場合ステップS5303:No、分割文字コードの圧縮処理のループに入る。図54は、図51に示した圧縮処理ステップS5103の詳細な処理手順を示すフローチャートその3である。図54において、まず、コンピュータ1100は、圧縮対象文字コードを上位8ビットと下位8ビットとに分割しステップS5401、上位8ビットの分割文字コードを抽出するステップS5402。そして、コンピュータ1100は、分割文字コードの構造体2200に対して2分木探索をおこなうステップS5403。そして、コンピュータ1100は、探索された分割文字コードの葉L♯へのポインタにより葉L♯の構造体にアクセスするステップS5404。そして、コンピュータ1100は、ポイントされた葉L♯の構造体に格納されている分割文字コードの圧縮符号を抽出するステップS5405。この後、コンピュータ1100は、探索された圧縮符号を圧縮バッファ5000に格納するステップS5406。つぎに、コンピュータ1100は、下位8ビットが探索済みか否かを判断しステップS5407、探索済みでない場合ステップS5407:No、コンピュータ1100は、下位8ビットの分割文字コードを抽出してステップS5408、ステップS5403~S5406を実行する。一方、下位8ビットが探索済みである場合ステップS5407:Yes、ステップS5301に戻り、基礎単語の圧縮処理のループに入る。このように、2N分枝無節点ハフマン木Hを用いた圧縮処理では、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉L♯の構造体に格納されている文字情報を抽出して、圧縮バッファ5000に書き込むだけでよい。したがって、圧縮処理の高速化を図ることができる。また、圧縮対象文字コードが格納されている葉L♯の構造体を、基礎単語の構造体、特定単一文字コードの構造体および分割文字コードの構造体により即座に特定することができる。したがって、2N分枝無節点ハフマン木Hの葉を探索する必要がなく、圧縮処理の高速化を図ることができる。また、低位文字コードを上位ビットコードと下位ビットコードに分割することで、非特定単一文字を256種の分割文字コードの圧縮符号に圧縮することができる。したがって、圧縮率の向上を図ることができる。<マップ圧縮の具体例>つぎに、第2圧縮部1106による圧縮符号マップMs内の各出現マップのマップ圧縮の具体例について説明する。第2圧縮部1106は、圧縮領域内の出現マップを圧縮し、非圧縮領域の出現マップは圧縮しない。圧縮領域とは、ファイル番号1~αまで採番されている場合に、n×α/nの商となるファイル番号までの出現マップのビット列である。たとえば、n=256ビットであり、現在の対象ファイル数α=600である場合、α/nの商は2となるため、ファイル番号1~2nまでの出現マップのビット列が圧縮領域となる。そして、ファイル番号2n1~αまでのビット列は非圧縮領域となり圧縮されない。また、出現マップのビット列は、ファイル総数αが増大することで、ビット列内の0が連続する箇所も多くなる。また、出現頻度が高い文字情報については、これとは逆に1が連続する箇所が多くなる。したがって、文字の出現率に応じた出現率領域を設定する。出現率領域とは、出現率の範囲である。出現率領域に応じて、出現マップ圧縮用のハフマン木hを割り当てることとする。図55は、出現率と出現率領域との関係を示す説明図である。出現率が0~100の範囲とすると、図55に示したように、A~E領域およびA ́~E ́領域に領域分割することができる。したがって、A~E領域およびA ́~E ́領域で特定された出現率領域に応じて、出現マップ圧縮用のハフマン木hを圧縮パターンとして割り当てる。図56は、出現率領域別の圧縮パターンを有する圧縮パターンテーブルを示す説明図である。出現率は、図20に示したように、葉Lの構造体の第5領域に格納されているため、葉Lの構造体が指定されることで、圧縮パターンテーブル5600を参照して、圧縮パターンが特定されることとなる。なお、A領域およびA ́領域は、非圧縮のため、圧縮パターンとなるハフマン木は存在しない。図57は、B領域およびB ́領域の場合の圧縮パターンを示す説明図である。圧縮パターン5700は、葉が16種のハフマン木hとなる。図58は、C領域およびC ́領域の場合の圧縮パターンを示す説明図である。圧縮パターン5800は、葉が16種1種のハフマン木hとなる。圧縮パターン5800では、B領域およびB ́領域に比べて、0が連続する箇所または1が連続する箇所が確率的に多くなる。したがって、16ビット連続して値が0であるビット列に、符号語00が割り当てられている。図59は、D領域およびD ́領域の場合の圧縮パターンを示す説明図である。圧縮パターン5900は、葉が16種1種のハフマン木となる。圧縮パターン5900では、C領域およびC ́領域に比べて、0が連続する箇所または1が連続する箇所が確率的に多くなる。したがって、32ビット連続して値が0であるビット列に、符号語00が割り当てられている。図60は、E領域およびE ́領域の場合の圧縮パターンを示す説明図である。圧縮パターン6000は、葉が16種1種のハフマン木となる。圧縮パターン6000では、D領域およびD ́領域に比べて、0が連続する箇所または1が連続する箇所が確率的に多くなる。したがって、64ビット連続して値が0であるビット列に、符号語00が割り当てられている。このように、出現率領域に応じて、文字コードが存在しないことを意味する0の連続数が増加するため、文字コードの出現率に応じて圧縮符号マップMsの圧縮効率の向上を図ることができる。圧縮符号マップ圧縮処理手順つぎに、圧縮符号マップ圧縮処理について説明する。圧縮符号マップ圧縮処理は、圧縮領域のビット列を圧縮する処理である。具体的には、図56に示した圧縮パターンテーブル5600と図57~図60に示した圧縮パターン5700~6000ハフマン木hを用いて、圧縮符号マップMsの圧縮領域のビット列を圧縮する。以下、圧縮符号マップ圧縮処理手順について説明する。図61は、圧縮符号マップ圧縮処理手順を示すフローチャートである。図61において、まず、コンピュータ1100は、圧縮符号マップMsにおいて、未選択の出現マップへのポインタがあるか否かを判断するステップS6101。未選択のアドレスがある場合ステップS6101:Yes、コンピュータ1100は、未選択のアドレスを選択して葉Lの構造体にアクセスしステップS6102、葉Lの構造体の第1領域の中から文字コードを取得するステップS6103。そして、コンピュータ1100は、アクセス先の葉Lの構造体の第5領域から出現率領域を取得することで、取得された文字コードの出現率領域を特定するステップS6104。このあと、コンピュータ1100は、図59の圧縮パターンテーブル5900を参照して、特定された出現率領域が非圧縮領域たとえば、出現率領域A、A ́であるか否かを判断するステップS6105。非圧縮領域である場合ステップS6105:Yes、ステップS6101に戻り、つぎのアドレスを選択する。一方、非圧縮領域でない場合ステップS6105:No、コンピュータ1100は、特定された出現率領域により、図57~図60に示した圧縮パターン5700~6000ハフマン木hの中から該当する圧縮パターンハフマン木hを選択するステップS6106。また、コンピュータ1100は、圧縮対象となる取得文字コードの出現マップにおける圧縮領域のビット列を抽出するステップS6107。そして、コンピュータ1100は、取得文字コードの出現率が50以上であるか否かを判断するステップS6108。出現率とは、上述したように、対象ファイル群Fs内の全ファイル数を母集団分母とし、当該文字情報が存在するファイル数を分子とした値である。出現率領域は、出現率に応じて決められているため図55を参照、出現率領域がA~Eである場合、取得文字コードの出現率が50以上でないと判断する。一方、出現率領域がA ́~E ́である場合、コンピュータ1100は、取得文字コードの出現率が50以上であると判断する。そして、出現率が50以上である場合ステップS6108:Yes、コンピュータ1100は、圧縮効率を上げるために、ステップS6107で抽出されたビット列を反転するステップS6109。たとえば、抽出されたビット列が1110である場合、0001にして、0の個数を増やす。そして、コンピュータ1100は、反転後のビット列を、ステップS6106で選択したハフマン木を用いて圧縮して、記憶装置たとえば、フラッシュメモリや磁気ディスク205に格納するステップS6110。そして、ステップS6101に戻る。このように、ビット列反転をおこなうことで、出現率領域A ́~E ́のハフマン木hを用意する必要がないため、省メモリ化を図ることができる。一方、ステップS6108において、出現率が50以上でない場合ステップS6108:No、コンピュータ1100は、ビット列反転ステップS6109をおこなうことなく、ステップS6107で抽出されたビット列を、ステップS6106で選択したハフマン木を用いて圧縮してステップS6110、ステップS6101に戻る。また、ステップS6101において、未選択のアドレスがない場合ステップS6101:No、圧縮符号マップ圧縮処理を終了する。このような圧縮符号マップ圧縮処理手順により、図3に示したように、文字情報ごとに圧縮領域内のビット列が、出現率に応じて圧縮される。このように、出現率領域に応じて、文字情報が存在しないことを意味する0の連続数が増加するため、文字情報の出現率に応じて圧縮符号マップMsの圧縮効率の向上を図ることができる。また、対象ファイルが後から追加されると、追加された対象ファイルを圧縮する際、圧縮符号マップMsにも文字の存否を示すビット列を追加する必要がある。圧縮前の圧縮符号マップMsでは、ファイル番号:1~αの出現マップのビット列については、圧縮パターン5700~6000により圧縮されてレコードごとに符号長が異なる。すなわち、可変長であるため圧縮領域となる。したがって、図3に示したように、圧縮符号列の先頭ファイル番号k側は整列するが末尾ファイル番号1側が整列しない。仮に、ビット列の並びを、ファイル番号:1~αの順に、圧縮符号マップMsへのポインタ文字情報の圧縮符号側から割り当てると、追加ファイルのビット列は、圧縮符号列の末尾側に挿入することとなり、圧縮符号列と追加ファイルのビット列とが非連続となってしまう。したがって、あらかじめ、圧縮符号マップMsの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Fsのファイル番号pの降順に配列しておく。そして、圧縮符号マップMsにおいて、出現マップへのポインタ文字情報の圧縮符号と圧縮領域との間に非圧縮領域を設定する。図3を例に挙げると、ファイル番号:1~2n1のうち圧縮符号列が整列する側にファイル番号:2n1のビットを割り当てる。これにより、ファイル番号;1~2nのビット列を圧縮した場合でも、非圧縮のファイル番号:2n1~3nのビット列を挿入しても、ファイル番号順にビット列を連続させることができる。これにより、ファイル番号;1~2nのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルの絞込みを正確に実行することができる。<機能的構成例2>図62は、本実施の形態にかかるコンピュータまたはコンピュータシステムの機能的構成例2を示すブロック図である。図62において、コンピュータ1100は、指定部6201と、第1伸長部6202と、第1圧縮部1103と、入力部6203と、抽出部6204と、第2伸長部6205と、特定部6206と、セグメント生成部6207と、を備える。指定部6201~セグメント生成部6207は、具体的には、たとえば、図9に示したROM902、RAM903、磁気ディスク905などの記憶装置に記憶されたプログラムをCPU901に実行させることによりその機能を実現する。なお、指定部6201~セグメント生成部6207は、それぞれ実行結果を記憶装置に書き込んだり、他の部の実行結果を読み出したりして、それぞれ演算を実行する。以下、指定部6201~セグメント生成部6207について簡単に説明する。指定部6201は、対象ファイル群Fs内のいずれかの対象ファイルのオープン指定を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、指定部6201は、対象ファイルFiのオープン指定を受け付ける。当該オープン指定が受け付けられると、圧縮符号マップMsにおいて、オープン指定された対象ファイルFiのファイル番号iに関連付けられている圧縮ファイルfiへのポインタが指定される。これにより、ポイント先となるアドレスに格納されている、オープン指定された対象ファイルFiの圧縮ファイルfiが読み出される。指定部6201による指定がマスタサーバにより実行された場合、指定された対象ファイルFiのファイル番号iを第0階層のセグメント数Kで割ったときの商に一致するセグメント番号のセグメントを特定する。これにより、特定されたセグメントから圧縮ファイルfiを指定することができる。また、指定部6201は、対象ファイルFiの追加指定を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、指定部6201は、対象ファイルFiの追加指定を受け付ける。当該追加指定が受け付けられると、追加指定された対象ファイルFiが第1圧縮部1103により2N分枝無節点ハフマン木Hで圧縮され、圧縮ファイルfiとして、第0階層の最後尾のセグメントに保存される。また、指定部6201は、セグメントの集約指定を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、指定部6201は、セグメントの集約指定を受け付ける。また、セグメントの集約指定は、タイマにより所定時刻または所定時間単位で受け付けてもよい。第1伸長部6202は、対象ファイルFiの圧縮ファイルfiを、2N分枝無節点ハフマン木Hで伸長する。具体的には、たとえば、第1伸長部6202は、指定部6201によってオープン指定された対象ファイルFiの圧縮ファイルfiを、2N分枝無節点ハフマン木Hで伸長する。また、後述する特定部6206で特定された対象ファイルFiについても2N分枝無節点ハフマン木Hで伸長する。伸長の具体例については後述する。入力部6203は、検索文字列の入力を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、入力部6203は、検索文字列の入力を受け付ける。また、入力部6203は、ネットワークを介してクライアント装置から検索文字列を受信することで、検索文字列の入力を受け付ける。抽出部6204は、入力部6203によって入力された検索文字列内の文字情報の圧縮符号を2N分枝無節点ハフマン木Hから抽出する。具体的には、たとえば、抽出部6204は、検索文字列から、特定単一文字、上位分割文字コード、下位分割文字コード、2グラム文字列、および基礎単語のうち該当する文字情報を抽出する。たとえば、検索文字列が人形である場合、特定単一文字人、形と、2グラム文字列人形が抽出される。これにより、抽出部6204は、抽出された文字情報の圧縮符号を2N分枝無節点ハフマン木Hで特定し、圧縮符号マップMsの該当する出現マップをポイントすることができる。たとえば、特定単一文字人の圧縮済みの出現マップと、形の圧縮済みの出現マップと、2グラム文字列人形の圧縮済みの出現マップとをポイントすることができる。図7に示したコンピュータシステムでは、マスタサーバMSが抽出部6204による文字情報の抽出をおこない、2N分枝無節点ハフマン木Hで抽出文字情報の圧縮符号を取得する。取得された圧縮符号は、出現マップへのポインタとなるため、スレーブサーバS1,S2,...に送信される。第2伸長部6205は、抽出部6204によって抽出された圧縮済みの出現マップを伸長する。具体的には、文字情報の出現率から出現率領域が特定できるため、第2伸長部6205は、特定された出現率領域に応じたマップ用のハフマン木により、圧縮済みの出現マップの圧縮領域を伸長する。たとえば、上記の例では、すべてのアーカイブファイル図7を参照において、特定単一文字人の圧縮済みの出現マップと、形の圧縮済みの出現マップと、2グラム文字列人形の圧縮済みの出現マップとが、伸長される。図7に示したコンピュータシステムでは、マスタサーバMSおよびスレーブサーバS1,S2,...の各々で、第2伸長部6205による伸長処理が実行されることになる。特定部6206は、第2伸長部6205による伸長後の出現マップ群および削除マップDのAND演算を実行することで、検索文字列内の文字情報を含む対象ファイルの圧縮ファイルを圧縮ファイル群から特定する。上記の例では、特定部6206は、特定単一文字人の圧縮済みの出現マップと、形の圧縮済みの出現マップと、2グラム文字列人形の圧縮済みの出現マップと、削除マップと、をAND演算する。このAND演算は、図8に示したように、最上位階層のセグメントから実行され、最終的に第0階層のセグメントに絞り込まれ、絞り込まれた第0階層のセグメントでAND演算が実行される。なお、図8では簡略化のため、2グラム文字列人形の圧縮済みの出現マップは省略されている。図7に示したコンピュータシステムでは、マスタサーバMSは、最上位階層から第1階層のセグメントについて特定部6206による絞込みをおこない、検索文字列を含む対象ファイルのファイル番号を、当該ファイル番号を管理するスレーブサーバに送信する。ファイル番号を受信したスレーブサーバは、特定部6206による特定処理により、出現マップおよび削除マップでAND演算することで、圧縮ファイルを絞り込むことになる。これにより、図8に示したように、ファイル番号3,19の圧縮ファイルf3,f19が特定される。第1伸長部6202では、特定部6206によって特定された圧縮ファイル上記の例では圧縮ファイルf3,f19を2N分枝無節点ハフマン木Hで伸長することとなる。このあと、スレーブサーバで絞り込まれた圧縮ファイルは、マスタサーバMSに送信される。マスタサーバMSは、スレーブサーバからの圧縮ファイルを、第1伸長部6202により2N分枝無節点ハフマン木Hで伸長する。伸長された対象ファイル上記の例ではF3、F19は、ディスプレイなどの表示装置に表示される。また、検索文字列がクライアント装置から受け付けられている場合は、マスタサーバMSがクライアント装置に、検索結果として伸長された対象ファイル上記の例ではF3、F19を送信することになる。また、特定部6206において圧縮ファイルが特定されなかった場合は、その旨の検索結果を返すことになる。セグメント生成部6207は、対象ファイルの追加指定が受け付けられると、現在のファイル総数αが1セグメントあたりのファイル数nの倍数であるか否かを判断する。nの倍数である場合は、最後尾のセグメントには追加指定された対象ファイルの圧縮ファイルを保存できる空き領域がないため、あらたに第0階層のセグメントを生成する。セグメントがあらたに生成されると、図1や図6に示したように、管理領域間での関連付けをおこなう。そして、あらたなセグメントに対し追加される圧縮ファイルが順次格納されることになる。セグメント生成部6207を実行するコンピュータがマスタサーバMSの場合は、最後尾のセグメントを有するスレーブサーバに対し、第0階層のあらたなセグメントの生成指示を送信する。また、最後尾のセグメントを保持するスレーブサーバに、あらたなセグメントを保持する空き領域がない場合は、他のスレーブサーバに第0階層のあらたなセグメントの生成指示を送信する。そして、あらたなセグメントが生成されると、マスタサーバMSは、追加された圧縮ファイルを順次送信することとなる。これにより、あらたなセグメントに、追加された圧縮ファイルが順次格納されることになる。また、セグメント生成部6207は、出現マップや削除マップの集約をおこなう。具体的には、たとえば、セグメント生成部6207は、図4に示したように、出現マップごとに、上位階層への集約をおこなう。そして、セグメント生成部6207は、図4に示したように、集約先の上位階層のセグメントたとえば、セグメントsg11の管理領域と、集約元の上位階層のセグメント群たとえば、セグメントsg01~sg0mの各管理領域との間での関連付けをおこなう。この集約処理は削除マップについても同様に実行される。<ファイル伸長例>図63は、ファイル伸長例を示す説明図である。ファイル伸長例で示す処理は、入力部6203、抽出部6204、第2伸長部6205、特定部6206、第1伸長部6202により実行される。G1まず、入力部6203により検索文字列人形が入力された場合、検索文字列人形を構成する文字人、形について特定単一文字の構造体2100に対し2分探索することで、特定単一文字人、形が検索される。特定単一文字の構造体2100には、2N分枝無節点ハフマン木Hの葉特定単一文字へのポインタが関連付けられている。したがって、特定単一文字の構造体でヒットすると、2N分枝無節点ハフマン木Hの葉を直接指定することができる。G22N分枝無節点ハフマン木Hの葉を直接指定すると、当該葉の構造体内の照合フラグがONに設定され、圧縮符号が抽出される。圧縮符号は特定単一文字の出現マップへのポインタとなるため、直接指定することができる。本例の場合、特定単一文字人、形の圧縮符号が抽出されるため、人の出現マップと形の出現マップとが抽出される。また、人の圧縮符号および形の圧縮符号を連結した連結圧縮符号も2グラム文字列の出現マップへのポインタとなるため、直接指定することができる。したがって、2グラム文字列人形の出現マップも抽出される。G3抽出された3個の出現マップは、マップ用ハフマン木により伸長される。このあと、図8に示したように、特定部6206が、最上位階層のセグメントから絞込みを行って、セグメントsg01において、伸長された出現マップと削除マップとによりAND演算を実行して、AND結果が得られる。G4セグメントsg01のAND結果においてファイル番号3がONになっているため、検索文字列人形が対象ファイルF3に存在することが判明する。したがって、圧縮ファイル群fsから圧縮ファイルf3が抽出される。これにより伸長すべき圧縮ファイルが絞り込まれることになり、無駄な伸長処理を低減することができる。G5最後に、抽出された圧縮ファイルf3を圧縮状態のまま、照合、伸長することで、伸長後の対象ファイルF3がオープンされる。なお、人、形の葉の構造体では照合フラグがONになっているため、人、形の伸長の際、強調表示となるように文字列置換されて伸長される。たとえば、照合フラグがONである人、形については、<B></B>タグではさんで伸長することで、太字で表示される。照合フラグがOFFの文字については<B></B>タグではさむことなくそのまま伸長する。<伸長処理の具体例>つぎに、図63での伸長処理の具体例について説明する。ここでは、検索文字列人形の圧縮符号列を用いて圧縮ファイルfiについて照合しながら伸張する例について説明する。なお、例として、特定単一文字人の圧縮符号を110001001110ビットとし、特定単一文字形の圧縮符号を010001001010ビットとする。また、伸長処理では、レジスタに圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。抽出した圧縮符号を、1パス1枝分のアクセスで2N分枝無節点ハフマン木Hの根から探索する。そして、アクセスした葉L♯の構造体に格納されている文字コードを読み出して伸長バッファに格納する。また、圧縮符号を抽出するため、マスクパターンのマスク位置をオフセットする。また、マスクパターンの初期値を0xFFF00000とする。このマスクパターンは先頭12ビットが1であり、後続の20ビットが0のビット列である。図64および図65は、図63での伸長処理の具体例を示す説明図である。図64では、特定単一文字人についての伸張例Aを示している。図64において、まず、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バイトのビット列を示しており、内部の数字は、バイト境界となるバイト位置を示している。図64では、ビットアドレス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分枝無節点ハフマン木Hの根の構造体には、抽出された対象ビット列110001001100があるため、この対象ビット列と一致する葉L♯へのポインタ枝番号を探索する。この場合、葉L97へのポインタ群の中の1つと一致するため、該当する葉L97へのポインタを読み出して、葉L97の構造体にアクセスする。葉L97の構造体には、文字コード0xBA4Eが格納されているため、当該文字コード0xBA4Eを抽出して伸長バッファに格納する。この場合、照合フラグがONであるため、文字コード0xBA4Eを<B></B>タグで挟み込んで格納する。また、葉L97の構造体には、文字コード0xBA4Eの圧縮符号長leg=10ビットも格納されているため、文字コード0xBA4Eの圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=010=10となる。図65では、特定単一文字形について伸張する例Bを示している。具体的には、図64の状態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が残されるため、末尾10ビットを対象ビット列として抽出する。この場合は、0100010010が対象ビット列として抽出される。抽出後、レジスタはクリアされる。2N分枝無節点ハフマン木Hの根の構造体には、抽出された対象ビット列0100010010があるため、このビット列と一致する葉L♯へのポインタ枝番号を探索する。この場合、対象ビット列0100010010が葉L105へのポインタ群の中の1つと一致するため、該当する葉L105へのポインタを読み出して、葉L24の構造体にアクセスする。葉L105の構造体には、文字コード0x625Fが格納されているため、当該文字コード0x625Fを抽出して伸長バッファに格納する。ファイル伸長例G1の場合は、そのまま伸長バッファに格納するが、ファイル伸長例G2の場合は、照合フラグがONであるため、文字コード0x625Fを<B></B>タグで挟み込んで格納する。また、葉L105の構造体には、文字コード0x625Fの圧縮符号長leg=8ビットも格納されているため、文字コード0x625Fの圧縮符号長legも抽出する。この抽出された圧縮符号長legによりビットアドレスabiを更新する。この場合、更新後のビットアドレスabiはabi=108=18となる。このようにして伸長することで、対象ファイルがオープンされることとなる。<ファイル追加処理の具体例>つぎに、ファイル追加処理の具体例について説明する。ここでは、圧縮済みの圧縮符号マップMsを伸長することなく、セグメント生成部6207が、追加対象となる対象ファイルFn1の追加と、圧縮符号マップMsの更新とを実行する。図66は、ファイル追加処理の具体例を示す説明図である。図66では、対象ファイルFn1を追加する場合を例に挙げて説明する。まず、図63のファイル伸長例により、圧縮ファイル群fsから圧縮ファイルf3が伸長され、伸長後の対象ファイルF3がメインメモリたとえば、RAM903上に書き出されたとする。ここで、対象ファイルFn1に変更し、新規保存指示を与えたとする。この場合、メインメモリ上の対象ファイルFn1にはあたらしく採番されたファイル番号n1が割り与えられる。すなわち、セグメントsg01には空き領域がないため、セグメントsg02が設定され、セグメントsg01との間で関連付けがおこなわれる。Iそして、対象ファイルFn1を2N分枝無節点ハフマン木Hで圧縮して圧縮ファイルfn1とし、セグメントsg02に保存する。Jまた、メインメモリ上の対象ファイルFn1の文字情報を集計部1101により集計することで、文字情報の存否を検出することができる。したがって、新たに採番されたファイル番号n1のビットを、各文字情報の出現マップに追加デフォルトはOFFし、文字情報が出現したビットについてONにする。また、ファイル番号n1のビットを削除マップDにも追加デフォルトはONする。Kまた、圧縮ファイルfn1については、セグメントsg02の管理領域においてポインタが関連付けされる。これにより、以降において、セグメントsg02においてファイル番号n1が指定されると、圧縮ファイルfn1を伸長して対象ファイルFn1をオープンすることができる。また、図7に示したコンピュータシステムにおいて、ファイル総数がαであるとすると、α=ファイル番号m×nの場合、スレーブサーバS1にのみアーカイブファイルA01が格納されている。そして、あらたに対象ファイルFm×n1が追加される場合、マスタサーバMSは、対象ファイルFm×n1の圧縮ファイルfm×n1を、割当先となるスレーブサーバS2に送信する。割当先をどのスレーブサーバにするかはあらかじめ決めておくものとする。スレーブサーバS2は、スレーブサーバS1のセグメントsg0mの後続セグメントとしてセグメントsg0m1を生成して、マスタサーバMSからの圧縮fm×n1を保存することになる。図67は、セグメント追加処理の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、指定部6201によりファイル追加が指定されるのを待ち受けるステップS6701:No。ファイル追加の指定がされた場合ステップS6701:Yes、コンピュータ1100は、保存対象セグメントsg0Kを特定するステップS6702。具体的には、ファイル数iを1セグメントあたりのファイル数nで除算した商と同じ番号のセグメントを保存対象セグメントsg0Kとする。そして、コンピュータ1100は、ファイル数iをインクリメントしてステップS6703、i>Knであるか否かを判断するステップS6704。i>Knでない場合ステップS6704:No、現セグメントsg0Kにはまだ圧縮ファイルを保存できるため、コンピュータ1100は、追加ファイルによるマップ更新処理を実行するステップS6709。追加ファイルによるマップ更新処理ステップS6709の詳細については後述する。このあと、コンピュータ1100は、追加ファイルを2N分枝無節点ハフマン木Hで圧縮してステップS6710、圧縮追加ファイルを保存対象セグメントsg0Kに保存するステップS6711。そして、コンピュータ1100は、保存対象セグメントsg0Kの管理領域AKに、圧縮追加ファイルへのポインタを関連付けるステップS6712。これにより、セグメント追加処理を終了する。また、ステップS6704において、i>Knである場合ステップS6704:Yes、現セグメントsg0Kでは圧縮追加ファイルを保存できないため、コンピュータ1100は、現セグメントsg0Kの圧縮符号マップをマップ用ハフマン木で圧縮するステップS6705。そして、コンピュータ1100は、新セグメントの領域を確保してステップS6706、セグメント番号KをインクリメントするステップS6707。このあと、コンピュータ1100は、インクリメント後のセグメントsg0Kとその先行セグメントとのポインタの連携処理を実行するステップS6708。これにより、図1に示したように、先行セグメントと関連付けされることとなる。このあと、ステップS6709に移行する。図68は、図67に示した追加ファイルによるマップ更新処理ステップS6709の詳細な処理手順を示すフローチャート前半である。まず、コンピュータ1100は、圧縮符号マップMsおよび削除マップDsにおいて、追加ファイルのファイル番号のビットを設定するステップS6801。具体的には、出現マップについてはOFFのビットを追加ファイルのファイル番号に対して設定し、削除マップDについてはONのビットを追加ファイルのファイル番号に対して設定する。つぎに、コンピュータ1100は、追加ファイル内の先頭文字を対象文字に設定しステップS6802、対象文字について最長一致検索処理を実行するステップS6803。最長一致検索処理ステップS6803は、図31に示した処理と同一処理であるため説明を省略する。このあと、コンピュータ1100は、最長一致した基礎単語が基礎単語の構造体2300にあるか否かを判断するステップS6804。ない場合ステップS6804:No、図69のステップS6901に移行する。一方、ある場合ステップS6804:Yes、コンピュータ1100は、最長一致した基礎単語の圧縮符号を2N分枝無節点ハフマン木Hから特定して、当該圧縮符号により、最長一致した基礎単語の出現マップを指定するステップS6805。そして、コンピュータ1100は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをONにするステップS6806。このあと、図69のステップS6901に移行する。図69は、図67に示した追加ファイルによるマップ更新処理ステップS6709の詳細な処理手順を示すフローチャート後半である。まず、コンピュータ1100は、対象文字が特定単一文字であるか否かを判断するステップS6901。具体的には、たとえば、コンピュータ1100は、対象文字が特定単一文字の構造体でヒットしたか否かを判断する。対象文字が特定単一文字である場合ステップS6901:Yes、コンピュータ1100は、ヒットした特定単一文字の圧縮符号を2N分枝無節点ハフマン木Hから特定して、当該圧縮符号により、ヒットした特定単一文字の出現マップを指定するステップS6902。そして、コンピュータ1100は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをONにするステップS6903。このあと、ステップS6909に移行する。一方、対象文字が特定単一文字でない場合ステップS6901:No、コンピュータ1100は、対象文字を上位分割文字コードと下位分割文字コードとに分割するステップS6904。そして、コンピュータ1100は、分割文字コードの構造体でヒットした上位分割文字コードの圧縮符号を2N分枝無節点ハフマン木Hから特定して、当該圧縮符号により、ヒットした上位分割文字コードの出現マップを指定するステップS6905。そして、コンピュータ1100は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをONにするステップS6906。同様に、コンピュータ1100は、分割文字コードの構造体でヒットした下位分割文字コードの圧縮符号を2N分枝無節点ハフマン木Hから特定して、当該圧縮符号により、ヒットした下位分割文字コードの出現マップを指定するステップS6907。そして、コンピュータ1100は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをONにするステップS6908。このあと、ステップS6909に移行する。また、ステップS6909において、コンピュータ1100は、2グラム文字列特定処理を実行するステップS6909。2グラム文字列特定処理ステップS6909は、図37に示した処理と同一処理であるため説明を省略する。このあと、コンピュータ1100は、2グラム文字列たとえば人形のうち先頭グラム文字たとえば、人の圧縮符号と末尾グラム文字たとえば、形の圧縮符号とを連結するステップS6910。つぎに、コンピュータ1100は、連結圧縮符号により、2グラム文字列の出現マップを指定するステップS6911。そして、コンピュータ1100は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをONにしてステップS6912、一連の処理を終了する。<セグメント階層化処理>つぎに、セグメント階層化処理について説明する。セグメント階層化処理とは、図4および図5に示したように、下位階層のセグメント群のインデックス情報群を上位階層のインデックス情報に集約していく処理である。セグメント階層化処理は、セグメント生成部6207が実行する。図70は、セグメント階層化処理の詳細な処理手順を示すフローチャートである。図70において、コンピュータ1100は、指定部により、セグメントの集約指定を待ち受けるステップS7001:No。集約指定が受け付けられた場合ステップS7001:Yes、コンピュータ1100は、出現マップを指定するポインタである圧縮符号を順次選択するステップS7002。具体的には、未選択の圧縮符号がある場合ステップS7002:Yes、コンピュータ1100は、未選択の圧縮符号を1つ選択しステップS7003、選択出現マップ集約処理を実行するステップS7004。選択出現マップ集約処理ステップS7004の詳細については後述する。選択出現マップ集約処理ステップS7004のあと、ステップS7002に戻る。そして、未選択の圧縮符号がない場合ステップS7002:No、コンピュータ1100は、削除マップ集約処理を実行するステップS7005。削除マップ集約処理ステップS7005の詳細については後述する。これにより、セグメント階層化処理を終了する。図71は、図70に示した選択出現マップ集約処理ステップS7004の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、f=0、h=f1、j=1に設定するステップS7101。ここで、fは対象となる階層番号であり、hは対象階層の上位階層の階層番号である。jはセグメント番号である。つぎに、コンピュータ1100は、対象階層である第f階層のセグメントsgfj~sgfjm-1で圧縮ファイルの空き領域があるか否かを判断するステップS7102。mは、集約可能なセグメント数である。空き領域がない場合ステップS7102:No、第f階層のセグメントsgfj~sgfjm-1の各々には圧縮ファイルが最大限格納されているため、コンピュータ1100は、上位階層である第h階層のセグメントsghjに集約済みであるか否かを判断するステップS7103。具体的には、たとえば、コンピュータ1100は、第h階層のセグメントsghjが存在するか否かを判断する。集約済みでない場合ステップS7103:No、コンピュータ1100は、上位セグメントsghjを設定し、上位セグメントsghj内に選択圧縮符号のインデックス領域を確保するステップS7104。そして、a=jに設定するステップS7105。ここで、aは対象セグメントsghjを特定する変数である。そして、コンピュータ1100は、a=jmか否かを判断するステップS7106。a=jmでない場合ステップS7106:No、第f階層のセグメントsgfj~sgfjm-1のすべてについて集約処理が完了していない。したがって、コンピュータ1100は、選択圧縮符号についてセグメントsgfaのインデックス情報を抽出するステップS7107。そして、コンピュータ1100は、抽出されたセグメントsgfaのインデックス情報であるビット列がオール0、すなわち、選択圧縮符号についての文字情報がセグメントsgfa内の圧縮ファイル群のいずれにも存在していないか否かを判断するステップS7108。オール0の場合ステップS7108:Yes、コンピュータ1100は、上位セグメントsghaに集約結果として0を書き込みステップS7109、ステップS7111に移行する。一方、オール0でない場合ステップS7108:No、上位セグメントsghaに集約結果として1を書き込みステップS7110、ステップS7111に移行する。ステップS7111では、aをインクリメントしステップS7111、ステップS7106に戻る。また、ステップS7106において、a=jmになった場合ステップS7106:Yes、第f階層のセグメントsgfj~sgfjm-1のすべてについて集約処理が完了したことになる。したがって、コンピュータ1100は、上位セグメントsghjと第f階層のセグメントsgfj~sgfjm-1との間でポインタによる関連付けをおこなうステップS7112。このあと、j=jmにしてjをセグメントm個分シフトしてステップS7113、ステップS7102に戻る。また、ステップS7102において、空き領域がある場合ステップS7102:Yes、第f階層のセグメントsgfj~sgfjm-1の集約処理を実行できないため、f=f1,j=1とするステップS7114。そして、コンピュータ1100は、セグメントsgfjが存在するか否かを判断するステップS7115。存在する場合ステップS7115:Yes、ステップS7102に戻る。これにより、段階的に階層を上げて集約することができる。一方、存在しない場合ステップS7115:No、ステップS7002に戻る。図72は、図70に示した削除マップ集約処理ステップS7005の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、f=0、h=f1、j=1に設定するステップS7201。ここで、fは対象となる階層番号であり、hは対象階層の上位階層の階層番号である。jはセグメント番号である。つぎに、コンピュータ1100は、対象階層である第f階層のセグメントsgfj~sgfjm-1で圧縮ファイルの空き領域があるか否かを判断するステップS7202。mは、集約可能なセグメント数である。空き領域がない場合ステップS7202:No、第f階層のセグメントsgfj~sgfjm-1の各々には圧縮ファイルが最大限格納されているため、コンピュータ1100は、上位階層である第h階層のセグメントsghjに集約済みであるか否かを判断するステップS7203。具体的には、たとえば、コンピュータ1100は、第h階層のセグメントsghjが存在するか否かを判断する。集約済みでない場合ステップS7203:No、コンピュータ1100は、上位セグメントsghj内に削除マップのインデックス領域を確保するステップS7204。そして、a=jに設定するステップS7205。ここで、aは対象セグメントsghjを特定する変数である。そして、コンピュータ1100は、a=jmか否かを判断するステップS7206。a=jmでない場合ステップS7206:No、第f階層のセグメントsgfj~sgfjm-1のすべてについて集約処理が完了していない。したがって、コンピュータ1100は、削除マップについてセグメントsgfaのインデックス情報を抽出するステップS7207。そして、コンピュータ1100は、抽出されたセグメントsgfaのインデックス情報であるビット列がオール0、すなわち、セグメントsgfa内の圧縮ファイル群が削除された否かを判断するステップS7208。オール0の場合ステップS7208:Yes、コンピュータ1100は、上位セグメントsghaに集約結果として0を書き込みステップS7209、ステップS7211に移行する。一方、オール0でない場合ステップS7208:No、コンピュータ1100は、上位セグメントsghaに集約結果として1を書き込みステップS7210、ステップS7211に移行する。ステップS7211では、aをインクリメントしステップS7211、ステップS7206に戻る。また、ステップS7206において、a=jmになった場合ステップS7206:Yes、第f階層のセグメントsgfj~sgfjm-1のすべてについて集約処理が完了したことになる。したがって、コンピュータ1100は、上位セグメントsghjと第f階層のセグメントsgfj~sgfjm-1との間でポインタによる関連付けをおこなうステップS7212。このあと、j=jmにしてjをセグメントm個分シフトしてステップS7213、ステップS7202に戻る。また、ステップS7202において、空き領域がある場合ステップS7202:Yes、第f階層のセグメントsgfj~sgfjm-1について集約処理を実行できないため、f=f1,j=1とするステップS7214。そして、コンピュータ1100は、セグメントsgfjが存在するか否かを判断するステップS7215。存在する場合ステップS7215:Yes、ステップS7202に戻る。これにより、段階的に階層を上げて集約することができる。一方、存在しない場合ステップS7215:No、ステップS7002に戻る。このように、セグメント階層化処理を実行することで、図4および図5に示したようにセグメントの階層化が実現される。したがって、図7に示したようなアーカイブファイルの階層構造を構築することができる。<検索処理手順>つぎに、本実施の形態にかかる検索処理手順について説明する。具体的には、たとえば、図63に示したファイル伸長例についての処理手順となる。図73は、本実施の形態にかかる検索処理手順を示すフローチャートである。まず、コンピュータ1100は、検索文字列の入力を待ち受けステップS7301:No、検索文字列が入力された場合ステップS7301:Yes、ポインタ特定処理ステップS7302、ファイル絞込み処理ステップS7303、伸長処理ステップS7304を実行する。ポインタ特定処理ステップS7302は、検索文字列から出現マップを指定するポインタとなる圧縮符号を特定する。ポインタ特定処理ステップS7302の詳細は、図74および図75で説明する。ファイル絞込み処理ステップS7303は、図8に示したように、階層構造セグメント群から検索文字列を構成する文字情報が存在する対象ファイルFiの圧縮ファイルfiを絞り込む。ファイル絞込み処理ステップS7303の詳細は、図76で説明する。伸長処理ステップS7304は、ファイル絞込み処理ステップS7303で絞り込まれた圧縮ファイルfiを伸長する過程で、伸長対象となる圧縮符号列と検索文字列の圧縮文字列とを照合する。伸長処理ステップS7304の詳細は、図77および図78で説明する。図74は、図73に示したポインタ特定処理ステップS7302の詳細な処理手順を示すフローチャートその1である。まず、コンピュータ1100は、検索文字列を対象文字列に設定しステップS7401、最長一致検索処理を実行するステップS7402。最長一致検索処理ステップS7402は、図31に示した最長一致検索処理ステップS2901と同一処理であるため説明を省略する。そして、コンピュータ1100は、基礎単語の構造体において、最長一致検索処理ステップS7402で得られた最長一致検索結果を2分探索するステップS7403。最長一致検索結果が、基礎単語の構造体で探索された場合ステップS7403:Yes、探索された基礎単語の圧縮符号を2N分枝無節点ハフマン木Hから取得して検索バッファに保存するステップS7404。そして、コンピュータ1100は、対象文字列に後続があるか否かを判断するステップS7405。後続がある場合ステップS7405:Yes、コンピュータ1100は、後続文字列を対象文字列に設定してステップS7406、最長一致検索処理ステップS7402に戻る。一方、後続がない場合ステップS7405:No、ポインタ特定処理ステップS7302は終了し、ファイル絞込み処理ステップS7303に移行する。また、ステップS7403において、最長一致検索結果が、基礎単語の構造体で探索されなかった場合ステップS7403:No、図75のステップS7501に移行する。具体的には、最長一致検索結果が基礎単語の構造体に登録されていない場合、または、最長一致検索で最長一致候補がなかった場合ステップS7403:Noに、図75のステップS7501に移行する。図75は、図73に示したポインタ特定処理ステップS7302の詳細な処理手順を示すフローチャートその2である。まず、コンピュータ1100は、対象文字列の先頭文字を対象文字に設定するステップS7501。つぎに、コンピュータ1100は、特定単一文字の構造体において対象文字を2分探索するステップS7502。対象文字が探索された場合ステップS7503:Yes、コンピュータ1100は、特定単一文字の圧縮符号を2N分枝無節点ハフマン木Hから取得して検索バッファに保存するステップS7504。一方、ステップS7503において、探索されなかった場合ステップS7503:No、コンピュータ1100は、対象文字を上位8ビットと下位8ビットに分割するステップS7505。そして、コンピュータ1100は、上位分割文字コードの圧縮符号を2N分枝無節点ハフマン木Hから取得して検索バッファに保存するステップS7506。また、コンピュータ1100は、下位分割文字コードの圧縮符号を2N分枝無節点ハフマン木Hから取得して検索バッファに保存するステップS7507。また、コンピュータ1100は、対象文字やステップS7505で分割された分割文字コードについて、2N分枝無節点ハフマン木Hの葉にアクセスし、照合フラグをONにするステップS7508。このあと、コンピュータ1100は、2グラム文字列特定処理を実行するステップS7509。2グラム文字列特定処理ステップS7509は、図37に示した2グラム文字列特定処理ステップS3406と同一処理であるため説明を省略する。そして、コンピュータ1100は、2グラム文字列特定処理ステップS7509で2グラム文字列が特定されなかった場合ステップS7510:No、図74のステップS7405に戻る。一方、2グラム文字列が特定された場合ステップS7510:Yes、コンピュータ1100は、2グラム文字列の圧縮符号を2N分枝無節点ハフマン木Hから取得して検索バッファに保存するステップS7511。具体的には、たとえば、コンピュータ1100は、第1グラムの圧縮符号および第2グラムの圧縮符号を2N分枝無節点ハフマン木Hにアクセスすることで取得、連結し、2グラム文字列の圧縮符号マップMから連結圧縮符号で指定された出現マップを取得する。そして、図74のステップS7405に戻る。図76は、図73に示したファイル絞込み処理ステップS7303の詳細な処理手順を示すフローチャートである。まず、コンピュータ1100は、階層番号hを現時点での最上位階層の階層番号HとしステップS7601、セグメント番号jをj=1に設定するステップS7602。つぎに、コンピュータ1100は、セグメントsgHjが存在するか否かを判断するステップS7603。セグメントsgHjが存在する場合ステップS7603:Yes、コンピュータ1100は、検索バッファ内の圧縮符号ごとに、出現マップおよび削除マップを指定するステップS7604。そして、コンピュータ1100は、指定された出現マップおよび削除マップから対象セグメントsgHjのインデックス情報を抽出するステップS7605。そして、コンピュータ1100は、抽出されたインデックス情報群をAND演算するステップS7606。このあと、コンピュータ1100は、現在の階層番号hがh=0であるか否かを判断するステップS7607。h≠0の場合ステップS7607:No、AND結果で得られる1の位置は下位セグメントの番号となるため、当該番号を検索バッファに保存して、ステップS7610に移行するステップS7608。一方、h=0の場合ステップS7607:Yes、AND結果で得られる1の位置はファイル番号となるため、当該番号の圧縮ファイルを検索バッファに保存して、ステップS7610に移行するステップS7609。ステップS7610では、セグメント番号jをインクリメントしてステップS7610、ステップS7603に戻る。この際、後続セグメントとはポインタで関連付けされているため、セグメント番号のインクリメントにより後続セグメントを特定できることとなる。また、ステップS7603において、対象セグメントsgHjが存在しない場合ステップS7603:No、コンピュータ1100は、階層番号hをデクリメントしステップS7611、h<0であるか否かを判断するステップS7612。h<0でない場合ステップS7612:No、ステップS7602に戻る。一方、h<0である場合ステップS7612:Yes、ステップS7609により伸長対象の圧縮ファイルが特定できているため、伸長処理ステップS7304に移行する。図77は、図73に示した2N分枝無節点ハフマン木Hを用いた伸長処理ステップS7304の詳細な処理手順例を示すフローチャートその1である。図77において、まず、コンピュータ1100は、ビットアドレスabiをabi=0としステップS7701、バイトオフセットbyosを算出しステップS7702、ビットオフセットbiosを算出するステップS7703。そして、コンピュータ1100は、バイトオフセットbyosの位置からの圧縮符号列をレジスタr1にセットするステップS7704。つぎに、コンピュータ1100は、レジスタr2にセットされたマスクパターンをビットオフセットbios分、末尾方向にシフトしてステップS7705、レジスタr1にセットされた圧縮符号列とのAND演算をおこなうステップS7706。このあと、コンピュータ1100は、レジスタシフト数rsを算出してステップS7707、AND演算後のレジスタr2をレジスタシフト数rs分、末尾にシフトするステップS7708。図78は、図73に示した2N分枝無節点ハフマン木Hを用いた伸長処理ステップS7304の詳細な処理手順例を示すフローチャートその2である。ステップS7708のあと、図78において、コンピュータ1100は、シフト後のレジスタr2から末尾Nビットを対象ビット列として抽出するステップS7801。つぎに、コンピュータ1100は、2N分枝無節点ハフマン木Hの根の構造体から葉L♯へのポインタを特定しステップS7802、ポイント先となる葉L♯の構造体に1パスでアクセスするステップS7803。このあと、コンピュータ1100は、アクセス先の葉L♯の構造体の照合フラグがONであるか否かを判断するステップS7804。照合フラグがONである場合ステップS7804:Yes、コンピュータ1100は、アクセス先の葉L♯の構造体内の文字情報について置換文字を伸長バッファに書き出してステップS7805、ステップS7807に移行する。一方、照合フラグがOFFの場合ステップS7804:No、コンピュータ1100は、アクセス先の葉L♯の構造体内の文字情報伸長文字を伸長バッファに書き出してステップS7806、ステップS7807に移行する。ステップS7807では、コンピュータ1100は、アクセス先の葉L♯の構造体から圧縮符号長legを抽出しステップS7807、ビットアドレスabiを更新するステップS7808。このあと、コンピュータ1100は、メモリに圧縮符号列があるか否か、具体的には、マスクパターンによるマスク処理が施されていない圧縮符号列があるか否かを判断するステップS7809。たとえば、バイトオフセットbyosに該当するバイト位置があるか否かにより判断する。圧縮符号列がある場合ステップS7809:Yes、図77のステップS7702に戻る。一方、圧縮符号列がない場合ステップS7809:No、伸長処理ステップS7304を終了する。このような伸長処理ステップS7304により、圧縮状態のまま照合伸長をおこなうことができ、伸長速度の高速化を図ることができる。以上説明したように、本実施の形態によれば、検索対象ファイル群を複数のセグメントに分割して保存しているため、セグメント単位のインデックス情報で検索をおこなうことができる。したがって、検索対象ファイルのファイル数の増大にともなってインデックス情報のサイズが増大しても、検索処理時間の増大を抑制することができる。また、同一階層のセグメント群を集約して上位階層のセグメントを生成して階層構造セグメント群SGを構築している。したがって、階層構造セグメント群SGの最上位階層のセグメントのインデックス情報から順次絞込みをおこなうことで、検索文字列が存在しないセグメントおよび当該セグメントの下位に存在する圧縮ファイルを絞り込み対象から除外することができる。このように、無駄な絞り込みをしなくて済むため、検索速度の向上を図ることができる。また、上述した実施の形態では、マスタサーバが第1階層までの絞込みをおこない、絞り込まれたファイル番号を、当該ファイル番号を所有するスレーブサーバに送信する。したがって、送信されなかったスレーブサーバでは絞込み処理を実行しなくて済むため、無駄な検索を抑制することができ、検索効率の向上を図ることができる。なお、上述した実施の形態では、マスタサーバMSが圧縮ファイルfiの伸長をおこなう例について説明したが、マスタサーバMSが2N分枝無節点ハフマン木Hを各スレーブサーバにあらかじめ送信しておくことで、各スレーブサーバにおいて圧縮ファイルfiの伸長処理を実行することとしてもよい。この場合、マスタサーバMSからファイル番号iを受けたスレーブサーバは、当該ファイル番号iの圧縮ファイルFiを伸長し、伸長した対象ファイルFiをマスタサーバMSに返すことになる。このように、スレーブサーバに伸長処理を実行させることで、マスタサーバMSへの負荷集中を抑制して負荷分散を図ることができる。また、上述した実施の形態では、圧縮ファイルfiを絞り込む例について説明したが絞込み対象は、非圧縮の対象ファイルFiでもよい。この場合、上述した圧縮処理や伸長処理は不要となる。また、出現マップへのポインタは圧縮符号ではなく、文字情報を特定するポインタであればよい。また、あらかじめ、圧縮符号マップMsの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Fsのファイル番号pの降順に配列しておく。これにより、ファイル番号;1~nのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルFiの絞込みを正確に実行することができる。また、圧縮符号マップMsの圧縮領域を所定数の最大倍数たとえば、所定ファイル数n=256の最大倍数のビット列にすることで、対象ファイルが追加される都度、圧縮符号マップMsの圧縮をおこなう必要がない。これにより、コンピュータの演算負荷を低減することができる。また、追加後のファイル総数が初期のファイル数の最大倍数に達した場合に、圧縮符号マップMsのファイル番号に対応する全ビットが圧縮領域となるため、圧縮符号マップMsがハフマン木hにより圧縮される。これにより、省メモリ化を図ることができる。このように、所定ファイル数nたとえば256個単位で圧縮がおこなわれるため、演算負荷低減と省メモリ化を同時に実現することができる。なお、本実施の形態で説明した情報処理方法は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータ1100で実行することにより実現することができる。本情報処理プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータ1100で読み取り可能な記録媒体に記録され、コンピュータ1100によって記録媒体から読み出されることによって実行される。また本情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。"