(57)【要約】  情報検索装置（２００）はコンテンツ（２１０）と見出しデータ生成部（２１１）と文字出現頻度管理データ生成部（２１２）と圧縮／暗号化部（２１３）と検索初期化部（２２１）と全文検索部（２２２）と検索結果表示部（２２３）とからなる。文字出現頻度管理データ生成部（２１２）はコンテンツ（２１０）から文字出現頻度管理データ（２３０）を生成する。圧縮／暗号化部（２１３）はコンテンツ（２１０）と文字出現頻度管理データ（２３０）を圧縮／暗号化する。検索初期化部（２２１）は暗号化圧縮文字出現頻度管理データ（２６０）を復号／伸長する。全文検索部（２２２）は検索キーワードを受け文字出現頻度管理データ（２３０）と見出しデータ（３００）を用いて圧縮コンテンツ（２５０）を全文検索する。検索結果表示部（２２３）は検索候補の中から選択された検索候補を伸長して検索結果として表示する。
2008146756.tif 000002
【特許請求の範囲】
【請求項１】
コンテンツを構成する複数の検索対象ファイルにおける文字データの存否をあらわした前記文字データごとのビット列の集合を用いて検索キーワードを構成する文字データを含む検索対象ファイルを絞り込むことにより、当該検索対象ファイルの中から前記検索キーワードと一致または関連するキーワードを検索する検索処理をコンピュータに実行させる情報検索プログラムにおいて、
前記ビット列の集合の中から、任意の文字データのビット列を抽出させるビット列抽出工程と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮させる圧縮工程と、
をコンピュータに実行させることを特徴とする情報検索プログラム。
【請求項２】
前記全検索対象ファイルのうち圧縮対象となる文字データが出現するファイル数の割合をあらわす出現率を取得させる取得工程と、
前記特殊なハフマン木ごとに前記特殊記号列のビット数が異なる複数種類の特殊なハフマン木を有するハフマン木集合の中から、前記取得工程によって取得された出現率に応じた特殊なハフマン木を抽出させるハフマン木抽出工程と、を前記コンピュータに実行させ、
前記ビット列抽出工程は、
前記出現率が取得された文字データのビット列を抽出させ、
前記圧縮工程は、
前記ハフマン木抽出工程によって抽出された特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮させることを特徴とする請求項１に記載の情報検索プログラム。
【請求項３】
前記特殊記号列は、前記文字データが出現しないことを意味する記号が連続する記号列であることを特徴とする請求項１または２に記載の情報検索プログラム。
【請求項４】
出現確率の範囲が前記特殊なハフマン木ごとに領域分割されており、前記ハフマン木集合内の一の特殊なハフマン木の分割領域により特定される出現確率が、前記一の特殊なハフマン木の特殊記号列よりもビット数が多い特殊記号列を葉とする他の特殊なハフマン木の分割領域により特定される出現確率よりも低く設定されている場合、
前記ハフマン木抽出工程は、
前記出現率が含まれる分割領域に属する特殊なハフマン木を前記ハフマン木集合の中から抽出させることを特徴とする請求項３に記載の情報検索プログラム。
【請求項５】
前記一の特殊なハフマン木の分割領域が、前記他の特殊なハフマン木の分割領域よりも広く設定されていることを特徴とする請求項４に記載の情報検索プログラム。
【請求項６】
前記ハフマン木集合には、前記複数種類の記号列のみを葉とする通常のハフマン木が含まれており、前記特殊なハフマン木の分割領域により特定される最大の出現確率よりも、前記通常のハフマン木の分割領域により特定される出現確率が高く設定されている場合、
前記ハフマン木抽出工程は、
前記出現率が含まれる分割領域が前記通常のハフマン木の分割領域である場合、当該通常のハフマン木を前記ハフマン木集合の中から抽出させることを特徴とする請求項４に記載の情報検索プログラム。
【請求項７】
前記通常のハフマン木の分割領域により特定される出現確率よりも、いずれのハフマン木も圧縮に用いない分割領域により特定される出現確率が高く設定されている場合、
前記圧縮工程は、
前記取得工程によって取得された出現率が含まれる分割領域が前記いずれのハフマン木も圧縮に用いない分割領域である場合、前記ビット列を圧縮させないことを特徴とする請求項４に記載の情報検索プログラム。
【請求項８】
前記出現確率の範囲が前記出現確率５０％を境界として対称となるように領域分割されている場合、
前記ハフマン木抽出工程は、
前記取得工程によって取得された出現率が５０％以上である場合、当該出現率が含まれる一の分割領域に対し出現確率５０％を境界として対称となる前記出現確率０％以上５０％未満内の他の分割領域に対応するハフマン木を前記ハフマン木集合の中から抽出させ、
前記圧縮工程は、
前記他の分割領域に対応するハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列の反転ビット列を圧縮させることを特徴とする請求項４に記載の情報検索プログラム。
【請求項９】
前記ハフマン木は、２n分枝（ｎ≧２）のハフマン木であることを特徴とする請求項１〜８のいずれか一つに記載の情報検索プログラム。
【請求項１０】
前記ハフマン木は、圧縮用の構造体を有し、
前記圧縮用の構造体は、前記ハフマン木の葉を特定する葉の番号のうち、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた第１の記号列と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ前記第１の記号列よりも出現確率が高い第２の記号列と、が格納されており、
前記圧縮工程は、
圧縮用の構造体を用いて、前記第１または第２の記号列に一致するビット列を、当該ビット列に一致した記号列の圧縮符号に圧縮させることを特徴とする請求項９に記載の情報検索プログラム。
【請求項１１】
前記ハフマン木は、伸長用の構造体を有し、
前記伸長用の構造体は、前記ハフマン木の根からの葉となる記号列へのポインタを当該葉の番号と対応付けて格納する根領域と、前記ポインタのポイント先となる記号列を格納する葉の領域と、を有し、
前記コンピュータに、
前記圧縮工程によって圧縮された圧縮符号列から前記葉の番号を抽出し、前記伸長用の構造体内の根領域から前記記号列のポインタを特定し、当該ポインタのポイント先となる記号列を前記伸長用の構造体内の前記葉の領域から特定することにより、前記圧縮符号列を伸長させる伸長工程を実行させることを特徴とする請求項１０に記載の情報検索プログラム。
【請求項１２】
前記伸長用の構造体の前記根領域は、さらに、前記ハフマン木の根からの節点をポイントするポインタを当該節点の番号に対応付けて格納しており、
前記伸長用の構造体は、さらに、前記ハフマン木の節点からの葉となる記号列へのポインタを当該葉の番号と対応付けて格納する節点領域を有し、
前記伸長用の構造体の前記葉の領域は、前記節点領域に格納されているポインタのポイント先となる記号列を格納しており、
前記伸長工程は、
前記圧縮符号列から前記節点の番号が抽出された場合、前記伸長用の構造体内の根領域から前記節点へのポインタを特定し、当該節点へのポインタのポイント先となる前記記号列へのポインタを前記伸長用の構造体内の前記節点領域から特定し、当該記号列へのポインタのポイント先となる記号列を前記伸長用の構造体内の前記葉の領域から特定することにより、前記圧縮符号列を伸長させることを特徴とする請求項１１に記載の情報検索プログラム。
【請求項１３】
請求項１〜１２のいずれか一つに記載の情報検索プログラムを記録したコンピュータに読み取り可能な記録媒体。
【請求項１４】
各検索対象ファイルにおける文字データの存否を当該文字データごとにあらわしたビット列の集合の中から、任意の文字データのビット列を抽出するビット列抽出工程と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮する圧縮工程と、
を含んだことを特徴とする情報検索方法。
【請求項１５】
各検索対象ファイルにおける文字データの存否を当該文字データごとにあらわしたビット列の集合の中から、任意の文字データのビット列を抽出するビット列抽出手段と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出手段によって抽出されたビット列を圧縮する圧縮手段と、
備えることを特徴とする情報検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンテンツの圧縮、暗号化および検索をおこなう情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置に関するものである。
【背景技術】
【０００２】
従来、辞書などのコンテンツは、ＪＩＳ−Ｘ４０８１に従い、１６ビットコードの文字データによって記述された単一ファイルから構成されている。この辞書コンテンツは、たとえば、下記特許文献１により、暗号化および検索をおこなうことができる。【０００３】
この特許文献１では、各検索対象ファイルにおける文字データの存否をあらわすビット列を文字データごとに構成した出現マップを用いることで、辞書コンテンツを圧縮したまま検索をおこなうことができる。この出現マップは、携帯電話機などのモバイル端末において辞書やナレッジの全文検索を行うためのデータであり、各ビットのＯＮの出現率は８％、かつ、ランダムな特性を持ち、無記憶情報源に属するデータである。【０００４】
また、無記憶情報源のデータ圧縮については、下記非特許文献１で解説されている。この非特許文献１では、２ビット、３ビット毎のブロック符号化を例にした無記憶情報源のデータ圧縮について解説しており、ブロック長を大きくすると圧縮率が高くなり、情報エントロピーに近づき、理想的な圧縮を実現することができる。【０００５】
【特許文献１】国際公開第２００６／１２３４４８号パンフレット
【非特許文献１】植松友彦  著、文字データ圧縮アルゴリズム入門（３．４ブロック単位での符号化とその効果（Ｐ５１〜Ｐ５３））  ＣＱ出版社、１９９４年１０月１５日発行
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した非特許文献１では、ブロック長を大きくすると、ハフマン木を作るための計算量が指数関数的に大きくなる。したがって、上述した特許文献１の技術にそのまま適用すると、携帯電話機などのモバイル端末において辞書やナレッジの全文検索をおこなう際、低速ＣＰＵや少メモリ、少ディスク容量などの省資源の環境で圧縮や伸長をおこなうことができないという問題があった。【０００７】
本発明は、上記に鑑みてなされたものであって、低速ＣＰＵや少メモリ、少ディスク容量などの省資源の環境下において効率よく圧縮／伸長をおこなうことができる情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置は、コンテンツを構成する複数の検索対象ファイルにおける文字データの存否をあらわした前記文字データごとのビット列の集合を用いて検索キーワードを構成する文字データを含む検索対象ファイルを絞り込むことにより、当該検索対象ファイルの中から前記検索キーワードと一致または関連するキーワードを検索する検索処理を実行する情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置において、前記ビット列の集合の中から、任意の文字データのビット列を抽出し、所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、抽出されたビット列を圧縮することを要件とする。【０００９】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、コンテンツを構成する検索対象ファイルではなく、その検索対象ファイルの絞り込みに用いるビット列の集合（出現マップに相当）を通常のハフマン木よりも効率よく圧縮することができる。【００１０】
また、前記全検索対象ファイルのうち圧縮対象となる文字データが出現するファイル数の割合をあらわす出現率を取得し、前記特殊なハフマン木ごとに前記特殊記号列のビット数が異なる複数種類の特殊なハフマン木を有するハフマン木集合の中から、取得された出現率に応じた特殊なハフマン木を抽出し、前記出現率が取得された文字データのビット列を抽出し、抽出された特殊なハフマン木を用いて、抽出されたビット列を圧縮することとしてもよい。【００１１】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、文字データごとの出現率であり、総ビット数に対するＯＮのビット数の比率を圧縮パラメータとして用いることができる。【００１２】
また、前記特殊記号列は、前記文字データが出現しないことを意味する記号が連続する記号列としてもよい。【００１３】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、ビット列に、文字データが出現しないことを意味する記号が連続する記号列が含まれている場合、通常のハフマン木よりも効率よく圧縮することができる。【００１４】
また、出現確率の範囲が前記特殊なハフマン木ごとに領域分割されており、前記ハフマン木集合内の一の特殊なハフマン木の分割領域により特定される出現確率が、前記一の特殊なハフマン木の特殊記号列よりもビット数が多い特殊記号列を葉とする他の特殊なハフマン木の分割領域により特定される出現確率よりも低く設定されている場合、前記出現率が含まれる分割領域に属する特殊なハフマン木を前記ハフマン木集合の中から抽出することとしてもよい。【００１５】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、出現率が低いほど特殊記号列が長い特殊なハフマン木を選択することができる。【００１６】
また、前記一の特殊なハフマン木の分割領域が、前記他の特殊なハフマン木の分割領域によりも広く設定されていることとしてもよい。【００１７】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、出現率が高いほど特殊記号列が短い特殊なハフマン木を選択することができる。【００１８】
また、前記ハフマン木集合には、前記複数種類の記号列のみを葉とする通常のハフマン木が含まれており、前記特殊なハフマン木の分割領域により特定される最大の出現確率よりも、前記通常のハフマン木の分割領域により特定される出現確率が高く設定されており、前記出現率が含まれる分割領域が前記通常のハフマン木の分割領域である場合、当該通常のハフマン木を前記ハフマン木集合の中から抽出することとしてもよい。【００１９】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、出現率が高いほど特殊なハフマン木よりも通常のハフマン木を選択することができる。【００２０】
また、前記通常のハフマン木の分割領域により特定される出現確率よりも、いずれのハフマン木も圧縮に用いない分割領域により特定される出現確率が高く設定されており、前記出現率が含まれる分割領域が前記いずれのハフマン木も圧縮に用いない分割領域である場合、前記ビット列を圧縮しないこととしてもよい。【００２１】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、圧縮効率が悪い分割領域における圧縮を防止することができ、圧縮速度の高速化を図ることができる。【００２２】
また、前記出現確率の範囲が前記出現確率５０％を境界として対称となるように領域分割されており、前記出現率が５０％以上である場合、当該出現率が含まれる一の分割領域に対し出現確率５０％を境界として対称となる前記出現確率０％以上５０％未満内の他の分割領域に対応するハフマン木を前記ハフマン木集合の中から抽出し、前記他の分割領域に対応するハフマン木を用いて、抽出されたビット列の反転ビット列を圧縮することとしてもよい。【００２３】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、一の分割領域と他の分割領域とで同一のハフマン木を共有することができる。
【発明の効果】
【００２４】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置は、低速ＣＰＵや少メモリ、少ディスク容量などの省資源の環境下において効率よく圧縮／伸長をおこなうことができるという効果を奏する。
【図面の簡単な説明】
【００２５】
【図１】図１は、実施の形態１にかかる情報検索装置のハードウェア構成を示すブロック図である。
【図２】図２は、実施の形態１にかかる情報検索装置の機能的構成を示すブロック図である。
【図３】図３は、見出しデータ生成部の詳細な機能的構成を示すブロック図である。
【図４】図４は、本文ＨＴＭＬリストの一例を示す説明図である。
【図５】図５は、本文ＨＴＭＬファイルのファイル構成データを示す説明図である。
【図６】図６は、見出しデータを示す説明図である。
【図７】図７は、文字出現頻度管理データ生成部の詳細な機能的構成を示すブロック図である。
【図８】図８は、文字出現頻度管理データの生成処理を示すデータ構成図である。
【図９】図９は、図８に示した（Ｂ）のデータ構成を示す説明図である。
【図１０】図１０は、図８に示した（Ｅ）のデータ構成を示す説明図である。
【図１１】図１１は、連字／外字置換処理を示すデータ構成図である。
【図１２】図１２は、最終的に生成された連字／外字置換テーブルを示す説明図である。
【図１３】図１３は、図２に示した圧縮／暗号化部の詳細な機能的構成を示すブロック図である。
【図１４】図１４は、圧縮／暗号化部による具体的なハフマン木生成処理を示す説明図である。
【図１５−１】図１５−１は、圧縮部によって圧縮された圧縮コンテンツのデータ構造を示す説明図である。
【図１５−２】図１５−２は、圧縮ブロックデータと、圧縮前の元のブロックデータとの比較を示す図表である。
【図１６−１】図１６−１は、１検索対象ファイル内における文字データの出現確率を示す説明図である。
【図１６−２】図１６−２は、出現マップと図１６−１に示した各領域との関係を示す説明図である。
【図１６−３】図１６−３は、図１６−１に示した領域と圧縮パターンとの対応関係を示す領域／圧縮パターン対応テーブルである。
【図１６−４】図１６−４は、Ａ領域およびＡ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−５】図１６−５は、Ｂ領域およびＢ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−６】図１６−６は、Ｃ領域およびＣ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−７】図１６−７は、Ｄ領域およびＤ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−８】図１６−８は、Ｅ領域およびＥ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−９】図１６−９は、図１６−６に示した１６ビット記号列を追加した場合の記号列の符号語との対応関係の一例を示す図表である。
【図１６−１０】図１６−１０は、葉となる１７番目の記号列の追加前と追加後における４ビット系ハフマン圧縮の比較例を示す説明図である。
【図１６−１１】図１６−１１は、ビット列圧縮データのデータ構造を示す説明図である。
【図１７】図１７は、図２に示した検索初期化部の詳細な機能的構成を示すブロック図である。
【図１８】図１８は、区点対応テーブルと出現マップとの対応関係を示す説明図である。
【図１９】図１９は、図２に示した全文検索部の詳細な機能的構成を示すブロック図である。
【図２０】図２０は、図２に示した検索結果表示部の詳細な機能的構成を示すブロック図である。
【図２１】図２１は、実施の形態１にかかる情報検索装置の情報検索処理手順を示すフローチャートである。
【図２２】図２２は、図２１に示した文字出現頻度管理データ生成処理の詳細な処理手順を示すフローチャートである。
【図２３】図２３は、上述した文字出現頻度集計処理の詳細な処理手順を示すフローチャートである。
【図２４−１】図２４−１は、図２１に示した圧縮／暗号化処理の詳細な処理手順を示すフローチャートである。
【図２４−２】図２４−２は、文字出現頻度管理データ圧縮処理の詳細な処理手順を示すフローチャートである。
【図２５−１】図２５−１は、図２１に示した検索初期化処理の詳細な処理手順を示すフローチャートである。
【図２５−２】図２５−２は、文字出現頻度管理データ伸長処理の詳細な処理手順を示すフローチャートである。
【図２６】図２６は、図２１に示した全文検索処理の詳細な処理手順を示すフローチャートである。
【図２７】図２７は、分割領域の見直しを示す図表である。
【図２８】図２８は、１検索対象ファイル内における文字データの出現確率を示す説明図である。
【図２９−１】図２９−１は、Ｂ領域における伸長コードとハフマン木の枝との関係を示す図表である。
【図２９−２】図２９−２は、Ｂ領域におけるハフマン木を示す説明図である。
【図２９−３】図２９−３は、Ｂ領域ハフマン木における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。
【図３０−１】図３０−１は、Ｃ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。
【図３０−２】図３０−２は、Ｃ領域におけるハフマン木を示す説明図である。
【図３０−３】図３０−３は、Ｃ領域ハフマン木における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。
【図３１−１】図３１−１は、Ｄ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。
【図３１−２】図３１−２は、Ｄ領域におけるハフマン木を示す説明図である。
【図３１−３】図３１−３は、Ｄ領域ハフマン木における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。
【図３２−１】図３２−１は、Ｅ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。
【図３２−２】図３２−２は、Ｅ領域におけるハフマン木を示す説明図である。
【図３２−３】図３２−３は、Ｅ領域ハフマン木における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。
【図３３】図３３は、Ｂ領域ハフマン木の圧縮用の構造体を示す説明図である。
【図３４】図３４は、Ｃ領域ハフマン木の圧縮用の構造体を示す説明図である。
【図３５】図３５は、Ｄ領域ハフマン木の圧縮用の構造体を示す説明図である。
【図３６】図３６は、Ｅ領域ハフマン木の圧縮用の構造体を示す説明図である。
【図３７−１】図３７−１は、Ｂ領域ハフマン木の伸長用の構造体を示す説明図である。
【図３７−２】図３７−２は、Ｂ領域伸長用構造体の根領域の記憶内容を示す説明図である。
【図３７−３】図３７−３は、Ｂ領域伸長用構造体の第１節点領域の記憶内容を示す説明図である。
【図３７−４】図３７−４は、Ｂ領域伸長用構造体の第２節点領域の記憶内容を示す説明図である。
【図３７−５】図３７−５は、Ｂ領域伸長用構造体の葉の領域の記憶内容を示す説明図である。
【図３８−１】図３８−１は、Ｃ領域ハフマン木の伸長用の構造体を示す説明図である。
【図３８−２】図３８−２は、Ｃ領域伸長用構造体の根領域の記憶内容を示す説明図である。
【図３８−３】図３８−３は、Ｃ領域伸長用構造体の第１節点領域の記憶内容を示す説明図である。
【図３８−４】図３８−４は、Ｃ領域伸長用構造体の第２節点領域の記憶内容を示す説明図である。
【図３８−５】図３８−５は、Ｃ領域伸長用構造体の葉の第１領域の記憶内容を示す説明図である。
【図３８−６】図３８−６は、Ｃ領域伸長用構造体の葉の第２領域の記憶内容を示す説明図である。
【図３９−１】図３９−１は、Ｄ領域ハフマン木の伸長用の構造体を示す説明図である。
【図３９−２】図３９−２は、Ｄ領域伸長用構造体の根領域の記憶内容を示す説明図である。
【図３９−３】図３９−３は、Ｄ領域伸長用構造体の第１節点領域の記憶内容を示す説明図である。
【図３９−４】図３９−４は、Ｄ領域伸長用構造体の第２節点領域の記憶内容を示す説明図である。
【図３９−５】図３９−５は、Ｄ領域伸長用構造体の葉の第１領域の記憶内容を示す説明図である。
【図３９−６】図３９−６は、Ｄ領域伸長用構造体の葉の第２領域の記憶内容を示す説明図である。
【図４０−１】図４０−１は、Ｅ領域ハフマン木の伸長用の構造体を示す説明図である。
【図４０−２】図４０−２は、Ｅ領域伸長用構造体の根領域の記憶内容を示す説明図である。
【図４０−３】図４０−３は、Ｅ領域伸長用構造体の節点領域の記憶内容を示す説明図である。
【図４０−４】図４０−４は、Ｅ領域伸長用構造体の葉の第１領域の記憶内容を示す説明図である。
【図４０−５】図４０−５は、Ｅ領域伸長用構造体の葉の第２領域の記憶内容を示す説明図である。
【図４１】図４１は、Ｂ領域の文字データに関する出現ビット列の圧縮例を示す説明図である。
【図４２】図４２は、Ｃ領域の文字データに関する出現ビット列の圧縮例を示す説明図である。
【図４３】図４３は、Ｄ領域の文字データに関する出現ビット列の圧縮例（その１）を示す説明図である。
【図４４】図４４は、Ｄ領域の文字データに関する出現ビット列の圧縮例（その２）を示す説明図である。
【図４５】図４５は、Ｅ領域の文字データに関する出現ビット列の圧縮例（その１）を示す説明図である。
【図４６】図４６は、Ｅ領域の文字データに関する出現ビット列の圧縮例（その２）を示す説明図である。
【図４７】図４７は、Ｂ領域のハフマン圧縮処理手順を示すフローチャートである。
【図４８】図４８は、４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図４９】図４９は、Ｃ領域のハフマン圧縮処理手順を示すフローチャートである。
【図５０】図５０は、１６ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図５１】図５１は、Ｄ領域のハフマン圧縮処理手順を示すフローチャートである。
【図５２】図５２は、６４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図５３】図５３は、Ｅ領域のハフマン圧縮処理手順を示すフローチャートである。
【図５４】図５４は、２５６ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図５５】図５５は、１６／６４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図５６】図５６は、マスクパターンテーブルを示す説明図である。
【図５７】図５７は、Ｃ領域の文字データに関する出現ビット列の圧縮符号列の伸長例を示す説明図である。
【図５８】図５８は、実施の形態２における出現マップへの伸長処理手順を示すフローチャート（その１）である。
【図５９】図５９は、実施の形態２における出現マップへの伸長処理手順を示すフローチャート（その２）である。
【符号の説明】
【００２６】
２００  情報検索装置
２０１  編集部
２０２  検索処理部
２１０  コンテンツ
２１１  見出しデータ生成部
２１２  文字出現頻度管理データ生成部
２１３  暗号化部
２２１  検索初期化部
２２２  全文検索部
２２３  検索結果表示部
２３０  文字出現頻度管理データ（圧縮情報）
２４０  連字／外字置換テーブル
２５０  圧縮コンテンツ
２６０  暗号化文字出現頻度管理データ
２７０  暗号化連字／外字置換テーブル
【発明を実施するための最良の形態】
【００２７】
［実施の形態１］
（情報検索装置のハードウェア構成）
まず、実施の形態１にかかる情報検索装置のハードウェア構成について説明する。図１は、実施の形態１にかかる情報検索装置のハードウェア構成を示すブロック図である。【００２８】
図１において、情報検索装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、ＲＯＭ（Ｒｅａｄ―Ｏｎｌｙ  Ｍｅｍｏｒｙ)１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、ＨＤＤ（ハードディスクドライブ）１０４と、ＨＤ（ハードディスク）１０５と、ＦＤＤ（フレキシブルディスクドライブ）１０６と、着脱可能な記録媒体の一例としてのＦＤ（フレキシブルディスク）１０７と、ディスプレイ１０８と、Ｉ／Ｆ（インターフェース）１０９と、キーボード１１０と、マウス１１１と、スキャナ１１２と、プリンタ１１３と、を備えている。また、各構成部はバス１００によってそれぞれ接続されている。【００２９】
ここで、ＣＰＵ１０１は、情報検索装置の全体の制御を司る。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵ１０１のワークエリアとして使用される。ＨＤＤ１０４は、ＣＰＵ１０１の制御にしたがってＨＤ１０５に対するデータのリード／ライトを制御する。ＨＤ１０５は、ＨＤＤ１０４の制御で書き込まれたデータを記憶する。【００３０】
ＦＤＤ１０６は、ＣＰＵ１０１の制御にしたがってＦＤ１０７に対するデータのリード／ライトを制御する。ＦＤ１０７は、ＦＤＤ１０６の制御で書き込まれたデータを記憶したり、ＦＤ１０７に記憶されたデータを情報検索装置に読み取らせたりする。【００３１】
また、着脱可能な記録媒体として、ＦＤ１０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、メモリーカードなどであってもよい。ディスプレイ１０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。【００３２】
Ｉ／Ｆ１０９は、通信回線を通じてインターネットなどのネットワーク１１４に接続され、このネットワーク１１４を介して他の装置に接続される。そして、Ｉ／Ｆ１０９は、ネットワーク１１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。【００３３】
キーボード１１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。【００３４】
スキャナ１１２は、画像を光学的に読み取り、情報検索装置内に画像データを取り込む。なお、スキャナ１１２は、ＯＣＲ機能を持たせてもよい。また、プリンタ１１３は、画像データや文書データを印刷する。プリンタ１１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。【００３５】
（情報検索装置の機能的構成）
つぎに、実施の形態１にかかる情報検索装置の機能的構成について説明する。図２は、実施の形態１にかかる情報検索装置２００の機能的構成を示すブロック図である。図２において、情報検索装置２００は、編集部２０１と検索処理部２０２とから構成されている。【００３６】
まず、編集部２０１は、コンテンツ２１０と、見出しデータ生成部２１１と、文字出現頻度管理データ生成部２１２と、圧縮／暗号化部２１３と、から構成されている。コンテンツ２１０は検索対象となる電子データであり、たとえば、国語辞典、英和辞典、和英辞典、用語辞典などの辞書のコンテンツが挙げられる。【００３７】
コンテンツ２１０は、複数の検索対象ファイルから構成される。コンテンツ２１０が辞書のコンテンツである場合、各検索対象ファイルは、たとえば、８ビットコード、１６ビットコード、または３２ビットコードなどの複数種類のビットコードの文字データが記述されている本文ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）ファイルである。【００３８】
また、文字データとしては、８ビット系（ＡＳＣＩＩ（Ａｍｅｒｉｃａｎ  Ｓｔａｎｄａｒｄ  Ｃｏｄｅ  ｆｏｒ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｉｎｔｅｒｃｈａｎｇｅ））である英数字、カタカナ、記号などの文字データ、１６ビット系（ＪＩＳ）の英数字、カタカナ、記号などの文字データ、１６ビット系（ＪＩＳ）の仮名や漢字の文字データが含まれている。これら英数字や、仮名、カタカナなどの８ビットコードが中心である表音文字および漢字の文字データを、本明細書において「標準文字データ」と称す。【００３９】
また、文字データには、標準文字データのほか、外字データ、連字データが含まれる。連字データとは、２以上の文字列からなる文字データである。たとえば、１６ビットの２つの仮名の連字データである場合、当該連字データは、３２ビットコードの文字データからなる。また、非文字データではあるがアドレスポインタなどのバイナリデータも便宜的に上記「文字データ」に含めることとする。以下、特に断りがない限り、「文字データ」という用語には、バイナリデータも含まれる。【００４０】
また、見出しデータ生成部２１１は、コンテンツ２１０内、すなわち複数の検索対象ファイルに記述されている単語や用語などの文字列に関する見出しデータ３００を生成する。文字出現頻度管理データ生成部２１２は、コンテンツ２１０から、複数の検索対象ファイルに記述されている文字データの出現頻度に関する文字出現頻度管理データ２３０を生成する。さらに、文字出現頻度管理データ生成部２１２は、複数の検索対象ファイルに記述されている連字データを外字データに置換する連字／外字置換テーブル２４０を生成する。【００４１】
また、圧縮／暗号化部２１３は、コンテンツ２１０を圧縮して圧縮コンテンツ２５０を生成する。また、文字出現頻度管理データ２３０を圧縮／暗号化して、暗号化圧縮文字出現頻度管理データ２６０を生成する。さらに、連字／外字置換テーブル２４０を暗号化して、暗号化連字／外字置換テーブル２７０を生成する。【００４２】
また、検索処理部２０２は、検索初期化部２２１と、全文検索部２２２と、検索結果表示部２２３とから構成されている。検索初期化部２２１は、圧縮情報である暗号化圧縮文字出現頻度管理データ２６０および暗号化連字／外字置換テーブル２７０を復号して、全文検索部２２２による検索の初期化を実行する。【００４３】
また、全文検索部２２２は、検索キーワードの入力を受け付け、文字出現頻度管理データ２３０、連字／外字置換テーブル２４０、および見出しデータ３００を用いて、圧縮コンテンツ２５０の全文検索を実行して、検索候補一覧を生成する。検索結果表示部２２３は、全文検索部２２２による検索候補の中から、ユーザに選択された検索候補を伸長して、検索結果として表示する。【００４４】
なお、上述したコンテンツ２１０、見出しデータ３００、文字出現頻度管理データ２３０、連字／外字置換テーブル２４０、圧縮コンテンツ２５０、暗号化圧縮文字出現頻度管理データ２６０および暗号化連字／外字置換テーブル２７０は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５などの記録媒体によって、その機能を実現する。また、編集部２０１（内部の機能的構成含む）および検索処理部２０２（内部の機能的構成含む）は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５などの記録媒体に記録されたプログラムを、ＣＰＵ１０１が実行することによって、その機能を実現する。【００４５】
（見出しデータ生成部２１１の機能的構成）
つぎに、図２に示した見出しデータ生成部２１１の詳細な機能的構成について説明する。図３は、見出しデータ生成部２１１の詳細な機能的構成を示すブロック図である。図３において、見出しデータ生成部２１１は、ファイル抽出部３０１と、本文ＨＴＭＬリスト生成部３０２と、アンカー抽出部３０３と、見出し語抽出部３０４と、見出しデータ生成処理部３０５と、から構成されている。【００４６】
ファイル抽出部３０１は、コンテンツ２１０から各検索対象ファイルである本文ＨＴＭＬファイルを抽出する。本文ＨＴＭＬリスト生成部３０２は、ファイル抽出部３０１によって抽出された各本文ＨＴＭＬファイルから、複数の項目データからなる本文ＨＴＭＬリストを生成する。また、アンカー抽出部３０３は、本文ＨＴＭＬリスト生成部３０２によって生成された本文ＨＴＭＬリストの各項目データからアンカーを抽出する。【００４７】
また、見出し語抽出部３０４は、本文ＨＴＭＬリスト生成部３０２によって生成された本文ＨＴＭＬリストの各項目データから見出し語を抽出する。また、見出しデータ生成処理部３０５は、アンカー抽出部３０３によって抽出された各項目データのアンカーと、見出し語抽出部３０４によって抽出された各項目データの見出し語と、を対応付けて、全文検索に用いる見出しデータ３００を生成する。【００４８】
つぎに、見出しデータ生成部２１１によって生成されるデータについて詳細に説明する。図４は、本文ＨＴＭＬリストの一例を示す説明図であり、図５は、本文ＨＴＭＬファイルのファイル構成データ５００を示す説明図であり、図６は、見出しデータ３００を示す説明図である。【００４９】
まず、図４において、コンテンツフォルダ４００（フォルダ名：ｈｏｎｍｏｎ）は、先頭の本文ＨＴＭＬファイルｆ０（ファイル名：ｆｉｌｅ０．ｈｔｍｌ）から最終の本文ＨＴＭＬファイルｆｎ（ファイル名：ｆｉｌｅｎ．ｈｔｍｌ）までの本文ＨＴＭＬファイルｆを、コンテンツ２１０として格納している。【００５０】
各本文ＨＴＭＬファイルｆ０〜ｆｎには、アンカー、見出し語およびその解説文からなる項目データが複数記述されている。アンカーはアンカー抽出部３０３によって抽出され、見出し語は見出し語抽出部３０４によって抽出される。【００５１】
本文ＨＴＭＬリスト生成部３０２では、各本文ＨＴＭＬファイルｆ０〜ｆｎに記述されている項目データを抽出し、各項目データＫ１〜Ｋｋを結合することにより、本文ＨＴＭＬリスト４１０が生成される。本文ＨＴＭＬリスト４１０において、任意の項目データＫｉは、いずれかの本文ＨＴＭＬファイルに記述されている項目データである。なお、項目データＫｉにおいて、アンカーＫｉ−１は、『ａｉ１０１』であり、見出し語Ｋｉ−２は、『アイ−アイ［ａｙｅ  ａｙｅ］』である。なお、符号Ｋｉ−３は、解説文である。【００５２】
また、図５において、ファイル構成データ５００は、各本文ＨＴＭＬファイルｆ０〜ｆｎのファイル番号（符号５０１）と、図４に示した各本文ＨＴＭＬファイルｆ０〜ｆｎのファイルパス（符号５０２）と、が関連付けられたデータである。ここで、ファイル番号は、本文ＨＴＭＬファイルｆに付されている数字に該当し、たとえば、本文ＨＴＭＬファイルｆ０の場合、『＃０』がファイル番号に相当する。また、コンテンツフォルダ４００のフォルダ名は『ｈｏｎｍｏｎ』であり、本文ＨＴＭＬファイルｆ０のファイル名は、『ｆｉｌｅ０．ｈｔｍｌ』であるため、ファイル番号＃０である本文ＨＴＭＬファイルｆ０のファイルパスは、『ｈｏｎｍｏｎ￥ｆｉｌｅ０．ｈｔｍｌ』となる。【００５３】
また、図６において、見出しデータ３００は、本文ＨＴＭＬファイルの総ファイル数情報（ｎ＋１個）６０１、本文ＨＴＭＬファイルｆ０〜ｆｎの総ブロックサイズ情報６０２、本文ＨＴＭＬリスト４１０の総項目データ数情報（Ｋ個）６０３、各本文ＨＴＭＬファイルｆ０〜ｆｎのファイルパスリスト６０４、および見出しリスト６０５から構成されている。【００５４】
ファイルパスリスト６０４は、本文ＨＴＭＬファイルｆ０〜ｆｎごとに、ファイル番号と、ブロック数と、ファイルパスが記述されているリストである。また、見出しリスト６０５は、本文ＨＴＭＬファイルｆ０〜ｆｎごとに、ファイル番号と、オフセット値と、レングスと、アンカー(名)と、見出し語が記述されているリストである。【００５５】
（文字出現頻度管理データ生成部２１２の機能的構成）
つぎに、図２に示した文字出現頻度管理データ生成部２１２の詳細な機能的構成について説明する。図７は、文字出現頻度管理データ生成部２１２の詳細な機能的構成を示すブロック図である。図７において、文字出現頻度管理データ生成部２１２は、文字データ抽出部７０１と、文字出現頻度集計部７０２と、ソート部７０３と、生成処理部７０４とから構成されている。【００５６】
文字データ抽出部７０１は、コンテンツ２１０の各本文ＨＴＭＬファイルから文字データを順次抽出する。文字出現頻度集計部７０２は、文字データ抽出部７０１によって抽出された文字データのコンテンツ２１０における出現頻度を集計する。出現頻度とは、たとえば、文字データの出現回数や出現率であらわされる。また、文字出現頻度集計部７０２は、文字データの本文ＨＴＭＬファイルｆ０〜ｆｎごとの存否も検出する。【００５７】
また、ソート部７０３は、出現頻度順に文字データをソートする。生成処理部７０４は、ソートされた各文字データの出現頻度と、存否検出結果である各文字データの存否情報（以下、「出現マップ」）とを用いて、文字出現頻度管理データ２３０を生成する。また、連字／外字置換テーブル２４０も生成する。文字出現頻度管理データ生成部２１２による文字出現頻度管理データ２３０および連字／外字置換テーブル２４０の生成処理を具体的に説明する。【００５８】
図８は、文字出現頻度管理データ２３０の生成処理を示すデータ構成図である。図８において、（Ａ）は、文字出現頻度集計部７０２によって文字データが集計されたときの文字出現頻度管理データ２３０のデータ構成、（Ｂ）は、連字／外字置換処理後の文字出現頻度管理データ２３０のデータ構成、（Ｃ）は、標準文字データおよび外字データからなる混合データのソート後における文字出現頻度管理データ２３０のデータ構成、（Ｄ）は、低出現頻度の混合データのカット後における文字出現頻度管理データ２３０のデータ構成、（Ｅ）は、最終的に生成された文字出現頻度管理データ２３０のデータ構成を示している。【００５９】
（Ａ）において、符号８０１は、文字出現頻度管理データ２３０の管理領域である。また符号８０２は、８ビット系（ＡＳＣＩＩ）である英数字、カタカナ、記号、１６ビット系（ＪＩＳ）の英数字、カタカナ、記号、１６ビット系（ＪＩＳ）のかなや漢字などの標準文字データの出現頻度、出現ファイル数、出現順位、出現マップを記憶する標準文字領域である。【００６０】
また、符号８０３は、外字データの出現頻度、出現ファイル数、出現順位、出現マップを記憶する外字領域である。また、符号８０４は、連字データの出現頻度、出現ファイル数、出現順位、出現マップを記憶する連字領域である。また、符号８０５は、８ビットのバイナリデータの出現頻度、出現ファイル数、出現順位を記憶するバイナリ領域である。【００６１】
（Ａ）のデータ構造において、連字領域８０４の連字データは、その出現頻度順にソートされる。そして、所定の出現頻度以上の連字データを、外字データと重複しないように、他の外字データ（以下、「連字外字データ」）に置換する。このように、出現頻度の高い複数の文字列からなる連字データを、単一文字データである外字データに置換することにより、データ量の削減を図ることができ、圧縮効率の向上を図ることができる。なお、所定の出現頻度未満の連字データは、低出現頻度の連字データであるため、単一の文字データに分解されて、該当する文字領域に割り当てられる。この結果、（Ｂ）連字／外字置換処理後の文字出現頻度管理データ２３０のデータ構成となる。【００６２】
（Ｂ）のデータ構造についてより具体的に説明する。図９は、図８に示した（Ｂ）のデータ構成を示す説明図である。図９において、（Ｂ）のデータ構造では、文字データ領域９００、出現頻度領域９０１、出現ファイル数領域９０２、出現順位領域９０３、出現マップ９０４を有しており、それぞれ文字データ出現頻度、出現ファイル数、出現順位、および存否フラグが記憶されている。出現マップ９０４は、１６ビットを１セグメントとしている。【００６３】
具体的には、その左端がファイル番号『＃０』の本文ＨＴＭＬファイルｆ０の存否フラグであり、順にファイル番号『＃１』の本文ＨＴＭＬファイルｆ１のフラグ、『＃２』の本文ＨＴＭＬファイルｆ２の存否フラグが立てられている。そして、右端がファイル番号『＃ｎ』の本文ＨＴＭＬファイルｆｎの存否フラグである。【００６４】
また、（Ｂ）のデータ構造において、標準文字領域８０２の標準文字データおよび外字領域８０３の外字データを混合して高出現頻度順にソートした結果が、（Ｃ）のデータ構造である。（Ｃ）のデータ構造において、（Ｂ）に示した連字外字領域８１４の連字外字データおよびバイナリ領域８０５のバイナリデータは、ソートの対象外である。【００６５】
（Ｃ）のデータ構造において、標準文字データと外字データとが混在する混合文字領域８１２において、低出現頻度、たとえば、出現回数０回の文字データはカットされる。このカットされたときのデータ構造が、（Ｄ）のデータ構造である。（Ｄ）において、管理領域８０１および混合文字領域８１２と、連字外字領域８１４と、バイナリ領域８０５とを結合することで、（Ｅ）のデータ構造で示したような、最終的な文字出現頻度管理データ２３０を生成することができる。この文字出現頻度管理データ２３０において、管理領域８０１には、ファイル・ブロック数と、出現文字データの種類の数（出現文字数（種類））と、連字外字データの数（連字数（２５６種））と、バイナリデータ数（バイナリ（２５６種））とが記録される。【００６６】
図１０は、図８に示した（Ｅ）のデータ構成を示す説明図である。図１０において、文字出現頻度管理データ２３０は、バイナリデータを除く文字データごとに、出現頻度領域９０１と出現マップ９０４とが対応付けられている。文字データは高出現頻度順にソートされている。なお、後述するが、図１０中、文字データ領域９００の文字データと出現頻度領域９０１の出現頻度は、所定のマスタキーを用いた排他的論理和（ＸＯＲ）によって暗号化される。【００６７】
この文字出現頻度管理データ２３０の出現マップ９０４によれば、出現マップ９０４の左端であるファイル番号『＃０』の本文ＨＴＭＬファイルｆ０には、文字データ『月』の存否フラグと文字データ『日』の存否フラグがともに「１」であり、そのＡＮＤ（論理積）が「１」となる。したがって、本文ＨＴＭＬファイルｆ０には、文字データ『月』および『日』が含まれており、入力キーワードに『月』と『日』が含まれている場合、本文ＨＴＭＬファイルｆ０は検索対象となる。【００６８】
一方、ファイル番号『＃１』の本文ＨＴＭＬファイルｆ１では、文字データ『月』の存否フラグが「１」、文字データ『日』の存否フラグが「０」であり、そのＡＮＤ（論理積）が「０」となる。したがって、本文ＨＴＭＬファイルｆ１には、文字データ『月』が含まれているが『日』が含まれておらず、入力キーワードに『月』と『日』が含まれている場合、本文ＨＴＭＬファイルｆ１はその検索対象外となる。【００６９】
つぎに、連字／外字置換処理について具体的に説明する。図１１は、連字／外字置換処理を示すデータ構成図である。図１１において、（Ｆ）は、文字出現頻度集計部７０２によって連字データが集計されたときの文字出現頻度管理データ２３０の連字領域のデータ構成、（Ｇ）は、連字データのソート後における連字領域８０４のデータ構成、（Ｈ）は、置換後におけるデータ構成を示している。【００７０】
（Ｆ）のデータ構造において、連字領域８０４は、領域１１０１〜１１０７を有している。領域１１０１には、８ビット系（ＡＳＣＩＩ)の数字列データ（「００」〜「９９」）の情報（当該数字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。【００７１】
領域１１０２には、８ビット系（ＡＳＣＩＩ）の英字列データ（「ＡＡ」〜「ｚｚ」）の情報（当該英字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。また、領域１１０３には、８ビット系（ＡＳＣＩＩ）のカタカナ列データ（「アア」〜「ンン」、濁音・半濁音）の情報（当該英字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。【００７２】
領域１１０４には、１６ビット系（ＪＩＳ)の数字列データ（「００」〜「９９」）の情報（当該数字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。また、領域１１０５には、１６ビット系（ＪＩＳ）の英字列データ（「ＡＡ」〜「ｚｚ」）の情報（当該数字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。【００７３】
領域１１０６には、１６ビット系（ＪＩＳ）のカタカナ列データ（「アア」〜「ンン」、濁音・半濁音）の情報（当該カタカナ列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。また、領域１１０７には、１６ビット系（ＪＩＳ）の仮名列データ（「ああ」〜「んん」、濁音・半濁音）の情報（当該仮名列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。【００７４】
また、（Ｇ）のデータ構造は、（Ｆ）のデータ構造を、各連字データの高出現順にソートすることにより得られるデータ構造である。（Ｇ）のデータ構造において、領域１１１１は、高出現頻度の連字データの情報であり、外字データへの置換対象となる。一方、領域１１１２は、所定の出現頻度以下の連字データ（低出現頻度連字データ）の情報である。この低出現頻度連字データは、単一の文字データに分解される。これにより文字データの出現頻度と出現マップ９０４とが補正される。【００７５】
また、（Ｈ）のデータ構造は、（Ｇ）のデータ構造のうち高出現頻度の連字データを外字に置換することによって得られるデータ構造である。連字外字領域８１４には、置換された連字外字データの情報（当該連字外字データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。また、図１２は、最終的に生成された連字／外字置換テーブル２４０を示す説明図である。連字／外字置換テーブル２４０は、（Ｇ）のデータ構造の領域１１１１の連字データと、（Ｈ）のデータ構造の領域８１４の連字外字データとを対応させることによって生成される。【００７６】
（圧縮／暗号化部２１３の詳細な機能的構成）
つぎに、図２に示した圧縮／暗号化部２１３の詳細な機能的構成について説明する。図１３は、図２に示した圧縮／暗号化部２１３の詳細な機能的構成を示すブロック図である。図１３において、圧縮／暗号化部２１３は、低出現頻度文字データ分解部１３０１と、暗号化部１３０２と、生起確率演算部１３０３と、ハフマン木生成部１３０４と、圧縮部１３０５と、から構成されている。【００７７】
まず、低出現頻度文字データ分解部１３０１は、文字出現頻度管理データ生成部２１２によって生成された文字出現頻度管理データ２３０内における文字領域の文字データを高出現頻度順にソートする。そして、所定の出現頻度以下の残余の低出現頻度の文字データを８ビットコードに分解して、同じ８ビットコードであるバイナリデータが記憶されているバイナリ領域に記憶する。【００７８】
暗号化部１３０２は、圧縮部１３０５によって圧縮された圧縮文字出現頻度管理データ２３５を、所定のマスタキーを用いてＸＯＲによる暗号化をおこない、暗号化圧縮文字出現頻度管理データ２６０を生成する。連字／外字置換テーブル２４０も同様に、所定のマスタキーを用いてＸＯＲによる暗号化をおこない、暗号化連字／外字置換テーブル２７０を生成することとしてもよい。【００７９】
また、生起確率演算部１３０３は、低出現頻度文字データ分解部１３０１による分解によって得られた文字出現頻度管理データ２３０における標準文字データ、連字外字データおよびバイナリデータを高出現順にソートして、これらの生起確率を演算する。また、ハフマン木生成部１３０４は、生起確率演算部１３０３によって演算された生起確率からハフマン木を生成する。【００８０】
また、圧縮部１３０５は、ハフマン木生成部１３０４によって生成されたハフマン木を用いてコンテンツ２１０を圧縮し、圧縮コンテンツ２５０を生成する。具体的には、各本文ＨＴＭＬファイルｆ０〜ｆｎに記述されている文字データに対して、出現頻度が高い順、すなわち生起確率が高い順に短いビットを割り当てて、コンテンツ２１０を圧縮する。なお、圧縮コンテンツ２５０内の本文ＨＴＭＬファイルを「圧縮ファイル」と称す。【００８１】
つぎに、圧縮／暗号化部２１３による具体的なハフマン木生成処理について説明する。図１４は、圧縮／暗号化部２１３による具体的なハフマン木生成処理を示す説明図である。図１４の（Ｉ）に示した文字出現頻度管理データ２３０を、低出現頻度文字データ分解部１３０１により、低出現頻度の文字データを分解して、バイナリデータが記憶されているバイナリ領域８１５に記憶する（図１４中（Ｊ））。【００８２】
つぎに、（Ｊ）のデータ構造において、混合文字領域８１２、連字外字領域８１４、およびバイナリ領域８１５内のすべての文字データを高出現頻度順にソートする（図１４中（Ｋ））。そして、（Ｋ）の領域１４００において、出現頻度をハフマンの圧縮パラメータとして各文字データの生起確率を演算する（図１４中（Ｌ））。最後に（Ｌ）において、各文字データの生起確率からハフマン木１４０１を生成する（図１４中（Ｍ））。【００８３】
つぎに、圧縮部１３０５によって圧縮された圧縮コンテンツ２５０のデータ構造について説明する。図１５−１は、圧縮部１３０５によって圧縮された圧縮コンテンツ２５０のデータ構造を示す説明図である。図１５−１では、任意の本文ＨＴＭＬファイルｆｊに着目して説明する。この本文ＨＴＭＬファイルｆｊは、ブロック数情報（ｍ個）を格納する領域１５０１と、ｍ個の各ブロックのアドレス情報（＃１〜＃ｍ）を格納する領域１５０２と、各ブロックの圧縮ブロックデータＣ１〜Ｃｍを格納する領域１５０３から構成される。【００８４】
また、図１５−２は、圧縮ブロックデータＣ１〜Ｃｍと、圧縮前の元のブロックデータとの比較を示す図表である。図１５−２を参照すると、圧縮ブロックデータＣ１〜Ｃｍのレングスが、対応する元のブロックデータのレングスの約半分に圧縮されていることがわかる。【００８５】
ここで、図１３に示した圧縮部１３０５のあらたな機能について説明する。本実施の形態では、圧縮部１３０５は、コンテンツ２１０のほか、文字出現頻度管理データ２３０を圧縮して、圧縮文字出現頻度管理データ２３５を生成する。具体的には、文字出現頻度管理データ２３０内の出現マップ９０４を圧縮する。生成された圧縮文字出現頻度管理データ２３５は、上述したように、暗号化部１３０２により暗号化される。【００８６】
図１６−１は、１検索対象ファイル内における文字データの出現確率を示す説明図である。図１６−１において、縦軸は、１検索対象ファイル内における文字データの出現確率を示しており、上が出現確率０％、下が出現確率１００％である。この出現確率の範囲０〜１００％を対数的に分割する。すなわち、確率が等しくなるように領域の上下２分割を繰り返すことにより、出現率の範囲を区画する分割領域が形成される。【００８７】
この分割により、出現率をｒとすると、０≦ｒ＜１／３２がＥ領域、１／３２≦ｒ＜１／１６がＤ領域、１／１６≦ｒ＜１／８がＣ領域、１／８≦ｒ＜１／４がＢ領域、１／４≦ｒ＜１／２がＡ領域、１／２≦ｒ＜３／４がＡ’領域、３／４≦ｒ＜７／８がＢ’領域、７／８≦ｒ＜１５／１６がＣ’領域、１５／１６≦ｒ＜３１／３２がＤ’領域、３１／３２≦ｒ≦１がＥ’領域となる。【００８８】
なお、同一アルファベットを付した領域の出現率は同一である。すなわち、出現確率５０％を境界として領域幅と出現確率が上下対称となっている。たとえば、Ａ領域およびＡ’領域の出現率はともに１／４である。なお、ある辞書コンテンツの１文字の平均出現率は、０．０７７であることがわかっているため、領域Ｃに属することとなる。【００８９】
図１６−２は、出現マップ９０４と図１６−１に示した各領域との関係を示す説明図である。図１６−２では、文字データごとに図１６−１の出現率ｒが計算されており、図１６−１に示した各領域と対応付けられている。出現率ｒは、全検索対象ファイルｆ０〜ｆｎ中、対象となる文字データが出現する検索対象ファイル数がどの程度存在するかをあらわすデータであり、分母を検索対象ファイル数（ｎ＋１）、対象となる文字データが１つでも出現した検索対象ファイル数である。ある検索対象ファイル中、対象となる文字データが複数出現しても１ファイルとしてカウントされる。このように、出現率ｒにより文字データに対応する領域が異なるため、この出現率ｒは圧縮パラメータとしての役割を果たす。【００９０】
図１６−３は、図１６−１に示した領域と圧縮パターンとの対応関係を示す領域／圧縮パターン対応テーブルである。図１６−３において、圧縮パターンとは、出現マップ９０４における各文字データのビット列の圧縮に用いるハフマン木の種類をあらわしている。たとえば、Ａ領域およびＡ’領域は非圧縮のためハフマン木を使用しない。また、Ｂ領域およびＢ’領域は、通常の４ビット系ハフマン圧縮のように１６種の符号語に圧縮する１６種ハフマン木を圧縮パターンとして用いる。この１６種ハフマン木のように、通常のハフマン圧縮に適用されるハフマン木を、「通常のハフマン木」と称す。【００９１】
また、Ｃ領域およびＣ’領域は、１６種ハフマン木に１６ビットの特殊記号列を追加した１６＋１（１６ビット）種ハフマン木を圧縮パターンとして用いる。また、Ｄ領域およびＤ’領域は、１６種ハフマン木に３２ビットの特殊記号列を追加した１６＋１（３２ビット）種ハフマン木を圧縮パターンとして用いる。また、Ｅ領域およびＥ’領域は、１６種ハフマン木に６４ビットの特殊記号列を追加した１６＋１（６４ビット）種ハフマン木を圧縮パターンとして用いる。これら特殊記号列は、文字データが出現しないことを意味するビット値（本例では、「０」）の連続記号列（ＮＵＬＬ記号列）である。【００９２】
これら、１６種＋１種（１６、３２、６４、・・・ビット）ハフマン木のように、１６、３２、６４、・・・ビットの特殊記号列を葉に追加したハフマン木を、「通常のハフマン木」と区別するため、「特殊なハフマン木」と称す。【００９３】
なお、Ａ’領域〜Ｅ’領域の出現確率で出現する文字データについては、出現マップ９０４中のビット列を反転させてからＡ領域〜Ｅ領域で用いられるハフマン木を用いてハフマン圧縮をおこなう。【００９４】
すなわち、Ａ’領域〜Ｅ’領域については、別途ハフマン木を保持しておく必要がなく、Ａ領域〜Ｅ領域で用いられるハフマン木をそのまま用いることができるため、データ量の削減を図ることができる。なお、これらハフマン木は、図１に示したＲＡＭ１０３やＨＤ１０５に保存されており、領域／圧縮パターン対応テーブルを参照することにより、抽出することができる。【００９５】
図１６−４〜図１６−８は、各領域における４ビット系のハフマン圧縮を示す図表である。各図表において、左端の記号列［００００］〜［１１１１］は、出現マップ内のビット列のうち４ビット分のビット列パターンをあらわしており、ハフマン木の葉となる。【００９６】
また、「符号長（小計）」の値は、「生起確率」と「符号長」と「数量」とを掛け合わせた値である。「生起確率（小計）」の値は、「生起確率（基準）」と「数量」とを掛け合わせた値である。「生起確率（小計）」は、領域ごとに、「生起確率」の高い記号列順に割り振られる。【００９７】
図１６−４は、Ａ領域およびＡ’領域における４ビット系のハフマン圧縮を示す図表である。「生起確率（基準）」には、「生起確率」の高い記号列順に０．２５（＝１／４）、０．１２５（＝１／８）、０．０３１２５（＝１／３２）、０．００３９０６２５（＝１／２５６）、０．０００９７６５６３（＝１／１０２４）が割り振られている。対象となる文字データの出現率ｒがＡ領域およびＡ’領域に該当する場合には圧縮しない。【００９８】
図１６−５は、Ｂ領域およびＢ’領域における４ビット系のハフマン圧縮を示す図表である。「生起確率（基準）」には、「生起確率」の高い記号列順に０．５（＝１／２）、０．１２５（＝１／８）、０．０６２５（＝１／１６）、０．０１５６２５（＝１／６４）、０．００３９０６２５（＝１／２５６）、０．０００９７６５６３（＝１／１０２４）が割り振られている。【００９９】
対象となる文字データの出現率ｒがＢ領域およびＢ’領域に該当する場合には、その文字データのビット列に含まれている記号列［００００］〜［１１１１］を、この「生起確率（小計）」に基づき、１６種ハフマン木により対応する符号語に圧縮する。【０１００】
図１６−６は、Ｃ領域およびＣ’領域における４ビット系のハフマン圧縮を示す図表である。この図表では、４ビットの記号列［００００］〜［１１１１］のほかに、１６ビットの記号列［００００…００００］も含まれている。「生起確率（基準）」には、「生起確率」の高い記号列順に０．２５（＝１／４）、０．２５（＝１／４）、０．１２５（＝１／８）、０．０６２５（＝１／１６）、０．０００１２２０７（＝１／８１９２）、０．０００９７６５６３（１／１０２４）、０．０００１２２０７（＝１／８１９２）が割り振られている。【０１０１】
対象となる文字データの出現率ｒがＣ領域およびＣ’領域に該当する場合には、その文字データのビット列に含まれている記号列［００００］〜［１１１１］，［００００…００００］を、この「生起確率（小計）」に基づき、１６種＋１（１６ビット）種ハフマン木により対応する符号語に圧縮する。【０１０２】
図１６−７は、Ｄ領域およびＤ’領域における４ビット系のハフマン圧縮を示す図表である。この図表では、４ビットの記号列［００００］〜［１１１１］のほかに、３２ビットの記号列［００００……００００］も含まれている。「生起確率（基準）」には、「生起確率」の高い記号列順に０．２５（＝１／４）、０．２５（＝１／４）、０．１２５（＝１／８）、０．０６２５（＝１／１６）、０．０００１２２０７（＝１／８１９２）、０．０００９７６５６３（＝１／１０２４）、０．０００１２２０７（＝１／８１９２）が割り振られている。【０１０３】
対象となる文字データの出現率ｒがＤ領域およびＤ’領域に該当する場合には、その文字データのビット列に含まれている記号列［００００］〜［１１１１］，［００００……００００］を、この「生起確率（小計）」に基づき、１６種＋１（３２ビット）種ハフマン木により対応する符号語に圧縮する。【０１０４】
図１６−８は、Ｅ領域およびＥ’領域における４ビット系のハフマン圧縮を示す図表である。この図表では、４ビットの記号列［００００］〜［１１１１］のほかに、６４ビットの記号列［００００………００００］も含まれている。「生起確率（基準）」には、「生起確率」の高い記号列順に０．２５（＝１／４）、０．２５（＝１／４）、０．１２５（＝１／８）、０．０６２５（＝１／１６）、０．０００１２２０７（＝１／８１９２）、０．０００９７６５６３（＝１／１０２４）、０．０００１２２０７（＝１／８１９２）が割り振られている。【０１０５】
対象となる文字データの出現率ｒがＥ領域およびＥ’領域に該当する場合には、その文字データのビット列に含まれている記号列［００００］〜［１１１１］，［００００………００００］を、この「生起確率（小計）」に基づき、１６種＋１（６４ビット）種ハフマン木により対応する符号語に圧縮する。【０１０６】
図１６−９は、図１６−６に示した１６ビット記号列を追加した場合の記号列の符号語との対応関係の一例を示す図表である。図１６−９において、あらたに葉として追加される１６ビット記号列は、生起確率が最も高いため、２ビットの符号長の符号語「００」が割り当てられている。なお、符号長を短縮するため、この符号長は補正される。【０１０７】
図１６−１０は、葉となる１７番目の記号列の追加前と追加後における４ビット系ハフマン圧縮の比較例を示す説明図である。図１６−１０において、上下の図表は、例として、文字データの出現率を１０％とした場合の４ビット系のハフマン圧縮を示す図表である。上の図表は、１２ビットの記号列［００００００００００００］の追加前をあらわしており、下の図表は、１７番目の１２ビット記号列［００００００００００００］の追加前をあらわしている。【０１０８】
下の図表において、この１７番目の１２ビット記号列を追加した場合、その記号列の生起確率は１／４超を目安とする。これにより、追加前において生起確率が最大である記号列［００００］の生起確率を補正する。【０１０９】
また、１７番目の１２ビット記号列には、符号長として２ビットが割り当てられるが、その符号語の符号長が短くなるように補正する。ここでは、１７番目の１２ビット記号列の符号長は２ビットから０．６６６６７ビット（＝２ビット×４ビット／１２ビット）に補正される。【０１１０】
上下の図表の平均符号長を比較すると、上の図表における平均符号長が０．５１３５５であり、下の図表の平均符号長が０．４６０３８４０８９となるため、１７番目の１２ビット記号列を追加することにより、圧縮率が１０％改善することとなる。【０１１１】
図１６−１１は、ビット列圧縮データのデータ構造を示す説明図である。ビット列圧縮データ１６００は、アドレス１６０１と圧縮パターン１６０２と領域フラグ１６０３と圧縮ビット列１６０４とパディング１６０５とからなる。【０１１２】
アドレス１６０１は、そのビット列圧縮データ１６００の圧縮元のビット列の文字データにリンクするポインタである。圧縮パターン１６０２とは、ハフマン圧縮に用いるハフマン木を特定する情報である。領域フラグ１６０３とは、そのビット列圧縮データ１６００の圧縮元のビット列の文字データの出現率がＡ領域〜Ｅ領域の範囲内にあるか、Ａ’領域〜Ｅ’領域の範囲内にあるかを特定するためのフラグである。【０１１３】
圧縮ビット列１６０４とは、圧縮元のビット列を圧縮パターンで特定されるハフマン木で圧縮されたビット列である。パディング１６０５は必要に応じて追加することで、ビット列圧縮データ１６００を可変長にする。【０１１４】
なお、図１６−１〜図１６−１１では、おもに４ビット系のハフマン圧縮について説明したが、２ビットや３ビット、８ビット、１６ビットなど４ビット系以外のハフマン圧縮にも適用することができる。【０１１５】
（検索初期化部２２１の詳細な機能的構成）
つぎに、図２に示した検索初期化部２２１の詳細な機能的構成について説明する。図１７は、図２に示した検索初期化部２２１の詳細な機能的構成を示すブロック図である。図１７において、検索初期化部２２１は、復号部１７０１と、低出現頻度文字データ分解部１７０２と、生起確率演算部１７０３と、ハフマン木生成部１７０４と、出現マップ設定部１７０５と、伸長部１７０６と、から構成されている。【０１１６】
まず、復号部１７０１は、暗号化圧縮文字出現頻度管理データ２６０を復号する。具体的には、図１３で用いた暗号化のマスタキーを用いて排他的論理和（ＸＯＲ）による復号処理を実行する。同様に、暗号化連字／外字置換テーブル２７０も、元の連字／外字置換テーブル２４０に戻す。また、低出現頻度文字データ分解部１７０２、生起確率演算部１７０３およびハフマン木生成部１７０４は、図１３に示した低出現頻度文字データ分解部１３０１、生起確率演算部１３０３およびハフマン木生成部１３０４と同一の処理を実行し、ハフマン木１７１０を生成する。【０１１７】
ここで、図１７に示したあらたな機能である伸長部１７０６について説明する。伸長部１７０６は、復号部１７０１により復号された圧縮文字出現頻度管理データ２３５を伸長する。具体的には、各文字データのビット列圧縮データ１６００を読み込んで、その中のアドレス１６０１、圧縮パターン１６０２、領域フラグ１６０３を特定する。そして、圧縮時に用いたハフマン木により、圧縮ビット列１６０４を伸長する。これにより、文字出現頻度管理データ２３０が伸長されることとなる。【０１１８】
また、出現マップ設定部１７０５は、伸長された文字出現頻度管理データ２３０の出現マップ９０４を読み込んでメモリ展開し、区点対応テーブルとリンクする。区点は、ＪＩＳによって制定された全角文字向けの文字コードであり、区点対応テーブルは、各区点のアドレスを記憶したテーブルである。【０１１９】
図１８は、区点対応テーブルと出現マップとの対応関係を示す説明図である。この区点対応テーブル１８００を用いて、文字出現頻度管理データ２３０の文字データと区点とを対応づけることにより、区点に対応する文字データの存否フラグ列を出現マップ９０４から呼び出すことができる。【０１２０】
（全文検索部２２２の詳細な機能的構成）
つぎに、図２に示した全文検索部２２２の詳細な機能的構成について説明する。図１９は、図２に示した全文検索部２２２の詳細な機能的構成を示すブロック図である。図１９において、全文検索部２２２は、検索キーワード入力処理部１９０１と、検索キーワード圧縮部１９０２と、出現マップ読取部１９０３と、圧縮ファイル特定部１９０４と、圧縮ファイル抽出部１９０５と、判定部１９０６と、ブロック伸長部１９０７と、文字列比較部１９０８と、見出しデータ特定部１９０９と、検索候補一覧表示部１９１０と、検索候補選択部１９１１と、から構成されている。【０１２１】
まず、検索キーワード入力処理部１９０１は、ユーザからの検索キーワードの入力を受け付ける。また、検索キーワードが複数ある場合、各検索キーワードの文字列を連結する。さらに、検索キーワードの連字が所定の連字に該当する場合、連字／外字置換テーブル２４０を用いて、連字を外字に置換する。このあと、検索キーワード入力処理部１９０１は、検索キーワードを単一文字に分解する。【０１２２】
また、検索キーワード圧縮部１９０２は、検索キーワード入力処理部１９０１によって入力された検索キーワードを、検索初期化部２２１のハフマン木生成部１７０４によって生成されたハフマン木１７１０を用いて圧縮する。また、出現マップ読取部１９０３は、出現マップ設定部１７０５によって設定された出現マップ９０４を用いて、検索キーワードの各文字の各ＨＴＭＬファイルｆ０〜ｆｎにおける存否フラグ列を読み取る。具体的には、この出現マップ９０４における各文字データは、区点対応テーブルにより区点とリンクしているため、区点と一致する検索キーワードの各文字データの存否フラグ列を読み取ることができる。【０１２３】
圧縮ファイル特定部１９０４は、出現マップ９０４から読み取られた各文字の各ＨＴＭＬファイルｆ０〜ｆｎにおける存否フラグ列の論理積を算出することにより、検索キーワードの各文字データがすべて存在する圧縮ファイルを特定することで、圧縮ファイルの絞込みをおこなう。ここで、絞込みの一例を、下記表１を用いて説明する。【０１２４】
【表１】
2008146756.tif 000003
【０１２５】
上記表１においては、検索キーワードを『増殖細胞』とし、コンテンツ２１０に含まれている本文ＨＴＭＬファイルｆの数を４個、すなわち、ファイル番号＃０〜＃３までとする。表１において、たとえば、文字『増』の存否フラグ列は［１１００］である。この存否フラグ列は、ファイル番号＃０、＃１の本文ＨＴＭＬファイルｆ０、ｆ１には文字『増』が含まれており、ファイル番号＃２、＃３の本文ＨＴＭＬファイルｆ２、ｆ３には文字『増』が含まれていないことを示している。【０１２６】
そして、表１において、絞込み結果は、ファイル番号ごとの存否フラグの論理積（ＡＮＤ）結果を示している。この絞込み結果によれば、ファイル番号＃１の本文ＨＴＭＬファイルｆ１のみが、存在を示すフラグ「１」となっているため、検索キーワードを構成するすべての文字『増』、『殖』、『細』および『胞』は、ファイル番号＃１の本文ＨＴＭＬファイルｆ１にのみ存在し、他のファイル番号（＃０、＃２、＃３）の本文ＨＴＭＬファイルｆ０、ｆ２、ｆ３には存在しないことがわかる。これにより、検索対象としてオープンするファイルを、ファイル番号＃１の本文ＨＴＭＬファイルｆ１のみに特定することができ、無駄なファイルのオープン／クローズ処理を防止して検索速度の向上を図ることができる。【０１２７】
また、圧縮ファイル抽出部１９０５は、圧縮コンテンツ２５０内において圧縮されている本文ＨＴＭＬファイルの中から、圧縮ファイル特定部１９０４によって特定された本文ＨＴＭＬファイルを抽出する。上記表の例では、ファイル番号＃１の圧縮された本文ＨＴＭＬファイル（以下、「圧縮本文ＨＴＭＬファイル」）ｆ１を抽出する。【０１２８】
また、判定部１９０６は、圧縮ファイル抽出部１９０５によって抽出された圧縮本文ＨＴＭＬファイルに、検索キーワード圧縮部１９０２によって圧縮された検索キーワード（以下、「圧縮キーワード」）が含まれているか否かを判定する。具体的には、圧縮本文ＨＴＭＬファイル内の圧縮ブロックデータごとに判定をおこなっている。【０１２９】
この判定結果が不一致である場合、圧縮本文ＨＴＭＬファイルには、検索キーワードが含まれていないことがわかる。一方、判定結果が一致である場合、圧縮本文ＨＴＭＬファイルには、検索キーワードが含まれていることがわかる。たとえば、上記表においては、ファイル番号＃１の本文ＨＴＭＬファイルに、検索キーワード『増殖細胞』という文字列が含まれていることがわかる。【０１３０】
また、ブロック伸長部１９０７は、判定部１９０６により一致すると判定された圧縮ＨＴＭＬファイルの圧縮ブロックデータのみ伸長する。この判定部１９０６およびブロック伸長部１９０７により、本文ＨＴＭＬファイルを圧縮した状態のまま判定をおこなうことができ、不一致であれば、圧縮本文ＨＴＭＬファイルを伸長する前に検索候補から外し、一致した本文ＨＴＭＬファイルのみ伸長することができる。また、ブロック伸長部１９０７において、伸長された本文ＨＴＭＬファイルに連字外字データが含まれている場合、復号部１７０１によって復号された連字／外字置換テーブル２４０を用いて、連字外字データを元の連字データに置換する。【０１３１】
また、文字列比較部１９０８は、ブロック伸長部１９０７によって伸長されたブロックデータ内の文字列と、検索キーワード入力処理部１９０１によって入力された検索キーワードとを比較する。検索キーワードに一致する文字列の項目データがあった場合、当該項目データのファイル番号およびアンカー名を記録し、見出しデータ３００を特定する。なお、特定された見出しデータ３００を、「特定見出しデータ３００」と称す。【０１３２】
検索候補一覧表示部１９１０は、特定見出しデータ３００における項目データのファイル番号とアンカーから、見出しデータ３００を編集して、見出し語が列挙された検索候補一覧を図１に示したディスプレイ１０８に表示する。また、検索候補選択部１９１１は、検索候補一覧表示部１９１０によって表示された検索候補一覧の中から、ユーザの操作によって選択された検索候補を受け付ける。【０１３３】
（検索結果表示部２２３の詳細な機能的構成）
つぎに、図２に示した検索結果表示部２２３の詳細な機能的構成について説明する。図２０は、図２に示した検索結果表示部２２３の詳細な機能的構成を示すブロック図である。図２０において、検索結果表示部２２３は、読出し部２００１と、本文伸長部２００２と、本文表示部２００３と、から構成されている。【０１３４】
まず、読出し部２００１は、検索候補選択部１９１１によって選択された検索候補である項目データを、圧縮コンテンツ２５０から読み出す。また、本文伸長部２００２は、読出し部２００１によって読み出された項目データを、ハフマン木１７１０によって伸長する。検索結果表示部２２３は、本文伸長部２００２によって伸長された項目データを検索結果として表示する。【０１３５】
（情報検索処理手順）
つぎに、実施の形態１にかかる情報検索装置の情報検索処理手順について説明する。図２１は、実施の形態１にかかる情報検索装置の情報検索処理手順を示すフローチャートである。図２１において、まず、文字出現頻度管理データ生成部２１２により、文字出現頻度管理データ生成処理を実行する（ステップＳ２１０１）。【０１３６】
そして、圧縮／暗号化部２１３により、圧縮／暗号化処理を実行する（ステップＳ２１０２）。このあと、検索初期化部２２１により、検索初期化処理を実行する（ステップＳ２１０３）。つぎに、全文検索部２２２により、全文検索処理を実行する（ステップＳ２１０４）。最後に、検索結果表示部２２３により、検索結果表示処理を実行する（ステップＳ２１０５）。なお、検索結果表示処理では、検索候補一覧から選択された検索候補（項目データ）を圧縮コンテンツ２５０から読み出して、ハフマン木にて伸長することにより、項目データの全文を検索結果として表示することができる。【０１３７】
つぎに、図２１に示した文字出現頻度管理データ生成処理（ステップＳ２１０１）の詳細な処理手順について説明する。図２２は、図２１に示した文字出現頻度管理データ生成処理（ステップＳ２１０１）の詳細な処理手順を示すフローチャートである。図２２において、まず、初期化処理を実行する（ステップＳ２２０１）。具体的には、８，１６ビットの文字データ、連字データ、バイナリデータの区点対応の集計領域を確保し、出現頻度と出現マップのセグメント等を初期化する。また、文字データのコードをセットし、各種カウンタを初期化する。【０１３８】
つぎに、文字出現頻度集計処理を実行する（ステップＳ２２０２）。この文字出現頻度集計処理の詳細な処理手順については後述する。この文字出現頻度修正処理のあと、文字出現頻度管理データ２３０の領域確保とその領域の初期化を実行し（ステップＳ２２０３）、８，１６ビットの文字データ、連字データ、バイナリデータの文字コードと出現頻度をセットする（ステップＳ２２０４）。【０１３９】
そして、出現マップの各セグメントを連結し（ステップＳ２２０５）。連字領域の連字データを高出現頻度順にソートすることで、２５６種の連字データを選択する（ステップＳ２２０６）。これにより、連字データの削減を図ることができる。【０１４０】
つぎに、連字／外字置換をおこなうととともに、連字／外字置換テーブル２４０を生成する（ステップＳ２２０７）。具体的には、高出現頻度順に連字データを外字データに置換することにより、連字外字データと連字／外字置換テーブル２４０を生成する。【０１４１】
そして、低出現頻度の連字データ、すなわち外字に置換されなかった連字データを単一文字データに分解し、該当する文字領域に割り振る補正をおこなう（ステップＳ２２０８）。すなわち、低出現頻度の連字データを表音文字データに分割し、当該文字データの頻度の加算と出現マップのＯＲ演算を実行する。【０１４２】
このあと、文字データを高出現頻度順にソートし（ステップＳ２２０９）、頻度０回の文字データをカットして、連字外字データとバイナリデータとを結合し（ステップＳ２２１０）、この結合によって得られた文字出現頻度管理データ２３０をファイルに出力する（ステップＳ２２１１）。これにより、ステップＳ２１０２に移行する。【０１４３】
つぎに、上述した文字出現頻度集計処理（ステップＳ２２０２）の詳細な処理手順について説明する。図２３は、上述した文字出現頻度集計処理（ステップＳ２２０２）の詳細な処理手順を示すフローチャートである。図２３において、まず、先頭（ファイル番号＃０）の本文ＨＴＭＬファイルｆ０をオープンする（ステップＳ２３０１）。【０１４４】
つぎに、オープンされた本文ＨＴＭＬファイルから順次データを抽出する。抽出されたデータがバイナリデータである場合（ステップＳ２３０２：Ｙｅｓ）、当該バイナリデータの出現頻度を１ポイント加算し、当該バイナリデータの出現マップの存否フラグを「１」に設定し、さらに、バイトカウンタを２ポイント加算する（ステップＳ２３０３）。【０１４５】
一方、ステップＳ２３０２において、抽出されたデータがバイナリデータでない場合（ステップＳ２３０２：Ｎｏ）、連字データであるか否かを判定する（ステップＳ２３０４）。連字データである場合（ステップＳ２３０４：Ｙｅｓ）、当該連字データの出現頻度を１ポイント加算し、当該連字データの出現マップの存否フラグを「１」に設定し、さらに、バイトカウンタを２（または４）ポイント加算する（ステップＳ２３０５）。【０１４６】
一方、ステップＳ２３０４において、抽出されたデータが連字データでない場合（ステップＳ２３０４：Ｎｏ）、漢字データであるか否かを判定する（ステップＳ２３０６）。漢字データでない場合（ステップＳ２３０６：Ｎｏ）、当該データは表音文字データであるため、その表音文字データの出現頻度を１ポイント加算し、当該表音文字データの出現マップの存否フラグを「１」に設定し、バイトカウンタを１（または２）ポイント加算する（ステップＳ２３０７）。【０１４７】
一方、ステップＳ２３０６において、抽出されたデータが漢字データである場合（ステップＳ２３０６：Ｙｅｓ）、当該漢字データの出現頻度を１ポイント加算し、当該漢字データの出現マップの存否フラグを「１」に設定し、バイトカウンタを２ポイント加算する（ステップＳ２３０８）。【０１４８】
つぎに、出現マップのセグメントのセグメントカウンタを１ポイント加算し（ステップＳ２３０９）、セグメント終了か否か、すなわちセグメントの集計が終了したか否かを判断する（ステップＳ２３１０）。セグメントの集計が終了した場合（ステップＳ２３１０：Ｙｅｓ）、出現マップのセグメントをファイルに追加出力し、セグメントカウンタをクリアする（ステップＳ２３１１）。そして、ステップＳ２３１２に移行する。【０１４９】
一方、セグメントの集計が終了していない場合（ステップＳ２３１０：Ｎｏ）、またはステップＳ２３１１のあと、ブロック終了か否か、たとえば、集計した文字データ数が４０００文字に到達したか否かを判断する（ステップＳ２３１２）。【０１５０】
そして、ブロック終了した場合（ステップＳ２３１２：Ｙｅｓ）、当該ブロックデータを有する本文ＨＴＭＬファイルのファイル番号、当該ブロックデータのブロック番号、オフセット、文字数、およびレングスからなるブロック情報を生成してファイルに追加出力するとともに、バイトカウンタをクリアする（ステップＳ２３１３）。そして、ステップＳ２３１４に移行する。【０１５１】
一方、ブロック終了していない場合（ステップＳ２３１２：Ｎｏ）、またはステップＳ２３１３のあと、ファイル終了か否か、すなわち、現在オープンしている本文ＨＴＭＬファイルの集計が終了したか否かを判断する（ステップＳ２３１４）。現在オープンしている本文ＨＴＭＬファイルの集計が終了していない場合（ステップＳ２３１４：Ｎｏ）、ステップＳ２３０２に戻って次のデータを抽出し、抽出したデータの種類を特定して、集計する（ステップＳ２３０２〜Ｓ２３０８）。【０１５２】
一方、ステップＳ２３１４において、現在オープンしている本文ＨＴＭＬファイルの集計が終了した場合（ステップＳ２３１４：Ｙｅｓ）、集計終了か否か、すなわち、現在オープンしている本文ＨＴＭＬファイルをクローズする（ステップＳ２３１５）。このあと、すべての本文ＨＴＭＬファイルからの集計が終了したか否かを判断する（ステップＳ２３１６）。【０１５３】
すべての本文ＨＴＭＬファイルの集計が終了していない場合（ステップＳ２３１６：Ｎｏ）、つぎのファイル番号の本文ＨＴＭＬファイルをオープンし（ステップＳ２３１７）、ステップＳ２３０２に戻って次のデータを抽出し、抽出したデータの種類を特定して、集計する（ステップＳ２３０２〜Ｓ２３０８）。【０１５４】
一方、ステップＳ２３１６においてすべての本文ＨＴＭＬファイルの集計が終了した場合（ステップＳ２３１６：Ｙｅｓ）、出現マップのセグメントをファイルに追加出力し（ステップＳ２３１８）、ステップＳ２２０３に移行することで一連の処理を終了する。【０１５５】
つぎに、図２１に示した圧縮／暗号化処理（ステップＳ２１０２）の詳細な処理手順について説明する。図２４−１は、図２１に示した圧縮／暗号化処理（ステップＳ２１０２）の詳細な処理手順を示すフローチャートである。図２４において、まず、出現頻度順に混合文字領域８１２の文字データをソートする（ステップＳ２４０１）。【０１５６】
つぎに、低出現頻度の文字データを８ビットに分解し、該当するバイナリデータの出現頻度に加算する（ステップＳ２４０２）。そして、混合文字領域８１２の文字データ、連字外字データ、バイナリデータを連結し、出現頻度順にソートする（ステップＳ２４０３）。このあと、ソートされた文字データごとに、出現頻度に基づいて生起確率を演算し（ステップＳ２４０４）、この生起確率に基づいて、８，１６ビットの文字データに共通のハフマン木を生成する（ステップＳ２４０５）。【０１５７】
このあと、各本文ＨＴＭＬファイルを圧縮する（ステップＳ２４０６）。具体的には、コンテンツフォルダ４００配下の各本文ＨＴＭＬファイルを、たとえば４０００文字ごとにブロック化し、ハフマン木を用いて圧縮する。【０１５８】
つぎに、本実施の形態のあらたな処理として、文字出現頻度管理データ圧縮処理を実行する（ステップＳ２４０７）。文字出現頻度管理データ圧縮処理の詳細な処理手順については、図２４−２において後述する。【０１５９】
このあと、圧縮文字出現頻度管理データ２３５を暗号化する（ステップＳ２４０８）。具体的には、圧縮文字出現頻度管理データ２３５の暗号化領域（文字データおよび出現頻度の領域）を、マスタキーを用いて排他的論理和（ＸＯＲ）により暗号化する。そして、連字／外字置換テーブル２４０を暗号化する（ステップＳ２４０９）。具体的には、連字／外字置換テーブル２４０の暗号化領域を、マスタキーを用いて排他的論理和（ＸＯＲ）により暗号化する。そして、検索初期化処理（ステップＳ２１０３）に移行し、一連の処理を終了する。【０１６０】
ここで、上述した文字出現頻度管理データ圧縮処理の詳細な処理手順について説明する。図２４−２は、文字出現頻度管理データ圧縮処理の詳細な処理手順を示すフローチャートである。図２４−２において、まず、未処理の文字データがあるか否かを判断する（ステップＳ２４７１）。未処理の文字データがある場合（ステップＳ２４７１：Ｙｅｓ）、未処理の文字データの中から任意の文字データを選択する（ステップＳ２４７２）。なお、先頭の文字データから読み込んでいる場合には、必然的に処理された文字データのつぎの文字データとなる。【０１６１】
そして、選択文字データの出現率を取得する（ステップＳ２４７３）。出現率は、文字出現頻度管理データ２３０にあらかじめ保持されている場合には、その出現率を読み込み、出現ファイル数９０２が保持されている場合には、選択文字データの出現率を、選択文字データの出現ファイル数／全検索対象ファイル数（ｎ＋１）により算出する。【０１６２】
そして、この出現率を圧縮パラメータとすることにより選択文字データが出現する領域をＡ領域〜Ｅ領域、Ａ’領域〜Ｅ’領域の中から特定する（ステップＳ２４７４）。領域が特定されると、図１６−３に示した領域／圧縮パターン対応テーブルを参照することにより、圧縮に用いられるハフマン木を抽出する（ステップＳ２４７５）。これにより、選択文字データの圧縮パターンが特定される。【０１６３】
このあと、選択文字データのビット列を抽出する（ステップＳ２４７６）。具体的には、選択文字データのビット列を先頭から順次レジスタに書き込む。そして、出現率が５０％以上であるか否かを判断する（ステップＳ２４７７）。すなわち、５０％以上であれば（ステップＳ２４７７：Ｙｅｓ）、出現率はＡ’領域〜Ｅ’領域の範囲内にあるため、レジスタに保持されているビット列を反転させる（ステップＳ２４７８）。【０１６４】
一方、５０％未満であれば（ステップＳ２４７７：Ｎｏ）、出現率はＡ領域〜Ｅ領域の範囲内であるため、レジスタに保持されているビット列は反転させず、ステップＳ２４７９に移行する。そして、レジスタに保持されているビット列を、ステップＳ２４７５で抽出されたハフマン木を用いてハフマン圧縮する（ステップＳ２４７９）。これにより、選択文字データについてのビット列圧縮データ１６００が生成されることとなる。【０１６５】
選択文字データのビット列のハフマン圧縮が終了すると、ステップＳ２４７１に戻る。そして、ステップＳ２４７１において、未処理の文字データがない場合（ステップＳ２４７１：Ｎｏ）、図２４−１に示したステップＳ２４０８に移行する。【０１６６】
つぎに、図２１に示した検索初期化処理（ステップＳ２１０３）の詳細な処理手順について説明する。図２５−１は、図２１に示した検索初期化処理（ステップＳ２１０３）の詳細な処理手順を示すフローチャートである。【０１６７】
図２５−１において、まず、検索初期化処理の起動を待ち受け（ステップＳ２５０１：Ｎｏ）、起動した場合（ステップＳ２５０１：Ｙｅｓ）、圧縮／暗号化処理において暗号化された暗号化圧縮文字出現頻度管理データ２６０を復号化する（ステップＳ２５０２）。具体的には、暗号化圧縮文字出現頻度管理データ２６０の暗号化領域（文字データおよび出現頻度の領域）を、暗号化したときのマスタキーを用いて排他的論理和（ＸＯＲ）により復号する。【０１６８】
つぎに、暗号化連字／外字置換テーブル２７０を復号化する（ステップＳ２５０３）。具体的には、暗号化連字／外字置換テーブル２７０の暗号化領域を、暗号化したときのマスタキーを用いて排他的論理和（ＸＯＲ）により復号する。【０１６９】
そして、本実施の形態のあらたな処理として、文字出現頻度管理データ伸長処理を実行する（ステップＳ２５０４）。文字出現頻度管理データ伸長処理の詳細な処理手順については、図２５−２において後述する。【０１７０】
つぎに、圧縮／暗号化処理で示したステップＳ２４０１〜Ｓ２４０５までの処理と同様の処理を実行する。すなわち、高出現頻度順に文字データをソートし（ステップＳ２５０５）、低出現頻度の文字データを８ビットに分解し、該当するバイナリデータの出現頻度に加算する（ステップＳ２５０６）。そして、文字データ、連字データ、バイナリデータを連結し、高出現頻度順にソートする（ステップＳ２５０７）。このあと、文字データごとに、出現頻度に基づいて生起確率を演算し（ステップＳ２５０８）、この生起確率に基づいて、８，１６ビットの文字データに共通のハフマン木を生成する（ステップＳ２５０９）。【０１７１】
このあと、出現マップの設定処理を実行する（ステップＳ２５１０）。具体的には、区点対応テーブルの領域確保、各文字データの出現順位の区点対応テーブルへのセット、復号された文字出現頻度管理データ２３０の出現マップのメモリ展開、当該出現マップと区点対応テーブルとのリンクを実行する。このあと、全文検索処理（ステップＳ２１０４）に移行して、一連の処理を終了する。【０１７２】
ここで、上述した文字出現頻度管理データ伸長処理の詳細な処理手順について説明する。図２５−２は、文字出現頻度管理データ伸長処理の詳細な処理手順を示すフローチャートである。図２５−２において、まず、未処理の文字データがあるか否かを判断する（ステップＳ２５４１）。未処理の文字データがある場合（ステップＳ２５４１：Ｙｅｓ）、未処理の文字データの中から任意の文字データを選択する（ステップＳ２５４２）。なお、先頭の文字データから読み込んでいる場合には、必然的に処理された文字データのつぎの文字データとなる。【０１７３】
そして、選択文字データのビット列圧縮データ１６００から選択文字データの圧縮パターン１６０２を検出することにより、図１６−３に示した領域／圧縮パターン対応テーブルを参照して、伸長に用いられる対応するハフマン木を抽出する（ステップＳ２５４３）。【０１７４】
つぎに、選択文字データの圧縮ビット列１６０４を抽出する（ステップＳ２５４４）。具体的には、選択文字データの圧縮ビット列１６０４を先頭から順次レジスタに書き込む。そして、レジスタに保持されている圧縮ビット列１６０４を、ステップＳ２５４３で抽出されたハフマン木を用いてハフマン伸長する（ステップＳ２５４５）。【０１７５】
そして、選択文字データの出現率が５０％以上であるか否かを判断する（ステップＳ２５４６）。具体的には、領域フラグ１６０３を参照することにより判断する。５０％以上であれば（ステップＳ２５４６：Ｙｅｓ）、出現率はＡ’領域〜Ｅ’領域の範囲内にあるため、伸長されたビット列を反転させる（ステップＳ２５４７）。【０１７６】
一方、５０％未満であれば（ステップＳ２５４６：Ｎｏ）、出現率はＡ領域〜Ｅ領域の範囲内であるため、レジスタに保持されているビット列を反転させない。選択文字データの圧縮ビット列１６０４のハフマン伸長が終了すると、ステップＳ２５４１に戻る。そして、ステップＳ２５４１において、未処理の文字データがない場合（ステップＳ２５４１：Ｎｏ）、図２５−１に示したステップＳ２５０５に移行する。【０１７７】
つぎに、図２１に示した全文検索処理（ステップＳ２１０４）の詳細な処理手順について説明する。図２６は、図２１に示した全文検索処理（ステップＳ２１０４）の詳細な処理手順を示すフローチャートである。検索初期化処理（ステップＳ２１０３）のあと、図２６において、まず、検索キーワードの入力を受け付ける（ステップＳ２６０１）。【０１７８】
検索キーワードが複数でない場合（ステップＳ２６０２：Ｎｏ）、ステップＳ２６０４に移行する。一方、検索キーワードが複数である場合（ステップＳ２６０２：Ｙｅｓ）、各キーワードの文字列を連結して（ステップＳ２６０３）、ステップＳ２６０４に移行する。【０１７９】
このあと、ステップＳ２６０４において、検索キーワード内に連字データがない場合（ステップＳ２６０４：Ｎｏ）、ステップＳ２６０６に移行する。一方、連字データがある場合（ステップＳ２６０４：Ｙｅｓ）、連字／外字置換テーブル２４０を用いて、その連字データを２文字の外字データに置換して（ステップＳ２６０５）、ステップＳ２６０６に移行する。【０１８０】
このあと、ステップＳ２６０６において、検索キーワードを単一文字データに分解して、出現マップから各文字データの各本文ＨＴＭＬファイルにおける存否フラグ列を読み取る（ステップＳ２６０６）。そして、各文字データの存否フラグ列の論理積により、圧縮ファイルを特定（絞込み）する（ステップＳ２６０７）。また、検索キーワードを検索初期化処理（ステップＳ２１０３）において生成されたハフマン木で圧縮し（ステップＳ２６０８）、ファイルカウンタを初期化する（ステップＳ２６０９）。【０１８１】
このあと、ステップＳ２６０７で特定された圧縮ファイル（特定圧縮ファイル）をオープンし（ステップＳ２６１０）、オープンされた特定圧縮ファイルの圧縮ブロックデータに、圧縮検索キーワードとの一致判定をおこなう（ステップＳ２６１１）。不一致である場合（ステップＳ２６１２：Ｎｏ）、ステップＳ２６１５に移行する。【０１８２】
一方、一致する場合（ステップＳ２６１２：Ｙｅｓ）、当該圧縮ブロックデータを、ハフマン木を用いて伸長する（ステップＳ２６１３）。そして、伸長されたブロックデータと検索キーワードとを比較し、検索キーワードに一致した項目データのファイル番号およびアンカーを記録して（ステップＳ２６１４）、ステップＳ２６１５に移行する。【０１８３】
このあと、ステップＳ２６１５において、オープンしている特定圧縮ファイルをクローズし（ステップＳ２６１５）、ファイルカウンタを更新する（ステップＳ２６１６）。ファイルカウンタの更新により、未処理の特定圧縮ファイルがあると判断された場合（ステップＳ２６１７：Ｙｅｓ）、ステップＳ２６１０に移行して、つぎの特定圧縮ファイルをオープンする。【０１８４】
一方、未処理の特定圧縮ファイルがないと判断された場合（ステップＳ２６１７：Ｎｏ）、検索候補一覧を表示し（ステップＳ２６１８）、ユーザからの選択入力を待ち受ける（ステップＳ２６１９）ことにより、検索結果表示処理（ステップＳ２１０５）に移行して、一連の処理を終了する。【０１８５】
このように、上述した実施の形態１によれば、コンテンツ２１０が複数の検索対象ファイルから構成されていても、単一の圧縮情報（文字出現頻度管理データ２３０）により共通化することができる。【０１８６】
また、サイズが大きい検索対象ファイルでは文字データ数に応じてブロック化をおこない、８ビットコード、１６ビットコードまたは３２ビットコードの文字データが混在する検索対象ファイルについてのハフマン圧縮技術を確立することができる。【０１８７】
また、サイズ（容量）ではなく、文字データ数に応じたブロック化をおこない、検索対象ファイル内の各文字データの出現頻度の集計時に、文字データの種類（８ビットコード、１６ビットコードまたは３２ビットコード）を判定し、出現頻度を集計することができる。【０１８８】
また、英和辞典での英字データなど出現頻度の高い８ビットコードの文字データに対しては、０ｘ’ＦＦ＊＊’など１６ビットコードの文字データに置換し、ハフマン圧縮をおこなう。これにより、低出現率の８ビットコードの文字データと区別して、効率的な圧縮をおこなうことができる。【０１８９】
また、ポインタなどの非文字データはランダムな値であるため、８ビットコードに置換する。また、ハフマン木のサイズ縮小のため、出現頻度の低い１６ビットコードの文字データを分割し、８ビットコードの文字データに置換する。これにより、効率的な圧縮をおこなうことができる。【０１９０】
また、上述した実施の形態では、圧縮のためのハフマン木の生成元である文字出現頻度管理データ２３０またはその一部を暗号化する。すなわち、コンテンツや、コンテンツ圧縮のためのハフマン木を直接暗号化せず、ハフマン木の生成元を暗号化しているため、セキュリティの向上を図ることができる。【０１９１】
また、上述した実施の形態では、文字出現頻度管理データをもとに、全文検索の高速化を図ることができる。また、連続する表音文字データの出現頻度の高い２文字の連字データを外字データに置換した後、コンテンツ圧縮をおこなっているため、圧縮率の向上を図ることができる。【０１９２】
また、連字データにより、オープン／クローズするファイル数を削減することができ、文字列の比較領域の縮小により全文検索の高速化を図ることができる。さらに、全文検索は伸長後に外字データのままで文字列比較を行うことで、さらに検索速度の向上を図ることができる。【０１９３】
このように、この実施の形態１によれば、圧縮処理について、文字出現頻度管理データ（ハフマン木）の共通化により、各検索対象ファイルの圧縮率の向上を図ることができる。また、圧縮された検索対象ファイルをブロック毎に伸長することで、圧縮されたままで検索や表示をおこなうことができ、検索速度の向上を図ることができる。また、ポインタなど非文字コードであるバイナリデータとテキストデータが混在するファイルも圧縮することができる。【０１９４】
また、低出現頻度の文字データをカットしてハフマン木を生成することにより、ハフマン木を縮小することができる。したがって、使用メモリサイズが削減でき、ＰＤＡや携帯電話機などの可搬型携帯端末においても利用することができる。また、２パスのハフマン圧縮であるため、他の方式に比べ、最高速な圧縮と伸長が実現することができる。また、ハフマン圧縮の圧縮率は約５０％であり、伸長速度は他の圧縮方式に比べ最高速となる。【０１９５】
また、暗号化処理においては、ハフマン木の生成元を暗号化しているため、全文検索や表示などにおいて、復号化が不要である。したがって、セキュリティの向上を図るとともに検索速度の向上も図ることができる。また、暗号化の領域も文字出現頻度管理データだけ（全体の１％未満）であり、で暗号化の処理時間を短くできるとともに、復号化もハフマン木の作成時の１回で済ませることができる。したがって、復号化処理が検索速度の妨げにならず、セキュリティの向上を図るとともに検索速度の向上も図ることができる。【０１９６】
また、全文検索処理においては、オープン／クローズする検索対象ファイルの数を削減し、文字列の比較領域を縮小することにより、全文検索の高速化を図ることができる。また、検索速度の高速化のために付加する全文検索のための出現マップは数％以下であるため、全文検索のための出現マップの生成は、ファイル圧縮時間相当の短時間でおこなうことができる。また、英数字や仮名・カタカナなどの表音文字データが混在していても、圧縮効率と全文検索速度を改善することができる。【０１９７】
また、文字出現頻度管理データにより、検索キーワードの文字を含まない検索対象ファイルのオープンを省くことができ、全文検索時のオープン・クローズ時間の削減、および文字列の比較領域の縮小による全文検索速度の高速化を図ることができる。具体的には、本文ファイル容量の数％の文字出現頻度管理データにより、検索対象ファイルのオープンと文字列比較を抑えることができ、数倍（表音文字２文字の検索）〜数百倍（漢字３文字の検索）の高速化を図ることができる。特に検索キーワードの文字数が多ければ多いほど、検索キーワードの文字を含まない検索対象ファイル数が増大して、そのオープンを省くことができるため、全文検索時のオープン・クローズ時間の削減、および文字列の比較領域の縮小による全文検索速度の高速化を図ることができる。【０１９８】
また、ミニＳＤやＨＤに格納される出現マップ９０４を、特殊なハフマン木を用いて効率的に圧縮する。この特殊なハフマン木には、４ビット系の通常のハフマン木にさらに４ビットバウンダリのＮＵＬＬ連続記号列が追加されているため、携帯電話機などのモバイル端末に実装される低速ＣＰＵや少メモリにおいて、高速な圧縮／伸長を実現することができる。【０１９９】
また、文字データごとの出現率を圧縮パラメータとすることにより、出現率に応じたハフマン木を選択することができる。すなわち、出現率が低いほど特殊記号列が長い特殊なハフマン木を選択することができる。一方、出現率が高いほど特殊なハフマン木よりも通常のハフマン木を選択することができる。したがって、出現マップ９０４の圧縮効率の向上を図ることができる。【０２００】
さらに、圧縮効率の悪い分割領域については、ハフマン木を割り振らず非圧縮とすることにより、無駄な圧縮処理を防止することができ、圧縮速度の高速化を図ることができる。また、分割領域を出現確率５０％を境界として対称とすることにより、ハフマン木の容量を半減することができる。したがって、省メモリ化を実現することができる。【０２０１】
［実施の形態２］
つぎに、実施の形態２について説明する。実施の形態１では、文字データごとの出現率を圧縮パラメータとすることにより、出現率に応じたハフマン木を選択することとした。実施の形態２では、図１６−１に示した出現率に応じた領域分割を見直し、文字出現頻度管理データ２３０内の出現マップ９０４の圧縮率のさらなる向上を実現する。すなわち、出現マップ９０４においては、文字の存否をあらわすビットの値が「１」であるケースはまれで、ほとんどが「０」である。実施の形態２では、実施の形態１と同様、０が大多数を示すビット列を含む出現マップ９０４を効率よく圧縮する。【０２０２】
（領域分割の見直し）
図２７は、分割領域の見直しを示す図表である。実施の形態１では、厳密には、Ａ領域〜Ｉ領域まで存在する。Ｈ領域内の出現率となる文字が最も多いため、アクセス頻度も高くなる。したがって、Ｈ領域に存在する文字の出現ビット列の圧縮率が改善されると、高圧縮を図ることができる。したがって、実施の形態２では、実施の形態１のＢ，Ｃ領域を統合してあらたなＢ領域、Ｄ，Ｅ領域を統合してあらたなＣ領域、Ｆ，Ｇ領域を統合してあらたなＤ領域、Ｈ，Ｉ領域を統合してあらたなＥ領域とする。これにより、図１６−２に示した出現マップ９０４の領域フィールドも、あらたな領域とする。【０２０３】
また、実施の形態２では、Ｂ領域では葉が１６種類のハフマン木（通常のハフマン木）、Ｃ領域では葉が１６＋１種類（１６個連続する０）の特殊ハフマン木、Ｄ領域では葉が１６＋２種類（１６個連続する０と６４個連続する０）の特殊ハフマン木、Ｅ領域では葉が１６+３種類（１６個連続する０と６４個連続する０と２５６個連続する０）の特殊ハフマン木となる。【０２０４】
図２８は、１検索対象ファイル内における文字データの出現確率を示す説明図である。図２８において、縦軸は、１検索対象ファイル内における文字データの出現確率を示しており、上が出現確率０％、下が出現確率１００％である。この出現確率の範囲０〜１００％を対数的に分割する。すなわち、確率が等しくなるように領域の上下２分割を繰り返すことにより、出現率の範囲を区画する分割領域が形成される。なお、左側が、実施の形態１相当の出現確率を示す分割領域群であり、右側が実施の形態２の出現確率を示す分割領域群である。【０２０５】
この分割により、実施の形態２（図２８中、右側）では、出現率をｒとすると、０≦ｒ＜１／２５６がＥ領域、１／２５６≦ｒ＜１／６４がＤ領域、１／６４≦ｒ＜１／１６がＣ領域、１／１６≦ｒ＜１／４がＢ領域、１／４≦ｒ＜１／２がＡ領域、１／２≦ｒ＜３／４がＡ’領域、３／４≦ｒ＜１５／１６がＢ’領域、１５／１６≦ｒ＜６３／６４がＣ’領域、６３／６４≦ｒ＜２５５／２５６がＤ’領域、２５５／２５６≦ｒ≦１がＥ’領域となる。【０２０６】
なお、同一アルファベットを付した領域の出現率は同一である。すなわち、出現確率５０％を境界として領域幅と出現確率が上下対称となっている。たとえば、Ａ領域およびＡ’領域の出現率はともに１／４である。なお、ある辞書コンテンツの１文字の平均出現率は、０．０７７であることがわかっているため、領域Ｃに属することとなる。【０２０７】
また、実施の形態２におけるＡ’領域〜Ｅ’領域も実施の形態１と同様、Ａ領域〜Ｅ領域に対して０と１が反転する。以降、実施の形態２では、Ａ領域〜Ｅ領域についてのみハフマン木とその圧縮伸長処理について説明するが、Ａ’領域〜Ｅ’領域は、０と１が反転されたものとして読み替える。また、以降、特に断りがない限り、本実施の形態２において、Ａ領域（Ａ’領域），…，Ｅ領域（Ｅ’領域）と表記した場合は、実施の形態２における分割領域を示すものとする。【０２０８】
（分割領域のハフマン木の基本構成）
つぎに、各分割領域Ｂ〜Ｅにおけるハフマン木の基本構成について説明する。本実施の形態２では、特殊ハフマン木として、実施の形態１で示した２分枝のハフマン木ではなく、２n分枝（ｎ＝２，３，…）のハフマン木を用いる。実施の形態１は、ｎ＝１のハフマン木である。実施の形態２では一例として、ｎ＝４、すなわち、１６分枝ハフマン木を用いて説明する。【０２０９】
１６分枝ハフマン木は、根から１６本の枝に分岐して直接、葉にポイントする構造である。葉となる伸長コードは「００００」〜「１１１１」までの１６種類存在するが、単純に枝ごとに割り振るのではなく、伸長コードの出現率に応じて割り振る点が特徴的である。すなわち、根から出る１６本の枝のうち、２本は節点をポイントすることとし、この２個の節点がさらに１６本の枝により１６個の葉をポイントする構造とする。以下、分割領域ごとに説明する。まず、Ｂ領域について説明する。【０２１０】
図２９−１は、Ｂ領域における伸長コードとハフマン木の枝との関係を示す図表である。図２９−１では、伸長コードの種別ごとに、個数、出現率、補正（補正後の出現率）、圧縮符号長、枝との関係を示している。補正後の出現率が高いほど圧縮符号長が短くなるように設定する。本例では、伸長コード「００００」は補正後の出現率５０％であるため、圧縮符号長が「１」となる。また、枝との関係は、補正後の出現率に応じて決められる。伸長コード「００００」は補正後の出現率５０％であるため、根からの１６本の枝のうち５０％に相当する８本の枝を専有する。【０２１１】
「１」が１個の「０００１」、「００１０」、「０１００」、「１０００」の４種の伸長コードは、根からの１６本の枝のうち２５％に相当する４本の枝を専有する。４種類の伸長コードで４本の枝を専有するため、個々の伸長コードでは、１個の枝を専有することとなる。【０２１２】
また、「１」が２個の「００１１」、…、「１１００」の６種の伸長コードは、根からの１６本の枝のうち１０％に相当する１本の枝を専有する。伸長コードが６種に対して根からの枝が１本なので、節点を介して葉にポイントする。「１」が３個の「０１１１」」、…、「１１１０」の４種の伸長コード、「１」が４個の伸長コード「１１１１」は、さらに出現率が低いため、節点を介して葉にポイントする。【０２１３】
図２９−２は、Ｂ領域におけるハフマン木を示す説明図である。図２９−２中、Ｂ領域ハフマン木２９００において、○図形は、節点（根または内部節点）をあらわしており、□図形は、葉をあらわしている。○図形内に「根」の文字がある図形は、根をあらわしている。また、○図形および□図形内の文字０〜Ｆ（１６進表記）は、葉／節点に固有の番号＃である。以降、葉については、Ｌ（＃）と表記し、内部節点（略して「節点」とする）については、Ｎ（＃）と表記する。また、根から直接ポイントされる葉や節点は、Ｌ（＃）やＮ（＃）となり、節点を介してポイントされる葉は、Ｌ（＃＃）とする。以降の他の図の説明においても同様である。【０２１４】
Ｂ領域ハフマン木２９００では、根から直接ポイントされる葉Ｌ（０）〜Ｌ（７）に伸長コード「００００」が割り当てられる。また、葉Ｌ（８）、Ｌ（９）は空き領域である。また、葉Ｌ（Ａ）には伸長コード「０００１」、葉Ｌ（Ｂ）には伸長コード「００１０」、葉Ｌ（Ｃ）には伸長コード「０１００」、葉Ｌ（Ｄ）には伸長コード「１０００」が割り当てられる。【０２１５】
また、Ｂ領域ハフマン木２９００では、節点Ｎ（Ｅ）からポイントされる葉Ｌ（Ｅ０）〜Ｌ（Ｅ３）に伸長コード「００１１」、葉Ｌ（Ｅ４）〜Ｌ（Ｅ７）に伸長コード「０１０１」、葉Ｌ（Ｅ８）〜Ｌ（ＥＢ）に伸長コード「０１１０」、葉Ｌ（ＥＣ）〜Ｌ（ＥＦ）に伸長コード「１００１」が割り当てられる。【０２１６】
また、Ｂ領域ハフマン木２９００では、節点Ｎ（Ｆ）からポイントされる葉Ｌ（Ｆ０）〜Ｌ（Ｆ３）に伸長コード「１０１０」、葉Ｌ（Ｆ４）〜Ｌ（Ｆ７）に伸長コード「１１００」、葉Ｌ（Ｆ８）に伸長コード「０１１１」、葉Ｌ（Ｆ９）に伸長コード「１０１１」、葉Ｌ（ＦＡ）に伸長コード「１１０１」、葉Ｌ（ＦＢ）に伸長コード「１１１０」、葉Ｌ（ＦＣ）に伸長コード「１１１１」が割り当てられる。なお、葉Ｌ（ＦＤ）〜葉Ｌ（ＦＦ）は空き領域である。【０２１７】
図２９−３は、Ｂ領域ハフマン木２９００における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。伸長コード／圧縮符号テーブル２９０１において、伸長コード「００００」の圧縮符号は「０」である。伸長コード「００００」は、最も出現確率が高いため（図２９−１を参照）、８個の葉の番号０〜７（１６進表記。２進表記では、００００〜０１１１）が割り当てられている。この８個の葉の番号は、先頭の記号「０」が圧縮符号「０」であり、後続の記号列「００１」〜「１１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「００００」〜「０１１１」が抽出された場合、いずれの圧縮符号列「００００」〜「０１１１」も伸長コード「００００」に変換される。なお、圧縮符号列の下位３桁「００１」〜「１１１」は、再度伸長対象となる。【０２１８】
また、伸長コード「０００１」などのように、出現確率が低い伸長コードは、葉の番号と一対一対応である。すなわち、葉の番号は１つのみ割り当てられる。したがって、伸長する際に、当該伸長コードと一対一対応の葉の番号が圧縮符号列から抽出された場合に、当該伸長コードに変換されることとなる。【０２１９】
このように、伸長コード／圧縮符号テーブル２９０１では、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた伸長コード（「０００１」，「００１０」など）と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ伸長コード（「００００」，「００００…０」（１６個の０），００１１など）が存在することとなる。すなわち、出現率の高い伸長コードほどハフマン木の葉を多く、かつ、上位ビットに圧縮符号を含むように複数の葉の番号が割り当てられるように設定したため、圧縮処理や伸長処理の効率化を図ることができる。つぎに、Ｃ領域について説明する。【０２２０】
図３０−１は、Ｃ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。図３０−１の図表は、図２９−１の図表に、伸長コード「００００…０」（１６個の０）に関するフィールドが追加された図表である。伸長コード「００００…０」（１６個の０）については、補正後の出現率約１３％であるため、根からの１６本の枝のうち、１２．５％に相当する２本の枝を専有する。【０２２１】
図３０−２は、Ｃ領域におけるハフマン木を示す説明図である。Ｃ領域ハフマン木３０００は、Ｂ領域ハフマン木２９００において空き領域であった葉Ｌ（８）、Ｌ（９）に伸長コード「００００…０」（１６個の０）が割り当てられる。【０２２２】
図３０−３は、Ｃ領域ハフマン木３０００における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。伸長コード／圧縮符号テーブル３００１において、伸長コード「００００」の圧縮符号は「０」である。伸長コード「００００」は、最も出現確率が高いため（図３０−１を参照）、８個の葉の番号０〜７（１６進表記。２進表記では、００００〜０１１１）が割り当てられている。この８個の葉の番号は、先頭の記号「０」が圧縮符号「０」であり、後続の記号列「００１」〜「１１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「００００」〜「０１１１」が抽出された場合、いずれの圧縮符号列「００００」〜「０１１１」も伸長コード「００００」に変換される。なお、圧縮符号列の下位３桁「００１」〜「１１１」は、再度伸長対象となる。【０２２３】
同様に、伸長コード「００００…０」（１６個の０）の圧縮符号は「１００」である。伸長コード「００００…０」（１６個の０）も出現確率が高いため（図３０−１を参照）、２個の葉の番号８，９（１６進表記。２進表記では、１０００〜１００１）が割り当てられている。この２個の葉の番号は、先頭からの記号列「１００」が圧縮符号「１００」であり、後続の記号「０」，「１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「１０００」または「１００１」が抽出された場合、いずれの圧縮符号列「１０００」，「１００１」も伸長コード「００００…０」（１６個の０）に変換される。なお、圧縮符号列の下位１桁「０」，「１」は、再度伸長対象となる。【０２２４】
また、伸長コード「０００１」などのように、出現確率が低い伸長コードは、葉の番号と一対一対応である。すなわち、葉の番号は１つのみ割り当てられる。したがって、伸長する際に、当該伸長コードと一対一対応の葉の番号が圧縮符号列から抽出された場合に、当該伸長コードに変換されることとなる。【０２２５】
このように、伸長コード／圧縮符号テーブル３００１では、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた伸長コード（「０００１」，「００１０」など）と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ伸長コード（「００００」，「００００…０」（１６個の０），００１１など）が存在することとなる。すなわち、出現率の高い伸長コードほどハフマン木の葉を多く、かつ、上位ビットに圧縮符号を含むように複数の葉の番号が割り当てられるように設定したため、圧縮処理や伸長処理の効率化を図ることができる。つぎに、Ｄ領域について説明する。【０２２６】
図３１−１は、Ｄ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。Ｄ領域では、さらに、伸長コード「００００…０」（６４個の０）が葉として追加される。Ｄ領域では、各伸長コードの出現率がＢ領域やＣ領域と異なるため、割りあたる枝や本数も異なる。【０２２７】
図３１−２は、Ｄ領域におけるハフマン木を示す説明図である。Ｄ領域ハフマン木３１００は、図３１−１の枝との関係にしたがって構成される。Ｄ領域ハフマン木３１００では、根から直接ポイントされる葉Ｌ（０）〜Ｌ（７）に伸長コード「００００」が割り当てられる。また、葉Ｌ（８）〜Ｌ（Ｂ）に伸長コード「００００…０」（１６個の０）が割り当てられる。また、葉Ｌ（Ｃ）およびＬ（Ｄ）には伸長コード「００００…０」（６４個の０）が割り当てられる。【０２２８】
また、Ｄ領域ハフマン木３１００では、節点Ｎ（Ｅ）からポイントされる葉Ｌ（Ｅ０）〜Ｌ（Ｅ３）に伸長コード「０００１」、葉Ｌ（Ｅ４）〜Ｌ（Ｅ７）に伸長コード「００１０」、葉Ｌ（Ｅ８）〜Ｌ（ＥＢ）に伸長コード「０１００」、葉Ｌ（ＥＣ）〜Ｌ（ＥＦ）に伸長コード「１０００」が割り当てられる。【０２２９】
また、Ｄ領域ハフマン木３１００では、節点Ｎ（Ｆ）からポイントされる葉Ｌ（Ｆ０）に伸長コード「００１１」、葉Ｌ（Ｆ１）に伸長コード「０１０１」、葉Ｌ（Ｆ２）に伸長コード「０１１０」、葉Ｌ（Ｆ３）に伸長コード「１００１」、葉Ｌ（Ｆ４）に伸長コード「１０１０」、葉Ｌ（Ｆ５）に伸長コード「１１００」、葉Ｌ（Ｆ６）に伸長コード「０１１１」、葉Ｌ（Ｆ７）に伸長コード「１０１１」、葉Ｌ（Ｆ８）に伸長コード「１１０１」、葉Ｌ（Ｆ９）に伸長コード「１１１０」、葉Ｌ（ＦＡ）に伸長コード「１１１１」が割り当てられる。なお、葉Ｌ（ＦＢ）〜葉Ｌ（ＦＦ）は空き領域である。【０２３０】
図３１−３は、Ｄ領域ハフマン木３１００における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。伸長コード／圧縮符号テーブル３１０１において、伸長コード「００００」の圧縮符号は「０」である。伸長コード「００００」は、最も出現確率が高いため（図３１−１を参照）、８個の葉の番号０〜７（１６進表記。２進表記では、００００〜０１１１）が割り当てられている。この８個の葉の番号は、先頭の記号「０」が圧縮符号「０」であり、後続の記号列「００１」〜「１１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「００００」〜「０１１１」が抽出された場合、いずれの圧縮符号列「００００」〜「０１１１」も伸長コード「００００」に変換される。なお、圧縮符号列の下位３桁「００１」〜「１１１」は、再度伸長対象となる。【０２３１】
同様に、伸長コード「００００…０」（１６個の０）の圧縮符号は「１０」である。伸長コード「００００…０」（１６個の０）も出現確率が高いため（図３１−１を参照）、４個の葉の番号８〜Ｂ（１６進表記。２進表記では、１０００〜１０１１）が割り当てられている。この４個の葉の番号は、先頭からの記号列「１０」が圧縮符号「１０」であり、後続の記号「００」〜「１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「１０００」〜「１０１１」が抽出された場合、いずれの圧縮符号列「１０００」〜「１０１１」も伸長コード「００００…０」（１６個の０）に変換される。なお、圧縮符号列の下位２桁「００」〜「１１」は、再度伸長対象となる。【０２３２】
また、伸長コード「００１１」などのように、出現確率が低い伸長コードは、葉の番号と一対一対応である。すなわち、葉の番号は１つのみ割り当てられる。したがって、伸長する際に、当該伸長コードと一対一対応の葉の番号が圧縮符号列から抽出された場合に、当該伸長コードに変換されることとなる。【０２３３】
このように、伸長コード／圧縮符号テーブル３１０１では、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた伸長コード（「００１１」，「０１０１」など）と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ伸長コード（「００００」，「００００…０」（１６個の０），「００００…０」（６４個の０），００１１など）が存在することとなる。すなわち、出現率の高い伸長コードほどハフマン木の葉を多く、かつ、上位ビットに圧縮符号を含むように複数の葉の番号が割り当てられるように設定したため、圧縮処理や伸長処理の効率化を図ることができる。つぎに、Ｅ領域について説明する。【０２３４】
図３２−１は、Ｅ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。Ｅ領域では、さらに、伸長コード「００００…０」（２５６個の０）が葉として追加される。Ｅ領域では、各伸長コードの出現率がＢ領域〜Ｄ領域と異なるため、割りあたる枝や本数も異なる。【０２３５】
図３２−２は、Ｅ領域におけるハフマン木を示す説明図である。Ｅ領域ハフマン木３２００は、図３２−１の枝との関係にしたがって構成される。Ｅ領域ハフマン木３２００では、根から直接ポイントされる葉Ｌ（０）〜Ｌ（７）に伸長コード「００００」が割り当てられる。また、葉Ｌ（８）〜Ｌ（Ｂ）に伸長コード「００００…０」（１６個の０）が割り当てられる。また、葉Ｌ（Ｃ）およびＬ（Ｄ）には伸長コード「００００…０」（６４個の０）が割り当てられる。また、葉Ｌ（Ｅ）には伸長コード「００００…０」（２５６個の０）が割り当てられる。【０２３６】
また、Ｅ領域ハフマン木３２００では、節点Ｎ（Ｆ）からポイントされる葉Ｌ（Ｆ０）に伸長コード「０００１」、葉Ｌ（Ｆ１）に伸長コード「００１０」、葉Ｌ（Ｆ２）に伸長コード「０１００」、葉Ｌ（Ｆ３）に伸長コード「１０００」、葉Ｌ（Ｆ４）に伸長コード「００１１」、葉Ｌ（Ｆ５）に伸長コード「０１０１」、葉Ｌ（Ｆ６）に伸長コード「０１１０」、葉Ｌ（Ｆ７）に伸長コード「１００１」、葉Ｌ（Ｆ８）に伸長コード「１０１０」、葉Ｌ（Ｆ９）に伸長コード「１１００」、葉Ｌ（ＦＡ）に伸長コード「０１１１」、葉Ｌ（ＦＢ）に伸長コード「１０１１」、葉Ｌ（ＦＣ）に伸長コード「１１０１」、葉Ｌ（ＦＤ）に伸長コード「１１１０」、葉Ｌ（ＦＥ）に伸長コード「１１１１」が割り当てられる。なお、葉Ｌ（ＦＦ）は空き領域である。【０２３７】
図３２−３は、Ｅ領域ハフマン木３２００における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブル３２０１を示す説明図である。伸長コード／圧縮符号テーブル３２０１において、伸長コード「００００」の圧縮符号は「０」である。伸長コード「００００」は、最も出現確率が高いため（図３１−１を参照）、８個の葉の番号０〜７（１６進表記。２進表記では、００００〜０１１１）が割り当てられている。この８個の葉の番号は、先頭の記号「０」が圧縮符号「０」であり、後続の記号列「００１」〜「１１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「００００」〜「０１１１」が抽出された場合、いずれの圧縮符号列「００００」〜「０１１１」も伸長コード「００００」に変換される。なお、圧縮符号列の下位３桁「００１」〜「１１１」は、再度伸長対象となる。【０２３８】
同様に、伸長コード「００００…０」（１６個の０）の圧縮符号は「１０」である。伸長コード「００００…０」（１６個の０）も出現確率が高いため（図３１−１を参照）、４個の葉の番号８〜Ｂ（１６進表記。２進表記では、１０００〜１０１１）が割り当てられている。この４個の葉の番号は、先頭からの記号列「１０」が圧縮符号「１０」であり、後続の記号「００」〜「１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「１０００」〜「１０１１」が抽出された場合、いずれの圧縮符号列「１０００」〜「１０１１」も伸長コード「００００…０」（１６個の０）に変換される。なお、圧縮符号列の下位２桁「００」〜「１１」は、再度伸長対象となる。【０２３９】
また、伸長コード「００００…０」（２５６個の０），「０００１」などのように、出現確率が低い伸長コードは、葉の番号と一対一対応である。すなわち、葉の番号は１つのみ割り当てられる。したがって、伸長する際に、当該伸長コードと一対一対応の葉の番号が圧縮符号列から抽出された場合に、当該伸長コードに変換されることとなる。【０２４０】
このように、伸長コード／圧縮符号テーブル３２０１では、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた伸長コード（「００００…０」（２５６個の０），「０００１」など）と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ伸長コード（「００００」，「００００…０」（１６個の０），「００００…０」（６４個の０））が存在することとなる。すなわち、出現率の高い伸長コードほどハフマン木の葉を多く、かつ、上位ビットに圧縮符号を含むように複数の葉の番号が割り当てられるように設定したため、圧縮処理や伸長処理の効率化を図ることができる。【０２４１】
（ハフマン木の圧縮用の構造体）
上述したＢ領域ハフマン木〜Ｅ領域ハフマン木２９００〜３２００は、それぞれ圧縮用の構造体と伸長用の構造体を持つ。まずは、分割領域ごとに圧縮用の構造体について説明する。圧縮用の構造体は圧縮時に使用される。圧縮用の構造体の基本構成は、ヘッダ領域と葉の領域である。【０２４２】
図３３は、Ｂ領域ハフマン木２９００の圧縮用の構造体を示す説明図である。Ｂ領域ハフマン木２９００の圧縮用の構造体（以下、「Ｂ領域圧縮用構造体」と略す。）３３００は、ヘッダ領域３３０１と葉の領域３３０２を有する。ヘッダ領域３３０１には、分割領域ＩＤ（＝Ｂ）が格納されている。葉の領域３３０２には、図２９−３に示した伸長コード／圧縮符号テーブル２９０１が格納されている。【０２４３】
図３４は、Ｃ領域ハフマン木３０００の圧縮用の構造体を示す説明図である。Ｃ領域ハフマン木３０００の圧縮用の構造体（以下、「Ｃ領域圧縮用構造体」と略す。）３４００は、ヘッダ領域３４０１と葉の第１領域３４０２と葉の第２領域３４０３を有する。ヘッダ領域３４０１には、分割領域ＩＤ（＝Ｃ）が格納されている。【０２４４】
葉の第１領域３４０２には、図３０−３に示した伸長コード／圧縮符号テーブル３００１のうち、伸長コード「００００」〜「１１１１」とその圧縮符号長および圧縮符号からなる部分テーブル３４１１が格納されている。葉の第２領域３４０３には、図３０−３に示した伸長コード／圧縮符号テーブル３００１のうち、伸長コード「００００…０」（１６個の０）とその圧縮符号長および圧縮符号からなる部分テーブル３４１２が格納されている。【０２４５】
図３５は、Ｄ領域ハフマン木３１００の圧縮用の構造体を示す説明図である。Ｄ領域ハフマン木３１００の圧縮用の構造体（以下、「Ｄ領域圧縮用構造体」と略す。）３５００は、ヘッダ領域３５０１と葉の第１領域３５０２と葉の第２領域３５０３を有する。ヘッダ領域３５０１には、分割領域ＩＤ（＝Ｄ）が格納されている。【０２４６】
葉の第１領域３５０２には、図３１−３に示した伸長コード／圧縮符号テーブル３１０１のうち、伸長コード「００００」〜「１１１１」とその圧縮符号長および圧縮符号からなる部分テーブル３５１１が格納されている。葉の第２領域３５０３には、図３１−３に示した伸長コード／圧縮符号テーブル３１０１のうち、伸長コード「００００…０」（１６個の０）とその圧縮符号長および圧縮符号と伸長コード「００００…０」（６４個の０）とその圧縮符号長および圧縮符号とからなる部分テーブル３５１２が格納されている。【０２４７】
図３６は、Ｅ領域ハフマン木３２００の圧縮用の構造体を示す説明図である。Ｅ領域ハフマン木３２００の圧縮用の構造体（以下、「Ｅ領域圧縮用構造体」と略す。）３６００は、ヘッダ領域３６０１と葉の第１領域３６０２と葉の第２領域３６０３を有する。ヘッダ領域３６０１には、分割領域ＩＤ（＝Ｅ）が格納されている。【０２４８】
葉の第１領域３６０２には、図３２−３に示した伸長コード／圧縮符号テーブル３２０１のうち、伸長コード「００００」〜「１１１１」とその圧縮符号長および圧縮符号からなる部分テーブル３６１１が格納されている。葉の第２領域３６０３には、図３２−３に示した伸長コード／圧縮符号テーブル３２０１のうち、伸長コード「００００…０」（１６個の０）とその圧縮符号長および圧縮符号と伸長コード「００００…０」（６４個の０）とその圧縮符号長および圧縮符号と伸長コード「００００…０」（２５６個の０）とその圧縮符号長および圧縮符号とからなる部分テーブル３６１２が格納されている。【０２４９】
（ハフマン木の伸長用の構造体）
つぎに、伸長用の構造体について説明する。伸長用の構造体は伸長時に使用される。伸長用の構造体の基本構成は、ヘッダ領域、根領域、節点領域、葉の領域である。【０２５０】
図３７−１は、Ｂ領域ハフマン木２９００の伸長用の構造体を示す説明図である。Ｂ領域ハフマン木２９００の伸長用の構造体（以下、「Ｂ領域伸長用構造体」と略す。）３７００は、ヘッダ領域３７０１と根領域３７０２と第１節点領域３７０３と第２節点領域３７０４と葉の領域３７０５を有する。ヘッダ領域３７０１には、分割領域ＩＤ（＝Ｂ）が格納されている。【０２５１】
図３７−２は、Ｂ領域伸長用構造体３７００の根領域３７０２の記憶内容を示す説明図である。根領域３７０２には、節点／葉識別フラグと、節点サイズと、葉／節点の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。根であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、根）からの枝の本数をあらわす。【０２５２】
図３７−３は、Ｂ領域伸長用構造体３７００の第１節点領域３７０３の記憶内容を示す説明図である。第１節点領域３７０３には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｅ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｅ））からの枝の本数をあらわす。【０２５３】
図３７−４は、Ｂ領域伸長用構造体３７００の第２節点領域３７０４の記憶内容を示す説明図である。第２節点領域３７０４には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｆ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｆ））からの枝の本数をあらわす。【０２５４】
図３７−５は、Ｂ領域伸長用構造体３７００の葉の領域３７０５の記憶内容を示す説明図である。葉の領域３７０５には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。【０２５５】
図３８−１は、Ｃ領域ハフマン木３０００の伸長用の構造体を示す説明図である。Ｃ領域ハフマン木３０００の伸長用の構造体（以下、「Ｃ領域伸長用構造体」と略す。）３８００は、ヘッダ領域３８０１と根領域３８０２と第１節点領域３８０３と第２節点領域３８０４と葉の第１領域３８０５と葉の第２領域３８０６を有する。ヘッダ領域３８０１には、分割領域ＩＤ（＝Ｃ）が格納されている。【０２５６】
図３８−２は、Ｃ領域伸長用構造体３８００の根領域３８０２の記憶内容を示す説明図である。根領域３８０２には、節点／葉識別フラグと、節点サイズと、葉／節点の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。根であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、根）からの枝の本数をあらわす。【０２５７】
図３８−３は、Ｃ領域伸長用構造体３８００の第１節点領域３８０３の記憶内容を示す説明図である。第１節点領域３８０３には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｅ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｅ））からの枝の本数をあらわす。【０２５８】
図３８−４は、Ｃ領域伸長用構造体３８００の第２節点領域３８０４の記憶内容を示す説明図である。第２節点領域３８０４には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｆ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｆ））からの枝の本数をあらわす。【０２５９】
図３８−５は、Ｃ領域伸長用構造体３８００の葉の第１領域３８０５の記憶内容を示す説明図である。葉の第１領域３８０５には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第１領域３８０５なので、葉種別フラグは「０」である。【０２６０】
図３８−６は、Ｃ領域伸長用構造体３８００の葉の第２領域３８０６の記憶内容を示す説明図である。第２領域３８０６には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第２領域３８０６なので、葉種別フラグは「１」である。【０２６１】
図３９−１は、Ｄ領域ハフマン木３１００の伸長用の構造体を示す説明図である。Ｄ領域ハフマン木３１００の伸長用の構造体（以下、「Ｄ領域伸長用構造体」と略す。）３９００は、ヘッダ領域３９０１と根領域３９０２と第１節点領域３９０３と第２節点領域３９０４と葉の第１領域３９０５と葉の第２領域３９０６を有する。ヘッダ領域３９０１には、分割領域ＩＤ（＝Ｄ）が格納されている。【０２６２】
図３９−２は、Ｄ領域伸長用構造体３９００の根領域３９０２の記憶内容を示す説明図である。根領域３９０２には、節点／葉識別フラグと、節点サイズと、葉／節点の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。根であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、根）からの枝の本数をあらわす。【０２６３】
図３９−３は、Ｄ領域伸長用構造体３９００の第１節点領域３９０３の記憶内容を示す説明図である。第１節点領域３９０３には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｅ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｅ））からの枝の本数をあらわす。【０２６４】
図３９−４は、Ｄ領域伸長用構造体３９００の第２節点領域３９０４の記憶内容を示す説明図である。第２節点領域３９０４には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｆ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｆ））からの枝の本数をあらわす。【０２６５】
図３９−５は、Ｄ領域伸長用構造体３９００の葉の第１領域３９０５の記憶内容を示す説明図である。葉の第１領域３９０５には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第１領域３９０５なので、葉種別フラグは「０」である。【０２６６】
図３９−６は、Ｄ領域伸長用構造体３９００の葉の第２領域３９０６の記憶内容を示す説明図である。第２領域３９０６には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第２領域３９０６なので、葉種別フラグは「１」である。【０２６７】
図４０−１は、Ｅ領域ハフマン木３２００の伸長用の構造体を示す説明図である。Ｅ領域ハフマン木３２００の伸長用の構造体（以下、「Ｅ領域伸長用構造体」と略す。）４０００は、ヘッダ領域４００１と根領域４００２と節点領域４００３と葉の第１領域４００４と葉の第２領域４００５を有する。ヘッダ領域４００１には、分割領域ＩＤ（＝Ｅ）が格納されている。【０２６８】
図４０−２は、Ｅ領域伸長用構造体４０００の根領域４００２の記憶内容を示す説明図である。根領域４００２には、節点／葉識別フラグと、節点サイズと、葉／節点の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。根であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、根）からの枝の本数をあらわす。【０２６９】
図４０−３は、Ｅ領域伸長用構造体４０００の節点領域４００３の記憶内容を示す説明図である。節点領域４００３には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｅ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｅ））からの枝の本数をあらわす。【０２７０】
図４０−４は、Ｅ領域伸長用構造体４０００の葉の第１領域４００４の記憶内容を示す説明図である。葉の第１領域４００４には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第１領域４００４なので、葉種別フラグは「０」である。【０２７１】
図４０−５は、Ｅ領域伸長用構造体４０００の葉の第２領域４００５の記憶内容を示す説明図である。第２領域４００５には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第２領域４００５なので、葉種別フラグは「１」である。【０２７２】
（Ｂ領域の文字データに関する出現ビット列の圧縮）
つぎに、Ｂ領域の文字データに関する出現ビット列の圧縮について説明する。Ｂ領域の文字データであるため、図３３に示したＢ領域圧縮用構造体３３００にアクセスして圧縮することとなる。【０２７３】
図４１は、Ｂ領域の文字データに関する出現ビット列の圧縮例を示す説明図である。本例では、圧縮対象の出現ビット列を「００００００１０００００００１１」とする。（Ａ）において、出現ビット列を３２ビットレジスタにセットする。ビットカウンタは、「０」にセットされている。そして、レジスタの末尾４ビットのみを取り出すため、マスクパターン「０ｘＦ０００００００」をセットして、マスク処理（論理積）をおこなう。【０２７４】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）である伸長コード「００００」に対応する圧縮符号「０」を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出す。これにより、４ビットの伸長コード「００００」を１ビットの圧縮符号「０」に圧縮することができる。マスク処理結果（ＡＮＤ結果）である伸長コード「００００」は４ビットであるため、ビットカウンタの値を４（＝０＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列「００１０００００００１１」を、マスクパターン「０ｘＦ０００００００」でマスク処理（論理積）をおこなう。【０２７５】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）である伸長コード「００１０」に対応する圧縮符号「１０１１」を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００１０」は４ビットであるため、ビットカウンタの値を８（＝４＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列「００００００１１」を、マスクパターン「０ｘＦ０００００００」でマスク処理（論理積）をおこなう。【０２７６】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）である伸長コード「００００」に対応する圧縮符号「０」を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出す。これにより、４ビットの伸長コード「００００」を１ビットの圧縮符号「０」に圧縮することができる。マスク処理結果（ＡＮＤ結果）である伸長コード「００００」は４ビットであるため、ビットカウンタの値を１２（＝８＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列「００１１」を、マスクパターン「０ｘＦ０００００００」でマスク処理（論理積）をおこなう。【０２７７】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）である伸長コード「００１１」に対応する圧縮符号「１０１０」を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００１１」は４ビットであるため、ビットカウンタの値を１６（＝１２＋４）にして、４ビットシフトする。この４ビットシフト後は、レジスタは空となるため、終了する。このように、圧縮対象の出現ビット列「１００１０００１００００００１１」を、（Ｂ）〜（Ｅ）から得られた圧縮符号列「０１０１１０１０１０」に圧縮することができる。【０２７８】
（Ｃ領域の文字データに関する出現ビット列の圧縮）
つぎに、Ｃ領域の文字データに関する出現ビット列の圧縮について説明する。Ｃ領域の文字データであるため、図３４に示したＣ領域圧縮用構造体３４００にアクセスして圧縮することとなる。【０２７９】
図４２は、Ｃ領域の文字データに関する出現ビット列の圧縮例を示す説明図である。本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。【０２８０】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとする。この伸長コード「００００…０」（１６ビット連続０）に対応する圧縮符号「１００」を、Ｃ領域圧縮用構造体３４００の葉の第２領域３４１２から読み出す。これにより、伸長コード「００００…０」（１６ビット連続０）をたかだか３ビットの圧縮符号「１００」に圧縮することができる。マスク処理結果（ＡＮＤ結果）である伸長コード「００００…０」（１６ビット連続０）は１６ビットであるため、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。【０２８１】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「１０１１」をそのまま伸長コードとする。この伸長コード「１０１１」に対応する圧縮符号「１１１１１００１」を、Ｃ領域圧縮用構造体３４００の葉の第１領域３４０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「１０１１」は４ビットであるため、ビットカウンタの値を２０（＝１６＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。【０２８２】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「００１０」をそのまま伸長コードとする。この伸長コード「００１０」に対応する圧縮符号「１０１１」を、Ｃ領域圧縮用構造体３４００の葉の第１領域３４０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００１０」は４ビットであるため、ビットカウンタの値を２４（＝２０＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。【０２８３】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「００００」をそのまま伸長コードとする。この伸長コード「００００」に対応する圧縮符号「０」を、Ｃ領域圧縮用構造体３４００の葉の第２領域３４０３から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００００」は４ビットであるため、ビットカウンタの値を２８（＝２４＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。【０２８４】
（Ｆ）において、（Ｅ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「００１１」をそのまま伸長コードとする。この伸長コード「００１１」に対応する圧縮符号「１０１０」を、Ｃ領域圧縮用構造体３４００の葉の第１領域３４０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００１１」は４ビットであるため、ビットカウンタの値を３２（＝２８＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。【０２８５】
（Ｇ）において、（Ｆ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとする。この伸長コード「００００…０」（１６ビット連続０）に対応する圧縮符号「１００」を、Ｃ領域圧縮用構造体３４００の葉の第２領域３４０３から読み出す。これにより、伸長コード「００００…０」（１６ビット連続０）をたかだか３ビットの圧縮符号「１００」に圧縮することができる。マスク処理結果（ＡＮＤ結果）である伸長コード「００００…０」（１６ビット連続０）は１６ビットであるため、ビットカウンタの値を４８（＝３２＋１６）にして、１６ビットシフトする。この１６ビットシフト後は、レジスタは空となるため、終了する。このように、圧縮対象の出現ビット列を、（Ｂ）〜（Ｇ）から得られた圧縮符号列に圧縮することができる。【０２８６】
（Ｄ領域の文字データに関する出現ビット列の圧縮）
つぎに、Ｄ領域の文字データに関する出現ビット列の圧縮について説明する。Ｄ領域の文字データであるため、図３５に示したＤ領域圧縮用構造体３５００にアクセスして圧縮することとなる。【０２８７】
図４３は、Ｄ領域の文字データに関する出現ビット列の圧縮例（その１）を示す説明図である。本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタおよび連続カウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。【０２８８】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１（＝０＋１）にする。【０２８９】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を３２（＝１６＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を２（＝１＋１）にする。【０２９０】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を４８（＝３２＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を３（＝２＋１）にする。【０２９１】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を６４（＝４８＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を４（＝３＋１）にする。【０２９２】
ここで、連続カウンタの値が「４」になったため、バッファには、「００００…０」（１６ビット連続０）が４つ、すなわち、「００００…０」（６４ビット連続０）が１つ保存されていることとなる。したがって、この「００００…０」（６４ビット連続０）を伸長コードとして、当該伸長コードに対応する圧縮符号「１１０」を、Ｄ領域圧縮用構造体３５００の葉の第２領域３５０３から読み出す。これにより、出現ビット列内の伸長コード「００００…０」（６４ビット連続０）をたかだか３ビットの圧縮符号「１１０」に圧縮することができる。【０２９３】
図４４は、Ｄ領域の文字データに関する出現ビット列の圧縮例（その２）を示す説明図である。図４３に示した例は、伸長コード「００００…０」（６４ビット連続０）を３ビットの圧縮符号「１１０」に圧縮できた例であるが、本例では、伸長コード「００００…０」（６４ビット連続０）が得られなかった場合の圧縮例を示す。【０２９４】
また、本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタおよび連続カウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。【０２９５】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１（＝０＋１）にする。【０２９６】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を３２（＝１６＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を２（＝１＋１）にする。【０２９７】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を４８（＝３２＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を３（＝２＋１）にする。【０２９８】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「１０１１」をそのまま伸長コードとする。この伸長コード「１０１１」に対応する圧縮符号「１１１１１００１」を、Ｄ領域圧縮用構造体３５００の葉の第１領域３５０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「１０１１」は４ビットであるため、ビットカウンタの値を５２（＝４８＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られなかったため、連続カウンタの値を０にリセットする。【０２９９】
この連続カウンタのリセットにより、（Ｂ）〜（Ｄ）においてバッファに保持された各伸長コード「００００…０」（１６ビット連続０）に対応する圧縮符号「１１００」を、Ｄ領域圧縮用構造体３５００の葉の第２領域３５１２からそれぞれ読み出す。これにより、「００００…０」（６４ビット連続０）が出現しなかった場合でも、１６ビット単位で圧縮することができる。【０３００】
（Ｅ領域の文字データに関する出現ビット列の圧縮）
つぎに、Ｅ領域の文字データに関する出現ビット列の圧縮について説明する。Ｅ領域の文字データであるため、図３６に示したＥ領域圧縮用構造体３６００にアクセスして圧縮することとなる。【０３０１】
図４５は、Ｅ領域の文字データに関する出現ビット列の圧縮例（その１）を示す説明図である。本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタおよび連続カウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。【０３０２】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１（＝０＋１）にする。【０３０３】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を３２（＝１６＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を２（＝１＋１）にする。以降、同様の内容がビットカウンタの値２２４、連続カウンタの値１４まで繰り返されたものとする。【０３０４】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を２４０（＝２２４＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１５（＝１４＋１）にする。【０３０５】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を２５６（＝２４０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１６（＝１５＋１）にする。【０３０６】
ここで、連続カウンタの値が「１６」になったため、バッファには、「００００…０」（１６ビット連続０）が１６個、すなわち、「００００…０」（２５６ビット連続０）が１つ保存されていることとなる。したがって、この「００００…０」（２５６ビット連続０）を伸長コードとして、当該伸長コードに対応する圧縮符号「１１１０」を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６０３から読み出す。これにより、出現ビット列内の伸長コード「００００…０」（２５６ビット連続０）をたかだか４ビットの圧縮符号「１１１０」に圧縮することができる。【０３０７】
図４６は、Ｅ領域の文字データに関する出現ビット列の圧縮例（その２）を示す説明図である。図４５に示した例は、伸長コード「００００…０」（２５６ビット連続０）を３ビットの圧縮符号「１１１０」に圧縮できた例であるが、本例では、伸長コード「００００…０」（２５６ビット連続０）が得られなかった場合の圧縮例を示す。【０３０８】
また、本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタおよび連続カウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。【０３０９】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１（＝０＋１）にする。【０３１０】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を３２（＝１６＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を２（＝１＋１）にする。【０３１１】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を４８（＝３２＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を３（＝２＋１）にする。【０３１２】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を６４（＝４８＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を４（＝３＋１）にする。【０３１３】
（Ｆ）において、（Ｅ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を８０（＝６４＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を５（＝４＋１）にする。【０３１４】
（Ｇ）において、（Ｆ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「１０１１」をそのまま伸長コードとする。この伸長コード「１０１１」に対応する圧縮符号「１１１１１００１」を、Ｅ領域圧縮用構造体３６００の葉の第１領域３６０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「１０１１」は４ビットであるため、ビットカウンタの値を８４（＝８０＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られなかったため、連続カウンタの値を０にリセットする。【０３１５】
バッファには、「００００…０」（１６ビット連続０）が４つ、すなわち、「００００…０」（６４ビット連続０）が１つ保存されていることとなる。したがって、この連続カウンタのリセットにより、（Ｂ）〜（Ｅ）においてバッファに保持された「００００…０」（６４ビット連続０）を伸長コードとして、当該伸長コードに対応する圧縮符号「１１０」を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６１２から読み出す。これにより、出現ビット列内の伸長コード「００００…０」（６４ビット連続０）をたかだか３ビットの圧縮符号「１１０」に圧縮することができる。【０３１６】
また、バッファには、（Ｆ）の処理により、「００００…０」（１６ビット連続０）が１つ保存されていることとなる。したがって、この連続カウンタのリセットにより、（Ｆ）においてバッファに保持された「００００…０」（１６ビット連続０）を伸長コードとして、当該伸長コードに対応する圧縮符号「１０」を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６１２から読み出す。これにより、出現ビット列内の伸長コード「００００…０」（１６ビット連続０）をたかだか２ビットの圧縮符号「１０」に圧縮することができる。【０３１７】
（圧縮処理手順）
つぎに、実施の形態２における出現マップの圧縮処理手順について説明する。図４７は、Ｂ領域のハフマン圧縮処理手順を示すフローチャートである。このフローチャートでは、図２４−２におけるハフマン圧縮（ステップＳ２４７９）において、図４１に示したような圧縮処理を自動実行する。【０３１８】
まず、レジスタに選択文字データの出現ビット列をセットして（ステップＳ４７０１）、レジスタが空か否かを判断する（ステップＳ４７０２）。レジスタが空でない場合（ステップＳ４７０２：Ｎｏ）、４ビット連続０記号列圧縮処理を実行し（ステップＳ４７０３）、ステップＳ４７０２に戻る。ステップＳ４７０２において、レジスタが空である場合（ステップＳ４７０２：Ｙｅｓ）、Ｂ領域のハフマン圧縮処理を終了し、ステップＳ２４７１に戻る。【０３１９】
つぎに、４ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図４８は、４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、末尾４ビットのマスク処理により、４ビットの伸長コードを特定する（ステップＳ４８０１）。そして、特定された伸長コードに対応する圧縮符号を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出すことで当該圧縮符号に変換する。（ステップＳ４８０２）。そして、ビットカウンタを４加算して、レジスタ内のビット列を４ビットシフトする（ステップＳ４８０３）。レジスタの空いた領域には後続のビット列が順次セットされる。そして、ステップＳ４７０２に戻る。【０３２０】
つぎに、Ｃ領域のハフマン圧縮処理手順について説明する。図４９は、Ｃ領域のハフマン圧縮処理手順を示すフローチャートである。このフローチャートでは、図２４−２におけるハフマン圧縮（ステップＳ２４７９）において、図４２に示したような圧縮処理を自動実行する。まず、レジスタに選択文字データの出現ビット列をセットして（ステップＳ４９０１）、レジスタが空か否かを判断する（ステップＳ４９０２）。レジスタが空でない場合（ステップＳ４９０２：Ｎｏ）、１６ビット連続０記号列圧縮処理を実行する（ステップＳ４９０３）。【０３２１】
そして、４ビット連続０記号列圧縮処理を実行し（ステップＳ４９０４）、ステップＳ４９０２に戻る。ステップＳ４９０２において、レジスタが空である場合（ステップＳ４９０２：Ｙｅｓ）、Ｃ領域のハフマン圧縮処理を終了し、ステップＳ２４７１に戻る。なお、４ビット連続０記号列圧縮処理（ステップＳ４９０４）は、図４８に示した処理手順となる。【０３２２】
つぎに、１６ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図５０は、１６ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、末尾１６ビットのマスク処理をおこない（ステップＳ５００１）、末尾の１６ビットがすべて０であるか否かを判断する（ステップＳ５００２）。すべて０である場合（ステップＳ５００２：Ｙｅｓ）、「００００…０」（１６個の０）の伸長コードに対応する圧縮符号を、Ｃ領域圧縮用構造体３４００の葉の第２領域３４０３から読み出すことで当該圧縮符号に変換する。（ステップＳ５００３）。【０３２３】
そして、ビットカウンタを１６ビット加算して、レジスタ内のビット列を１６ビットシフトする（ステップＳ５００４）。レジスタの空いた領域には後続のビット列が順次セットされる。そして、ステップＳ５００１に戻る。一方、ステップＳ５００２において、１６ビットすべて０でない場合（ステップＳ５００２：Ｎｏ）、ステップＳ４９０４に移行して、４ビット連続０記号列圧縮処理（ステップＳ４９０４）を実行する。【０３２４】
つぎに、Ｄ領域のハフマン圧縮処理手順について説明する。図５１は、Ｄ領域のハフマン圧縮処理手順を示すフローチャートである。このフローチャートでは、図４３および図４４に示したような圧縮処理を自動実行する。まず、レジスタに選択文字データの出現ビット列をセットして（ステップＳ５１０１）、レジスタが空か否かを判断する（ステップＳ５１０２）。レジスタが空でない場合（ステップＳ５１０２：Ｎｏ）、６４ビット連続０記号列圧縮処理を実行して（ステップＳ５１０３）、ステップＳ５１０２に戻る。ステップＳ５１０２において、レジスタが空である場合（ステップＳ５１０２：Ｙｅｓ）、ステップＳ２４７１に戻る。【０３２５】
つぎに、６４ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図５２は、６４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、末尾１６ビットのマスク処理をおこない（ステップＳ５２０１）、末尾の１６ビットがすべて０であるか否かを判断する（ステップＳ５２０２）。すべて０である場合（ステップＳ５２０２：Ｙｅｓ）、「００００…０」（１６個の０）の伸長コードをバッファに保持する（ステップＳ５２０３）。そして、ビットカウンタを１６加算して、レジスタ内のビット列を１６ビットシフトする（ステップＳ５２０４）。レジスタの空いた領域には後続のビット列が順次セットされる。また、連続カウンタを１加算する。【０３２６】
そして、連続カウンタの値ＣａがＣａ＝４であるか否かを判断する（ステップＳ５２０５）。Ｃａ＝４である場合（ステップＳ５２０５：Ｙｅｓ）、バッファ内には、４個の「００００…０」（１６個の０）、すなわち、１個の「００００…０」（６４個の０）が保持されているため、この伸長コード「００００…０」（６４個の０）に対応する圧縮符号を、Ｄ領域圧縮用構造体３５００の葉の第２領域３５０３から読み出すことで当該圧縮符号に変換する。（ステップＳ５２０６）。このあと、連続カウンタの値Ｃａをリセット（Ｃａ＝０）して（ステップＳ５２０７）、ステップＳ５１０２に戻る。一方、ステップＳ５２０５において、Ｃａ＝４でない場合（ステップＳ５２０５：Ｎｏ）、ステップＳ５１０２に戻る。【０３２７】
一方、ステップＳ５２０２において、末尾の１６ビットがすべて０でないと判断された場合（ステップＳ５２０２：Ｎｏ）、連続カウンタの値Ｃａをリセット（Ｃａ＝０）して（ステップＳ５２０８）、バッファ内の各「００００…０」（１６個の０）をそれぞれ伸長コードとする。そして、当該伸長コードに対応する圧縮符号を、Ｄ領域圧縮用構造体３５００の葉の第２領域３５０３から読み出すことで当該圧縮符号に変換する（ステップＳ５２０９）。そして、４ビット連続０記号列圧縮処理を実行して（ステップＳ５２１０）、ステップＳ５１０２に戻る。４ビット連続０記号列圧縮処理（ステップＳ５２１０）は、図４８に示した処理手順となる。【０３２８】
つぎに、Ｅ領域のハフマン圧縮処理手順について説明する。図５３は、Ｅ領域のハフマン圧縮処理手順を示すフローチャートである。このフローチャートでは、図４５および図４６に示したような圧縮処理を自動実行する。まず、レジスタに選択文字データの出現ビット列をセットして（ステップＳ５３０１）、レジスタが空か否かを判断する（ステップＳ５３０２）。レジスタが空でない場合（ステップＳ５３０２：Ｎｏ）、２５６ビット連続０記号列圧縮処理を実行して（ステップＳ５３０３）、ステップＳ５３０２に戻る。ステップＳ５３０２において、レジスタが空である場合（ステップＳ５３０２：Ｙｅｓ）、ステップＳ２４７１に戻る。【０３２９】
つぎに、２５６ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図５４は、２５６ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、末尾１６ビットのマスク処理をおこない（ステップＳ５４０１）、末尾の１６ビットがすべて０であるか否かを判断する（ステップＳ５４０２）。すべて０である場合（ステップＳ５４０２：Ｙｅｓ）、「００００…０」（１６個の０）の伸長コードをバッファに保持する（ステップＳ５４０３）。そして、ビットカウンタを１６加算して、レジスタ内のビット列を１６ビットシフトする（ステップＳ５４０４）。レジスタの空いた領域には後続のビット列が順次セットされる。また、連続カウンタを１加算する。【０３３０】
そして、連続カウンタの値ＣａがＣａ＝１６であるか否かを判断する（ステップＳ５４０５）。Ｃａ＝１６である場合（ステップＳ５４０５：Ｙｅｓ）、バッファ内には、１６個の「００００…０」（１６個の０）、すなわち、１個の「００００…０」（２５６個の０）が保持されているため、この伸長コード「００００…０」（２５６個の０）に対応する圧縮符号を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６０３から読み出すことで当該圧縮符号に変換する（ステップＳ５４０６）。このあと、連続カウンタの値Ｃａをリセット（Ｃａ＝０）して（ステップＳ５４０７）、ステップＳ５３０２に戻る。一方、ステップＳ５４０５において、Ｃａ＝１６でない場合（ステップＳ５４０５：Ｎｏ）、ステップＳ５３０２に戻る。【０３３１】
一方、ステップＳ５４０２において、末尾の１６ビットがすべて０でないと判断された場合（ステップＳ５４０２：Ｎｏ）、１６／６４ビット連続０記号列圧縮処理を実行する（ステップＳ５４０８）。このあと、４ビット連続０記号列圧縮処理を実行して（ステップＳ５４０９）、ステップＳ５４０２に戻る。４ビット連続０記号列圧縮処理（ステップＳ５４０９）は、図４８に示した処理手順となる。【０３３２】
つぎに、１６／６４ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図５５は、１６／６４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、連続カウンタの値ＣａがＣａ≦３であるか否かを判断する（ステップＳ５５０１）。Ｃａ≦３でない場合（ステップＳ５５０１：Ｎｏ）、バッファ内の「００００…０」（６４個の０）を伸長コードとする。この場合、伸長コードは１〜３個得られる。【０３３３】
この伸長コードに対応する圧縮符号を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６０３から読み出すことで当該圧縮符号に変換する（ステップＳ５５０２）。そして、伸長コードの個数Ｃｖを用いて、連続カウンタの値Ｃａを更新し（ステップＳ５５０３）、ステップＳ５５０４に移行する。【０３３４】
一方、ステップＳ５５０１において、Ｃａ≦３である場合（ステップＳ５５０１：Ｙｅｓ）、ステップＳ５５０４に移行する。ステップＳ５５０４において、Ｃａ＝０であるか否かを判断する（ステップＳ５５０４）。Ｃａ＝０でない場合（ステップＳ５５０４：Ｎｏ）、バッファ内の「００００…０」（１６個の０）を伸長コードとする。この場合、伸長コードは１または２個得られる。【０３３５】
この伸長コードに対応する圧縮符号を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６１２から読み出すことで当該圧縮符号に変換する（ステップＳ５５０５）。そして、連続カウンタの値Ｃａをリセット（Ｃａ＝０）して（ステップＳ５５０６）、ステップＳ５４０９に戻る。一方、ステップＳ５５０４において、Ｃａ＝０である場合（ステップＳ５５０４：Ｙｅｓ）、ステップＳ５４０９に戻る。【０３３６】
（文字データに関する出現ビット列の圧縮符号列の伸長）
つぎに、文字データに関する出現ビット列の圧縮符号列の伸長について説明する。伸長処理では、上述したＢ領域伸長用構造体３７００〜Ｅ領域伸長用構造体４０００を用いる。どの伸長用構造体を用いるかは、選択文字データの属する分割領域に依存する。【０３３７】
図５６は、マスクパターンテーブル５６００を示す説明図である。マスクパターンは、伸長の際、圧縮符号列を特定するために用いられる。マスクパターンはビットアドレスの値０〜７に応じて使い分けられる。【０３３８】
つぎに、圧縮符号列の伸長例について説明する。ここでは、例として、Ｃ領域の文字データに関する出現ビット列の圧縮符号列の伸長例について説明する。【０３３９】
図５７は、Ｃ領域の文字データに関する出現ビット列の圧縮符号列の伸長例を示す説明図である。まず、（Ａ）において、圧縮符号列を３２ビットレジスタにセットする。初期状態なので、ビットカウンタ、バイトアドレス、ビットアドレスの値Ａｂｉはいずれも「０」である。【０３４０】
ビットアドレスの値ＡｂｉがＡｂｉ＝０であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘＦ０００００００）をセットする。なお、バイトアドレスは、ビットカウンタの値を８で割ったときの商であり、ビットアドレスは、そのときの余りとなる。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘＦ０００００００）によりマスク処理（論理積）をおこなう。【０３４１】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１００１」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号９（＝１００１）が特定されることとなり、伸長コード「００００…０」（１６個の０）へのポインタが読み出されて、葉の第２領域３８０６をポイントする。これにより、葉の第２領域３８０６から伸長コード「００００…０」（１６個の０）が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「３」も読み出されるため、ビットカウンタを＋３とし、バイトアドレスおよびビットアドレスを計算する。【０３４２】
ビットアドレスの値ＡｂｉがＡｂｉ＝３であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ１Ｅ００００００）をセットする。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘ１Ｅ００００００）によりマスク処理（論理積）をおこなう。【０３４３】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１１１１」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、節点の番号Ｆ（＝１１１１）が特定されることとなり、節点Ｎ（Ｆ）へのポインタが読み出されて、第２節点領域３８０４をポイントする。このように葉ではなく節点をポイントした場合は、圧縮符号長が特定できないため、ビットカウンタを＋４とし、バイトアドレスおよびビットアドレスを計算する。【０３４４】
ビットアドレスの値ＡｂｉがＡｂｉ＝７であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ０１Ｅ０００００）をセットする。そして、レジスタにセットされた圧縮符号列をマスクパターン（０ｘ０１Ｅ０００００）によりマスク処理（論理積）をおこなう。【０３４５】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）として４ビットコード「１００１」が得られる。（Ｃ）では、節点の番号Ｆ（＝１１１１）により第２節点領域３８０４がポイントされているため、葉の番号としてＦ９（＝１１１１１００１）が特定される。これにより、葉の番号Ｆ９に対応するポインタを、Ｃ領域伸長用構造体３８００の第２節点領域３８０４から読み出して、葉の第１領域３８０５をポイントする。これにより、葉の第１領域３８０５から伸長コード「１０１１」が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「８」も読み出されるが、（Ｃ）で加算した＋４を相殺するため、ビットカウンタを＋（８−４）とし、バイトアドレスおよびビットアドレスを計算する。【０３４６】
バイトアドレスが＋１加算されたため、レジスタ内の圧縮符号列を８ビットシフトする。また、ビットアドレスの値ＡｂｉがＡｂｉ＝３であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ１Ｅ００００００）をセットする。そして、８ビットシフト後のレジスタにセットされた圧縮符号列について、マスクパターン（０ｘ１Ｅ００００００）によりマスク処理（論理積）をおこなう。【０３４７】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１０１１」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号Ｂ（＝１０１１）が特定されることとなり、伸長コード「００１０」へのポインタが読み出されて、葉の第１領域３８０５をポイントする。これにより、葉の第１領域３８０５から伸長コード「００１０」が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「４」も読み出されるため、ビットカウンタを＋４とし、バイトアドレスおよびビットアドレスを計算する。【０３４８】
ビットアドレスの値ＡｂｉがＡｂｉ＝７であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ０１Ｅ０００００）をセットする。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘ０１Ｅ０００００）によりマスク処理（論理積）をおこなう。【０３４９】
（Ｆ）において、（Ｅ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「０１０１」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号５（＝０１０１）が特定されることとなり、伸長コード「００００」へのポインタが読み出されて、葉の第１領域３８０５をポイントする。これにより、葉の第１領域３８０５から伸長コード「００００」が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「１」も読み出されるため、ビットカウンタを＋１とし、バイトアドレスおよびビットアドレスを計算する。【０３５０】
ビットアドレスの値ＡｂｉがＡｂｉ＝０であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘＦ０００００００）をセットする。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘＦ０００００００）によりマスク処理（論理積）をおこなう。【０３５１】
（Ｇ）において、（Ｆ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１０１０」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号Ａ（＝１０１０）が特定されることとなり、伸長コード「０００１」へのポインタが読み出されて、葉の第１領域３８０５をポイントする。これにより、葉の第１領域３８０５から伸長コード「０００１」が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「４」も読み出されるため、ビットカウンタを＋４とし、バイトアドレスおよびビットアドレスを計算する。【０３５２】
ビットアドレスの値ＡｂｉがＡｂｉ＝４であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ０Ｆ００００００）をセットする。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘ０Ｆ００００００）によりマスク処理（論理積）をおこなう。【０３５３】
（Ｈ）において、レジスタ内の圧縮符号列が１ビット不足しているため、ダミーとして「０」（「１」でもよい）を追加する（図中、アンダーバーを用いて表記）。（Ｇ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１０００」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号８（＝１０００）が特定されることとなり、伸長コード「００００…０」（１６個の０）へのポインタが読み出されて、葉の第２領域３８０６をポイントする。これにより、葉の第２領域３８０６から伸長コード「００００…０」（１６個の０）が読み出されることとなり、当該伸長コードに変換される。【０３５４】
（伸長処理手順）
つぎに、実施の形態２における出現マップへの伸長処理手順について説明する。図５８および図５９は、実施の形態２における出現マップへの伸長処理手順を示すフローチャートである。このフローチャートでは、図２５−２におけるハフマン伸長（ステップＳ２５４５）において、図５７に示したような圧縮処理を自動実行する。【０３５５】
なお、初期状態では、ビットカウンタ、バイトアドレス、ビットアドレスはいずれも「０」である。まず、レジスタに選択文字データの出現ビット列の圧縮符号列をセットして（ステップＳ５８０１）、マスクパターンテーブル５６００からビットアドレスに応じたマスクパターンを選択する（ステップＳ５８０２）。【０３５６】
そして、すべて伸長されたか否かを判断する（ステップＳ５８０３）。この判断は、ダミービットが付与されたか否か、レジスタが空になったか否か、または、マスクパターンによるマスク処理が実行できないか否か（対応する圧縮符号列がないなど）で判断することができる。【０３５７】
すべて伸長されていない場合（ステップＳ５８０３：Ｎｏ）、選択マスクパターンによる末尾４ビットのマスク処理を実行する（ステップＳ５８０４）。そして、節点領域をポイント中か否かを判断する（ステップＳ５８０５）。節点領域をポイント中でない場合（ステップＳ５８０５：Ｎｏ）、根領域において、マスク処理結果に一致する葉／節点の番号に対応するポインタを特定する（ステップＳ５８０６）。そして、ステップＳ５９０１に移行する。一方、節点領域をポイント中である場合（ステップＳ５８０５：Ｙｅｓ）、ポイント中の節点領域において、マスク処理結果に一致する葉の番号に対応するポイントを特定する（ステップＳ５８０７）。そして、ステップＳ５９０１に移行する。【０３５８】
図５９において、ポイント先が葉の領域であるか否かを判断する（ステップＳ５９０１）。葉の領域である場合（ステップＳ５９０１：Ｙｅｓ）、該当する伸長コードを取得するとともに（ステップＳ５９０２）、当該伸長コードの圧縮符号長Ｌを取得して（ステップＳ５９０３）、ステップＳ５９０５に移行する。一方、ステップＳ５９０１において、ポイント先が葉の領域でない場合（ステップＳ５９０１：Ｎｏ）、節点領域をポイント中であるため、伸長コードと圧縮符号長Ｌを取得できない。したがって、圧縮符号長ＬをＬ＝４ビットに仮設定し（ステップＳ５９０４）、ステップＳ５９０５に移行する。【０３５９】
ステップＳ５９０５では、ビットカウンタの値Ｃｂに対して圧縮符号長Ｌを加算することで、ビットカウンタの値Ｃｂを更新する（ステップＳ５９０５）。この更新後のビットカウンタの値Ｃｂを用いて、バイトアドレスの値Ａｂｙを計算する（ステップＳ５９０６）。バイトアドレスが＋１になったか否かを判断し（ステップＳ５９０７）、＋１になった場合（ステップＳ５９０７：Ｙｅｓ）、圧縮符号列を８ビットシフトする（ステップＳ５９０８）。そして、ステップＳ５９０９に移行する。【０３６０】
一方、＋１になっていない場合（ステップＳ５９０７：Ｎｏ）、ステップＳ５９０９に移行する。ステップＳ５９０９では、ビットアドレスの値Ａｂｉを計算する（ステップＳ５９０９）。そして、ステップＳ５８０２に戻る。また、図５８のステップＳ５８０３において、すべて伸長された場合（ステップＳ５８０３：Ｙｅｓ）、ステップＳ２５４６に戻る。【０３６１】
このように、本実施の形態２においても、文字データごとの出現率を圧縮パラメータとすることにより、出現率に応じたハフマン木を選択することができる。すなわち、出現率が低いほど特殊記号列が長い特殊なハフマン木を選択することができる。一方、出現率が高いほど特殊なハフマン木よりも通常のハフマン木を選択することができる。したがって、出現マップ９０４の圧縮効率の向上を図ることができる。【０３６２】
さらに、圧縮効率の悪い分割領域については、ハフマン木を割り振らず非圧縮とすることにより、無駄な圧縮処理を防止することができ、圧縮速度の高速化を図ることができる。また、分割領域を出現確率５０％を境界として対称とすることにより、ハフマン木の容量を半減することができる。したがって、省メモリ化を実現することができる。【０３６３】
また、ミニＳＤやＨＤに格納される出現マップ９０４を、特殊なハフマン木を用いて効率的に圧縮する。この特殊なハフマン木には、４ビット系の通常のハフマン木にさらに４ビットバウンダリのＮＵＬＬ連続記号列が追加されているため、携帯電話機などのモバイル端末に実装される低速ＣＰＵや少メモリにおいて、高速な圧縮／伸長を実現することができる。【０３６４】
また、本実施の形態２では、ｎ＝４の１６分枝ハフマン木を用いたが、ｎ＝４に限らず、２n分枝（ｎ＝２，３，…）のハフマン木を適用することができる。この場合、ｎの値によって伸長コードのビット長や、圧縮符号、圧縮符号長を変えることにより、同様の圧縮伸長をおこなうことができる。【０３６５】
なお、上述したいずれの実施の形態においても、検索対象ファイルとしてＨＴＭＬのファイルを例に挙げて説明したが、ＨＴＭＬに限定されることはなく、ＸＭＬなど他のマークアップ言語によって記述されたファイルであってもよい。また、連字を外字に置換することとしているが、連字に限らず、検索対象ファイルに含まれているＨＴＭＬやＸＭＬのタグを外字に置換することとして、連字外字置換テーブルに含めることとしてもよい。これにより、検索対象ファイルの圧縮率をさらに向上することができる。【０３６６】
以上のことから、実施の形態にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、コンテンツについての圧縮率、セキュリティ、および全文検索速度の向上を図ることができるという効果を奏する。
【産業上の利用可能性】
【０３６７】
以上のように、本発明にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置は、コンテンツの検索に有用であり、特に、複数種類の文字データが混在した多ファイルの辞書コンテンツに適している。
【図１】
2008146756.tif 000004
【図２】
2008146756.tif 000005
【図３】
2008146756.tif 000006
【図４】
2008146756.tif 000007
【図５】
2008146756.tif 000008
【図６】
2008146756.tif 000009
【図７】
2008146756.tif 000010
【図８】
2008146756.tif 000011
【図９】
2008146756.tif 000012
【図１０】
2008146756.tif 000013
【図１１】
2008146756.tif 000014
【図１２】
2008146756.tif 000015
【図１３】
2008146756.tif 000016
【図１４】
2008146756.tif 000017
【図１５−１】
2008146756.tif 000018
【図１５−２】
2008146756.tif 000019
【図１６−１】
2008146756.tif 000020
【図１６−２】
2008146756.tif 000021
【図１６−３】
2008146756.tif 000022
【図１６−４】
2008146756.tif 000023
【図１６−５】
2008146756.tif 000024
【図１６−６】
2008146756.tif 000025
【図１６−７】
2008146756.tif 000026
【図１６−８】
2008146756.tif 000027
【図１６−９】
2008146756.tif 000028
【図１６−１０】
2008146756.tif 000029
【図１６−１１】
2008146756.tif 000030
【図１７】
2008146756.tif 000031
【図１８】
2008146756.tif 000032
【図１９】
2008146756.tif 000033
【図２０】
2008146756.tif 000034
【図２１】
2008146756.tif 000035
【図２２】
2008146756.tif 000036
【図２３】
2008146756.tif 000037
【図２４−１】
2008146756.tif 000038
【図２４−２】
2008146756.tif 000039
【図２５−１】
2008146756.tif 000040
【図２５−２】
2008146756.tif 000041
【図２６】
2008146756.tif 000042
【図２７】
2008146756.tif 000043
【図２８】
2008146756.tif 000044
【図２９−１】
2008146756.tif 000045
【図２９−２】
2008146756.tif 000046
【図２９−３】
2008146756.tif 000047
【図３０−１】
2008146756.tif 000048
【図３０−２】
2008146756.tif 000049
【図３０−３】
2008146756.tif 000050
【図３１−１】
2008146756.tif 000051
【図３１−２】
2008146756.tif 000052
【図３１−３】
2008146756.tif 000053
【図３２−１】
2008146756.tif 000054
【図３２−２】
2008146756.tif 000055
【図３２−３】
2008146756.tif 000056
【図３３】
2008146756.tif 000057
【図３４】
2008146756.tif 000058
【図３５】
2008146756.tif 000059
【図３６】
2008146756.tif 000060
【図３７−１】
2008146756.tif 000061
【図３７−２】
2008146756.tif 000062
【図３７−３】
2008146756.tif 000063
【図３７−４】
2008146756.tif 000064
【図３７−５】
2008146756.tif 000065
【図３８−１】
2008146756.tif 000066
【図３８−２】
2008146756.tif 000067
【図３８−３】
2008146756.tif 000068
【図３８−４】
2008146756.tif 000069
【図３８−５】
2008146756.tif 000070
【図３８−６】
2008146756.tif 000071
【図３９−１】
2008146756.tif 000072
【図３９−２】
2008146756.tif 000073
【図３９−３】
2008146756.tif 000074
【図３９−４】
2008146756.tif 000075
【図３９−５】
2008146756.tif 000076
【図３９−６】
2008146756.tif 000077
【図４０−１】
2008146756.tif 000078
【図４０−２】
2008146756.tif 000079
【図４０−３】
2008146756.tif 000080
【図４０−４】
2008146756.tif 000081
【図４０−５】
2008146756.tif 000082
【図４１】
2008146756.tif 000083
【図４２】
2008146756.tif 000084
【図４３】
2008146756.tif 000085
【図４４】
2008146756.tif 000086
【図４５】
2008146756.tif 000087
【図４６】
2008146756.tif 000088
【図４７】
2008146756.tif 000089
【図４８】
2008146756.tif 000090
【図４９】
2008146756.tif 000091
【図５０】
2008146756.tif 000092
【図５１】
2008146756.tif 000093
【図５２】
2008146756.tif 000094
【図５３】
2008146756.tif 000095
【図５４】
2008146756.tif 000096
【図５５】
2008146756.tif 000097
【図５６】
2008146756.tif 000098
【図５７】
2008146756.tif 000099
【図５８】
2008146756.tif 000100
【図５９】
2008146756.tif 000101
【手続補正書】
【提出日】平成21年10月9日(2009.10.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンテンツを構成する複数の検索対象ファイルにおける文字データの存否をあらわした前記文字データごとのビット列の集合を用いて検索キーワードを構成する文字データを含む検索対象ファイルを絞り込むことにより、当該検索対象ファイルの中から前記検索キーワードと一致または関連するキーワードを検索する検索処理をコンピュータに実行させる情報検索プログラムにおいて、
前記ビット列の集合の中から、任意の文字データのビット列を抽出させるビット列抽出工程と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮させる圧縮工程と、
をコンピュータに実行させることを特徴とする情報検索プログラム。
【請求項２】
前記全検索対象ファイルのうち圧縮対象となる文字データが出現するファイル数の割合をあらわす出現率を取得させる取得工程と、
前記特殊なハフマン木ごとに前記特殊記号列のビット数が異なる複数種類の特殊なハフマン木を有するハフマン木集合の中から、前記取得工程によって取得された出現率に応じた特殊なハフマン木を抽出させるハフマン木抽出工程と、を前記コンピュータに実行させ、
前記ビット列抽出工程は、
前記出現率が取得された文字データのビット列を抽出させ、
前記圧縮工程は、
前記ハフマン木抽出工程によって抽出された特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮させることを特徴とする請求項１に記載の情報検索プログラム。
【請求項３】
前記特殊記号列は、前記文字データが出現しないことを意味する記号が連続する記号列であることを特徴とする請求項１または２に記載の情報検索プログラム。
【請求項４】
出現確率の範囲が前記特殊なハフマン木ごとに領域分割されており、前記ハフマン木集合内の一の特殊なハフマン木の分割領域により特定される出現確率が、前記一の特殊なハフマン木の特殊記号列よりもビット数が多い特殊記号列を葉とする他の特殊なハフマン木の分割領域により特定される出現確率よりも低く設定されている場合、
前記ハフマン木抽出工程は、
前記出現率が含まれる分割領域に属する特殊なハフマン木を前記ハフマン木集合の中から抽出させることを特徴とする請求項３に記載の情報検索プログラム。
【請求項５】
前記一の特殊なハフマン木の分割領域が、前記他の特殊なハフマン木の分割領域よりも広く設定されていることを特徴とする請求項４に記載の情報検索プログラム。
【請求項６】
前記ハフマン木集合には、前記複数種類の記号列のみを葉とする通常のハフマン木が含まれており、前記特殊なハフマン木の分割領域により特定される最大の出現確率よりも、前記通常のハフマン木の分割領域により特定される出現確率が高く設定されている場合、
前記ハフマン木抽出工程は、
前記出現率が含まれる分割領域が前記通常のハフマン木の分割領域である場合、当該通常のハフマン木を前記ハフマン木集合の中から抽出させることを特徴とする請求項４に記載の情報検索プログラム。
【請求項７】
前記通常のハフマン木の分割領域により特定される出現確率よりも、いずれのハフマン木も圧縮に用いない分割領域により特定される出現確率が高く設定されている場合、
前記圧縮工程は、
前記取得工程によって取得された出現率が含まれる分割領域が前記いずれのハフマン木も圧縮に用いない分割領域である場合、前記ビット列を圧縮させないことを特徴とする請求項４に記載の情報検索プログラム。
【請求項８】
請求項１〜７のいずれか一つに記載の情報検索プログラムを記録したコンピュータに読み取り可能な記録媒体。
【請求項９】
各検索対象ファイルにおける文字データの存否を当該文字データごとにあらわしたビット列の集合の中から、任意の文字データのビット列を抽出するビット列抽出工程と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮する圧縮工程と、
を含んだことを特徴とする情報検索方法。
【請求項１０】
各検索対象ファイルにおける文字データの存否を当該文字データごとにあらわしたビット列の集合の中から、任意の文字データのビット列を抽出するビット列抽出手段と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出手段によって抽出されたビット列を圧縮する圧縮手段と、
備えることを特徴とする情報検索装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンテンツの圧縮、暗号化および検索をおこなう情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置に関するものである。
【背景技術】
【０００２】
従来、辞書などのコンテンツは、ＪＩＳ−Ｘ４０８１に従い、１６ビットコードの文字データによって記述された単一ファイルから構成されている。この辞書コンテンツは、たとえば、下記特許文献１により、暗号化および検索をおこなうことができる。
【０００３】
この特許文献１では、各検索対象ファイルにおける文字データの存否をあらわすビット列を文字データごとに構成した出現マップを用いることで、辞書コンテンツを圧縮したまま検索をおこなうことができる。この出現マップは、携帯電話機などのモバイル端末において辞書やナレッジの全文検索を行うためのデータであり、各ビットのＯＮの出現率は８％、かつ、ランダムな特性を持ち、無記憶情報源に属するデータである。
【０００４】
また、無記憶情報源のデータ圧縮については、下記非特許文献１で解説されている。この非特許文献１では、２ビット、３ビット毎のブロック符号化を例にした無記憶情報源のデータ圧縮について解説しており、ブロック長を大きくすると圧縮率が高くなり、情報エントロピーに近づき、理想的な圧縮を実現することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００６／１２３４４８号パンフレット
【非特許文献】
【０００６】
【非特許文献１】植松友彦  著、文字データ圧縮アルゴリズム入門（３．４ブロック単位での符号化とその効果（Ｐ５１〜Ｐ５３））  ＣＱ出版社、１９９４年１０月１５日発行
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した非特許文献１では、ブロック長を大きくすると、ハフマン木を作るための計算量が指数関数的に大きくなる。したがって、上述した特許文献１の技術にそのまま適用すると、携帯電話機などのモバイル端末において辞書やナレッジの全文検索をおこなう際、低速ＣＰＵや少メモリ、少ディスク容量などの省資源の環境で圧縮や伸長をおこなうことができないという問題があった。
【０００８】
本発明は、上記に鑑みてなされたものであって、低速ＣＰＵや少メモリ、少ディスク容量などの省資源の環境下において効率よく圧縮／伸長をおこなうことができる情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するために、この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置は、コンテンツを構成する複数の検索対象ファイルにおける文字データの存否をあらわした前記文字データごとのビット列の集合を用いて検索キーワードを構成する文字データを含む検索対象ファイルを絞り込むことにより、当該検索対象ファイルの中から前記検索キーワードと一致または関連するキーワードを検索する検索処理を実行する情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置において、前記ビット列の集合の中から、任意の文字データのビット列を抽出し、所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、抽出されたビット列を圧縮することを要件とする。
【００１０】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、コンテンツを構成する検索対象ファイルではなく、その検索対象ファイルの絞り込みに用いるビット列の集合（出現マップに相当）を通常のハフマン木よりも効率よく圧縮することができる。
【００１１】
また、前記全検索対象ファイルのうち圧縮対象となる文字データが出現するファイル数の割合をあらわす出現率を取得し、前記特殊なハフマン木ごとに前記特殊記号列のビット数が異なる複数種類の特殊なハフマン木を有するハフマン木集合の中から、取得された出現率に応じた特殊なハフマン木を抽出し、前記出現率が取得された文字データのビット列を抽出し、抽出された特殊なハフマン木を用いて、抽出されたビット列を圧縮することとしてもよい。
【００１２】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、文字データごとの出現率であり、総ビット数に対するＯＮのビット数の比率を圧縮パラメータとして用いることができる。
【００１３】
また、前記特殊記号列は、前記文字データが出現しないことを意味する記号が連続する記号列としてもよい。
【００１４】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、ビット列に、文字データが出現しないことを意味する記号が連続する記号列が含まれている場合、通常のハフマン木よりも効率よく圧縮することができる。
【００１５】
また、出現確率の範囲が前記特殊なハフマン木ごとに領域分割されており、前記ハフマン木集合内の一の特殊なハフマン木の分割領域により特定される出現確率が、前記一の特殊なハフマン木の特殊記号列よりもビット数が多い特殊記号列を葉とする他の特殊なハフマン木の分割領域により特定される出現確率よりも低く設定されている場合、前記出現率が含まれる分割領域に属する特殊なハフマン木を前記ハフマン木集合の中から抽出することとしてもよい。
【００１６】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、出現率が低いほど特殊記号列が長い特殊なハフマン木を選択することができる。
【００１７】
また、前記一の特殊なハフマン木の分割領域が、前記他の特殊なハフマン木の分割領域によりも広く設定されていることとしてもよい。
【００１８】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、出現率が高いほど特殊記号列が短い特殊なハフマン木を選択することができる。
【００１９】
また、前記ハフマン木集合には、前記複数種類の記号列のみを葉とする通常のハフマン木が含まれており、前記特殊なハフマン木の分割領域により特定される最大の出現確率よりも、前記通常のハフマン木の分割領域により特定される出現確率が高く設定されており、前記出現率が含まれる分割領域が前記通常のハフマン木の分割領域である場合、当該通常のハフマン木を前記ハフマン木集合の中から抽出することとしてもよい。
【００２０】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、出現率が高いほど特殊なハフマン木よりも通常のハフマン木を選択することができる。
【００２１】
また、前記通常のハフマン木の分割領域により特定される出現確率よりも、いずれのハフマン木も圧縮に用いない分割領域により特定される出現確率が高く設定されており、前記出現率が含まれる分割領域が前記いずれのハフマン木も圧縮に用いない分割領域である場合、前記ビット列を圧縮しないこととしてもよい。
【００２２】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、圧縮効率が悪い分割領域における圧縮を防止することができ、圧縮速度の高速化を図ることができる。
【００２３】
また、前記出現確率の範囲が前記出現確率５０％を境界として対称となるように領域分割されており、前記出現率が５０％以上である場合、当該出現率が含まれる一の分割領域に対し出現確率５０％を境界として対称となる前記出現確率０％以上５０％未満内の他の分割領域に対応するハフマン木を前記ハフマン木集合の中から抽出し、前記他の分割領域に対応するハフマン木を用いて、抽出されたビット列の反転ビット列を圧縮することとしてもよい。
【００２４】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、一の分割領域と他の分割領域とで同一のハフマン木を共有することができる。
【発明の効果】
【００２５】
この情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置は、低速ＣＰＵや少メモリ、少ディスク容量などの省資源の環境下において効率よく圧縮／伸長をおこなうことができるという効果を奏する。
【図面の簡単な説明】
【００２６】
【図１】実施の形態１にかかる情報検索装置のハードウェア構成を示すブロック図である。
【図２】実施の形態１にかかる情報検索装置の機能的構成を示すブロック図である。
【図３】見出しデータ生成部の詳細な機能的構成を示すブロック図である。
【図４】本文ＨＴＭＬリストの一例を示す説明図である。
【図５】本文ＨＴＭＬファイルのファイル構成データを示す説明図である。
【図６】見出しデータを示す説明図である。
【図７】文字出現頻度管理データ生成部の詳細な機能的構成を示すブロック図である。
【図８】文字出現頻度管理データの生成処理を示すデータ構成図である。
【図９】図８に示した（Ｂ）のデータ構成を示す説明図である。
【図１０】図８に示した（Ｅ）のデータ構成を示す説明図である。
【図１１】連字／外字置換処理を示すデータ構成図である。
【図１２】最終的に生成された連字／外字置換テーブルを示す説明図である。
【図１３】図２に示した圧縮／暗号化部の詳細な機能的構成を示すブロック図である。
【図１４】圧縮／暗号化部による具体的なハフマン木生成処理を示す説明図である。
【図１５−１】圧縮部によって圧縮された圧縮コンテンツのデータ構造を示す説明図である。
【図１５−２】圧縮ブロックデータと、圧縮前の元のブロックデータとの比較を示す図表である。
【図１６−１】１検索対象ファイル内における文字データの出現確率を示す説明図である。
【図１６−２】出現マップと図１６−１に示した各領域との関係を示す説明図である。
【図１６−３】図１６−１に示した領域と圧縮パターンとの対応関係を示す領域／圧縮パターン対応テーブルである。
【図１６−４】Ａ領域およびＡ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−５】Ｂ領域およびＢ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−６】Ｃ領域およびＣ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−７】Ｄ領域およびＤ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−８】Ｅ領域およびＥ’領域における４ビット系のハフマン圧縮を示す図表である。
【図１６−９】図１６−６に示した１６ビット記号列を追加した場合の記号列の符号語との対応関係の一例を示す図表である。
【図１６−１０】葉となる１７番目の記号列の追加前と追加後における４ビット系ハフマン圧縮の比較例を示す説明図である。
【図１６−１１】ビット列圧縮データのデータ構造を示す説明図である。
【図１７】図２に示した検索初期化部の詳細な機能的構成を示すブロック図である。
【図１８】区点対応テーブルと出現マップとの対応関係を示す説明図である。
【図１９】図２に示した全文検索部の詳細な機能的構成を示すブロック図である。
【図２０】図２に示した検索結果表示部の詳細な機能的構成を示すブロック図である。
【図２１】実施の形態１にかかる情報検索装置の情報検索処理手順を示すフローチャートである。
【図２２】図２１に示した文字出現頻度管理データ生成処理の詳細な処理手順を示すフローチャートである。
【図２３】上述した文字出現頻度集計処理の詳細な処理手順を示すフローチャートである。
【図２４−１】図２１に示した圧縮／暗号化処理の詳細な処理手順を示すフローチャートである。
【図２４−２】文字出現頻度管理データ圧縮処理の詳細な処理手順を示すフローチャートである。
【図２５−１】図２１に示した検索初期化処理の詳細な処理手順を示すフローチャートである。
【図２５−２】文字出現頻度管理データ伸長処理の詳細な処理手順を示すフローチャートである。
【図２６】図２１に示した全文検索処理の詳細な処理手順を示すフローチャートである。
【図２７】分割領域の見直しを示す図表である。
【図２８】１検索対象ファイル内における文字データの出現確率を示す説明図である。
【図２９−１】Ｂ領域における伸長コードとハフマン木の枝との関係を示す図表である。
【図２９−２】Ｂ領域におけるハフマン木を示す説明図である。
【図２９−３】Ｂ領域ハフマン木における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。
【図３０−１】Ｃ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。
【図３０−２】Ｃ領域におけるハフマン木を示す説明図である。
【図３０−３】Ｃ領域ハフマン木における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。
【図３１−１】Ｄ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。
【図３１−２】Ｄ領域におけるハフマン木を示す説明図である。
【図３１−３】Ｄ領域ハフマン木における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。
【図３２−１】Ｅ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。
【図３２−２】Ｅ領域におけるハフマン木を示す説明図である。
【図３２−３】Ｅ領域ハフマン木における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。
【図３３】Ｂ領域ハフマン木の圧縮用の構造体を示す説明図である。
【図３４】Ｃ領域ハフマン木の圧縮用の構造体を示す説明図である。
【図３５】Ｄ領域ハフマン木の圧縮用の構造体を示す説明図である。
【図３６】Ｅ領域ハフマン木の圧縮用の構造体を示す説明図である。
【図３７−１】Ｂ領域ハフマン木の伸長用の構造体を示す説明図である。
【図３７−２】Ｂ領域伸長用構造体の根領域の記憶内容を示す説明図である。
【図３７−３】Ｂ領域伸長用構造体の第１節点領域の記憶内容を示す説明図である。
【図３７−４】Ｂ領域伸長用構造体の第２節点領域の記憶内容を示す説明図である。
【図３７−５】Ｂ領域伸長用構造体の葉の領域の記憶内容を示す説明図である。
【図３８−１】Ｃ領域ハフマン木の伸長用の構造体を示す説明図である。
【図３８−２】Ｃ領域伸長用構造体の根領域の記憶内容を示す説明図である。
【図３８−３】Ｃ領域伸長用構造体の第１節点領域の記憶内容を示す説明図である。
【図３８−４】Ｃ領域伸長用構造体の第２節点領域の記憶内容を示す説明図である。
【図３８−５】Ｃ領域伸長用構造体の葉の第１領域の記憶内容を示す説明図である。
【図３８−６】Ｃ領域伸長用構造体の葉の第２領域の記憶内容を示す説明図である。
【図３９−１】Ｄ領域ハフマン木の伸長用の構造体を示す説明図である。
【図３９−２】Ｄ領域伸長用構造体の根領域の記憶内容を示す説明図である。
【図３９−３】Ｄ領域伸長用構造体の第１節点領域の記憶内容を示す説明図である。
【図３９−４】Ｄ領域伸長用構造体の第２節点領域の記憶内容を示す説明図である。
【図３９−５】Ｄ領域伸長用構造体の葉の第１領域の記憶内容を示す説明図である。
【図３９−６】Ｄ領域伸長用構造体の葉の第２領域の記憶内容を示す説明図である。
【図４０−１】Ｅ領域ハフマン木の伸長用の構造体を示す説明図である。
【図４０−２】Ｅ領域伸長用構造体の根領域の記憶内容を示す説明図である。
【図４０−３】Ｅ領域伸長用構造体の節点領域の記憶内容を示す説明図である。
【図４０−４】Ｅ領域伸長用構造体の葉の第１領域の記憶内容を示す説明図である。
【図４０−５】Ｅ領域伸長用構造体の葉の第２領域の記憶内容を示す説明図である。
【図４１】Ｂ領域の文字データに関する出現ビット列の圧縮例を示す説明図である。
【図４２】Ｃ領域の文字データに関する出現ビット列の圧縮例を示す説明図である。
【図４３】Ｄ領域の文字データに関する出現ビット列の圧縮例（その１）を示す説明図である。
【図４４】Ｄ領域の文字データに関する出現ビット列の圧縮例（その２）を示す説明図である。
【図４５】Ｅ領域の文字データに関する出現ビット列の圧縮例（その１）を示す説明図である。
【図４６】Ｅ領域の文字データに関する出現ビット列の圧縮例（その２）を示す説明図である。
【図４７】Ｂ領域のハフマン圧縮処理手順を示すフローチャートである。
【図４８】４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図４９】Ｃ領域のハフマン圧縮処理手順を示すフローチャートである。
【図５０】１６ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図５１】Ｄ領域のハフマン圧縮処理手順を示すフローチャートである。
【図５２】６４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図５３】Ｅ領域のハフマン圧縮処理手順を示すフローチャートである。
【図５４】２５６ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図５５】１６／６４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。
【図５６】マスクパターンテーブルを示す説明図である。
【図５７】Ｃ領域の文字データに関する出現ビット列の圧縮符号列の伸長例を示す説明図である。
【図５８】実施の形態２における出現マップへの伸長処理手順を示すフローチャート（その１）である。
【図５９】実施の形態２における出現マップへの伸長処理手順を示すフローチャート（その２）である。
【発明を実施するための形態】
【００２７】
［実施の形態１］
（情報検索装置のハードウェア構成）
まず、実施の形態１にかかる情報検索装置のハードウェア構成について説明する。図１は、実施の形態１にかかる情報検索装置のハードウェア構成を示すブロック図である。
【００２８】
図１において、情報検索装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、ＲＯＭ（Ｒｅａｄ―Ｏｎｌｙ  Ｍｅｍｏｒｙ)１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、ＨＤＤ（ハードディスクドライブ）１０４と、ＨＤ（ハードディスク）１０５と、ＦＤＤ（フレキシブルディスクドライブ）１０６と、着脱可能な記録媒体の一例としてのＦＤ（フレキシブルディスク）１０７と、ディスプレイ１０８と、Ｉ／Ｆ（インターフェース）１０９と、キーボード１１０と、マウス１１１と、スキャナ１１２と、プリンタ１１３と、を備えている。また、各構成部はバス１００によってそれぞれ接続されている。
【００２９】
ここで、ＣＰＵ１０１は、情報検索装置の全体の制御を司る。ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵ１０１のワークエリアとして使用される。ＨＤＤ１０４は、ＣＰＵ１０１の制御にしたがってＨＤ１０５に対するデータのリード／ライトを制御する。ＨＤ１０５は、ＨＤＤ１０４の制御で書き込まれたデータを記憶する。
【００３０】
ＦＤＤ１０６は、ＣＰＵ１０１の制御にしたがってＦＤ１０７に対するデータのリード／ライトを制御する。ＦＤ１０７は、ＦＤＤ１０６の制御で書き込まれたデータを記憶したり、ＦＤ１０７に記憶されたデータを情報検索装置に読み取らせたりする。
【００３１】
また、着脱可能な記録媒体として、ＦＤ１０７のほか、ＣＤ−ＲＯＭ（ＣＤ−Ｒ、ＣＤ−ＲＷ）、ＭＯ、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、メモリーカードなどであってもよい。ディスプレイ１０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３２】
Ｉ／Ｆ１０９は、通信回線を通じてインターネットなどのネットワーク１１４に接続され、このネットワーク１１４を介して他の装置に接続される。そして、Ｉ／Ｆ１０９は、ネットワーク１１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３３】
キーボード１１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス１１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３４】
スキャナ１１２は、画像を光学的に読み取り、情報検索装置内に画像データを取り込む。なお、スキャナ１１２は、ＯＣＲ機能を持たせてもよい。また、プリンタ１１３は、画像データや文書データを印刷する。プリンタ１１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３５】
（情報検索装置の機能的構成）
つぎに、実施の形態１にかかる情報検索装置の機能的構成について説明する。図２は、実施の形態１にかかる情報検索装置２００の機能的構成を示すブロック図である。図２において、情報検索装置２００は、編集部２０１と検索処理部２０２とから構成されている。
【００３６】
まず、編集部２０１は、コンテンツ２１０と、見出しデータ生成部２１１と、文字出現頻度管理データ生成部２１２と、圧縮／暗号化部２１３と、から構成されている。コンテンツ２１０は検索対象となる電子データであり、たとえば、国語辞典、英和辞典、和英辞典、用語辞典などの辞書のコンテンツが挙げられる。
【００３７】
コンテンツ２１０は、複数の検索対象ファイルから構成される。コンテンツ２１０が辞書のコンテンツである場合、各検索対象ファイルは、たとえば、８ビットコード、１６ビットコード、または３２ビットコードなどの複数種類のビットコードの文字データが記述されている本文ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）ファイルである。
【００３８】
また、文字データとしては、８ビット系（ＡＳＣＩＩ（Ａｍｅｒｉｃａｎ  Ｓｔａｎｄａｒｄ  Ｃｏｄｅ  ｆｏｒ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｉｎｔｅｒｃｈａｎｇｅ））である英数字、カタカナ、記号などの文字データ、１６ビット系（ＪＩＳ）の英数字、カタカナ、記号などの文字データ、１６ビット系（ＪＩＳ）の仮名や漢字の文字データが含まれている。これら英数字や、仮名、カタカナなどの８ビットコードが中心である表音文字および漢字の文字データを、本明細書において「標準文字データ」と称す。
【００３９】
また、文字データには、標準文字データのほか、外字データ、連字データが含まれる。連字データとは、２以上の文字列からなる文字データである。たとえば、１６ビットの２つの仮名の連字データである場合、当該連字データは、３２ビットコードの文字データからなる。また、非文字データではあるがアドレスポインタなどのバイナリデータも便宜的に上記「文字データ」に含めることとする。以下、特に断りがない限り、「文字データ」という用語には、バイナリデータも含まれる。
【００４０】
また、見出しデータ生成部２１１は、コンテンツ２１０内、すなわち複数の検索対象ファイルに記述されている単語や用語などの文字列に関する見出しデータ３００を生成する。文字出現頻度管理データ生成部２１２は、コンテンツ２１０から、複数の検索対象ファイルに記述されている文字データの出現頻度に関する文字出現頻度管理データ２３０を生成する。さらに、文字出現頻度管理データ生成部２１２は、複数の検索対象ファイルに記述されている連字データを外字データに置換する連字／外字置換テーブル２４０を生成する。
【００４１】
また、圧縮／暗号化部２１３は、コンテンツ２１０を圧縮して圧縮コンテンツ２５０を生成する。また、文字出現頻度管理データ２３０を圧縮／暗号化して、暗号化圧縮文字出現頻度管理データ２６０を生成する。さらに、連字／外字置換テーブル２４０を暗号化して、暗号化連字／外字置換テーブル２７０を生成する。
【００４２】
また、検索処理部２０２は、検索初期化部２２１と、全文検索部２２２と、検索結果表示部２２３とから構成されている。検索初期化部２２１は、圧縮情報である暗号化圧縮文字出現頻度管理データ２６０および暗号化連字／外字置換テーブル２７０を復号して、全文検索部２２２による検索の初期化を実行する。
【００４３】
また、全文検索部２２２は、検索キーワードの入力を受け付け、文字出現頻度管理データ２３０、連字／外字置換テーブル２４０、および見出しデータ３００を用いて、圧縮コンテンツ２５０の全文検索を実行して、検索候補一覧を生成する。検索結果表示部２２３は、全文検索部２２２による検索候補の中から、ユーザに選択された検索候補を伸長して、検索結果として表示する。
【００４４】
なお、上述したコンテンツ２１０、見出しデータ３００、文字出現頻度管理データ２３０、連字／外字置換テーブル２４０、圧縮コンテンツ２５０、暗号化圧縮文字出現頻度管理データ２６０および暗号化連字／外字置換テーブル２７０は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５などの記録媒体によって、その機能を実現する。また、編集部２０１（内部の機能的構成含む）および検索処理部２０２（内部の機能的構成含む）は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、ＨＤ１０５などの記録媒体に記録されたプログラムを、ＣＰＵ１０１が実行することによって、その機能を実現する。
【００４５】
（見出しデータ生成部２１１の機能的構成）
つぎに、図２に示した見出しデータ生成部２１１の詳細な機能的構成について説明する。図３は、見出しデータ生成部２１１の詳細な機能的構成を示すブロック図である。図３において、見出しデータ生成部２１１は、ファイル抽出部３０１と、本文ＨＴＭＬリスト生成部３０２と、アンカー抽出部３０３と、見出し語抽出部３０４と、見出しデータ生成処理部３０５と、から構成されている。
【００４６】
ファイル抽出部３０１は、コンテンツ２１０から各検索対象ファイルである本文ＨＴＭＬファイルを抽出する。本文ＨＴＭＬリスト生成部３０２は、ファイル抽出部３０１によって抽出された各本文ＨＴＭＬファイルから、複数の項目データからなる本文ＨＴＭＬリストを生成する。また、アンカー抽出部３０３は、本文ＨＴＭＬリスト生成部３０２によって生成された本文ＨＴＭＬリストの各項目データからアンカーを抽出する。
【００４７】
また、見出し語抽出部３０４は、本文ＨＴＭＬリスト生成部３０２によって生成された本文ＨＴＭＬリストの各項目データから見出し語を抽出する。また、見出しデータ生成処理部３０５は、アンカー抽出部３０３によって抽出された各項目データのアンカーと、見出し語抽出部３０４によって抽出された各項目データの見出し語と、を対応付けて、全文検索に用いる見出しデータ３００を生成する。
【００４８】
つぎに、見出しデータ生成部２１１によって生成されるデータについて詳細に説明する。図４は、本文ＨＴＭＬリストの一例を示す説明図であり、図５は、本文ＨＴＭＬファイルのファイル構成データ５００を示す説明図であり、図６は、見出しデータ３００を示す説明図である。
【００４９】
まず、図４において、コンテンツフォルダ４００（フォルダ名：ｈｏｎｍｏｎ）は、先頭の本文ＨＴＭＬファイルｆ０（ファイル名：ｆｉｌｅ０．ｈｔｍｌ）から最終の本文ＨＴＭＬファイルｆｎ（ファイル名：ｆｉｌｅｎ．ｈｔｍｌ）までの本文ＨＴＭＬファイルｆを、コンテンツ２１０として格納している。
【００５０】
各本文ＨＴＭＬファイルｆ０〜ｆｎには、アンカー、見出し語およびその解説文からなる項目データが複数記述されている。アンカーはアンカー抽出部３０３によって抽出され、見出し語は見出し語抽出部３０４によって抽出される。
【００５１】
本文ＨＴＭＬリスト生成部３０２では、各本文ＨＴＭＬファイルｆ０〜ｆｎに記述されている項目データを抽出し、各項目データＫ１〜Ｋｋを結合することにより、本文ＨＴＭＬリスト４１０が生成される。本文ＨＴＭＬリスト４１０において、任意の項目データＫｉは、いずれかの本文ＨＴＭＬファイルに記述されている項目データである。なお、項目データＫｉにおいて、アンカーＫｉ−１は、『ａｉ１０１』であり、見出し語Ｋｉ−２は、『アイ−アイ［ａｙｅ  ａｙｅ］』である。なお、符号Ｋｉ−３は、解説文である。
【００５２】
また、図５において、ファイル構成データ５００は、各本文ＨＴＭＬファイルｆ０〜ｆｎのファイル番号（符号５０１）と、図４に示した各本文ＨＴＭＬファイルｆ０〜ｆｎのファイルパス（符号５０２）と、が関連付けられたデータである。ここで、ファイル番号は、本文ＨＴＭＬファイルｆに付されている数字に該当し、たとえば、本文ＨＴＭＬファイルｆ０の場合、『＃０』がファイル番号に相当する。また、コンテンツフォルダ４００のフォルダ名は『ｈｏｎｍｏｎ』であり、本文ＨＴＭＬファイルｆ０のファイル名は、『ｆｉｌｅ０．ｈｔｍｌ』であるため、ファイル番号＃０である本文ＨＴＭＬファイルｆ０のファイルパスは、『ｈｏｎｍｏｎ￥ｆｉｌｅ０．ｈｔｍｌ』となる。
【００５３】
また、図６において、見出しデータ３００は、本文ＨＴＭＬファイルの総ファイル数情報（ｎ＋１個）６０１、本文ＨＴＭＬファイルｆ０〜ｆｎの総ブロックサイズ情報６０２、本文ＨＴＭＬリスト４１０の総項目データ数情報（Ｋ個）６０３、各本文ＨＴＭＬファイルｆ０〜ｆｎのファイルパスリスト６０４、および見出しリスト６０５から構成されている。
【００５４】
ファイルパスリスト６０４は、本文ＨＴＭＬファイルｆ０〜ｆｎごとに、ファイル番号と、ブロック数と、ファイルパスが記述されているリストである。また、見出しリスト６０５は、本文ＨＴＭＬファイルｆ０〜ｆｎごとに、ファイル番号と、オフセット値と、レングスと、アンカー(名)と、見出し語が記述されているリストである。
【００５５】
（文字出現頻度管理データ生成部２１２の機能的構成）
つぎに、図２に示した文字出現頻度管理データ生成部２１２の詳細な機能的構成について説明する。図７は、文字出現頻度管理データ生成部２１２の詳細な機能的構成を示すブロック図である。図７において、文字出現頻度管理データ生成部２１２は、文字データ抽出部７０１と、文字出現頻度集計部７０２と、ソート部７０３と、生成処理部７０４とから構成されている。
【００５６】
文字データ抽出部７０１は、コンテンツ２１０の各本文ＨＴＭＬファイルから文字データを順次抽出する。文字出現頻度集計部７０２は、文字データ抽出部７０１によって抽出された文字データのコンテンツ２１０における出現頻度を集計する。出現頻度とは、たとえば、文字データの出現回数や出現率であらわされる。また、文字出現頻度集計部７０２は、文字データの本文ＨＴＭＬファイルｆ０〜ｆｎごとの存否も検出する。
【００５７】
また、ソート部７０３は、出現頻度順に文字データをソートする。生成処理部７０４は、ソートされた各文字データの出現頻度と、存否検出結果である各文字データの存否情報（以下、「出現マップ」）とを用いて、文字出現頻度管理データ２３０を生成する。また、連字／外字置換テーブル２４０も生成する。文字出現頻度管理データ生成部２１２による文字出現頻度管理データ２３０および連字／外字置換テーブル２４０の生成処理を具体的に説明する。
【００５８】
図８は、文字出現頻度管理データ２３０の生成処理を示すデータ構成図である。図８において、（Ａ）は、文字出現頻度集計部７０２によって文字データが集計されたときの文字出現頻度管理データ２３０のデータ構成、（Ｂ）は、連字／外字置換処理後の文字出現頻度管理データ２３０のデータ構成、（Ｃ）は、標準文字データおよび外字データからなる混合データのソート後における文字出現頻度管理データ２３０のデータ構成、（Ｄ）は、低出現頻度の混合データのカット後における文字出現頻度管理データ２３０のデータ構成、（Ｅ）は、最終的に生成された文字出現頻度管理データ２３０のデータ構成を示している。
【００５９】
（Ａ）において、符号８０１は、文字出現頻度管理データ２３０の管理領域である。また符号８０２は、８ビット系（ＡＳＣＩＩ）である英数字、カタカナ、記号、１６ビット系（ＪＩＳ）の英数字、カタカナ、記号、１６ビット系（ＪＩＳ）のかなや漢字などの標準文字データの出現頻度、出現ファイル数、出現順位、出現マップを記憶する標準文字領域である。
【００６０】
また、符号８０３は、外字データの出現頻度、出現ファイル数、出現順位、出現マップを記憶する外字領域である。また、符号８０４は、連字データの出現頻度、出現ファイル数、出現順位、出現マップを記憶する連字領域である。また、符号８０５は、８ビットのバイナリデータの出現頻度、出現ファイル数、出現順位を記憶するバイナリ領域である。
【００６１】
（Ａ）のデータ構造において、連字領域８０４の連字データは、その出現頻度順にソートされる。そして、所定の出現頻度以上の連字データを、外字データと重複しないように、他の外字データ（以下、「連字外字データ」）に置換する。このように、出現頻度の高い複数の文字列からなる連字データを、単一文字データである外字データに置換することにより、データ量の削減を図ることができ、圧縮効率の向上を図ることができる。なお、所定の出現頻度未満の連字データは、低出現頻度の連字データであるため、単一の文字データに分解されて、該当する文字領域に割り当てられる。この結果、（Ｂ）連字／外字置換処理後の文字出現頻度管理データ２３０のデータ構成となる。
【００６２】
（Ｂ）のデータ構造についてより具体的に説明する。図９は、図８に示した（Ｂ）のデータ構成を示す説明図である。図９において、（Ｂ）のデータ構造では、文字データ領域９００、出現頻度領域９０１、出現ファイル数領域９０２、出現順位領域９０３、出現マップ９０４を有しており、それぞれ文字データ出現頻度、出現ファイル数、出現順位、および存否フラグが記憶されている。出現マップ９０４は、１６ビットを１セグメントとしている。
【００６３】
具体的には、その左端がファイル番号『＃０』の本文ＨＴＭＬファイルｆ０の存否フラグであり、順にファイル番号『＃１』の本文ＨＴＭＬファイルｆ１のフラグ、『＃２』の本文ＨＴＭＬファイルｆ２の存否フラグが立てられている。そして、右端がファイル番号『＃ｎ』の本文ＨＴＭＬファイルｆｎの存否フラグである。
【００６４】
また、（Ｂ）のデータ構造において、標準文字領域８０２の標準文字データおよび外字領域８０３の外字データを混合して高出現頻度順にソートした結果が、（Ｃ）のデータ構造である。（Ｃ）のデータ構造において、（Ｂ）に示した連字外字領域８１４の連字外字データおよびバイナリ領域８０５のバイナリデータは、ソートの対象外である。
【００６５】
（Ｃ）のデータ構造において、標準文字データと外字データとが混在する混合文字領域８１２において、低出現頻度、たとえば、出現回数０回の文字データはカットされる。このカットされたときのデータ構造が、（Ｄ）のデータ構造である。（Ｄ）において、管理領域８０１および混合文字領域８１２と、連字外字領域８１４と、バイナリ領域８０５とを結合することで、（Ｅ）のデータ構造で示したような、最終的な文字出現頻度管理データ２３０を生成することができる。この文字出現頻度管理データ２３０において、管理領域８０１には、ファイル・ブロック数と、出現文字データの種類の数（出現文字数（種類））と、連字外字データの数（連字数（２５６種））と、バイナリデータ数（バイナリ（２５６種））とが記録される。
【００６６】
図１０は、図８に示した（Ｅ）のデータ構成を示す説明図である。図１０において、文字出現頻度管理データ２３０は、バイナリデータを除く文字データごとに、出現頻度領域９０１と出現マップ９０４とが対応付けられている。文字データは高出現頻度順にソートされている。なお、後述するが、図１０中、文字データ領域９００の文字データと出現頻度領域９０１の出現頻度は、所定のマスタキーを用いた排他的論理和（ＸＯＲ）によって暗号化される。
【００６７】
この文字出現頻度管理データ２３０の出現マップ９０４によれば、出現マップ９０４の左端であるファイル番号『＃０』の本文ＨＴＭＬファイルｆ０には、文字データ『月』の存否フラグと文字データ『日』の存否フラグがともに「１」であり、そのＡＮＤ（論理積）が「１」となる。したがって、本文ＨＴＭＬファイルｆ０には、文字データ『月』および『日』が含まれており、入力キーワードに『月』と『日』が含まれている場合、本文ＨＴＭＬファイルｆ０は検索対象となる。
【００６８】
一方、ファイル番号『＃１』の本文ＨＴＭＬファイルｆ１では、文字データ『月』の存否フラグが「１」、文字データ『日』の存否フラグが「０」であり、そのＡＮＤ（論理積）が「０」となる。したがって、本文ＨＴＭＬファイルｆ１には、文字データ『月』が含まれているが『日』が含まれておらず、入力キーワードに『月』と『日』が含まれている場合、本文ＨＴＭＬファイルｆ１はその検索対象外となる。
【００６９】
つぎに、連字／外字置換処理について具体的に説明する。図１１は、連字／外字置換処理を示すデータ構成図である。図１１において、（Ｆ）は、文字出現頻度集計部７０２によって連字データが集計されたときの文字出現頻度管理データ２３０の連字領域のデータ構成、（Ｇ）は、連字データのソート後における連字領域８０４のデータ構成、（Ｈ）は、置換後におけるデータ構成を示している。
【００７０】
（Ｆ）のデータ構造において、連字領域８０４は、領域１１０１〜１１０７を有している。領域１１０１には、８ビット系（ＡＳＣＩＩ)の数字列データ（「００」〜「９９」）の情報（当該数字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。
【００７１】
領域１１０２には、８ビット系（ＡＳＣＩＩ）の英字列データ（「ＡＡ」〜「ｚｚ」）の情報（当該英字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。また、領域１１０３には、８ビット系（ＡＳＣＩＩ）のカタカナ列データ（「アア」〜「ンン」、濁音・半濁音）の情報（当該英字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。
【００７２】
領域１１０４には、１６ビット系（ＪＩＳ)の数字列データ（「００」〜「９９」）の情報（当該数字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。また、領域１１０５には、１６ビット系（ＪＩＳ）の英字列データ（「ＡＡ」〜「ｚｚ」）の情報（当該数字列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。
【００７３】
領域１１０６には、１６ビット系（ＪＩＳ）のカタカナ列データ（「アア」〜「ンン」、濁音・半濁音）の情報（当該カタカナ列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。また、領域１１０７には、１６ビット系（ＪＩＳ）の仮名列データ（「ああ」〜「んん」、濁音・半濁音）の情報（当該仮名列データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。
【００７４】
また、（Ｇ）のデータ構造は、（Ｆ）のデータ構造を、各連字データの高出現順にソートすることにより得られるデータ構造である。（Ｇ）のデータ構造において、領域１１１１は、高出現頻度の連字データの情報であり、外字データへの置換対象となる。一方、領域１１１２は、所定の出現頻度以下の連字データ（低出現頻度連字データ）の情報である。この低出現頻度連字データは、単一の文字データに分解される。これにより文字データの出現頻度と出現マップ９０４とが補正される。
【００７５】
また、（Ｈ）のデータ構造は、（Ｇ）のデータ構造のうち高出現頻度の連字データを外字に置換することによって得られるデータ構造である。連字外字領域８１４には、置換された連字外字データの情報（当該連字外字データ、出現頻度、出現ファイル数、出現順位、出現マップ）が記憶されている。また、図１２は、最終的に生成された連字／外字置換テーブル２４０を示す説明図である。連字／外字置換テーブル２４０は、（Ｇ）のデータ構造の領域１１１１の連字データと、（Ｈ）のデータ構造の領域８１４の連字外字データとを対応させることによって生成される。
【００７６】
（圧縮／暗号化部２１３の詳細な機能的構成）
つぎに、図２に示した圧縮／暗号化部２１３の詳細な機能的構成について説明する。図１３は、図２に示した圧縮／暗号化部２１３の詳細な機能的構成を示すブロック図である。図１３において、圧縮／暗号化部２１３は、低出現頻度文字データ分解部１３０１と、暗号化部１３０２と、生起確率演算部１３０３と、ハフマン木生成部１３０４と、圧縮部１３０５と、から構成されている。
【００７７】
まず、低出現頻度文字データ分解部１３０１は、文字出現頻度管理データ生成部２１２によって生成された文字出現頻度管理データ２３０内における文字領域の文字データを高出現頻度順にソートする。そして、所定の出現頻度以下の残余の低出現頻度の文字データを８ビットコードに分解して、同じ８ビットコードであるバイナリデータが記憶されているバイナリ領域に記憶する。
【００７８】
暗号化部１３０２は、圧縮部１３０５によって圧縮された圧縮文字出現頻度管理データ２３５を、所定のマスタキーを用いてＸＯＲによる暗号化をおこない、暗号化圧縮文字出現頻度管理データ２６０を生成する。連字／外字置換テーブル２４０も同様に、所定のマスタキーを用いてＸＯＲによる暗号化をおこない、暗号化連字／外字置換テーブル２７０を生成することとしてもよい。
【００７９】
また、生起確率演算部１３０３は、低出現頻度文字データ分解部１３０１による分解によって得られた文字出現頻度管理データ２３０における標準文字データ、連字外字データおよびバイナリデータを高出現順にソートして、これらの生起確率を演算する。また、ハフマン木生成部１３０４は、生起確率演算部１３０３によって演算された生起確率からハフマン木を生成する。
【００８０】
また、圧縮部１３０５は、ハフマン木生成部１３０４によって生成されたハフマン木を用いてコンテンツ２１０を圧縮し、圧縮コンテンツ２５０を生成する。具体的には、各本文ＨＴＭＬファイルｆ０〜ｆｎに記述されている文字データに対して、出現頻度が高い順、すなわち生起確率が高い順に短いビットを割り当てて、コンテンツ２１０を圧縮する。なお、圧縮コンテンツ２５０内の本文ＨＴＭＬファイルを「圧縮ファイル」と称す。
【００８１】
つぎに、圧縮／暗号化部２１３による具体的なハフマン木生成処理について説明する。図１４は、圧縮／暗号化部２１３による具体的なハフマン木生成処理を示す説明図である。図１４の（Ｉ）に示した文字出現頻度管理データ２３０を、低出現頻度文字データ分解部１３０１により、低出現頻度の文字データを分解して、バイナリデータが記憶されているバイナリ領域８１５に記憶する（図１４中（Ｊ））。
【００８２】
つぎに、（Ｊ）のデータ構造において、混合文字領域８１２、連字外字領域８１４、およびバイナリ領域８１５内のすべての文字データを高出現頻度順にソートする（図１４中（Ｋ））。そして、（Ｋ）の領域１４００において、出現頻度をハフマンの圧縮パラメータとして各文字データの生起確率を演算する（図１４中（Ｌ））。最後に（Ｌ）において、各文字データの生起確率からハフマン木１４０１を生成する（図１４中（Ｍ））。
【００８３】
つぎに、圧縮部１３０５によって圧縮された圧縮コンテンツ２５０のデータ構造について説明する。図１５−１は、圧縮部１３０５によって圧縮された圧縮コンテンツ２５０のデータ構造を示す説明図である。図１５−１では、任意の本文ＨＴＭＬファイルｆｊに着目して説明する。この本文ＨＴＭＬファイルｆｊは、ブロック数情報（ｍ個）を格納する領域１５０１と、ｍ個の各ブロックのアドレス情報（＃１〜＃ｍ）を格納する領域１５０２と、各ブロックの圧縮ブロックデータＣ１〜Ｃｍを格納する領域１５０３から構成される。
【００８４】
また、図１５−２は、圧縮ブロックデータＣ１〜Ｃｍと、圧縮前の元のブロックデータとの比較を示す図表である。図１５−２を参照すると、圧縮ブロックデータＣ１〜Ｃｍのレングスが、対応する元のブロックデータのレングスの約半分に圧縮されていることがわかる。
【００８５】
ここで、図１３に示した圧縮部１３０５のあらたな機能について説明する。本実施の形態では、圧縮部１３０５は、コンテンツ２１０のほか、文字出現頻度管理データ２３０を圧縮して、圧縮文字出現頻度管理データ２３５を生成する。具体的には、文字出現頻度管理データ２３０内の出現マップ９０４を圧縮する。生成された圧縮文字出現頻度管理データ２３５は、上述したように、暗号化部１３０２により暗号化される。
【００８６】
図１６−１は、１検索対象ファイル内における文字データの出現確率を示す説明図である。図１６−１において、縦軸は、１検索対象ファイル内における文字データの出現確率を示しており、上が出現確率０％、下が出現確率１００％である。この出現確率の範囲０〜１００％を対数的に分割する。すなわち、確率が等しくなるように領域の上下２分割を繰り返すことにより、出現率の範囲を区画する分割領域が形成される。
【００８７】
この分割により、出現率をｒとすると、０≦ｒ＜１／３２がＥ領域、１／３２≦ｒ＜１／１６がＤ領域、１／１６≦ｒ＜１／８がＣ領域、１／８≦ｒ＜１／４がＢ領域、１／４≦ｒ＜１／２がＡ領域、１／２≦ｒ＜３／４がＡ’領域、３／４≦ｒ＜７／８がＢ’領域、７／８≦ｒ＜１５／１６がＣ’領域、１５／１６≦ｒ＜３１／３２がＤ’領域、３１／３２≦ｒ≦１がＥ’領域となる。
【００８８】
なお、同一アルファベットを付した領域の出現率は同一である。すなわち、出現確率５０％を境界として領域幅と出現確率が上下対称となっている。たとえば、Ａ領域およびＡ’領域の出現率はともに１／４である。なお、ある辞書コンテンツの１文字の平均出現率は、０．０７７であることがわかっているため、領域Ｃに属することとなる。
【００８９】
図１６−２は、出現マップ９０４と図１６−１に示した各領域との関係を示す説明図である。図１６−２では、文字データごとに図１６−１の出現率ｒが計算されており、図１６−１に示した各領域と対応付けられている。出現率ｒは、全検索対象ファイルｆ０〜ｆｎ中、対象となる文字データが出現する検索対象ファイル数がどの程度存在するかをあらわすデータであり、分母を検索対象ファイル数（ｎ＋１）、対象となる文字データが１つでも出現した検索対象ファイル数である。ある検索対象ファイル中、対象となる文字データが複数出現しても１ファイルとしてカウントされる。このように、出現率ｒにより文字データに対応する領域が異なるため、この出現率ｒは圧縮パラメータとしての役割を果たす。
【００９０】
図１６−３は、図１６−１に示した領域と圧縮パターンとの対応関係を示す領域／圧縮パターン対応テーブルである。図１６−３において、圧縮パターンとは、出現マップ９０４における各文字データのビット列の圧縮に用いるハフマン木の種類をあらわしている。たとえば、Ａ領域およびＡ’領域は非圧縮のためハフマン木を使用しない。また、Ｂ領域およびＢ’領域は、通常の４ビット系ハフマン圧縮のように１６種の符号語に圧縮する１６種ハフマン木を圧縮パターンとして用いる。この１６種ハフマン木のように、通常のハフマン圧縮に適用されるハフマン木を、「通常のハフマン木」と称す。
【００９１】
また、Ｃ領域およびＣ’領域は、１６種ハフマン木に１６ビットの特殊記号列を追加した１６＋１（１６ビット）種ハフマン木を圧縮パターンとして用いる。また、Ｄ領域およびＤ’領域は、１６種ハフマン木に３２ビットの特殊記号列を追加した１６＋１（３２ビット）種ハフマン木を圧縮パターンとして用いる。また、Ｅ領域およびＥ’領域は、１６種ハフマン木に６４ビットの特殊記号列を追加した１６＋１（６４ビット）種ハフマン木を圧縮パターンとして用いる。これら特殊記号列は、文字データが出現しないことを意味するビット値（本例では、「０」）の連続記号列（ＮＵＬＬ記号列）である。
【００９２】
これら、１６種＋１種（１６、３２、６４、・・・ビット）ハフマン木のように、１６、３２、６４、・・・ビットの特殊記号列を葉に追加したハフマン木を、「通常のハフマン木」と区別するため、「特殊なハフマン木」と称す。
【００９３】
なお、Ａ’領域〜Ｅ’領域の出現確率で出現する文字データについては、出現マップ９０４中のビット列を反転させてからＡ領域〜Ｅ領域で用いられるハフマン木を用いてハフマン圧縮をおこなう。
【００９４】
すなわち、Ａ’領域〜Ｅ’領域については、別途ハフマン木を保持しておく必要がなく、Ａ領域〜Ｅ領域で用いられるハフマン木をそのまま用いることができるため、データ量の削減を図ることができる。なお、これらハフマン木は、図１に示したＲＡＭ１０３やＨＤ１０５に保存されており、領域／圧縮パターン対応テーブルを参照することにより、抽出することができる。
【００９５】
図１６−４〜図１６−８は、各領域における４ビット系のハフマン圧縮を示す図表である。各図表において、左端の記号列［００００］〜［１１１１］は、出現マップ内のビット列のうち４ビット分のビット列パターンをあらわしており、ハフマン木の葉となる。
【００９６】
また、「符号長（小計）」の値は、「生起確率」と「符号長」と「数量」とを掛け合わせた値である。「生起確率（小計）」の値は、「生起確率（基準）」と「数量」とを掛け合わせた値である。「生起確率（小計）」は、領域ごとに、「生起確率」の高い記号列順に割り振られる。
【００９７】
図１６−４は、Ａ領域およびＡ’領域における４ビット系のハフマン圧縮を示す図表である。「生起確率（基準）」には、「生起確率」の高い記号列順に０．２５（＝１／４）、０．１２５（＝１／８）、０．０３１２５（＝１／３２）、０．００３９０６２５（＝１／２５６）、０．０００９７６５６３（＝１／１０２４）が割り振られている。対象となる文字データの出現率ｒがＡ領域およびＡ’領域に該当する場合には圧縮しない。
【００９８】
図１６−５は、Ｂ領域およびＢ’領域における４ビット系のハフマン圧縮を示す図表である。「生起確率（基準）」には、「生起確率」の高い記号列順に０．５（＝１／２）、０．１２５（＝１／８）、０．０６２５（＝１／１６）、０．０１５６２５（＝１／６４）、０．００３９０６２５（＝１／２５６）、０．０００９７６５６３（＝１／１０２４）が割り振られている。
【００９９】
対象となる文字データの出現率ｒがＢ領域およびＢ’領域に該当する場合には、その文字データのビット列に含まれている記号列［００００］〜［１１１１］を、この「生起確率（小計）」に基づき、１６種ハフマン木により対応する符号語に圧縮する。
【０１００】
図１６−６は、Ｃ領域およびＣ’領域における４ビット系のハフマン圧縮を示す図表である。この図表では、４ビットの記号列［００００］〜［１１１１］のほかに、１６ビットの記号列［００００…００００］も含まれている。「生起確率（基準）」には、「生起確率」の高い記号列順に０．２５（＝１／４）、０．２５（＝１／４）、０．１２５（＝１／８）、０．０６２５（＝１／１６）、０．０００１２２０７（＝１／８１９２）、０．０００９７６５６３（１／１０２４）、０．０００１２２０７（＝１／８１９２）が割り振られている。
【０１０１】
対象となる文字データの出現率ｒがＣ領域およびＣ’領域に該当する場合には、その文字データのビット列に含まれている記号列［００００］〜［１１１１］，［００００…００００］を、この「生起確率（小計）」に基づき、１６種＋１（１６ビット）種ハフマン木により対応する符号語に圧縮する。
【０１０２】
図１６−７は、Ｄ領域およびＤ’領域における４ビット系のハフマン圧縮を示す図表である。この図表では、４ビットの記号列［００００］〜［１１１１］のほかに、３２ビットの記号列［００００……００００］も含まれている。「生起確率（基準）」には、「生起確率」の高い記号列順に０．２５（＝１／４）、０．２５（＝１／４）、０．１２５（＝１／８）、０．０６２５（＝１／１６）、０．０００１２２０７（＝１／８１９２）、０．０００９７６５６３（＝１／１０２４）、０．０００１２２０７（＝１／８１９２）が割り振られている。
【０１０３】
対象となる文字データの出現率ｒがＤ領域およびＤ’領域に該当する場合には、その文字データのビット列に含まれている記号列［００００］〜［１１１１］，［００００……００００］を、この「生起確率（小計）」に基づき、１６種＋１（３２ビット）種ハフマン木により対応する符号語に圧縮する。
【０１０４】
図１６−８は、Ｅ領域およびＥ’領域における４ビット系のハフマン圧縮を示す図表である。この図表では、４ビットの記号列［００００］〜［１１１１］のほかに、６４ビットの記号列［００００………００００］も含まれている。「生起確率（基準）」には、「生起確率」の高い記号列順に０．２５（＝１／４）、０．２５（＝１／４）、０．１２５（＝１／８）、０．０６２５（＝１／１６）、０．０００１２２０７（＝１／８１９２）、０．０００９７６５６３（＝１／１０２４）、０．０００１２２０７（＝１／８１９２）が割り振られている。
【０１０５】
対象となる文字データの出現率ｒがＥ領域およびＥ’領域に該当する場合には、その文字データのビット列に含まれている記号列［００００］〜［１１１１］，［００００………００００］を、この「生起確率（小計）」に基づき、１６種＋１（６４ビット）種ハフマン木により対応する符号語に圧縮する。
【０１０６】
図１６−９は、図１６−６に示した１６ビット記号列を追加した場合の記号列の符号語との対応関係の一例を示す図表である。図１６−９において、あらたに葉として追加される１６ビット記号列は、生起確率が最も高いため、２ビットの符号長の符号語「００」が割り当てられている。なお、符号長を短縮するため、この符号長は補正される。
【０１０７】
図１６−１０は、葉となる１７番目の記号列の追加前と追加後における４ビット系ハフマン圧縮の比較例を示す説明図である。図１６−１０において、上下の図表は、例として、文字データの出現率を１０％とした場合の４ビット系のハフマン圧縮を示す図表である。上の図表は、１２ビットの記号列［００００００００００００］の追加前をあらわしており、下の図表は、１７番目の１２ビット記号列［００００００００００００］の追加前をあらわしている。
【０１０８】
下の図表において、この１７番目の１２ビット記号列を追加した場合、その記号列の生起確率は１／４超を目安とする。これにより、追加前において生起確率が最大である記号列［００００］の生起確率を補正する。
【０１０９】
また、１７番目の１２ビット記号列には、符号長として２ビットが割り当てられるが、その符号語の符号長が短くなるように補正する。ここでは、１７番目の１２ビット記号列の符号長は２ビットから０．６６６６７ビット（＝２ビット×４ビット／１２ビット）に補正される。
【０１１０】
上下の図表の平均符号長を比較すると、上の図表における平均符号長が０．５１３５５であり、下の図表の平均符号長が０．４６０３８４０８９となるため、１７番目の１２ビット記号列を追加することにより、圧縮率が１０％改善することとなる。
【０１１１】
図１６−１１は、ビット列圧縮データのデータ構造を示す説明図である。ビット列圧縮データ１６００は、アドレス１６０１と圧縮パターン１６０２と領域フラグ１６０３と圧縮ビット列１６０４とパディング１６０５とからなる。
【０１１２】
アドレス１６０１は、そのビット列圧縮データ１６００の圧縮元のビット列の文字データにリンクするポインタである。圧縮パターン１６０２とは、ハフマン圧縮に用いるハフマン木を特定する情報である。領域フラグ１６０３とは、そのビット列圧縮データ１６００の圧縮元のビット列の文字データの出現率がＡ領域〜Ｅ領域の範囲内にあるか、Ａ’領域〜Ｅ’領域の範囲内にあるかを特定するためのフラグである。
【０１１３】
圧縮ビット列１６０４とは、圧縮元のビット列を圧縮パターンで特定されるハフマン木で圧縮されたビット列である。パディング１６０５は必要に応じて追加することで、ビット列圧縮データ１６００を可変長にする。
【０１１４】
なお、図１６−１〜図１６−１１では、おもに４ビット系のハフマン圧縮について説明したが、２ビットや３ビット、８ビット、１６ビットなど４ビット系以外のハフマン圧縮にも適用することができる。
【０１１５】
（検索初期化部２２１の詳細な機能的構成）
つぎに、図２に示した検索初期化部２２１の詳細な機能的構成について説明する。図１７は、図２に示した検索初期化部２２１の詳細な機能的構成を示すブロック図である。図１７において、検索初期化部２２１は、復号部１７０１と、低出現頻度文字データ分解部１７０２と、生起確率演算部１７０３と、ハフマン木生成部１７０４と、出現マップ設定部１７０５と、伸長部１７０６と、から構成されている。
【０１１６】
まず、復号部１７０１は、暗号化圧縮文字出現頻度管理データ２６０を復号する。具体的には、図１３で用いた暗号化のマスタキーを用いて排他的論理和（ＸＯＲ）による復号処理を実行する。同様に、暗号化連字／外字置換テーブル２７０も、元の連字／外字置換テーブル２４０に戻す。また、低出現頻度文字データ分解部１７０２、生起確率演算部１７０３およびハフマン木生成部１７０４は、図１３に示した低出現頻度文字データ分解部１３０１、生起確率演算部１３０３およびハフマン木生成部１３０４と同一の処理を実行し、ハフマン木１７１０を生成する。
【０１１７】
ここで、図１７に示したあらたな機能である伸長部１７０６について説明する。伸長部１７０６は、復号部１７０１により復号された圧縮文字出現頻度管理データ２３５を伸長する。具体的には、各文字データのビット列圧縮データ１６００を読み込んで、その中のアドレス１６０１、圧縮パターン１６０２、領域フラグ１６０３を特定する。そして、圧縮時に用いたハフマン木により、圧縮ビット列１６０４を伸長する。これにより、文字出現頻度管理データ２３０が伸長されることとなる。
【０１１８】
また、出現マップ設定部１７０５は、伸長された文字出現頻度管理データ２３０の出現マップ９０４を読み込んでメモリ展開し、区点対応テーブルとリンクする。区点は、ＪＩＳによって制定された全角文字向けの文字コードであり、区点対応テーブルは、各区点のアドレスを記憶したテーブルである。
【０１１９】
図１８は、区点対応テーブルと出現マップとの対応関係を示す説明図である。この区点対応テーブル１８００を用いて、文字出現頻度管理データ２３０の文字データと区点とを対応づけることにより、区点に対応する文字データの存否フラグ列を出現マップ９０４から呼び出すことができる。
【０１２０】
（全文検索部２２２の詳細な機能的構成）
つぎに、図２に示した全文検索部２２２の詳細な機能的構成について説明する。図１９は、図２に示した全文検索部２２２の詳細な機能的構成を示すブロック図である。図１９において、全文検索部２２２は、検索キーワード入力処理部１９０１と、検索キーワード圧縮部１９０２と、出現マップ読取部１９０３と、圧縮ファイル特定部１９０４と、圧縮ファイル抽出部１９０５と、判定部１９０６と、ブロック伸長部１９０７と、文字列比較部１９０８と、見出しデータ特定部１９０９と、検索候補一覧表示部１９１０と、検索候補選択部１９１１と、から構成されている。
【０１２１】
まず、検索キーワード入力処理部１９０１は、ユーザからの検索キーワードの入力を受け付ける。また、検索キーワードが複数ある場合、各検索キーワードの文字列を連結する。さらに、検索キーワードの連字が所定の連字に該当する場合、連字／外字置換テーブル２４０を用いて、連字を外字に置換する。このあと、検索キーワード入力処理部１９０１は、検索キーワードを単一文字に分解する。
【０１２２】
また、検索キーワード圧縮部１９０２は、検索キーワード入力処理部１９０１によって入力された検索キーワードを、検索初期化部２２１のハフマン木生成部１７０４によって生成されたハフマン木１７１０を用いて圧縮する。また、出現マップ読取部１９０３は、出現マップ設定部１７０５によって設定された出現マップ９０４を用いて、検索キーワードの各文字の各ＨＴＭＬファイルｆ０〜ｆｎにおける存否フラグ列を読み取る。具体的には、この出現マップ９０４における各文字データは、区点対応テーブルにより区点とリンクしているため、区点と一致する検索キーワードの各文字データの存否フラグ列を読み取ることができる。
【０１２３】
圧縮ファイル特定部１９０４は、出現マップ９０４から読み取られた各文字の各ＨＴＭＬファイルｆ０〜ｆｎにおける存否フラグ列の論理積を算出することにより、検索キーワードの各文字データがすべて存在する圧縮ファイルを特定することで、圧縮ファイルの絞込みをおこなう。ここで、絞込みの一例を、下記表１を用いて説明する。
【０１２４】
【表１】
2008146756.tif 000102
【０１２５】
上記表１においては、検索キーワードを『増殖細胞』とし、コンテンツ２１０に含まれている本文ＨＴＭＬファイルｆの数を４個、すなわち、ファイル番号＃０〜＃３までとする。表１において、たとえば、文字『増』の存否フラグ列は［１１００］である。この存否フラグ列は、ファイル番号＃０、＃１の本文ＨＴＭＬファイルｆ０、ｆ１には文字『増』が含まれており、ファイル番号＃２、＃３の本文ＨＴＭＬファイルｆ２、ｆ３には文字『増』が含まれていないことを示している。
【０１２６】
そして、表１において、絞込み結果は、ファイル番号ごとの存否フラグの論理積（ＡＮＤ）結果を示している。この絞込み結果によれば、ファイル番号＃１の本文ＨＴＭＬファイルｆ１のみが、存在を示すフラグ「１」となっているため、検索キーワードを構成するすべての文字『増』、『殖』、『細』および『胞』は、ファイル番号＃１の本文ＨＴＭＬファイルｆ１にのみ存在し、他のファイル番号（＃０、＃２、＃３）の本文ＨＴＭＬファイルｆ０、ｆ２、ｆ３には存在しないことがわかる。これにより、検索対象としてオープンするファイルを、ファイル番号＃１の本文ＨＴＭＬファイルｆ１のみに特定することができ、無駄なファイルのオープン／クローズ処理を防止して検索速度の向上を図ることができる。
【０１２７】
また、圧縮ファイル抽出部１９０５は、圧縮コンテンツ２５０内において圧縮されている本文ＨＴＭＬファイルの中から、圧縮ファイル特定部１９０４によって特定された本文ＨＴＭＬファイルを抽出する。上記表の例では、ファイル番号＃１の圧縮された本文ＨＴＭＬファイル（以下、「圧縮本文ＨＴＭＬファイル」）ｆ１を抽出する。
【０１２８】
また、判定部１９０６は、圧縮ファイル抽出部１９０５によって抽出された圧縮本文ＨＴＭＬファイルに、検索キーワード圧縮部１９０２によって圧縮された検索キーワード（以下、「圧縮キーワード」）が含まれているか否かを判定する。具体的には、圧縮本文ＨＴＭＬファイル内の圧縮ブロックデータごとに判定をおこなっている。
【０１２９】
この判定結果が不一致である場合、圧縮本文ＨＴＭＬファイルには、検索キーワードが含まれていないことがわかる。一方、判定結果が一致である場合、圧縮本文ＨＴＭＬファイルには、検索キーワードが含まれていることがわかる。たとえば、上記表においては、ファイル番号＃１の本文ＨＴＭＬファイルに、検索キーワード『増殖細胞』という文字列が含まれていることがわかる。
【０１３０】
また、ブロック伸長部１９０７は、判定部１９０６により一致すると判定された圧縮ＨＴＭＬファイルの圧縮ブロックデータのみ伸長する。この判定部１９０６およびブロック伸長部１９０７により、本文ＨＴＭＬファイルを圧縮した状態のまま判定をおこなうことができ、不一致であれば、圧縮本文ＨＴＭＬファイルを伸長する前に検索候補から外し、一致した本文ＨＴＭＬファイルのみ伸長することができる。また、ブロック伸長部１９０７において、伸長された本文ＨＴＭＬファイルに連字外字データが含まれている場合、復号部１７０１によって復号された連字／外字置換テーブル２４０を用いて、連字外字データを元の連字データに置換する。
【０１３１】
また、文字列比較部１９０８は、ブロック伸長部１９０７によって伸長されたブロックデータ内の文字列と、検索キーワード入力処理部１９０１によって入力された検索キーワードとを比較する。検索キーワードに一致する文字列の項目データがあった場合、当該項目データのファイル番号およびアンカー名を記録し、見出しデータ３００を特定する。なお、特定された見出しデータ３００を、「特定見出しデータ３００」と称す。
【０１３２】
検索候補一覧表示部１９１０は、特定見出しデータ３００における項目データのファイル番号とアンカーから、見出しデータ３００を編集して、見出し語が列挙された検索候補一覧を図１に示したディスプレイ１０８に表示する。また、検索候補選択部１９１１は、検索候補一覧表示部１９１０によって表示された検索候補一覧の中から、ユーザの操作によって選択された検索候補を受け付ける。
【０１３３】
（検索結果表示部２２３の詳細な機能的構成）
つぎに、図２に示した検索結果表示部２２３の詳細な機能的構成について説明する。図２０は、図２に示した検索結果表示部２２３の詳細な機能的構成を示すブロック図である。図２０において、検索結果表示部２２３は、読出し部２００１と、本文伸長部２００２と、本文表示部２００３と、から構成されている。
【０１３４】
まず、読出し部２００１は、検索候補選択部１９１１によって選択された検索候補である項目データを、圧縮コンテンツ２５０から読み出す。また、本文伸長部２００２は、読出し部２００１によって読み出された項目データを、ハフマン木１７１０によって伸長する。検索結果表示部２２３は、本文伸長部２００２によって伸長された項目データを検索結果として表示する。
【０１３５】
（情報検索処理手順）
つぎに、実施の形態１にかかる情報検索装置の情報検索処理手順について説明する。図２１は、実施の形態１にかかる情報検索装置の情報検索処理手順を示すフローチャートである。図２１において、まず、文字出現頻度管理データ生成部２１２により、文字出現頻度管理データ生成処理を実行する（ステップＳ２１０１）。
【０１３６】
そして、圧縮／暗号化部２１３により、圧縮／暗号化処理を実行する（ステップＳ２１０２）。このあと、検索初期化部２２１により、検索初期化処理を実行する（ステップＳ２１０３）。つぎに、全文検索部２２２により、全文検索処理を実行する（ステップＳ２１０４）。最後に、検索結果表示部２２３により、検索結果表示処理を実行する（ステップＳ２１０５）。なお、検索結果表示処理では、検索候補一覧から選択された検索候補（項目データ）を圧縮コンテンツ２５０から読み出して、ハフマン木にて伸長することにより、項目データの全文を検索結果として表示することができる。
【０１３７】
つぎに、図２１に示した文字出現頻度管理データ生成処理（ステップＳ２１０１）の詳細な処理手順について説明する。図２２は、図２１に示した文字出現頻度管理データ生成処理（ステップＳ２１０１）の詳細な処理手順を示すフローチャートである。図２２において、まず、初期化処理を実行する（ステップＳ２２０１）。具体的には、８，１６ビットの文字データ、連字データ、バイナリデータの区点対応の集計領域を確保し、出現頻度と出現マップのセグメント等を初期化する。また、文字データのコードをセットし、各種カウンタを初期化する。
【０１３８】
つぎに、文字出現頻度集計処理を実行する（ステップＳ２２０２）。この文字出現頻度集計処理の詳細な処理手順については後述する。この文字出現頻度修正処理のあと、文字出現頻度管理データ２３０の領域確保とその領域の初期化を実行し（ステップＳ２２０３）、８，１６ビットの文字データ、連字データ、バイナリデータの文字コードと出現頻度をセットする（ステップＳ２２０４）。
【０１３９】
そして、出現マップの各セグメントを連結し（ステップＳ２２０５）。連字領域の連字データを高出現頻度順にソートすることで、２５６種の連字データを選択する（ステップＳ２２０６）。これにより、連字データの削減を図ることができる。
【０１４０】
つぎに、連字／外字置換をおこなうととともに、連字／外字置換テーブル２４０を生成する（ステップＳ２２０７）。具体的には、高出現頻度順に連字データを外字データに置換することにより、連字外字データと連字／外字置換テーブル２４０を生成する。
【０１４１】
そして、低出現頻度の連字データ、すなわち外字に置換されなかった連字データを単一文字データに分解し、該当する文字領域に割り振る補正をおこなう（ステップＳ２２０８）。すなわち、低出現頻度の連字データを表音文字データに分割し、当該文字データの頻度の加算と出現マップのＯＲ演算を実行する。
【０１４２】
このあと、文字データを高出現頻度順にソートし（ステップＳ２２０９）、頻度０回の文字データをカットして、連字外字データとバイナリデータとを結合し（ステップＳ２２１０）、この結合によって得られた文字出現頻度管理データ２３０をファイルに出力する（ステップＳ２２１１）。これにより、ステップＳ２１０２に移行する。
【０１４３】
つぎに、上述した文字出現頻度集計処理（ステップＳ２２０２）の詳細な処理手順について説明する。図２３は、上述した文字出現頻度集計処理（ステップＳ２２０２）の詳細な処理手順を示すフローチャートである。図２３において、まず、先頭（ファイル番号＃０）の本文ＨＴＭＬファイルｆ０をオープンする（ステップＳ２３０１）。
【０１４４】
つぎに、オープンされた本文ＨＴＭＬファイルから順次データを抽出する。抽出されたデータがバイナリデータである場合（ステップＳ２３０２：Ｙｅｓ）、当該バイナリデータの出現頻度を１ポイント加算し、当該バイナリデータの出現マップの存否フラグを「１」に設定し、さらに、バイトカウンタを２ポイント加算する（ステップＳ２３０３）。
【０１４５】
一方、ステップＳ２３０２において、抽出されたデータがバイナリデータでない場合（ステップＳ２３０２：Ｎｏ）、連字データであるか否かを判定する（ステップＳ２３０４）。連字データである場合（ステップＳ２３０４：Ｙｅｓ）、当該連字データの出現頻度を１ポイント加算し、当該連字データの出現マップの存否フラグを「１」に設定し、さらに、バイトカウンタを２（または４）ポイント加算する（ステップＳ２３０５）。
【０１４６】
一方、ステップＳ２３０４において、抽出されたデータが連字データでない場合（ステップＳ２３０４：Ｎｏ）、漢字データであるか否かを判定する（ステップＳ２３０６）。漢字データでない場合（ステップＳ２３０６：Ｎｏ）、当該データは表音文字データであるため、その表音文字データの出現頻度を１ポイント加算し、当該表音文字データの出現マップの存否フラグを「１」に設定し、バイトカウンタを１（または２）ポイント加算する（ステップＳ２３０７）。
【０１４７】
一方、ステップＳ２３０６において、抽出されたデータが漢字データである場合（ステップＳ２３０６：Ｙｅｓ）、当該漢字データの出現頻度を１ポイント加算し、当該漢字データの出現マップの存否フラグを「１」に設定し、バイトカウンタを２ポイント加算する（ステップＳ２３０８）。
【０１４８】
つぎに、出現マップのセグメントのセグメントカウンタを１ポイント加算し（ステップＳ２３０９）、セグメント終了か否か、すなわちセグメントの集計が終了したか否かを判断する（ステップＳ２３１０）。セグメントの集計が終了した場合（ステップＳ２３１０：Ｙｅｓ）、出現マップのセグメントをファイルに追加出力し、セグメントカウンタをクリアする（ステップＳ２３１１）。そして、ステップＳ２３１２に移行する。
【０１４９】
一方、セグメントの集計が終了していない場合（ステップＳ２３１０：Ｎｏ）、またはステップＳ２３１１のあと、ブロック終了か否か、たとえば、集計した文字データ数が４０００文字に到達したか否かを判断する（ステップＳ２３１２）。
【０１５０】
そして、ブロック終了した場合（ステップＳ２３１２：Ｙｅｓ）、当該ブロックデータを有する本文ＨＴＭＬファイルのファイル番号、当該ブロックデータのブロック番号、オフセット、文字数、およびレングスからなるブロック情報を生成してファイルに追加出力するとともに、バイトカウンタをクリアする（ステップＳ２３１３）。そして、ステップＳ２３１４に移行する。
【０１５１】
一方、ブロック終了していない場合（ステップＳ２３１２：Ｎｏ）、またはステップＳ２３１３のあと、ファイル終了か否か、すなわち、現在オープンしている本文ＨＴＭＬファイルの集計が終了したか否かを判断する（ステップＳ２３１４）。現在オープンしている本文ＨＴＭＬファイルの集計が終了していない場合（ステップＳ２３１４：Ｎｏ）、ステップＳ２３０２に戻って次のデータを抽出し、抽出したデータの種類を特定して、集計する（ステップＳ２３０２〜Ｓ２３０８）。
【０１５２】
一方、ステップＳ２３１４において、現在オープンしている本文ＨＴＭＬファイルの集計が終了した場合（ステップＳ２３１４：Ｙｅｓ）、集計終了か否か、すなわち、現在オープンしている本文ＨＴＭＬファイルをクローズする（ステップＳ２３１５）。このあと、すべての本文ＨＴＭＬファイルからの集計が終了したか否かを判断する（ステップＳ２３１６）。
【０１５３】
すべての本文ＨＴＭＬファイルの集計が終了していない場合（ステップＳ２３１６：Ｎｏ）、つぎのファイル番号の本文ＨＴＭＬファイルをオープンし（ステップＳ２３１７）、ステップＳ２３０２に戻って次のデータを抽出し、抽出したデータの種類を特定して、集計する（ステップＳ２３０２〜Ｓ２３０８）。
【０１５４】
一方、ステップＳ２３１６においてすべての本文ＨＴＭＬファイルの集計が終了した場合（ステップＳ２３１６：Ｙｅｓ）、出現マップのセグメントをファイルに追加出力し（ステップＳ２３１８）、ステップＳ２２０３に移行することで一連の処理を終了する。
【０１５５】
つぎに、図２１に示した圧縮／暗号化処理（ステップＳ２１０２）の詳細な処理手順について説明する。図２４−１は、図２１に示した圧縮／暗号化処理（ステップＳ２１０２）の詳細な処理手順を示すフローチャートである。図２４において、まず、出現頻度順に混合文字領域８１２の文字データをソートする（ステップＳ２４０１）。
【０１５６】
つぎに、低出現頻度の文字データを８ビットに分解し、該当するバイナリデータの出現頻度に加算する（ステップＳ２４０２）。そして、混合文字領域８１２の文字データ、連字外字データ、バイナリデータを連結し、出現頻度順にソートする（ステップＳ２４０３）。このあと、ソートされた文字データごとに、出現頻度に基づいて生起確率を演算し（ステップＳ２４０４）、この生起確率に基づいて、８，１６ビットの文字データに共通のハフマン木を生成する（ステップＳ２４０５）。
【０１５７】
このあと、各本文ＨＴＭＬファイルを圧縮する（ステップＳ２４０６）。具体的には、コンテンツフォルダ４００配下の各本文ＨＴＭＬファイルを、たとえば４０００文字ごとにブロック化し、ハフマン木を用いて圧縮する。
【０１５８】
つぎに、本実施の形態のあらたな処理として、文字出現頻度管理データ圧縮処理を実行する（ステップＳ２４０７）。文字出現頻度管理データ圧縮処理の詳細な処理手順については、図２４−２において後述する。
【０１５９】
このあと、圧縮文字出現頻度管理データ２３５を暗号化する（ステップＳ２４０８）。具体的には、圧縮文字出現頻度管理データ２３５の暗号化領域（文字データおよび出現頻度の領域）を、マスタキーを用いて排他的論理和（ＸＯＲ）により暗号化する。そして、連字／外字置換テーブル２４０を暗号化する（ステップＳ２４０９）。具体的には、連字／外字置換テーブル２４０の暗号化領域を、マスタキーを用いて排他的論理和（ＸＯＲ）により暗号化する。そして、検索初期化処理（ステップＳ２１０３）に移行し、一連の処理を終了する。
【０１６０】
ここで、上述した文字出現頻度管理データ圧縮処理の詳細な処理手順について説明する。図２４−２は、文字出現頻度管理データ圧縮処理の詳細な処理手順を示すフローチャートである。図２４−２において、まず、未処理の文字データがあるか否かを判断する（ステップＳ２４７１）。未処理の文字データがある場合（ステップＳ２４７１：Ｙｅｓ）、未処理の文字データの中から任意の文字データを選択する（ステップＳ２４７２）。なお、先頭の文字データから読み込んでいる場合には、必然的に処理された文字データのつぎの文字データとなる。
【０１６１】
そして、選択文字データの出現率を取得する（ステップＳ２４７３）。出現率は、文字出現頻度管理データ２３０にあらかじめ保持されている場合には、その出現率を読み込み、出現ファイル数９０２が保持されている場合には、選択文字データの出現率を、選択文字データの出現ファイル数／全検索対象ファイル数（ｎ＋１）により算出する。
【０１６２】
そして、この出現率を圧縮パラメータとすることにより選択文字データが出現する領域をＡ領域〜Ｅ領域、Ａ’領域〜Ｅ’領域の中から特定する（ステップＳ２４７４）。領域が特定されると、図１６−３に示した領域／圧縮パターン対応テーブルを参照することにより、圧縮に用いられるハフマン木を抽出する（ステップＳ２４７５）。これにより、選択文字データの圧縮パターンが特定される。
【０１６３】
このあと、選択文字データのビット列を抽出する（ステップＳ２４７６）。具体的には、選択文字データのビット列を先頭から順次レジスタに書き込む。そして、出現率が５０％以上であるか否かを判断する（ステップＳ２４７７）。すなわち、５０％以上であれば（ステップＳ２４７７：Ｙｅｓ）、出現率はＡ’領域〜Ｅ’領域の範囲内にあるため、レジスタに保持されているビット列を反転させる（ステップＳ２４７８）。
【０１６４】
一方、５０％未満であれば（ステップＳ２４７７：Ｎｏ）、出現率はＡ領域〜Ｅ領域の範囲内であるため、レジスタに保持されているビット列は反転させず、ステップＳ２４７９に移行する。そして、レジスタに保持されているビット列を、ステップＳ２４７５で抽出されたハフマン木を用いてハフマン圧縮する（ステップＳ２４７９）。これにより、選択文字データについてのビット列圧縮データ１６００が生成されることとなる。
【０１６５】
選択文字データのビット列のハフマン圧縮が終了すると、ステップＳ２４７１に戻る。そして、ステップＳ２４７１において、未処理の文字データがない場合（ステップＳ２４７１：Ｎｏ）、図２４−１に示したステップＳ２４０８に移行する。
【０１６６】
つぎに、図２１に示した検索初期化処理（ステップＳ２１０３）の詳細な処理手順について説明する。図２５−１は、図２１に示した検索初期化処理（ステップＳ２１０３）の詳細な処理手順を示すフローチャートである。
【０１６７】
図２５−１において、まず、検索初期化処理の起動を待ち受け（ステップＳ２５０１：Ｎｏ）、起動した場合（ステップＳ２５０１：Ｙｅｓ）、圧縮／暗号化処理において暗号化された暗号化圧縮文字出現頻度管理データ２６０を復号化する（ステップＳ２５０２）。具体的には、暗号化圧縮文字出現頻度管理データ２６０の暗号化領域（文字データおよび出現頻度の領域）を、暗号化したときのマスタキーを用いて排他的論理和（ＸＯＲ）により復号する。
【０１６８】
つぎに、暗号化連字／外字置換テーブル２７０を復号化する（ステップＳ２５０３）。具体的には、暗号化連字／外字置換テーブル２７０の暗号化領域を、暗号化したときのマスタキーを用いて排他的論理和（ＸＯＲ）により復号する。
【０１６９】
そして、本実施の形態のあらたな処理として、文字出現頻度管理データ伸長処理を実行する（ステップＳ２５０４）。文字出現頻度管理データ伸長処理の詳細な処理手順については、図２５−２において後述する。
【０１７０】
つぎに、圧縮／暗号化処理で示したステップＳ２４０１〜Ｓ２４０５までの処理と同様の処理を実行する。すなわち、高出現頻度順に文字データをソートし（ステップＳ２５０５）、低出現頻度の文字データを８ビットに分解し、該当するバイナリデータの出現頻度に加算する（ステップＳ２５０６）。そして、文字データ、連字データ、バイナリデータを連結し、高出現頻度順にソートする（ステップＳ２５０７）。このあと、文字データごとに、出現頻度に基づいて生起確率を演算し（ステップＳ２５０８）、この生起確率に基づいて、８，１６ビットの文字データに共通のハフマン木を生成する（ステップＳ２５０９）。
【０１７１】
このあと、出現マップの設定処理を実行する（ステップＳ２５１０）。具体的には、区点対応テーブルの領域確保、各文字データの出現順位の区点対応テーブルへのセット、復号された文字出現頻度管理データ２３０の出現マップのメモリ展開、当該出現マップと区点対応テーブルとのリンクを実行する。このあと、全文検索処理（ステップＳ２１０４）に移行して、一連の処理を終了する。
【０１７２】
ここで、上述した文字出現頻度管理データ伸長処理の詳細な処理手順について説明する。図２５−２は、文字出現頻度管理データ伸長処理の詳細な処理手順を示すフローチャートである。図２５−２において、まず、未処理の文字データがあるか否かを判断する（ステップＳ２５４１）。未処理の文字データがある場合（ステップＳ２５４１：Ｙｅｓ）、未処理の文字データの中から任意の文字データを選択する（ステップＳ２５４２）。なお、先頭の文字データから読み込んでいる場合には、必然的に処理された文字データのつぎの文字データとなる。
【０１７３】
そして、選択文字データのビット列圧縮データ１６００から選択文字データの圧縮パターン１６０２を検出することにより、図１６−３に示した領域／圧縮パターン対応テーブルを参照して、伸長に用いられる対応するハフマン木を抽出する（ステップＳ２５４３）。
【０１７４】
つぎに、選択文字データの圧縮ビット列１６０４を抽出する（ステップＳ２５４４）。具体的には、選択文字データの圧縮ビット列１６０４を先頭から順次レジスタに書き込む。そして、レジスタに保持されている圧縮ビット列１６０４を、ステップＳ２５４３で抽出されたハフマン木を用いてハフマン伸長する（ステップＳ２５４５）。
【０１７５】
そして、選択文字データの出現率が５０％以上であるか否かを判断する（ステップＳ２５４６）。具体的には、領域フラグ１６０３を参照することにより判断する。５０％以上であれば（ステップＳ２５４６：Ｙｅｓ）、出現率はＡ’領域〜Ｅ’領域の範囲内にあるため、伸長されたビット列を反転させる（ステップＳ２５４７）。
【０１７６】
一方、５０％未満であれば（ステップＳ２５４６：Ｎｏ）、出現率はＡ領域〜Ｅ領域の範囲内であるため、レジスタに保持されているビット列を反転させない。選択文字データの圧縮ビット列１６０４のハフマン伸長が終了すると、ステップＳ２５４１に戻る。そして、ステップＳ２５４１において、未処理の文字データがない場合（ステップＳ２５４１：Ｎｏ）、図２５−１に示したステップＳ２５０５に移行する。
【０１７７】
つぎに、図２１に示した全文検索処理（ステップＳ２１０４）の詳細な処理手順について説明する。図２６は、図２１に示した全文検索処理（ステップＳ２１０４）の詳細な処理手順を示すフローチャートである。検索初期化処理（ステップＳ２１０３）のあと、図２６において、まず、検索キーワードの入力を受け付ける（ステップＳ２６０１）。
【０１７８】
検索キーワードが複数でない場合（ステップＳ２６０２：Ｎｏ）、ステップＳ２６０４に移行する。一方、検索キーワードが複数である場合（ステップＳ２６０２：Ｙｅｓ）、各キーワードの文字列を連結して（ステップＳ２６０３）、ステップＳ２６０４に移行する。
【０１７９】
このあと、ステップＳ２６０４において、検索キーワード内に連字データがない場合（ステップＳ２６０４：Ｎｏ）、ステップＳ２６０６に移行する。一方、連字データがある場合（ステップＳ２６０４：Ｙｅｓ）、連字／外字置換テーブル２４０を用いて、その連字データを２文字の外字データに置換して（ステップＳ２６０５）、ステップＳ２６０６に移行する。
【０１８０】
このあと、ステップＳ２６０６において、検索キーワードを単一文字データに分解して、出現マップから各文字データの各本文ＨＴＭＬファイルにおける存否フラグ列を読み取る（ステップＳ２６０６）。そして、各文字データの存否フラグ列の論理積により、圧縮ファイルを特定（絞込み）する（ステップＳ２６０７）。また、検索キーワードを検索初期化処理（ステップＳ２１０３）において生成されたハフマン木で圧縮し（ステップＳ２６０８）、ファイルカウンタを初期化する（ステップＳ２６０９）。
【０１８１】
このあと、ステップＳ２６０７で特定された圧縮ファイル（特定圧縮ファイル）をオープンし（ステップＳ２６１０）、オープンされた特定圧縮ファイルの圧縮ブロックデータに、圧縮検索キーワードとの一致判定をおこなう（ステップＳ２６１１）。不一致である場合（ステップＳ２６１２：Ｎｏ）、ステップＳ２６１５に移行する。
【０１８２】
一方、一致する場合（ステップＳ２６１２：Ｙｅｓ）、当該圧縮ブロックデータを、ハフマン木を用いて伸長する（ステップＳ２６１３）。そして、伸長されたブロックデータと検索キーワードとを比較し、検索キーワードに一致した項目データのファイル番号およびアンカーを記録して（ステップＳ２６１４）、ステップＳ２６１５に移行する。
【０１８３】
このあと、ステップＳ２６１５において、オープンしている特定圧縮ファイルをクローズし（ステップＳ２６１５）、ファイルカウンタを更新する（ステップＳ２６１６）。ファイルカウンタの更新により、未処理の特定圧縮ファイルがあると判断された場合（ステップＳ２６１７：Ｙｅｓ）、ステップＳ２６１０に移行して、つぎの特定圧縮ファイルをオープンする。
【０１８４】
一方、未処理の特定圧縮ファイルがないと判断された場合（ステップＳ２６１７：Ｎｏ）、検索候補一覧を表示し（ステップＳ２６１８）、ユーザからの選択入力を待ち受ける（ステップＳ２６１９）ことにより、検索結果表示処理（ステップＳ２１０５）に移行して、一連の処理を終了する。
【０１８５】
このように、上述した実施の形態１によれば、コンテンツ２１０が複数の検索対象ファイルから構成されていても、単一の圧縮情報（文字出現頻度管理データ２３０）により共通化することができる。
【０１８６】
また、サイズが大きい検索対象ファイルでは文字データ数に応じてブロック化をおこない、８ビットコード、１６ビットコードまたは３２ビットコードの文字データが混在する検索対象ファイルについてのハフマン圧縮技術を確立することができる。
【０１８７】
また、サイズ（容量）ではなく、文字データ数に応じたブロック化をおこない、検索対象ファイル内の各文字データの出現頻度の集計時に、文字データの種類（８ビットコード、１６ビットコードまたは３２ビットコード）を判定し、出現頻度を集計することができる。
【０１８８】
また、英和辞典での英字データなど出現頻度の高い８ビットコードの文字データに対しては、０ｘ’ＦＦ＊＊’など１６ビットコードの文字データに置換し、ハフマン圧縮をおこなう。これにより、低出現率の８ビットコードの文字データと区別して、効率的な圧縮をおこなうことができる。
【０１８９】
また、ポインタなどの非文字データはランダムな値であるため、８ビットコードに置換する。また、ハフマン木のサイズ縮小のため、出現頻度の低い１６ビットコードの文字データを分割し、８ビットコードの文字データに置換する。これにより、効率的な圧縮をおこなうことができる。
【０１９０】
また、上述した実施の形態では、圧縮のためのハフマン木の生成元である文字出現頻度管理データ２３０またはその一部を暗号化する。すなわち、コンテンツや、コンテンツ圧縮のためのハフマン木を直接暗号化せず、ハフマン木の生成元を暗号化しているため、セキュリティの向上を図ることができる。
【０１９１】
また、上述した実施の形態では、文字出現頻度管理データをもとに、全文検索の高速化を図ることができる。また、連続する表音文字データの出現頻度の高い２文字の連字データを外字データに置換した後、コンテンツ圧縮をおこなっているため、圧縮率の向上を図ることができる。
【０１９２】
また、連字データにより、オープン／クローズするファイル数を削減することができ、文字列の比較領域の縮小により全文検索の高速化を図ることができる。さらに、全文検索は伸長後に外字データのままで文字列比較を行うことで、さらに検索速度の向上を図ることができる。
【０１９３】
このように、この実施の形態１によれば、圧縮処理について、文字出現頻度管理データ（ハフマン木）の共通化により、各検索対象ファイルの圧縮率の向上を図ることができる。また、圧縮された検索対象ファイルをブロック毎に伸長することで、圧縮されたままで検索や表示をおこなうことができ、検索速度の向上を図ることができる。また、ポインタなど非文字コードであるバイナリデータとテキストデータが混在するファイルも圧縮することができる。
【０１９４】
また、低出現頻度の文字データをカットしてハフマン木を生成することにより、ハフマン木を縮小することができる。したがって、使用メモリサイズが削減でき、ＰＤＡや携帯電話機などの可搬型携帯端末においても利用することができる。また、２パスのハフマン圧縮であるため、他の方式に比べ、最高速な圧縮と伸長が実現することができる。また、ハフマン圧縮の圧縮率は約５０％であり、伸長速度は他の圧縮方式に比べ最高速となる。
【０１９５】
また、暗号化処理においては、ハフマン木の生成元を暗号化しているため、全文検索や表示などにおいて、復号化が不要である。したがって、セキュリティの向上を図るとともに検索速度の向上も図ることができる。また、暗号化の領域も文字出現頻度管理データだけ（全体の１％未満）であり、で暗号化の処理時間を短くできるとともに、復号化もハフマン木の作成時の１回で済ませることができる。したがって、復号化処理が検索速度の妨げにならず、セキュリティの向上を図るとともに検索速度の向上も図ることができる。
【０１９６】
また、全文検索処理においては、オープン／クローズする検索対象ファイルの数を削減し、文字列の比較領域を縮小することにより、全文検索の高速化を図ることができる。また、検索速度の高速化のために付加する全文検索のための出現マップは数％以下であるため、全文検索のための出現マップの生成は、ファイル圧縮時間相当の短時間でおこなうことができる。また、英数字や仮名・カタカナなどの表音文字データが混在していても、圧縮効率と全文検索速度を改善することができる。
【０１９７】
また、文字出現頻度管理データにより、検索キーワードの文字を含まない検索対象ファイルのオープンを省くことができ、全文検索時のオープン・クローズ時間の削減、および文字列の比較領域の縮小による全文検索速度の高速化を図ることができる。具体的には、本文ファイル容量の数％の文字出現頻度管理データにより、検索対象ファイルのオープンと文字列比較を抑えることができ、数倍（表音文字２文字の検索）〜数百倍（漢字３文字の検索）の高速化を図ることができる。特に検索キーワードの文字数が多ければ多いほど、検索キーワードの文字を含まない検索対象ファイル数が増大して、そのオープンを省くことができるため、全文検索時のオープン・クローズ時間の削減、および文字列の比較領域の縮小による全文検索速度の高速化を図ることができる。
【０１９８】
また、ミニＳＤやＨＤに格納される出現マップ９０４を、特殊なハフマン木を用いて効率的に圧縮する。この特殊なハフマン木には、４ビット系の通常のハフマン木にさらに４ビットバウンダリのＮＵＬＬ連続記号列が追加されているため、携帯電話機などのモバイル端末に実装される低速ＣＰＵや少メモリにおいて、高速な圧縮／伸長を実現することができる。
【０１９９】
また、文字データごとの出現率を圧縮パラメータとすることにより、出現率に応じたハフマン木を選択することができる。すなわち、出現率が低いほど特殊記号列が長い特殊なハフマン木を選択することができる。一方、出現率が高いほど特殊なハフマン木よりも通常のハフマン木を選択することができる。したがって、出現マップ９０４の圧縮効率の向上を図ることができる。
【０２００】
さらに、圧縮効率の悪い分割領域については、ハフマン木を割り振らず非圧縮とすることにより、無駄な圧縮処理を防止することができ、圧縮速度の高速化を図ることができる。また、分割領域を出現確率５０％を境界として対称とすることにより、ハフマン木の容量を半減することができる。したがって、省メモリ化を実現することができる。
【０２０１】
［実施の形態２］
つぎに、実施の形態２について説明する。実施の形態１では、文字データごとの出現率を圧縮パラメータとすることにより、出現率に応じたハフマン木を選択することとした。実施の形態２では、図１６−１に示した出現率に応じた領域分割を見直し、文字出現頻度管理データ２３０内の出現マップ９０４の圧縮率のさらなる向上を実現する。すなわち、出現マップ９０４においては、文字の存否をあらわすビットの値が「１」であるケースはまれで、ほとんどが「０」である。実施の形態２では、実施の形態１と同様、０が大多数を示すビット列を含む出現マップ９０４を効率よく圧縮する。
【０２０２】
（領域分割の見直し）
図２７は、分割領域の見直しを示す図表である。実施の形態１では、厳密には、Ａ領域〜Ｉ領域まで存在する。Ｈ領域内の出現率となる文字が最も多いため、アクセス頻度も高くなる。したがって、Ｈ領域に存在する文字の出現ビット列の圧縮率が改善されると、高圧縮を図ることができる。したがって、実施の形態２では、実施の形態１のＢ，Ｃ領域を統合してあらたなＢ領域、Ｄ，Ｅ領域を統合してあらたなＣ領域、Ｆ，Ｇ領域を統合してあらたなＤ領域、Ｈ，Ｉ領域を統合してあらたなＥ領域とする。これにより、図１６−２に示した出現マップ９０４の領域フィールドも、あらたな領域とする。
【０２０３】
また、実施の形態２では、Ｂ領域では葉が１６種類のハフマン木（通常のハフマン木）、Ｃ領域では葉が１６＋１種類（１６個連続する０）の特殊ハフマン木、Ｄ領域では葉が１６＋２種類（１６個連続する０と６４個連続する０）の特殊ハフマン木、Ｅ領域では葉が１６+３種類（１６個連続する０と６４個連続する０と２５６個連続する０）の特殊ハフマン木となる。
【０２０４】
図２８は、１検索対象ファイル内における文字データの出現確率を示す説明図である。図２８において、縦軸は、１検索対象ファイル内における文字データの出現確率を示しており、上が出現確率０％、下が出現確率１００％である。この出現確率の範囲０〜１００％を対数的に分割する。すなわち、確率が等しくなるように領域の上下２分割を繰り返すことにより、出現率の範囲を区画する分割領域が形成される。なお、左側が、実施の形態１相当の出現確率を示す分割領域群であり、右側が実施の形態２の出現確率を示す分割領域群である。
【０２０５】
この分割により、実施の形態２（図２８中、右側）では、出現率をｒとすると、０≦ｒ＜１／２５６がＥ領域、１／２５６≦ｒ＜１／６４がＤ領域、１／６４≦ｒ＜１／１６がＣ領域、１／１６≦ｒ＜１／４がＢ領域、１／４≦ｒ＜１／２がＡ領域、１／２≦ｒ＜３／４がＡ’領域、３／４≦ｒ＜１５／１６がＢ’領域、１５／１６≦ｒ＜６３／６４がＣ’領域、６３／６４≦ｒ＜２５５／２５６がＤ’領域、２５５／２５６≦ｒ≦１がＥ’領域となる。
【０２０６】
なお、同一アルファベットを付した領域の出現率は同一である。すなわち、出現確率５０％を境界として領域幅と出現確率が上下対称となっている。たとえば、Ａ領域およびＡ’領域の出現率はともに１／４である。なお、ある辞書コンテンツの１文字の平均出現率は、０．０７７であることがわかっているため、領域Ｃに属することとなる。
【０２０７】
また、実施の形態２におけるＡ’領域〜Ｅ’領域も実施の形態１と同様、Ａ領域〜Ｅ領域に対して０と１が反転する。以降、実施の形態２では、Ａ領域〜Ｅ領域についてのみハフマン木とその圧縮伸長処理について説明するが、Ａ’領域〜Ｅ’領域は、０と１が反転されたものとして読み替える。また、以降、特に断りがない限り、本実施の形態２において、Ａ領域（Ａ’領域），…，Ｅ領域（Ｅ’領域）と表記した場合は、実施の形態２における分割領域を示すものとする。
【０２０８】
（分割領域のハフマン木の基本構成）
つぎに、各分割領域Ｂ〜Ｅにおけるハフマン木の基本構成について説明する。本実施の形態２では、特殊ハフマン木として、実施の形態１で示した２分枝のハフマン木ではなく、２n分枝（ｎ＝２，３，…）のハフマン木を用いる。実施の形態１は、ｎ＝１のハフマン木である。実施の形態２では一例として、ｎ＝４、すなわち、１６分枝ハフマン木を用いて説明する。
【０２０９】
１６分枝ハフマン木は、根から１６本の枝に分岐して直接、葉にポイントする構造である。葉となる伸長コードは「００００」〜「１１１１」までの１６種類存在するが、単純に枝ごとに割り振るのではなく、伸長コードの出現率に応じて割り振る点が特徴的である。すなわち、根から出る１６本の枝のうち、２本は節点をポイントすることとし、この２個の節点がさらに１６本の枝により１６個の葉をポイントする構造とする。以下、分割領域ごとに説明する。まず、Ｂ領域について説明する。
【０２１０】
図２９−１は、Ｂ領域における伸長コードとハフマン木の枝との関係を示す図表である。図２９−１では、伸長コードの種別ごとに、個数、出現率、補正（補正後の出現率）、圧縮符号長、枝との関係を示している。補正後の出現率が高いほど圧縮符号長が短くなるように設定する。本例では、伸長コード「００００」は補正後の出現率５０％であるため、圧縮符号長が「１」となる。また、枝との関係は、補正後の出現率に応じて決められる。伸長コード「００００」は補正後の出現率５０％であるため、根からの１６本の枝のうち５０％に相当する８本の枝を専有する。
【０２１１】
「１」が１個の「０００１」、「００１０」、「０１００」、「１０００」の４種の伸長コードは、根からの１６本の枝のうち２５％に相当する４本の枝を専有する。４種類の伸長コードで４本の枝を専有するため、個々の伸長コードでは、１個の枝を専有することとなる。
【０２１２】
また、「１」が２個の「００１１」、…、「１１００」の６種の伸長コードは、根からの１６本の枝のうち１０％に相当する１本の枝を専有する。伸長コードが６種に対して根からの枝が１本なので、節点を介して葉にポイントする。「１」が３個の「０１１１」」、…、「１１１０」の４種の伸長コード、「１」が４個の伸長コード「１１１１」は、さらに出現率が低いため、節点を介して葉にポイントする。
【０２１３】
図２９−２は、Ｂ領域におけるハフマン木を示す説明図である。図２９−２中、Ｂ領域ハフマン木２９００において、○図形は、節点（根または内部節点）をあらわしており、□図形は、葉をあらわしている。○図形内に「根」の文字がある図形は、根をあらわしている。また、○図形および□図形内の文字０〜Ｆ（１６進表記）は、葉／節点に固有の番号＃である。以降、葉については、Ｌ（＃）と表記し、内部節点（略して「節点」とする）については、Ｎ（＃）と表記する。また、根から直接ポイントされる葉や節点は、Ｌ（＃）やＮ（＃）となり、節点を介してポイントされる葉は、Ｌ（＃＃）とする。以降の他の図の説明においても同様である。
【０２１４】
Ｂ領域ハフマン木２９００では、根から直接ポイントされる葉Ｌ（０）〜Ｌ（７）に伸長コード「００００」が割り当てられる。また、葉Ｌ（８）、Ｌ（９）は空き領域である。また、葉Ｌ（Ａ）には伸長コード「０００１」、葉Ｌ（Ｂ）には伸長コード「００１０」、葉Ｌ（Ｃ）には伸長コード「０１００」、葉Ｌ（Ｄ）には伸長コード「１０００」が割り当てられる。
【０２１５】
また、Ｂ領域ハフマン木２９００では、節点Ｎ（Ｅ）からポイントされる葉Ｌ（Ｅ０）〜Ｌ（Ｅ３）に伸長コード「００１１」、葉Ｌ（Ｅ４）〜Ｌ（Ｅ７）に伸長コード「０１０１」、葉Ｌ（Ｅ８）〜Ｌ（ＥＢ）に伸長コード「０１１０」、葉Ｌ（ＥＣ）〜Ｌ（ＥＦ）に伸長コード「１００１」が割り当てられる。
【０２１６】
また、Ｂ領域ハフマン木２９００では、節点Ｎ（Ｆ）からポイントされる葉Ｌ（Ｆ０）〜Ｌ（Ｆ３）に伸長コード「１０１０」、葉Ｌ（Ｆ４）〜Ｌ（Ｆ７）に伸長コード「１１００」、葉Ｌ（Ｆ８）に伸長コード「０１１１」、葉Ｌ（Ｆ９）に伸長コード「１０１１」、葉Ｌ（ＦＡ）に伸長コード「１１０１」、葉Ｌ（ＦＢ）に伸長コード「１１１０」、葉Ｌ（ＦＣ）に伸長コード「１１１１」が割り当てられる。なお、葉Ｌ（ＦＤ）〜葉Ｌ（ＦＦ）は空き領域である。
【０２１７】
図２９−３は、Ｂ領域ハフマン木２９００における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。伸長コード／圧縮符号テーブル２９０１において、伸長コード「００００」の圧縮符号は「０」である。伸長コード「００００」は、最も出現確率が高いため（図２９−１を参照）、８個の葉の番号０〜７（１６進表記。２進表記では、００００〜０１１１）が割り当てられている。この８個の葉の番号は、先頭の記号「０」が圧縮符号「０」であり、後続の記号列「００１」〜「１１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「００００」〜「０１１１」が抽出された場合、いずれの圧縮符号列「００００」〜「０１１１」も伸長コード「００００」に変換される。なお、圧縮符号列の下位３桁「００１」〜「１１１」は、再度伸長対象となる。
【０２１８】
また、伸長コード「０００１」などのように、出現確率が低い伸長コードは、葉の番号と一対一対応である。すなわち、葉の番号は１つのみ割り当てられる。したがって、伸長する際に、当該伸長コードと一対一対応の葉の番号が圧縮符号列から抽出された場合に、当該伸長コードに変換されることとなる。
【０２１９】
このように、伸長コード／圧縮符号テーブル２９０１では、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた伸長コード（「０００１」，「００１０」など）と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ伸長コード（「００００」，「００００…０」（１６個の０），００１１など）が存在することとなる。すなわち、出現率の高い伸長コードほどハフマン木の葉を多く、かつ、上位ビットに圧縮符号を含むように複数の葉の番号が割り当てられるように設定したため、圧縮処理や伸長処理の効率化を図ることができる。つぎに、Ｃ領域について説明する。
【０２２０】
図３０−１は、Ｃ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。図３０−１の図表は、図２９−１の図表に、伸長コード「００００…０」（１６個の０）に関するフィールドが追加された図表である。伸長コード「００００…０」（１６個の０）については、補正後の出現率約１３％であるため、根からの１６本の枝のうち、１２．５％に相当する２本の枝を専有する。
【０２２１】
図３０−２は、Ｃ領域におけるハフマン木を示す説明図である。Ｃ領域ハフマン木３０００は、Ｂ領域ハフマン木２９００において空き領域であった葉Ｌ（８）、Ｌ（９）に伸長コード「００００…０」（１６個の０）が割り当てられる。
【０２２２】
図３０−３は、Ｃ領域ハフマン木３０００における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。伸長コード／圧縮符号テーブル３００１において、伸長コード「００００」の圧縮符号は「０」である。伸長コード「００００」は、最も出現確率が高いため（図３０−１を参照）、８個の葉の番号０〜７（１６進表記。２進表記では、００００〜０１１１）が割り当てられている。この８個の葉の番号は、先頭の記号「０」が圧縮符号「０」であり、後続の記号列「００１」〜「１１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「００００」〜「０１１１」が抽出された場合、いずれの圧縮符号列「００００」〜「０１１１」も伸長コード「００００」に変換される。なお、圧縮符号列の下位３桁「００１」〜「１１１」は、再度伸長対象となる。
【０２２３】
同様に、伸長コード「００００…０」（１６個の０）の圧縮符号は「１００」である。伸長コード「００００…０」（１６個の０）も出現確率が高いため（図３０−１を参照）、２個の葉の番号８，９（１６進表記。２進表記では、１０００〜１００１）が割り当てられている。この２個の葉の番号は、先頭からの記号列「１００」が圧縮符号「１００」であり、後続の記号「０」，「１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「１０００」または「１００１」が抽出された場合、いずれの圧縮符号列「１０００」，「１００１」も伸長コード「００００…０」（１６個の０）に変換される。なお、圧縮符号列の下位１桁「０」，「１」は、再度伸長対象となる。
【０２２４】
また、伸長コード「０００１」などのように、出現確率が低い伸長コードは、葉の番号と一対一対応である。すなわち、葉の番号は１つのみ割り当てられる。したがって、伸長する際に、当該伸長コードと一対一対応の葉の番号が圧縮符号列から抽出された場合に、当該伸長コードに変換されることとなる。
【０２２５】
このように、伸長コード／圧縮符号テーブル３００１では、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた伸長コード（「０００１」，「００１０」など）と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ伸長コード（「００００」，「００００…０」（１６個の０），００１１など）が存在することとなる。すなわち、出現率の高い伸長コードほどハフマン木の葉を多く、かつ、上位ビットに圧縮符号を含むように複数の葉の番号が割り当てられるように設定したため、圧縮処理や伸長処理の効率化を図ることができる。つぎに、Ｄ領域について説明する。
【０２２６】
図３１−１は、Ｄ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。Ｄ領域では、さらに、伸長コード「００００…０」（６４個の０）が葉として追加される。Ｄ領域では、各伸長コードの出現率がＢ領域やＣ領域と異なるため、割りあたる枝や本数も異なる。
【０２２７】
図３１−２は、Ｄ領域におけるハフマン木を示す説明図である。Ｄ領域ハフマン木３１００は、図３１−１の枝との関係にしたがって構成される。Ｄ領域ハフマン木３１００では、根から直接ポイントされる葉Ｌ（０）〜Ｌ（７）に伸長コード「００００」が割り当てられる。また、葉Ｌ（８）〜Ｌ（Ｂ）に伸長コード「００００…０」（１６個の０）が割り当てられる。また、葉Ｌ（Ｃ）およびＬ（Ｄ）には伸長コード「００００…０」（６４個の０）が割り当てられる。
【０２２８】
また、Ｄ領域ハフマン木３１００では、節点Ｎ（Ｅ）からポイントされる葉Ｌ（Ｅ０）〜Ｌ（Ｅ３）に伸長コード「０００１」、葉Ｌ（Ｅ４）〜Ｌ（Ｅ７）に伸長コード「００１０」、葉Ｌ（Ｅ８）〜Ｌ（ＥＢ）に伸長コード「０１００」、葉Ｌ（ＥＣ）〜Ｌ（ＥＦ）に伸長コード「１０００」が割り当てられる。
【０２２９】
また、Ｄ領域ハフマン木３１００では、節点Ｎ（Ｆ）からポイントされる葉Ｌ（Ｆ０）に伸長コード「００１１」、葉Ｌ（Ｆ１）に伸長コード「０１０１」、葉Ｌ（Ｆ２）に伸長コード「０１１０」、葉Ｌ（Ｆ３）に伸長コード「１００１」、葉Ｌ（Ｆ４）に伸長コード「１０１０」、葉Ｌ（Ｆ５）に伸長コード「１１００」、葉Ｌ（Ｆ６）に伸長コード「０１１１」、葉Ｌ（Ｆ７）に伸長コード「１０１１」、葉Ｌ（Ｆ８）に伸長コード「１１０１」、葉Ｌ（Ｆ９）に伸長コード「１１１０」、葉Ｌ（ＦＡ）に伸長コード「１１１１」が割り当てられる。なお、葉Ｌ（ＦＢ）〜葉Ｌ（ＦＦ）は空き領域である。
【０２３０】
図３１−３は、Ｄ領域ハフマン木３１００における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブルを示す説明図である。伸長コード／圧縮符号テーブル３１０１において、伸長コード「００００」の圧縮符号は「０」である。伸長コード「００００」は、最も出現確率が高いため（図３１−１を参照）、８個の葉の番号０〜７（１６進表記。２進表記では、００００〜０１１１）が割り当てられている。この８個の葉の番号は、先頭の記号「０」が圧縮符号「０」であり、後続の記号列「００１」〜「１１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「００００」〜「０１１１」が抽出された場合、いずれの圧縮符号列「００００」〜「０１１１」も伸長コード「００００」に変換される。なお、圧縮符号列の下位３桁「００１」〜「１１１」は、再度伸長対象となる。
【０２３１】
同様に、伸長コード「００００…０」（１６個の０）の圧縮符号は「１０」である。伸長コード「００００…０」（１６個の０）も出現確率が高いため（図３１−１を参照）、４個の葉の番号８〜Ｂ（１６進表記。２進表記では、１０００〜１０１１）が割り当てられている。この４個の葉の番号は、先頭からの記号列「１０」が圧縮符号「１０」であり、後続の記号「００」〜「１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「１０００」〜「１０１１」が抽出された場合、いずれの圧縮符号列「１０００」〜「１０１１」も伸長コード「００００…０」（１６個の０）に変換される。なお、圧縮符号列の下位２桁「００」〜「１１」は、再度伸長対象となる。
【０２３２】
また、伸長コード「００１１」などのように、出現確率が低い伸長コードは、葉の番号と一対一対応である。すなわち、葉の番号は１つのみ割り当てられる。したがって、伸長する際に、当該伸長コードと一対一対応の葉の番号が圧縮符号列から抽出された場合に、当該伸長コードに変換されることとなる。
【０２３３】
このように、伸長コード／圧縮符号テーブル３１０１では、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた伸長コード（「００１１」，「０１０１」など）と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ伸長コード（「００００」，「００００…０」（１６個の０），「００００…０」（６４個の０），００１１など）が存在することとなる。すなわち、出現率の高い伸長コードほどハフマン木の葉を多く、かつ、上位ビットに圧縮符号を含むように複数の葉の番号が割り当てられるように設定したため、圧縮処理や伸長処理の効率化を図ることができる。つぎに、Ｅ領域について説明する。
【０２３４】
図３２−１は、Ｅ領域における伸長コードと特殊ハフマン木の枝との関係を示す図表である。Ｅ領域では、さらに、伸長コード「００００…０」（２５６個の０）が葉として追加される。Ｅ領域では、各伸長コードの出現率がＢ領域〜Ｄ領域と異なるため、割りあたる枝や本数も異なる。
【０２３５】
図３２−２は、Ｅ領域におけるハフマン木を示す説明図である。Ｅ領域ハフマン木３２００は、図３２−１の枝との関係にしたがって構成される。Ｅ領域ハフマン木３２００では、根から直接ポイントされる葉Ｌ（０）〜Ｌ（７）に伸長コード「００００」が割り当てられる。また、葉Ｌ（８）〜Ｌ（Ｂ）に伸長コード「００００…０」（１６個の０）が割り当てられる。また、葉Ｌ（Ｃ）およびＬ（Ｄ）には伸長コード「００００…０」（６４個の０）が割り当てられる。また、葉Ｌ（Ｅ）には伸長コード「００００…０」（２５６個の０）が割り当てられる。
【０２３６】
また、Ｅ領域ハフマン木３２００では、節点Ｎ（Ｆ）からポイントされる葉Ｌ（Ｆ０）に伸長コード「０００１」、葉Ｌ（Ｆ１）に伸長コード「００１０」、葉Ｌ（Ｆ２）に伸長コード「０１００」、葉Ｌ（Ｆ３）に伸長コード「１０００」、葉Ｌ（Ｆ４）に伸長コード「００１１」、葉Ｌ（Ｆ５）に伸長コード「０１０１」、葉Ｌ（Ｆ６）に伸長コード「０１１０」、葉Ｌ（Ｆ７）に伸長コード「１００１」、葉Ｌ（Ｆ８）に伸長コード「１０１０」、葉Ｌ（Ｆ９）に伸長コード「１１００」、葉Ｌ（ＦＡ）に伸長コード「０１１１」、葉Ｌ（ＦＢ）に伸長コード「１０１１」、葉Ｌ（ＦＣ）に伸長コード「１１０１」、葉Ｌ（ＦＤ）に伸長コード「１１１０」、葉Ｌ（ＦＥ）に伸長コード「１１１１」が割り当てられる。なお、葉Ｌ（ＦＦ）は空き領域である。
【０２３７】
図３２−３は、Ｅ領域ハフマン木３２００における伸長コードと圧縮符号と葉の番号の対応関係を示す伸長コード／圧縮符号テーブル３２０１を示す説明図である。伸長コード／圧縮符号テーブル３２０１において、伸長コード「００００」の圧縮符号は「０」である。伸長コード「００００」は、最も出現確率が高いため（図３１−１を参照）、８個の葉の番号０〜７（１６進表記。２進表記では、００００〜０１１１）が割り当てられている。この８個の葉の番号は、先頭の記号「０」が圧縮符号「０」であり、後続の記号列「００１」〜「１１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「００００」〜「０１１１」が抽出された場合、いずれの圧縮符号列「００００」〜「０１１１」も伸長コード「００００」に変換される。なお、圧縮符号列の下位３桁「００１」〜「１１１」は、再度伸長対象となる。
【０２３８】
同様に、伸長コード「００００…０」（１６個の０）の圧縮符号は「１０」である。伸長コード「００００…０」（１６個の０）も出現確率が高いため（図３１−１を参照）、４個の葉の番号８〜Ｂ（１６進表記。２進表記では、１０００〜１０１１）が割り当てられている。この４個の葉の番号は、先頭からの記号列「１０」が圧縮符号「１０」であり、後続の記号「００」〜「１１」は固有の記号列となる。これにより、伸長する際に、圧縮符号列「１０００」〜「１０１１」が抽出された場合、いずれの圧縮符号列「１０００」〜「１０１１」も伸長コード「００００…０」（１６個の０）に変換される。なお、圧縮符号列の下位２桁「００」〜「１１」は、再度伸長対象となる。
【０２３９】
また、伸長コード「００００…０」（２５６個の０），「０００１」などのように、出現確率が低い伸長コードは、葉の番号と一対一対応である。すなわち、葉の番号は１つのみ割り当てられる。したがって、伸長する際に、当該伸長コードと一対一対応の葉の番号が圧縮符号列から抽出された場合に、当該伸長コードに変換されることとなる。
【０２４０】
このように、伸長コード／圧縮符号テーブル３２０１では、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた伸長コード（「００００…０」（２５６個の０），「０００１」など）と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ伸長コード（「００００」，「００００…０」（１６個の０），「００００…０」（６４個の０））が存在することとなる。すなわち、出現率の高い伸長コードほどハフマン木の葉を多く、かつ、上位ビットに圧縮符号を含むように複数の葉の番号が割り当てられるように設定したため、圧縮処理や伸長処理の効率化を図ることができる。
【０２４１】
（ハフマン木の圧縮用の構造体）
上述したＢ領域ハフマン木〜Ｅ領域ハフマン木２９００〜３２００は、それぞれ圧縮用の構造体と伸長用の構造体を持つ。まずは、分割領域ごとに圧縮用の構造体について説明する。圧縮用の構造体は圧縮時に使用される。圧縮用の構造体の基本構成は、ヘッダ領域と葉の領域である。
【０２４２】
図３３は、Ｂ領域ハフマン木２９００の圧縮用の構造体を示す説明図である。Ｂ領域ハフマン木２９００の圧縮用の構造体（以下、「Ｂ領域圧縮用構造体」と略す。）３３００は、ヘッダ領域３３０１と葉の領域３３０２を有する。ヘッダ領域３３０１には、分割領域ＩＤ（＝Ｂ）が格納されている。葉の領域３３０２には、図２９−３に示した伸長コード／圧縮符号テーブル２９０１が格納されている。
【０２４３】
図３４は、Ｃ領域ハフマン木３０００の圧縮用の構造体を示す説明図である。Ｃ領域ハフマン木３０００の圧縮用の構造体（以下、「Ｃ領域圧縮用構造体」と略す。）３４００は、ヘッダ領域３４０１と葉の第１領域３４０２と葉の第２領域３４０３を有する。ヘッダ領域３４０１には、分割領域ＩＤ（＝Ｃ）が格納されている。
【０２４４】
葉の第１領域３４０２には、図３０−３に示した伸長コード／圧縮符号テーブル３００１のうち、伸長コード「００００」〜「１１１１」とその圧縮符号長および圧縮符号からなる部分テーブル３４１１が格納されている。葉の第２領域３４０３には、図３０−３に示した伸長コード／圧縮符号テーブル３００１のうち、伸長コード「００００…０」（１６個の０）とその圧縮符号長および圧縮符号からなる部分テーブル３４１２が格納されている。
【０２４５】
図３５は、Ｄ領域ハフマン木３１００の圧縮用の構造体を示す説明図である。Ｄ領域ハフマン木３１００の圧縮用の構造体（以下、「Ｄ領域圧縮用構造体」と略す。）３５００は、ヘッダ領域３５０１と葉の第１領域３５０２と葉の第２領域３５０３を有する。ヘッダ領域３５０１には、分割領域ＩＤ（＝Ｄ）が格納されている。
【０２４６】
葉の第１領域３５０２には、図３１−３に示した伸長コード／圧縮符号テーブル３１０１のうち、伸長コード「００００」〜「１１１１」とその圧縮符号長および圧縮符号からなる部分テーブル３５１１が格納されている。葉の第２領域３５０３には、図３１−３に示した伸長コード／圧縮符号テーブル３１０１のうち、伸長コード「００００…０」（１６個の０）とその圧縮符号長および圧縮符号と伸長コード「００００…０」（６４個の０）とその圧縮符号長および圧縮符号とからなる部分テーブル３５１２が格納されている。
【０２４７】
図３６は、Ｅ領域ハフマン木３２００の圧縮用の構造体を示す説明図である。Ｅ領域ハフマン木３２００の圧縮用の構造体（以下、「Ｅ領域圧縮用構造体」と略す。）３６００は、ヘッダ領域３６０１と葉の第１領域３６０２と葉の第２領域３６０３を有する。ヘッダ領域３６０１には、分割領域ＩＤ（＝Ｅ）が格納されている。
【０２４８】
葉の第１領域３６０２には、図３２−３に示した伸長コード／圧縮符号テーブル３２０１のうち、伸長コード「００００」〜「１１１１」とその圧縮符号長および圧縮符号からなる部分テーブル３６１１が格納されている。葉の第２領域３６０３には、図３２−３に示した伸長コード／圧縮符号テーブル３２０１のうち、伸長コード「００００…０」（１６個の０）とその圧縮符号長および圧縮符号と伸長コード「００００…０」（６４個の０）とその圧縮符号長および圧縮符号と伸長コード「００００…０」（２５６個の０）とその圧縮符号長および圧縮符号とからなる部分テーブル３６１２が格納されている。
【０２４９】
（ハフマン木の伸長用の構造体）
つぎに、伸長用の構造体について説明する。伸長用の構造体は伸長時に使用される。伸長用の構造体の基本構成は、ヘッダ領域、根領域、節点領域、葉の領域である。
【０２５０】
図３７−１は、Ｂ領域ハフマン木２９００の伸長用の構造体を示す説明図である。Ｂ領域ハフマン木２９００の伸長用の構造体（以下、「Ｂ領域伸長用構造体」と略す。）３７００は、ヘッダ領域３７０１と根領域３７０２と第１節点領域３７０３と第２節点領域３７０４と葉の領域３７０５を有する。ヘッダ領域３７０１には、分割領域ＩＤ（＝Ｂ）が格納されている。
【０２５１】
図３７−２は、Ｂ領域伸長用構造体３７００の根領域３７０２の記憶内容を示す説明図である。根領域３７０２には、節点／葉識別フラグと、節点サイズと、葉／節点の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。根であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、根）からの枝の本数をあらわす。
【０２５２】
図３７−３は、Ｂ領域伸長用構造体３７００の第１節点領域３７０３の記憶内容を示す説明図である。第１節点領域３７０３には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｅ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｅ））からの枝の本数をあらわす。
【０２５３】
図３７−４は、Ｂ領域伸長用構造体３７００の第２節点領域３７０４の記憶内容を示す説明図である。第２節点領域３７０４には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｆ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｆ））からの枝の本数をあらわす。
【０２５４】
図３７−５は、Ｂ領域伸長用構造体３７００の葉の領域３７０５の記憶内容を示す説明図である。葉の領域３７０５には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。
【０２５５】
図３８−１は、Ｃ領域ハフマン木３０００の伸長用の構造体を示す説明図である。Ｃ領域ハフマン木３０００の伸長用の構造体（以下、「Ｃ領域伸長用構造体」と略す。）３８００は、ヘッダ領域３８０１と根領域３８０２と第１節点領域３８０３と第２節点領域３８０４と葉の第１領域３８０５と葉の第２領域３８０６を有する。ヘッダ領域３８０１には、分割領域ＩＤ（＝Ｃ）が格納されている。
【０２５６】
図３８−２は、Ｃ領域伸長用構造体３８００の根領域３８０２の記憶内容を示す説明図である。根領域３８０２には、節点／葉識別フラグと、節点サイズと、葉／節点の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。根であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、根）からの枝の本数をあらわす。
【０２５７】
図３８−３は、Ｃ領域伸長用構造体３８００の第１節点領域３８０３の記憶内容を示す説明図である。第１節点領域３８０３には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｅ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｅ））からの枝の本数をあらわす。
【０２５８】
図３８−４は、Ｃ領域伸長用構造体３８００の第２節点領域３８０４の記憶内容を示す説明図である。第２節点領域３８０４には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｆ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｆ））からの枝の本数をあらわす。
【０２５９】
図３８−５は、Ｃ領域伸長用構造体３８００の葉の第１領域３８０５の記憶内容を示す説明図である。葉の第１領域３８０５には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第１領域３８０５なので、葉種別フラグは「０」である。
【０２６０】
図３８−６は、Ｃ領域伸長用構造体３８００の葉の第２領域３８０６の記憶内容を示す説明図である。第２領域３８０６には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第２領域３８０６なので、葉種別フラグは「１」である。
【０２６１】
図３９−１は、Ｄ領域ハフマン木３１００の伸長用の構造体を示す説明図である。Ｄ領域ハフマン木３１００の伸長用の構造体（以下、「Ｄ領域伸長用構造体」と略す。）３９００は、ヘッダ領域３９０１と根領域３９０２と第１節点領域３９０３と第２節点領域３９０４と葉の第１領域３９０５と葉の第２領域３９０６を有する。ヘッダ領域３９０１には、分割領域ＩＤ（＝Ｄ）が格納されている。
【０２６２】
図３９−２は、Ｄ領域伸長用構造体３９００の根領域３９０２の記憶内容を示す説明図である。根領域３９０２には、節点／葉識別フラグと、節点サイズと、葉／節点の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。根であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、根）からの枝の本数をあらわす。
【０２６３】
図３９−３は、Ｄ領域伸長用構造体３９００の第１節点領域３９０３の記憶内容を示す説明図である。第１節点領域３９０３には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｅ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｅ））からの枝の本数をあらわす。
【０２６４】
図３９−４は、Ｄ領域伸長用構造体３９００の第２節点領域３９０４の記憶内容を示す説明図である。第２節点領域３９０４には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｆ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｆ））からの枝の本数をあらわす。
【０２６５】
図３９−５は、Ｄ領域伸長用構造体３９００の葉の第１領域３９０５の記憶内容を示す説明図である。葉の第１領域３９０５には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第１領域３９０５なので、葉種別フラグは「０」である。
【０２６６】
図３９−６は、Ｄ領域伸長用構造体３９００の葉の第２領域３９０６の記憶内容を示す説明図である。第２領域３９０６には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第２領域３９０６なので、葉種別フラグは「１」である。
【０２６７】
図４０−１は、Ｅ領域ハフマン木３２００の伸長用の構造体を示す説明図である。Ｅ領域ハフマン木３２００の伸長用の構造体（以下、「Ｅ領域伸長用構造体」と略す。）４０００は、ヘッダ領域４００１と根領域４００２と節点領域４００３と葉の第１領域４００４と葉の第２領域４００５を有する。ヘッダ領域４００１には、分割領域ＩＤ（＝Ｅ）が格納されている。
【０２６８】
図４０−２は、Ｅ領域伸長用構造体４０００の根領域４００２の記憶内容を示す説明図である。根領域４００２には、節点／葉識別フラグと、節点サイズと、葉／節点の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。根であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、根）からの枝の本数をあらわす。
【０２６９】
図４０−３は、Ｅ領域伸長用構造体４０００の節点領域４００３の記憶内容を示す説明図である。節点領域４００３には、節点／葉識別フラグと、節点サイズと、葉の番号ごとのポインタとが格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。節点Ｎ（Ｅ）であるため、節点／葉識別フラグは「０」である。節点サイズは、その節点（この場合は、節点Ｎ（Ｅ））からの枝の本数をあらわす。
【０２７０】
図４０−４は、Ｅ領域伸長用構造体４０００の葉の第１領域４００４の記憶内容を示す説明図である。葉の第１領域４００４には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第１領域４００４なので、葉種別フラグは「０」である。
【０２７１】
図４０−５は、Ｅ領域伸長用構造体４０００の葉の第２領域４００５の記憶内容を示す説明図である。第２領域４００５には、節点／葉識別フラグと、葉種別フラグと、葉の番号に応じた伸長コードと圧縮符号長が格納されている。節点／葉識別フラグは、この領域が節点の領域（＝０）であるか葉の領域（＝１）であるかを識別するフラグである。葉であるため、節点／葉識別フラグは「１」である。葉種別フラグは、その葉となる伸長コードが、「００００」〜「１１１１」の１６種の葉（＝０）であるか、「００００…０」（１６、６４、２５６個の０）の３種類の葉（＝１）であるかを識別するフラグである。葉の第２領域４００５なので、葉種別フラグは「１」である。
【０２７２】
（Ｂ領域の文字データに関する出現ビット列の圧縮）
つぎに、Ｂ領域の文字データに関する出現ビット列の圧縮について説明する。Ｂ領域の文字データであるため、図３３に示したＢ領域圧縮用構造体３３００にアクセスして圧縮することとなる。
【０２７３】
図４１は、Ｂ領域の文字データに関する出現ビット列の圧縮例を示す説明図である。本例では、圧縮対象の出現ビット列を「００００００１０００００００１１」とする。（Ａ）において、出現ビット列を３２ビットレジスタにセットする。ビットカウンタは、「０」にセットされている。そして、レジスタの末尾４ビットのみを取り出すため、マスクパターン「０ｘＦ０００００００」をセットして、マスク処理（論理積）をおこなう。
【０２７４】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）である伸長コード「００００」に対応する圧縮符号「０」を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出す。これにより、４ビットの伸長コード「００００」を１ビットの圧縮符号「０」に圧縮することができる。マスク処理結果（ＡＮＤ結果）である伸長コード「００００」は４ビットであるため、ビットカウンタの値を４（＝０＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列「００１０００００００１１」を、マスクパターン「０ｘＦ０００００００」でマスク処理（論理積）をおこなう。
【０２７５】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）である伸長コード「００１０」に対応する圧縮符号「１０１１」を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００１０」は４ビットであるため、ビットカウンタの値を８（＝４＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列「００００００１１」を、マスクパターン「０ｘＦ０００００００」でマスク処理（論理積）をおこなう。
【０２７６】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）である伸長コード「００００」に対応する圧縮符号「０」を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出す。これにより、４ビットの伸長コード「００００」を１ビットの圧縮符号「０」に圧縮することができる。マスク処理結果（ＡＮＤ結果）である伸長コード「００００」は４ビットであるため、ビットカウンタの値を１２（＝８＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列「００１１」を、マスクパターン「０ｘＦ０００００００」でマスク処理（論理積）をおこなう。
【０２７７】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）である伸長コード「００１１」に対応する圧縮符号「１０１０」を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００１１」は４ビットであるため、ビットカウンタの値を１６（＝１２＋４）にして、４ビットシフトする。この４ビットシフト後は、レジスタは空となるため、終了する。このように、圧縮対象の出現ビット列「１００１０００１００００００１１」を、（Ｂ）〜（Ｅ）から得られた圧縮符号列「０１０１１０１０１０」に圧縮することができる。
【０２７８】
（Ｃ領域の文字データに関する出現ビット列の圧縮）
つぎに、Ｃ領域の文字データに関する出現ビット列の圧縮について説明する。Ｃ領域の文字データであるため、図３４に示したＣ領域圧縮用構造体３４００にアクセスして圧縮することとなる。
【０２７９】
図４２は、Ｃ領域の文字データに関する出現ビット列の圧縮例を示す説明図である。本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。
【０２８０】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとする。この伸長コード「００００…０」（１６ビット連続０）に対応する圧縮符号「１００」を、Ｃ領域圧縮用構造体３４００の葉の第２領域３４１２から読み出す。これにより、伸長コード「００００…０」（１６ビット連続０）をたかだか３ビットの圧縮符号「１００」に圧縮することができる。マスク処理結果（ＡＮＤ結果）である伸長コード「００００…０」（１６ビット連続０）は１６ビットであるため、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。
【０２８１】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「１０１１」をそのまま伸長コードとする。この伸長コード「１０１１」に対応する圧縮符号「１１１１１００１」を、Ｃ領域圧縮用構造体３４００の葉の第１領域３４０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「１０１１」は４ビットであるため、ビットカウンタの値を２０（＝１６＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。
【０２８２】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「００１０」をそのまま伸長コードとする。この伸長コード「００１０」に対応する圧縮符号「１０１１」を、Ｃ領域圧縮用構造体３４００の葉の第１領域３４０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００１０」は４ビットであるため、ビットカウンタの値を２４（＝２０＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。
【０２８３】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「００００」をそのまま伸長コードとする。この伸長コード「００００」に対応する圧縮符号「０」を、Ｃ領域圧縮用構造体３４００の葉の第２領域３４０３から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００００」は４ビットであるため、ビットカウンタの値を２８（＝２４＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。
【０２８４】
（Ｆ）において、（Ｅ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「００１１」をそのまま伸長コードとする。この伸長コード「００１１」に対応する圧縮符号「１０１０」を、Ｃ領域圧縮用構造体３４００の葉の第１領域３４０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「００１１」は４ビットであるため、ビットカウンタの値を３２（＝２８＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。
【０２８５】
（Ｇ）において、（Ｆ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとする。この伸長コード「００００…０」（１６ビット連続０）に対応する圧縮符号「１００」を、Ｃ領域圧縮用構造体３４００の葉の第２領域３４０３から読み出す。これにより、伸長コード「００００…０」（１６ビット連続０）をたかだか３ビットの圧縮符号「１００」に圧縮することができる。マスク処理結果（ＡＮＤ結果）である伸長コード「００００…０」（１６ビット連続０）は１６ビットであるため、ビットカウンタの値を４８（＝３２＋１６）にして、１６ビットシフトする。この１６ビットシフト後は、レジスタは空となるため、終了する。このように、圧縮対象の出現ビット列を、（Ｂ）〜（Ｇ）から得られた圧縮符号列に圧縮することができる。
【０２８６】
（Ｄ領域の文字データに関する出現ビット列の圧縮）
つぎに、Ｄ領域の文字データに関する出現ビット列の圧縮について説明する。Ｄ領域の文字データであるため、図３５に示したＤ領域圧縮用構造体３５００にアクセスして圧縮することとなる。
【０２８７】
図４３は、Ｄ領域の文字データに関する出現ビット列の圧縮例（その１）を示す説明図である。本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタおよび連続カウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。
【０２８８】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１（＝０＋１）にする。
【０２８９】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を３２（＝１６＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を２（＝１＋１）にする。
【０２９０】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を４８（＝３２＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を３（＝２＋１）にする。
【０２９１】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を６４（＝４８＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を４（＝３＋１）にする。
【０２９２】
ここで、連続カウンタの値が「４」になったため、バッファには、「００００…０」（１６ビット連続０）が４つ、すなわち、「００００…０」（６４ビット連続０）が１つ保存されていることとなる。したがって、この「００００…０」（６４ビット連続０）を伸長コードとして、当該伸長コードに対応する圧縮符号「１１０」を、Ｄ領域圧縮用構造体３５００の葉の第２領域３５０３から読み出す。これにより、出現ビット列内の伸長コード「００００…０」（６４ビット連続０）をたかだか３ビットの圧縮符号「１１０」に圧縮することができる。
【０２９３】
図４４は、Ｄ領域の文字データに関する出現ビット列の圧縮例（その２）を示す説明図である。図４３に示した例は、伸長コード「００００…０」（６４ビット連続０）を３ビットの圧縮符号「１１０」に圧縮できた例であるが、本例では、伸長コード「００００…０」（６４ビット連続０）が得られなかった場合の圧縮例を示す。
【０２９４】
また、本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタおよび連続カウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。
【０２９５】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１（＝０＋１）にする。
【０２９６】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を３２（＝１６＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を２（＝１＋１）にする。
【０２９７】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を４８（＝３２＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を３（＝２＋１）にする。
【０２９８】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「１０１１」をそのまま伸長コードとする。この伸長コード「１０１１」に対応する圧縮符号「１１１１１００１」を、Ｄ領域圧縮用構造体３５００の葉の第１領域３５０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「１０１１」は４ビットであるため、ビットカウンタの値を５２（＝４８＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られなかったため、連続カウンタの値を０にリセットする。
【０２９９】
この連続カウンタのリセットにより、（Ｂ）〜（Ｄ）においてバッファに保持された各伸長コード「００００…０」（１６ビット連続０）に対応する圧縮符号「１１００」を、Ｄ領域圧縮用構造体３５００の葉の第２領域３５１２からそれぞれ読み出す。これにより、「００００…０」（６４ビット連続０）が出現しなかった場合でも、１６ビット単位で圧縮することができる。
【０３００】
（Ｅ領域の文字データに関する出現ビット列の圧縮）
つぎに、Ｅ領域の文字データに関する出現ビット列の圧縮について説明する。Ｅ領域の文字データであるため、図３６に示したＥ領域圧縮用構造体３６００にアクセスして圧縮することとなる。
【０３０１】
図４５は、Ｅ領域の文字データに関する出現ビット列の圧縮例（その１）を示す説明図である。本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタおよび連続カウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。
【０３０２】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１（＝０＋１）にする。
【０３０３】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を３２（＝１６＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を２（＝１＋１）にする。以降、同様の内容がビットカウンタの値２２４、連続カウンタの値１４まで繰り返されたものとする。
【０３０４】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を２４０（＝２２４＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１５（＝１４＋１）にする。
【０３０５】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を２５６（＝２４０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１６（＝１５＋１）にする。
【０３０６】
ここで、連続カウンタの値が「１６」になったため、バッファには、「００００…０」（１６ビット連続０）が１６個、すなわち、「００００…０」（２５６ビット連続０）が１つ保存されていることとなる。したがって、この「００００…０」（２５６ビット連続０）を伸長コードとして、当該伸長コードに対応する圧縮符号「１１１０」を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６０３から読み出す。これにより、出現ビット列内の伸長コード「００００…０」（２５６ビット連続０）をたかだか４ビットの圧縮符号「１１１０」に圧縮することができる。
【０３０７】
図４６は、Ｅ領域の文字データに関する出現ビット列の圧縮例（その２）を示す説明図である。図４５に示した例は、伸長コード「００００…０」（２５６ビット連続０）を３ビットの圧縮符号「１１１０」に圧縮できた例であるが、本例では、伸長コード「００００…０」（２５６ビット連続０）が得られなかった場合の圧縮例を示す。
【０３０８】
また、本例では、圧縮対象の出現ビット列は、（Ａ）に示したビット列とする。（Ａ）において、出現ビット列の先頭３２ビットを３２ビットレジスタにセットする。ビットカウンタおよび連続カウンタは、「０」にセットされている。そして、レジスタの末尾１６ビットのみを取り出すため、マスクパターン「０ｘＦＦＦＦ００００」をセットして、マスク処理（論理積）をおこなう。
【０３０９】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を１６（＝０＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を１（＝０＋１）にする。
【０３１０】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を３２（＝１６＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を２（＝１＋１）にする。
【０３１１】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を４８（＝３２＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を３（＝２＋１）にする。
【０３１２】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を６４（＝４８＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を４（＝３＋１）にする。
【０３１３】
（Ｆ）において、（Ｅ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）であるため、マスク処理結果（ＡＮＤ結果）である「００００…０」（１６ビット連続０）をそのまま伸長コードとしてバッファに一時的に保持する。そして、ビットカウンタの値を８０（＝６４＋１６）にして、１６ビットシフトする。この１６ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られたため、連続カウンタの値を５（＝４＋１）にする。
【０３１４】
（Ｇ）において、（Ｆ）におけるマスク処理結果（ＡＮＤ結果）が末尾から「００００…０」（１６ビット連続０）でないため、末尾４ビット分のマスク処理結果（ＡＮＤ結果）である「１０１１」をそのまま伸長コードとする。この伸長コード「１０１１」に対応する圧縮符号「１１１１１００１」を、Ｅ領域圧縮用構造体３６００の葉の第１領域３６０２から読み出す。マスク処理結果（ＡＮＤ結果）である伸長コード「１０１１」は４ビットであるため、ビットカウンタの値を８４（＝８０＋４）にして、４ビットシフトする。この４ビットシフト後の出現ビット列を、マスクパターン「０ｘＦＦＦＦ００００」でマスク処理（論理積）をおこなう。また、「００００…０」（１６ビット連続０）が得られなかったため、連続カウンタの値を０にリセットする。
【０３１５】
バッファには、「００００…０」（１６ビット連続０）が４つ、すなわち、「００００…０」（６４ビット連続０）が１つ保存されていることとなる。したがって、この連続カウンタのリセットにより、（Ｂ）〜（Ｅ）においてバッファに保持された「００００…０」（６４ビット連続０）を伸長コードとして、当該伸長コードに対応する圧縮符号「１１０」を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６１２から読み出す。これにより、出現ビット列内の伸長コード「００００…０」（６４ビット連続０）をたかだか３ビットの圧縮符号「１１０」に圧縮することができる。
【０３１６】
また、バッファには、（Ｆ）の処理により、「００００…０」（１６ビット連続０）が１つ保存されていることとなる。したがって、この連続カウンタのリセットにより、（Ｆ）においてバッファに保持された「００００…０」（１６ビット連続０）を伸長コードとして、当該伸長コードに対応する圧縮符号「１０」を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６１２から読み出す。これにより、出現ビット列内の伸長コード「００００…０」（１６ビット連続０）をたかだか２ビットの圧縮符号「１０」に圧縮することができる。
【０３１７】
（圧縮処理手順）
つぎに、実施の形態２における出現マップの圧縮処理手順について説明する。図４７は、Ｂ領域のハフマン圧縮処理手順を示すフローチャートである。このフローチャートでは、図２４−２におけるハフマン圧縮（ステップＳ２４７９）において、図４１に示したような圧縮処理を自動実行する。
【０３１８】
まず、レジスタに選択文字データの出現ビット列をセットして（ステップＳ４７０１）、レジスタが空か否かを判断する（ステップＳ４７０２）。レジスタが空でない場合（ステップＳ４７０２：Ｎｏ）、４ビット連続０記号列圧縮処理を実行し（ステップＳ４７０３）、ステップＳ４７０２に戻る。ステップＳ４７０２において、レジスタが空である場合（ステップＳ４７０２：Ｙｅｓ）、Ｂ領域のハフマン圧縮処理を終了し、ステップＳ２４７１に戻る。
【０３１９】
つぎに、４ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図４８は、４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、末尾４ビットのマスク処理により、４ビットの伸長コードを特定する（ステップＳ４８０１）。そして、特定された伸長コードに対応する圧縮符号を、Ｂ領域圧縮用構造体３３００の葉の領域３３０２から読み出すことで当該圧縮符号に変換する。（ステップＳ４８０２）。そして、ビットカウンタを４加算して、レジスタ内のビット列を４ビットシフトする（ステップＳ４８０３）。レジスタの空いた領域には後続のビット列が順次セットされる。そして、ステップＳ４７０２に戻る。
【０３２０】
つぎに、Ｃ領域のハフマン圧縮処理手順について説明する。図４９は、Ｃ領域のハフマン圧縮処理手順を示すフローチャートである。このフローチャートでは、図２４−２におけるハフマン圧縮（ステップＳ２４７９）において、図４２に示したような圧縮処理を自動実行する。まず、レジスタに選択文字データの出現ビット列をセットして（ステップＳ４９０１）、レジスタが空か否かを判断する（ステップＳ４９０２）。レジスタが空でない場合（ステップＳ４９０２：Ｎｏ）、１６ビット連続０記号列圧縮処理を実行する（ステップＳ４９０３）。
【０３２１】
そして、４ビット連続０記号列圧縮処理を実行し（ステップＳ４９０４）、ステップＳ４９０２に戻る。ステップＳ４９０２において、レジスタが空である場合（ステップＳ４９０２：Ｙｅｓ）、Ｃ領域のハフマン圧縮処理を終了し、ステップＳ２４７１に戻る。なお、４ビット連続０記号列圧縮処理（ステップＳ４９０４）は、図４８に示した処理手順となる。
【０３２２】
つぎに、１６ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図５０は、１６ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、末尾１６ビットのマスク処理をおこない（ステップＳ５００１）、末尾の１６ビットがすべて０であるか否かを判断する（ステップＳ５００２）。すべて０である場合（ステップＳ５００２：Ｙｅｓ）、「００００…０」（１６個の０）の伸長コードに対応する圧縮符号を、Ｃ領域圧縮用構造体３４００の葉の第２領域３４０３から読み出すことで当該圧縮符号に変換する。（ステップＳ５００３）。
【０３２３】
そして、ビットカウンタを１６ビット加算して、レジスタ内のビット列を１６ビットシフトする（ステップＳ５００４）。レジスタの空いた領域には後続のビット列が順次セットされる。そして、ステップＳ５００１に戻る。一方、ステップＳ５００２において、１６ビットすべて０でない場合（ステップＳ５００２：Ｎｏ）、ステップＳ４９０４に移行して、４ビット連続０記号列圧縮処理（ステップＳ４９０４）を実行する。
【０３２４】
つぎに、Ｄ領域のハフマン圧縮処理手順について説明する。図５１は、Ｄ領域のハフマン圧縮処理手順を示すフローチャートである。このフローチャートでは、図４３および図４４に示したような圧縮処理を自動実行する。まず、レジスタに選択文字データの出現ビット列をセットして（ステップＳ５１０１）、レジスタが空か否かを判断する（ステップＳ５１０２）。レジスタが空でない場合（ステップＳ５１０２：Ｎｏ）、６４ビット連続０記号列圧縮処理を実行して（ステップＳ５１０３）、ステップＳ５１０２に戻る。ステップＳ５１０２において、レジスタが空である場合（ステップＳ５１０２：Ｙｅｓ）、ステップＳ２４７１に戻る。
【０３２５】
つぎに、６４ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図５２は、６４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、末尾１６ビットのマスク処理をおこない（ステップＳ５２０１）、末尾の１６ビットがすべて０であるか否かを判断する（ステップＳ５２０２）。すべて０である場合（ステップＳ５２０２：Ｙｅｓ）、「００００…０」（１６個の０）の伸長コードをバッファに保持する（ステップＳ５２０３）。そして、ビットカウンタを１６加算して、レジスタ内のビット列を１６ビットシフトする（ステップＳ５２０４）。レジスタの空いた領域には後続のビット列が順次セットされる。また、連続カウンタを１加算する。
【０３２６】
そして、連続カウンタの値ＣａがＣａ＝４であるか否かを判断する（ステップＳ５２０５）。Ｃａ＝４である場合（ステップＳ５２０５：Ｙｅｓ）、バッファ内には、４個の「００００…０」（１６個の０）、すなわち、１個の「００００…０」（６４個の０）が保持されているため、この伸長コード「００００…０」（６４個の０）に対応する圧縮符号を、Ｄ領域圧縮用構造体３５００の葉の第２領域３５０３から読み出すことで当該圧縮符号に変換する。（ステップＳ５２０６）。このあと、連続カウンタの値Ｃａをリセット（Ｃａ＝０）して（ステップＳ５２０７）、ステップＳ５１０２に戻る。一方、ステップＳ５２０５において、Ｃａ＝４でない場合（ステップＳ５２０５：Ｎｏ）、ステップＳ５１０２に戻る。
【０３２７】
一方、ステップＳ５２０２において、末尾の１６ビットがすべて０でないと判断された場合（ステップＳ５２０２：Ｎｏ）、連続カウンタの値Ｃａをリセット（Ｃａ＝０）して（ステップＳ５２０８）、バッファ内の各「００００…０」（１６個の０）をそれぞれ伸長コードとする。そして、当該伸長コードに対応する圧縮符号を、Ｄ領域圧縮用構造体３５００の葉の第２領域３５０３から読み出すことで当該圧縮符号に変換する（ステップＳ５２０９）。そして、４ビット連続０記号列圧縮処理を実行して（ステップＳ５２１０）、ステップＳ５１０２に戻る。４ビット連続０記号列圧縮処理（ステップＳ５２１０）は、図４８に示した処理手順となる。
【０３２８】
つぎに、Ｅ領域のハフマン圧縮処理手順について説明する。図５３は、Ｅ領域のハフマン圧縮処理手順を示すフローチャートである。このフローチャートでは、図４５および図４６に示したような圧縮処理を自動実行する。まず、レジスタに選択文字データの出現ビット列をセットして（ステップＳ５３０１）、レジスタが空か否かを判断する（ステップＳ５３０２）。レジスタが空でない場合（ステップＳ５３０２：Ｎｏ）、２５６ビット連続０記号列圧縮処理を実行して（ステップＳ５３０３）、ステップＳ５３０２に戻る。ステップＳ５３０２において、レジスタが空である場合（ステップＳ５３０２：Ｙｅｓ）、ステップＳ２４７１に戻る。
【０３２９】
つぎに、２５６ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図５４は、２５６ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、末尾１６ビットのマスク処理をおこない（ステップＳ５４０１）、末尾の１６ビットがすべて０であるか否かを判断する（ステップＳ５４０２）。すべて０である場合（ステップＳ５４０２：Ｙｅｓ）、「００００…０」（１６個の０）の伸長コードをバッファに保持する（ステップＳ５４０３）。そして、ビットカウンタを１６加算して、レジスタ内のビット列を１６ビットシフトする（ステップＳ５４０４）。レジスタの空いた領域には後続のビット列が順次セットされる。また、連続カウンタを１加算する。
【０３３０】
そして、連続カウンタの値ＣａがＣａ＝１６であるか否かを判断する（ステップＳ５４０５）。Ｃａ＝１６である場合（ステップＳ５４０５：Ｙｅｓ）、バッファ内には、１６個の「００００…０」（１６個の０）、すなわち、１個の「００００…０」（２５６個の０）が保持されているため、この伸長コード「００００…０」（２５６個の０）に対応する圧縮符号を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６０３から読み出すことで当該圧縮符号に変換する（ステップＳ５４０６）。このあと、連続カウンタの値Ｃａをリセット（Ｃａ＝０）して（ステップＳ５４０７）、ステップＳ５３０２に戻る。一方、ステップＳ５４０５において、Ｃａ＝１６でない場合（ステップＳ５４０５：Ｎｏ）、ステップＳ５３０２に戻る。
【０３３１】
一方、ステップＳ５４０２において、末尾の１６ビットがすべて０でないと判断された場合（ステップＳ５４０２：Ｎｏ）、１６／６４ビット連続０記号列圧縮処理を実行する（ステップＳ５４０８）。このあと、４ビット連続０記号列圧縮処理を実行して（ステップＳ５４０９）、ステップＳ５４０２に戻る。４ビット連続０記号列圧縮処理（ステップＳ５４０９）は、図４８に示した処理手順となる。
【０３３２】
つぎに、１６／６４ビット連続０記号列圧縮処理の詳細な処理手順について説明する。図５５は、１６／６４ビット連続０記号列圧縮処理の詳細な処理手順を示すフローチャートである。まず、連続カウンタの値ＣａがＣａ≦３であるか否かを判断する（ステップＳ５５０１）。Ｃａ≦３でない場合（ステップＳ５５０１：Ｎｏ）、バッファ内の「００００…０」（６４個の０）を伸長コードとする。この場合、伸長コードは１〜３個得られる。
【０３３３】
この伸長コードに対応する圧縮符号を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６０３から読み出すことで当該圧縮符号に変換する（ステップＳ５５０２）。そして、伸長コードの個数Ｃｖを用いて、連続カウンタの値Ｃａを更新し（ステップＳ５５０３）、ステップＳ５５０４に移行する。
【０３３４】
一方、ステップＳ５５０１において、Ｃａ≦３である場合（ステップＳ５５０１：Ｙｅｓ）、ステップＳ５５０４に移行する。ステップＳ５５０４において、Ｃａ＝０であるか否かを判断する（ステップＳ５５０４）。Ｃａ＝０でない場合（ステップＳ５５０４：Ｎｏ）、バッファ内の「００００…０」（１６個の０）を伸長コードとする。この場合、伸長コードは１または２個得られる。
【０３３５】
この伸長コードに対応する圧縮符号を、Ｅ領域圧縮用構造体３６００の葉の第２領域３６１２から読み出すことで当該圧縮符号に変換する（ステップＳ５５０５）。そして、連続カウンタの値Ｃａをリセット（Ｃａ＝０）して（ステップＳ５５０６）、ステップＳ５４０９に戻る。一方、ステップＳ５５０４において、Ｃａ＝０である場合（ステップＳ５５０４：Ｙｅｓ）、ステップＳ５４０９に戻る。
【０３３６】
（文字データに関する出現ビット列の圧縮符号列の伸長）
つぎに、文字データに関する出現ビット列の圧縮符号列の伸長について説明する。伸長処理では、上述したＢ領域伸長用構造体３７００〜Ｅ領域伸長用構造体４０００を用いる。どの伸長用構造体を用いるかは、選択文字データの属する分割領域に依存する。
【０３３７】
図５６は、マスクパターンテーブル５６００を示す説明図である。マスクパターンは、伸長の際、圧縮符号列を特定するために用いられる。マスクパターンはビットアドレスの値０〜７に応じて使い分けられる。
【０３３８】
つぎに、圧縮符号列の伸長例について説明する。ここでは、例として、Ｃ領域の文字データに関する出現ビット列の圧縮符号列の伸長例について説明する。
【０３３９】
図５７は、Ｃ領域の文字データに関する出現ビット列の圧縮符号列の伸長例を示す説明図である。まず、（Ａ）において、圧縮符号列を３２ビットレジスタにセットする。初期状態なので、ビットカウンタ、バイトアドレス、ビットアドレスの値Ａｂｉはいずれも「０」である。
【０３４０】
ビットアドレスの値ＡｂｉがＡｂｉ＝０であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘＦ０００００００）をセットする。なお、バイトアドレスは、ビットカウンタの値を８で割ったときの商であり、ビットアドレスは、そのときの余りとなる。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘＦ０００００００）によりマスク処理（論理積）をおこなう。
【０３４１】
（Ｂ）において、（Ａ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１００１」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号９（＝１００１）が特定されることとなり、伸長コード「００００…０」（１６個の０）へのポインタが読み出されて、葉の第２領域３８０６をポイントする。これにより、葉の第２領域３８０６から伸長コード「００００…０」（１６個の０）が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「３」も読み出されるため、ビットカウンタを＋３とし、バイトアドレスおよびビットアドレスを計算する。
【０３４２】
ビットアドレスの値ＡｂｉがＡｂｉ＝３であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ１Ｅ００００００）をセットする。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘ１Ｅ００００００）によりマスク処理（論理積）をおこなう。
【０３４３】
（Ｃ）において、（Ｂ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１１１１」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、節点の番号Ｆ（＝１１１１）が特定されることとなり、節点Ｎ（Ｆ）へのポインタが読み出されて、第２節点領域３８０４をポイントする。このように葉ではなく節点をポイントした場合は、圧縮符号長が特定できないため、ビットカウンタを＋４とし、バイトアドレスおよびビットアドレスを計算する。
【０３４４】
ビットアドレスの値ＡｂｉがＡｂｉ＝７であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ０１Ｅ０００００）をセットする。そして、レジスタにセットされた圧縮符号列をマスクパターン（０ｘ０１Ｅ０００００）によりマスク処理（論理積）をおこなう。
【０３４５】
（Ｄ）において、（Ｃ）におけるマスク処理結果（ＡＮＤ結果）として４ビットコード「１００１」が得られる。（Ｃ）では、節点の番号Ｆ（＝１１１１）により第２節点領域３８０４がポイントされているため、葉の番号としてＦ９（＝１１１１１００１）が特定される。これにより、葉の番号Ｆ９に対応するポインタを、Ｃ領域伸長用構造体３８００の第２節点領域３８０４から読み出して、葉の第１領域３８０５をポイントする。これにより、葉の第１領域３８０５から伸長コード「１０１１」が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「８」も読み出されるが、（Ｃ）で加算した＋４を相殺するため、ビットカウンタを＋（８−４）とし、バイトアドレスおよびビットアドレスを計算する。
【０３４６】
バイトアドレスが＋１加算されたため、レジスタ内の圧縮符号列を８ビットシフトする。また、ビットアドレスの値ＡｂｉがＡｂｉ＝３であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ１Ｅ００００００）をセットする。そして、８ビットシフト後のレジスタにセットされた圧縮符号列について、マスクパターン（０ｘ１Ｅ００００００）によりマスク処理（論理積）をおこなう。
【０３４７】
（Ｅ）において、（Ｄ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１０１１」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号Ｂ（＝１０１１）が特定されることとなり、伸長コード「００１０」へのポインタが読み出されて、葉の第１領域３８０５をポイントする。これにより、葉の第１領域３８０５から伸長コード「００１０」が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「４」も読み出されるため、ビットカウンタを＋４とし、バイトアドレスおよびビットアドレスを計算する。
【０３４８】
ビットアドレスの値ＡｂｉがＡｂｉ＝７であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ０１Ｅ０００００）をセットする。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘ０１Ｅ０００００）によりマスク処理（論理積）をおこなう。
【０３４９】
（Ｆ）において、（Ｅ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「０１０１」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号５（＝０１０１）が特定されることとなり、伸長コード「００００」へのポインタが読み出されて、葉の第１領域３８０５をポイントする。これにより、葉の第１領域３８０５から伸長コード「００００」が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「１」も読み出されるため、ビットカウンタを＋１とし、バイトアドレスおよびビットアドレスを計算する。
【０３５０】
ビットアドレスの値ＡｂｉがＡｂｉ＝０であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘＦ０００００００）をセットする。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘＦ０００００００）によりマスク処理（論理積）をおこなう。
【０３５１】
（Ｇ）において、（Ｆ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１０１０」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号Ａ（＝１０１０）が特定されることとなり、伸長コード「０００１」へのポインタが読み出されて、葉の第１領域３８０５をポイントする。これにより、葉の第１領域３８０５から伸長コード「０００１」が読み出されることとなり、当該伸長コードに変換される。また、圧縮符号長「４」も読み出されるため、ビットカウンタを＋４とし、バイトアドレスおよびビットアドレスを計算する。
【０３５２】
ビットアドレスの値ＡｂｉがＡｂｉ＝４であるため、マスクパターンテーブル５６００を参照して、マスクパターン（０ｘ０Ｆ００００００）をセットする。そして、レジスタにセットされた圧縮符号列について、マスクパターン（０ｘ０Ｆ００００００）によりマスク処理（論理積）をおこなう。
【０３５３】
（Ｈ）において、レジスタ内の圧縮符号列が１ビット不足しているため、ダミーとして「０」（「１」でもよい）を追加する（図中、アンダーバーを用いて表記）。（Ｇ）におけるマスク処理結果（ＡＮＤ結果）である４ビットコード「１０００」に一致する葉／節点の番号を、Ｃ領域伸長用構造体３８００の根領域３８０２から特定する。この場合、葉の番号８（＝１０００）が特定されることとなり、伸長コード「００００…０」（１６個の０）へのポインタが読み出されて、葉の第２領域３８０６をポイントする。これにより、葉の第２領域３８０６から伸長コード「００００…０」（１６個の０）が読み出されることとなり、当該伸長コードに変換される。
【０３５４】
（伸長処理手順）
つぎに、実施の形態２における出現マップへの伸長処理手順について説明する。図５８および図５９は、実施の形態２における出現マップへの伸長処理手順を示すフローチャートである。このフローチャートでは、図２５−２におけるハフマン伸長（ステップＳ２５４５）において、図５７に示したような圧縮処理を自動実行する。
【０３５５】
なお、初期状態では、ビットカウンタ、バイトアドレス、ビットアドレスはいずれも「０」である。まず、レジスタに選択文字データの出現ビット列の圧縮符号列をセットして（ステップＳ５８０１）、マスクパターンテーブル５６００からビットアドレスに応じたマスクパターンを選択する（ステップＳ５８０２）。
【０３５６】
そして、すべて伸長されたか否かを判断する（ステップＳ５８０３）。この判断は、ダミービットが付与されたか否か、レジスタが空になったか否か、または、マスクパターンによるマスク処理が実行できないか否か（対応する圧縮符号列がないなど）で判断することができる。
【０３５７】
すべて伸長されていない場合（ステップＳ５８０３：Ｎｏ）、選択マスクパターンによる末尾４ビットのマスク処理を実行する（ステップＳ５８０４）。そして、節点領域をポイント中か否かを判断する（ステップＳ５８０５）。節点領域をポイント中でない場合（ステップＳ５８０５：Ｎｏ）、根領域において、マスク処理結果に一致する葉／節点の番号に対応するポインタを特定する（ステップＳ５８０６）。そして、ステップＳ５９０１に移行する。一方、節点領域をポイント中である場合（ステップＳ５８０５：Ｙｅｓ）、ポイント中の節点領域において、マスク処理結果に一致する葉の番号に対応するポイントを特定する（ステップＳ５８０７）。そして、ステップＳ５９０１に移行する。
【０３５８】
図５９において、ポイント先が葉の領域であるか否かを判断する（ステップＳ５９０１）。葉の領域である場合（ステップＳ５９０１：Ｙｅｓ）、該当する伸長コードを取得するとともに（ステップＳ５９０２）、当該伸長コードの圧縮符号長Ｌを取得して（ステップＳ５９０３）、ステップＳ５９０５に移行する。一方、ステップＳ５９０１において、ポイント先が葉の領域でない場合（ステップＳ５９０１：Ｎｏ）、節点領域をポイント中であるため、伸長コードと圧縮符号長Ｌを取得できない。したがって、圧縮符号長ＬをＬ＝４ビットに仮設定し（ステップＳ５９０４）、ステップＳ５９０５に移行する。
【０３５９】
ステップＳ５９０５では、ビットカウンタの値Ｃｂに対して圧縮符号長Ｌを加算することで、ビットカウンタの値Ｃｂを更新する（ステップＳ５９０５）。この更新後のビットカウンタの値Ｃｂを用いて、バイトアドレスの値Ａｂｙを計算する（ステップＳ５９０６）。バイトアドレスが＋１になったか否かを判断し（ステップＳ５９０７）、＋１になった場合（ステップＳ５９０７：Ｙｅｓ）、圧縮符号列を８ビットシフトする（ステップＳ５９０８）。そして、ステップＳ５９０９に移行する。
【０３６０】
一方、＋１になっていない場合（ステップＳ５９０７：Ｎｏ）、ステップＳ５９０９に移行する。ステップＳ５９０９では、ビットアドレスの値Ａｂｉを計算する（ステップＳ５９０９）。そして、ステップＳ５８０２に戻る。また、図５８のステップＳ５８０３において、すべて伸長された場合（ステップＳ５８０３：Ｙｅｓ）、ステップＳ２５４６に戻る。
【０３６１】
このように、本実施の形態２においても、文字データごとの出現率を圧縮パラメータとすることにより、出現率に応じたハフマン木を選択することができる。すなわち、出現率が低いほど特殊記号列が長い特殊なハフマン木を選択することができる。一方、出現率が高いほど特殊なハフマン木よりも通常のハフマン木を選択することができる。したがって、出現マップ９０４の圧縮効率の向上を図ることができる。
【０３６２】
さらに、圧縮効率の悪い分割領域については、ハフマン木を割り振らず非圧縮とすることにより、無駄な圧縮処理を防止することができ、圧縮速度の高速化を図ることができる。また、分割領域を出現確率５０％を境界として対称とすることにより、ハフマン木の容量を半減することができる。したがって、省メモリ化を実現することができる。
【０３６３】
また、ミニＳＤやＨＤに格納される出現マップ９０４を、特殊なハフマン木を用いて効率的に圧縮する。この特殊なハフマン木には、４ビット系の通常のハフマン木にさらに４ビットバウンダリのＮＵＬＬ連続記号列が追加されているため、携帯電話機などのモバイル端末に実装される低速ＣＰＵや少メモリにおいて、高速な圧縮／伸長を実現することができる。
【０３６４】
また、本実施の形態２では、ｎ＝４の１６分枝ハフマン木を用いたが、ｎ＝４に限らず、２n分枝（ｎ＝２，３，…）のハフマン木を適用することができる。この場合、ｎの値によって伸長コードのビット長や、圧縮符号、圧縮符号長を変えることにより、同様の圧縮伸長をおこなうことができる。
【０３６５】
なお、上述したいずれの実施の形態においても、検索対象ファイルとしてＨＴＭＬのファイルを例に挙げて説明したが、ＨＴＭＬに限定されることはなく、ＸＭＬなど他のマークアップ言語によって記述されたファイルであってもよい。また、連字を外字に置換することとしているが、連字に限らず、検索対象ファイルに含まれているＨＴＭＬやＸＭＬのタグを外字に置換することとして、連字外字置換テーブルに含めることとしてもよい。これにより、検索対象ファイルの圧縮率をさらに向上することができる。
【０３６６】
以上のことから、実施の形態にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置によれば、コンテンツについての圧縮率、セキュリティ、および全文検索速度の向上を図ることができるという効果を奏する。
【０３６７】
（付記１）コンテンツを構成する複数の検索対象ファイルにおける文字データの存否をあらわした前記文字データごとのビット列の集合を用いて検索キーワードを構成する文字データを含む検索対象ファイルを絞り込むことにより、当該検索対象ファイルの中から前記検索キーワードと一致または関連するキーワードを検索する検索処理をコンピュータに実行させる情報検索プログラムにおいて、
前記ビット列の集合の中から、任意の文字データのビット列を抽出させるビット列抽出工程と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮させる圧縮工程と、
をコンピュータに実行させることを特徴とする情報検索プログラム。
【０３６８】
（付記２）前記全検索対象ファイルのうち圧縮対象となる文字データが出現するファイル数の割合をあらわす出現率を取得させる取得工程と、
前記特殊なハフマン木ごとに前記特殊記号列のビット数が異なる複数種類の特殊なハフマン木を有するハフマン木集合の中から、前記取得工程によって取得された出現率に応じた特殊なハフマン木を抽出させるハフマン木抽出工程と、を前記コンピュータに実行させ、
前記ビット列抽出工程は、
前記出現率が取得された文字データのビット列を抽出させ、
前記圧縮工程は、
前記ハフマン木抽出工程によって抽出された特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮させることを特徴とする付記１に記載の情報検索プログラム。
【０３６９】
（付記３）前記特殊記号列は、前記文字データが出現しないことを意味する記号が連続する記号列であることを特徴とする付記１または２に記載の情報検索プログラム。
【０３７０】
（付記４）出現確率の範囲が前記特殊なハフマン木ごとに領域分割されており、前記ハフマン木集合内の一の特殊なハフマン木の分割領域により特定される出現確率が、前記一の特殊なハフマン木の特殊記号列よりもビット数が多い特殊記号列を葉とする他の特殊なハフマン木の分割領域により特定される出現確率よりも低く設定されている場合、
前記ハフマン木抽出工程は、
前記出現率が含まれる分割領域に属する特殊なハフマン木を前記ハフマン木集合の中から抽出させることを特徴とする付記３に記載の情報検索プログラム。
【０３７１】
（付記５）
前記一の特殊なハフマン木の分割領域が、前記他の特殊なハフマン木の分割領域よりも広く設定されていることを特徴とする付記４に記載の情報検索プログラム。
【０３７２】
（付記６）前記ハフマン木集合には、前記複数種類の記号列のみを葉とする通常のハフマン木が含まれており、前記特殊なハフマン木の分割領域により特定される最大の出現確率よりも、前記通常のハフマン木の分割領域により特定される出現確率が高く設定されている場合、
前記ハフマン木抽出工程は、
前記出現率が含まれる分割領域が前記通常のハフマン木の分割領域である場合、当該通常のハフマン木を前記ハフマン木集合の中から抽出させることを特徴とする付記４に記載の情報検索プログラム。
【０３７３】
（付記７）前記通常のハフマン木の分割領域により特定される出現確率よりも、いずれのハフマン木も圧縮に用いない分割領域により特定される出現確率が高く設定されている場合、
前記圧縮工程は、
前記取得工程によって取得された出現率が含まれる分割領域が前記いずれのハフマン木も圧縮に用いない分割領域である場合、前記ビット列を圧縮させないことを特徴とする付記４に記載の情報検索プログラム。
【０３７４】
（付記８）前記出現確率の範囲が前記出現確率５０％を境界として対称となるように領域分割されている場合、
前記ハフマン木抽出工程は、
前記取得工程によって取得された出現率が５０％以上である場合、当該出現率が含まれる一の分割領域に対し出現確率５０％を境界として対称となる前記出現確率０％以上５０％未満内の他の分割領域に対応するハフマン木を前記ハフマン木集合の中から抽出させ、
前記圧縮工程は、
前記他の分割領域に対応するハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列の反転ビット列を圧縮させることを特徴とする付記４に記載の情報検索プログラム。
【０３７５】
（付記９）前記ハフマン木は、２n分枝（ｎ≧２）のハフマン木であることを特徴とする付記１〜８のいずれか一つに記載の情報検索プログラム。
【０３７６】
（付記１０）
前記ハフマン木は、圧縮用の構造体を有し、
前記圧縮用の構造体は、前記ハフマン木の葉を特定する葉の番号のうち、単一の葉の番号に対して当該葉の番号に固有な圧縮符号が割り当てられた第１の記号列と、複数の葉の番号に対して当該複数の葉の番号に共通する記号を含む固有な圧縮符号が割り当てられ前記第１の記号列よりも出現確率が高い第２の記号列と、が格納されており、
前記圧縮工程は、
圧縮用の構造体を用いて、前記第１または第２の記号列に一致するビット列を、当該ビット列に一致した記号列の圧縮符号に圧縮させることを特徴とする付記９に記載の情報検索プログラム。
【０３７７】
（付記１１）前記ハフマン木は、伸長用の構造体を有し、
前記伸長用の構造体は、前記ハフマン木の根からの葉となる記号列へのポインタを当該葉の番号と対応付けて格納する根領域と、前記ポインタのポイント先となる記号列を格納する葉の領域と、を有し、
前記コンピュータに、
前記圧縮工程によって圧縮された圧縮符号列から前記葉の番号を抽出し、前記伸長用の構造体内の根領域から前記記号列のポインタを特定し、当該ポインタのポイント先となる記号列を前記伸長用の構造体内の前記葉の領域から特定することにより、前記圧縮符号列を伸長させる伸長工程を実行させることを特徴とする付記１０に記載の情報検索プログラム。
【０３７８】
（付記１２）前記伸長用の構造体の前記根領域は、さらに、前記ハフマン木の根からの節点をポイントするポインタを当該節点の番号に対応付けて格納しており、
前記伸長用の構造体は、さらに、前記ハフマン木の節点からの葉となる記号列へのポインタを当該葉の番号と対応付けて格納する節点領域を有し、
前記伸長用の構造体の前記葉の領域は、前記節点領域に格納されているポインタのポイント先となる記号列を格納しており、
前記伸長工程は、
前記圧縮符号列から前記節点の番号が抽出された場合、前記伸長用の構造体内の根領域から前記節点へのポインタを特定し、当該節点へのポインタのポイント先となる前記記号列へのポインタを前記伸長用の構造体内の前記節点領域から特定し、当該記号列へのポインタのポイント先となる記号列を前記伸長用の構造体内の前記葉の領域から特定することにより、前記圧縮符号列を伸長させることを特徴とする付記１１に記載の情報検索プログラム。
【０３７９】
（付記１３）付記１〜１２のいずれか一つに記載の情報検索プログラムを記録したコンピュータに読み取り可能な記録媒体。
【０３８０】
（付記１４）各検索対象ファイルにおける文字データの存否を当該文字データごとにあらわしたビット列の集合の中から、任意の文字データのビット列を抽出するビット列抽出工程と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出工程によって抽出されたビット列を圧縮する圧縮工程と、
を含んだことを特徴とする情報検索方法。
【０３８１】
（付記１５）各検索対象ファイルにおける文字データの存否を当該文字データごとにあらわしたビット列の集合の中から、任意の文字データのビット列を抽出するビット列抽出手段と、
所定ビット数により表現されるパターンをすべて網羅した複数種類の記号列と前記所定ビット数よりもビット数が多い特殊記号列とを葉とする特殊なハフマン木を用いて、前記ビット列抽出手段によって抽出されたビット列を圧縮する圧縮手段と、
備えることを特徴とする情報検索装置。
【産業上の利用可能性】
【０３８２】
以上のように、本発明にかかる情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置は、コンテンツの検索に有用であり、特に、複数種類の文字データが混在した多ファイルの辞書コンテンツに適している。
【符号の説明】
【０３８３】
２００  情報検索装置
２０１  編集部
２０２  検索処理部
２１０  コンテンツ
２１１  見出しデータ生成部
２１２  文字出現頻度管理データ生成部
２１３  暗号化部
２２１  検索初期化部
２２２  全文検索部
２２３  検索結果表示部
２３０  文字出現頻度管理データ（圧縮情報）
２４０  連字／外字置換テーブル
２５０  圧縮コンテンツ
２６０  暗号化文字出現頻度管理データ
２７０  暗号化連字／外字置換テーブル
【国際調査報告】
2008146756.tif 000103
2008146756.tif 000104
2008146756.tif 000105
2008146756.tif 000106