(57)【要約】  たとえば、対象ファイル（Ｆ３）に「人形芝居を見た。」という文字列が記述されており、このうち、「人形」を「紙」に書き換えたとする。この場合、対象ファイル（Ｆ３）には、あたらしいファイル番号＃＝ｎ＋１が割り当てられ、更新により対象ファイル（Ｆ（ｎ＋１））として保存される。圧縮符号マップ（Ｍ）には、ファイル番号ｎ＋１のビットが各出現マップに設定される。ファイル番号ｎ＋１の削除マップ（Ｄ）のビットはＯＮに設定される。対象ファイル（Ｆ（ｎ＋１））の場合、「人形」の削除により、文字情報「人」、「形」、「人形」のビットがＯＦＦになり、文字情報「紙」のビットがＯＮになる。一方、ファイル番号３の削除マップ（Ｄ）のビットがＯＮからＯＦＦになる。
2012150637.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第１の情報を圧縮した圧縮情報を記憶手段に記憶し、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを特定可能な第３の情報を前記記憶手段に記憶し、
前記所定の文字情報についての検索要求を受けた場合に、前記複数のファイル及び前記更新されたファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報又は前記第２の情報によって前記所定の文字情報が含まれない旨を示されたファイル、及び、前記第３の情報によって特定される前記あるファイルを除外したファイルを抽出する、
ことを実行させることを特徴とする抽出方法。
【請求項２】
前記第１の情報が、
前記複数のファイルそれぞれについて前記所定の文字情報を含むか否かを示すビット列であり、
前記第３の情報が、
前記複数のファイルそれぞれについて検索対象とするか否かを示すビット列であり、
前記コンピュータに、
前記検索要求を受けた場合に、前記第１の情報と前記第３の情報とを用いたビット演算により生成されたビット列に基づいて、前記複数のファイルから前記所定の文字情報が含まれない旨を示されたファイル及び前記あるファイルを除外する、
ことを実行させることを特徴とする請求項１に記載の抽出方法。
【請求項３】
コンピュータに、
複数のファイルのそれぞれについて所定の文字情報を含むかを示す第１の情報を圧縮して記憶手段に記憶し、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを検索対象から除く旨を示す第３の情報を前記記憶手段に記憶する、
ことを実行させることを特徴とする情報処理方法。
【請求項４】
前記コンピュータに、
更新された前記あるファイルを示すポインタを、前記第２の情報と対応付けて前記記憶手段に記憶する、
ことを特徴とする請求項３に記載の情報処理方法。
【請求項５】
前記コンピュータに、
前記圧縮情報は、前記第１の情報を、前記複数のファイルにおける前記所定の文字情報の出現率に応じたハフマン木により圧縮して得られる、
ことを実行させることを特徴とする請求項３又は請求項４に記載の情報処理方法。
【請求項６】
前記コンピュータに、
前記第１の情報のうち、前記複数のファイルの先頭ファイル番号からファイル数の最大倍数となるファイル番号までの領域を圧縮し、かつ、残余の領域を圧縮せずに、前記記憶手段に記憶する、
ことを実行させることを特徴とする請求項３〜５のいずれか一つに記載の情報処理方法。
【請求項７】
前記コンピュータに、
前記所定の文字情報の検索要求を受けた場合に、前記複数のファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報に前記所定の文字情報を含む旨を示され、且つ前記第３の情報に検索対象から除く旨を示されないファイルを抽出するとともに、前記第２の情報が、前記所定の文字情報を含む旨を示す場合に更新された前記あるファイルを抽出する、
ことを実行させることを特徴とする請求項３〜６のいずれか一つに記載の情報処理方法。
【請求項８】
コンピュータに、
複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第１の情報を圧縮した圧縮情報を記憶手段に記憶し、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを特定可能な第３の情報を前記記憶手段に記憶し、
前記所定の文字情報についての検索要求を受けた場合に、前記複数のファイル及び前記更新されたファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報又は前記第２の情報によって前記所定の文字情報が含まれない旨示されたファイル、及び、前記第３の情報によって特定される前記あるファイルを除外したファイルを抽出する、
ことを実行させることを特徴とする抽出プログラム。
【請求項９】
コンピュータに、
複数のファイルのそれぞれについて所定の文字情報を含むかを示す第１の情報を圧縮して記憶手段に記憶し、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを検索対象から除く旨を示す第３の情報を前記記憶手段に記憶する、
処理を実行させることを特徴とする情報処理プログラム。
【請求項１０】
複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第１の情報を圧縮した圧縮情報を記憶手段に記憶する記憶手段と、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを特定可能な第３の情報を前記記憶手段に記憶させる更新手段と、
前記所定の文字情報についての検索要求を受けた場合に、前記複数のファイル及び前記更新されたファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報又は前記第２の情報によって前記所定の文字情報が含まれない旨示されたファイル、及び、前記第３の情報によって特定される前記あるファイルを除外したファイルを抽出する抽出手段と、
を含むことを特徴とする抽出装置。
【請求項１１】
複数のファイルのいずれが所定の文字情報を含むかを示す第１の情報を圧縮して記憶する記憶手段と、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶させ、前記あるファイルを検索対象から除く旨を示す第３の情報を前記記憶手段に記憶させる更新手段と、
を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、抽出方法、情報処理方法、抽出プログラム、情報処理プログラム、抽出装置、および情報処理装置に関する。
【背景技術】
【０００２】
複数のファイルのいずれが所定の文字情報を含むかを示すインデックス情報を圧縮しておき、所定の文字情報を検索する場合に、圧縮されたインデックス情報を伸張し、伸張したインデックス情報を参照して所定の文字情報を含むファイルを特定する技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００６／１２３４４８号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来技術では、インデックス情報を用いた検索の対象となる複数のファイルのいずれかが更新された場合、インデックス情報の内容も更新する必要がある。たとえば、更新元のファイルに「人形芝居」と記述されている場合に「人形芝居」を「紙芝居」に更新したとすると、文字「人」および「形」のビットをＯＦＦにし、「紙」のビットをＯＮにするといったインデックス情報の更新処理が必要となる。したがって、ファイルの更新処理を開始してから、更新後の複数のファイルに対応したインデックス情報による検索を実行可能とするまでに時間がかかるという問題がある。【０００５】
本発明は、インデックス情報を用いた検索の対象となる複数のファイルのいずれかを更新する場合に、更新処理を開始してから、更新後の複数のファイルに対応したインデックス情報による検索を実行可能とするまでの処理時間を低減することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、複数のファイルのそれぞれについて所定の文字情報を含むかを示す第１の情報を圧縮して記憶手段に記憶し、前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを検索対象から除く旨を示す第３の情報を前記記憶手段に記憶する、情報処理方法、情報処理プログラム、および情報処理装置が提案される。【０００７】
本発明の一側面によれば、複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第１の情報を圧縮した圧縮情報を記憶手段に記憶し、前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを特定可能な第３の情報を前記記憶手段に記憶し、前記所定の文字情報についての検索要求を受けた場合に、前記複数のファイル及び前記更新されたファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報又は前記第２の情報によって前記所定の文字情報が含まれない旨を示されたファイル、及び、前記第３の情報によって特定される前記あるファイルを除外したファイルを抽出する、抽出方法、抽出プログラム、および抽出装置が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、インデックス情報を用いた検索の対象となる複数のファイルのいずれかを更新する場合に、更新処理を開始してから、更新後の複数のファイルに対応したインデックス情報による検索を実行可能とするまでの処理時間を低減することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、対象ファイル更新例を示す説明図である。
【図２】図２は、実施の形態にかかる情報処理装置のハードウェア構成例を示すブロック図である。
【図３】図３は、本実施の形態にかかるシステム構成例を示す説明図である。
【図４】図４は、本実施の形態にかかる情報処理装置の機能的構成例１を示すブロック図である。
【図５】図５は、図４に示した情報処理装置の集計部〜第２圧縮部までの処理の流れを示す説明図である。
【図６】図６は、集計部４０１による集計および作成部４０４による圧縮符号マップＭの作成例を示す説明図である。
【図７】図７は、（１）出現回数の集計の詳細を示す説明図である。
【図８】図８は、図６の（２）圧縮符号長算出の詳細（Ｎ＝１１）を示す説明図である。
【図９】図９は、図６の（３）葉数特定〜（５）葉の構造体生成の詳細（Ｎ＝１１）を示す説明図である。
【図１０】図１０は、文字情報ごとの補正結果を示す説明図である。
【図１１】図１１は、図６の（６）葉へのポインタ生成の詳細（Ｎ＝１１）を示す説明図である。
【図１２】図１２は、図６の（７）２N分枝無節点ハフマン木Ｈの構築の詳細（Ｎ＝１１）を示す説明図である。
【図１３】図１３は、葉の構造体を示す説明図である。
【図１４】図１４は、特定単一文字の構造体を示す説明図である。
【図１５】図１５は、分割文字コードの構造体を示す説明図である。
【図１６】図１６は、基礎単語の構造体を示す説明図である。
【図１７】図１７は、圧縮符号マップＭの生成例を示す説明図である。
【図１８】図１８は、作成部４０４による圧縮符号マップ作成処理手順例を示すフローチャートである。
【図１９】図１９は、図１８に示した集計処理（ステップＳ１８０１）の詳細な処理手順例を示すフローチャートである。
【図２０】図２０は、図１９に示した対象ファイルＦｉの集計処理（ステップＳ１９０３）の詳細な処理手順例を示すフローチャートである。
【図２１】図２１は、文字出現頻度集計テーブルを示す説明図である。
【図２２】図２２は、図２０に示した基礎単語集計処理（ステップＳ２００２）の詳細な処理手順例を示すフローチャートである。
【図２３】図２３は、基礎単語出現頻度集計テーブルを示す説明図である。
【図２４】図２４は、図２２に示した最長一致検索処理（ステップＳ２２０１）の詳細な処理手順を示すフローチャートである。
【図２５】図２５は、図１８に示したマップ割当数決定処理（ステップＳ１８０２）の詳細な処理手順例を示すフローチャートである。
【図２６】図２６は、図１８に示した再集計処理（ステップＳ１８０３）の詳細な処理手順例を示すフローチャートである。
【図２７】図２７は、対象ファイルＦｉの再集計処理（ステップＳ２６０３）の詳細な処理手順例を示すフローチャートである。
【図２８】図２８は、上位分割文字コード出現頻度集計テーブルを示す説明図である。
【図２９】図２９は、下位分割文字コード出現頻度集計テーブルを示す説明図である。
【図３０】図３０は、図２７で示した２グラム文字列特定処理（ステップＳ２７０６）の詳細な処理手順を示すフローチャートである。
【図３１】図３１は、２グラム文字列出現頻度集計テーブルを示す説明図である。
【図３２】図３２は、図１８に示したハフマン木生成処理（ステップＳ１８０４）の詳細な処理手順例を示すフローチャートである。
【図３３】図３３は、図３２に示した枝数特定処理（ステップＳ３２０４）の詳細な処理手順例を示すフローチャートである。
【図３４】図３４は、図３２に示した構築処理（ステップＳ３２０５）の詳細な処理手順を示すフローチャートである。
【図３５】図３５は、図３４に示した葉へのポインタ生成処理（ステップＳ３４０３）の詳細な処理手順を示すフローチャートである。
【図３６】図３６は、図３０に示したマップ作成処理（ステップＳ１８０５）の詳細な処理手順例を示すフローチャートである。
【図３７】図３７は、図３６に示した対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）の詳細な処理手順を示すフローチャートである。
【図３８】図３８は、図３７で示した基礎単語出現マップ作成処理（ステップＳ３７０２）の詳細な処理手順例を示すフローチャートである。
【図３９】図３９は、図３７で示した特定単一文字出現マップ作成処理（ステップＳ３８０３）の詳細な処理手順例を示すフローチャートである。
【図４０】図４０は、図３９で示した分割文字コード出現マップ作成処理（ステップＳ４００３）の詳細な処理手順例を示すフローチャートである。
【図４１】図４１は、図３７に示した２グラム文字列マップ作成処理（ステップＳ３７０４）の詳細な処理手順例を示すフローチャートである。
【図４２】図４２は、２グラム文字列出現マップ生成処理（ステップＳ４１０４）の詳細な処理手順例を示すフローチャートである。
【図４３】図４３は、２N分枝無節点ハフマン木Ｈを用いた圧縮処理の具体例を示す説明図である。
【図４４】図４４は、第１圧縮部４０３による２N分枝無節点ハフマン木Ｈを用いた対象ファイル群Ｆｓの圧縮処理手順例を示すフローチャートである。
【図４５】図４５は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その１）である。
【図４６】図４６は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その２）である。
【図４７】図４７は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その３）である。
【図４８】図４８は、出現率と出現率領域との関係を示す説明図である。
【図４９】図４９は、出現率領域別の圧縮パターンを有する圧縮パターンテーブルを示す説明図である。
【図５０】図５０は、Ｂ領域およびＢ´領域の場合の圧縮パターンを示す説明図である。
【図５１】図５１は、Ｃ領域およびＣ´領域の場合の圧縮パターンを示す説明図である。
【図５２】図５２は、Ｄ領域およびＤ´領域の場合の圧縮パターンを示す説明図である。
【図５３】図５３は、Ｅ領域およびＥ´領域の場合の圧縮パターンを示す説明図である。
【図５４】図５４は、圧縮符号マップＭ圧縮処理手順を示すフローチャートである。
【図５５】図５５は、本実施の形態にかかる情報処理装置４００の機能的構成例２を示すブロック図である。
【図５６】図５６は、ファイル伸長例（Ｇ１）を示す説明図である。
【図５７】図５７は、ファイル伸長例（Ｇ２）を示す説明図である。
【図５８】図５８は、図５６および図５７での伸長処理の具体例を示す説明図（その１）である。
【図５９】図５９は、図５６および図５７での伸長処理の具体例を示す説明図（その２）である。
【図６０】図６０は、本実施の形態にかかる検索処理手順を示すフローチャートである。
【図６１】図６１は、図６０に示したファイル絞込み処理（ステップＳ６００２）の詳細な処理手順を示すフローチャート（その１）である。
【図６２】図６２は、図６０に示したファイル絞込み処理（ステップＳ６００２）の詳細な処理手順を示すフローチャート（その２）である。
【図６３】図６３は、図６０に示した２N分枝無節点ハフマン木Ｈを用いた伸長処理（ステップＳ６００３）の詳細な処理手順例を示すフローチャート（その１）である。
【図６４】図６４は、図６０に示した２N分枝無節点ハフマン木Ｈを用いた伸長処理（ステップＳ６００３）の詳細な処理手順例を示すフローチャート（その２）である。
【図６５】図６５は、更新処理の具体例を示す説明図である。
【図６６】図６６は、図６５に示した更新処理手順を示すフローチャートである。
【図６７】図６７は、図６６に示した追加ファイルのマップ更新処理（ステップＳ６６０９）の詳細な処理手順を示すフローチャート（前半）である。
【図６８】図６８は、図６６に示した追加ファイルのマップ更新処理（ステップＳ６６０９）の詳細な処理手順を示すフローチャート（後半）である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、本発明の実施の形態を詳細に説明する。なお、本明細書において、「文字情報」とは、テキストデータを構成する、単一文字、基礎単語、分割文字コードなどである。対象ファイル群は、たとえば、文書ファイル、Ｗｅｂページ、電子メールなどの電子データであり、たとえば、テキスト形式、ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）形式、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）形式の電子データである。
【００１１】
また、「単一文字」とは、１つの文字コードで表現される文字である。単一文字の文字コード長は、文字コード種により異なる。
【００１２】
たとえば、ＵＴＦ（Ｕｎｉｃｏｄｅ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎ  Ｆｏｒｍａｔ）１６の場合は１６ビットコード、ＡＳＣＩＩ（Ａｍｅｒｉｃａｎ  Ｓｔａｎｄａｒｄ  Ｃｏｄｅ  ｆｏｒ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｉｎｔｅｒｃｈａｎｇｅ）コードの場合は８ビットコード、シフトＪＩＳ（Ｊａｐａｎｅｓｅ  Ｉｎｄｕｓｔｒｉａｌ  Ｓｔａｎｄａｒｄ）コードの場合は８ビットコードである。シフトＪＩＳコードで日本語の文字を表現する場合は、２個の８ビットコードを組み合わせることとなる。
【００１３】
また、「基礎単語」とは、小・中学校で学習する基本的な単語や、特定の文字列で表現される予約語をいう。「Ｔｈｉｓ  ｉｓ  ａ・・・．」の英文を例にすると「Ｔｈｉｓ」、「ｉｓ」、「ａ」などの単語であり、千語レベル、２千語レベル、数千語レベルに分類され、英和辞典には、「＊＊＊」、「＊＊」、「＊」マークが付与されている。また、予約語とは、予め決められた文字列であり、たとえば、ＨＴＭＬのタグ（たとえば、＜ｂｒ＞）が挙げられる。
【００１４】
また、「分割文字コード」とは、単一文字を、上位のコードと下位のコードに分割した各々のコードである。本実施の形態では、後述するように、単一文字を、上位のコードと下位のコードに分割する場合がある。たとえば、「芝」という単一文字の文字コードは、ＵＴＦ１６の場合、「９Ｄ８２」で表現されるが、上位分割文字コード「０ｘ９Ｄ」と下位分割文字コード「０ｘ８２」に分割される。
【００１５】
また、「グラム」とは、文字単位である。たとえば、単一文字については、その１文字分が１グラムとなる。分割文字コードについては、分割文字コード単独で１グラムとなる。したがって、単一文字「芝」は２グラムとなる。なお、本実施の形態では、文字コードとしてＵＴＦ１６を例に挙げて説明する。
【００１６】
また、本明細書では、「ビットをＯＮ」とした場合は、そのビットの値を“１”にし、「ビットをＯＦＦ」とした場合は、そのビットの値を“０”として説明する。なお、「ビットをＯＮ」とした場合は、そのビットの値を“０”にし、「ビットをＯＦＦ」とした場合は、そのビットの値を“１”にしてもよい。
【００１７】
「出現マップ」とは、文字情報を指定するポインタと文字情報の各対象ファイルでの存否を示すビット列を連結したビット列である。検索処理時には、このビット列を、ビットのＯＮ・ＯＦＦに応じて検索対象の文字情報を含むか否かを示すインデックスとして用いることができる。文字情報を指定するポインタとしては、たとえば、文字情報の圧縮符号が採用される。文字情報を指定するポインタは、例えば、文字情報そのものを用いても良い。「圧縮符号マップ」とは、圧縮符号のポインタで示される文字情報ごとの出現マップをまとめたビットマップである。２グラム文字列の圧縮符号マップについては、第１グラムの圧縮符号と第２グラムの圧縮符号を組み合わせた圧縮符号列となる。
【００１８】
「２グラム文字列」とは、１グラムの文字コードが連接する文字列である。たとえば、「人形芝居」という文字列には、２連接文字「人形」、「形芝」、「芝居」が含まれている。２連接文字「人形」の「人」、「形」はそれぞれ分割されない単一文字であるため、２連接文字「人形」はそのまま２グラム文字列となる。
【００１９】
「芝」は上述したように分割されるため、単一文字「形」と「芝」の上位分割文字コード「０ｘ９Ｄ」の組み合わせが２グラム文字列となる。また、上位分割文字コード「０ｘ９Ｄ」と下位分割文字コード「０ｘ８２」の組み合わせも２グラム文字列となる。さらに、下位分割文字コード「０ｘ８２」と分割されない単一文字「居」の組み合わせも２グラム文字列となる。
【００２０】
基礎単語により、対象ファイル群が圧縮されている場合、圧縮符号マップの生成時や検索時に１パスでアクセスすることが可能である。なお、対象ファイル群を圧縮しない場合は、文字情報を指定するポインタとしては、文字情報の文字コードをそのまま採用してもよい。
【００２１】
＜対象ファイル更新例＞
図１は、対象ファイル更新例を示す説明図である。ここで、ファイル番号＃＝ｉの対象ファイルを対象ファイルＦｉとする。図１では、ｎ個の対象ファイルのうちファイル番号＃＝３の対象ファイルＦ３を更新する場合を例に挙げている。なお、図１の圧縮符号マップＭでは、文字情報を指定するポインタとなる文字情報の圧縮符号について、便宜上、文字情報を表記している。
【００２２】
（Ａ）において、圧縮符号マップＭには削除マップＤが設定されている。削除マップＤとは、対象ファイルＦｉの存在または削除をビット列で示したインデックスである。なお、削除マップＤにおいてＯＮ（＝１）に該当するビットに対応するファイル番号のファイルＦｉは、存在していることを意味する。一方、ＯＦＦ（＝０）になると、当該ファイルＦｉは削除されたことを意味する。これにより、圧縮符号マップＭを用いて検索を行う場合に、対象ファイルＦｉそのものを削除しなくても、対象ファイルＦｉに対応する削除マップをＯＦＦにすることで、対象ファイルＦｉを検索対象から除くことができる。圧縮符号マップＭ内の出現マップは、圧縮されて保持される。圧縮符号マップＭの圧縮は、例えばハフマン木による圧縮などで、各文字情報に対応するビット列単位で行われても良い。また、圧縮符号マップＭの圧縮は、削除マップＤを除いた圧縮マップＭについて行われても良い。圧縮された圧縮符号マップＭのビット列の桁数は、対象ファイルの数以下となる。図１（Ａ）、（Ｃ）においては、圧縮されたビット列が圧縮前よりも短くなっている様を、各ビット列の表示域を小さく表示することにより便宜的に示している。
【００２３】
（Ｂ）圧縮符号マップＭは、対象ファイル群を絞り込む場合に、圧縮に用いたハフマン木により伸長される。たとえば、検索文字列が「人形」である場合、対象ファイルＦ３には、文字情報「人」、「形」、「人形」のビットがＯＮになっており、削除マップＤのビットもＯＮである。したがって、これら３個のビットのＡＮＤ結果が「１」となる。したがって、対象ファイルＦ３が検索される。
【００２４】
一方、対象ファイルＦ２の場合、文字情報「人」、「形」、「人形」のビットがＯＮであるが、削除マップＤのビットはＯＦＦであるため、これら３個のビットのＡＮＤ結果が「０」となる。したがって、対象ファイルＦ２は検索されない。なお、対象ファイルＦ３を削除する場合は、削除マップＤの対象ファイルＦ３のビットがＯＮからＯＦＦになる。これにより、対象ファイルＦ３は、対象ファイルＦ２のように、検索対象外となる。
【００２５】
（Ｃ）つぎに、対象ファイルＦ３を更新する。たとえば、対象ファイルＦ３に「人形芝居を見た。」という文字列が記述されており、当該文字列以外の文字列には、「人」、「形」および「紙」は存在しないものとする。このうち、「人形」を「紙」に書き換えたとする。この場合、対象ファイルＦ３には、あたらしいファイル番号＃＝ｎ＋１が割り当てられ、更新により対象ファイルＦ（ｎ＋１）として保存される。
【００２６】
また、圧縮符号マップＭには、ファイル番号ｎ＋１のビットが各出現マップに設定される。また、ファイル番号ｎ＋１の削除マップＤのビットはＯＮに設定される。対象ファイルＦ（ｎ＋１）の場合、「人形」の削除により、文字情報「人」、「形」、「人形」のビットがＯＦＦになり、文字情報「紙」のビットがＯＮになる。これにより、対象ファイルＦ（ｎ＋１）は検索対象とすることができる。
【００２７】
一方、ファイル番号３の削除マップＤのビットがＯＮからＯＦＦになる。これにより、対象ファイルＦ３は検索対象外とすることができる。なお、更新元の対象ファイルＦ３は、削除することとしてもよい。この場合、省メモリ化を図ることができる。一方、対象ファイルＦ３は、そのまま残しておくこととしてもよい。この場合、更新前の状態に戻したい場合に、復元することが可能となる。もしくは、対象ファイルＦ３の格納場所を示すポインタを、更新後のファイルＦ（ｎ＋ｉ）の格納場所を示すポインタに用いても良い。すなわち、対象ファイルＦ３そのものを書き換え、書き換えたファイルを、対象ファイルＦ（ｎ＋ｉ）として利用しても良い。
【００２８】
また、更新後のファイルについて新しいファイル番号を採番するため、既存のファイル番号のビットを削除する必要はない。したがって、圧縮済みであるファイル番号１〜ｎの出現マップについては、圧縮状態のまま内容も更新することなく保持することができる。
【００２９】
また、図１（Ｃ）に示したように、あらかじめ、圧縮符号マップＭの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Ｆｓのファイル番号ｐの降順に配列しておく。これにより、これにより、ファイル番号；１〜ｎのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルＦｉの絞込みを正確に実行することができる。
【００３０】
図１を用いて説明した圧縮符号マップＭによる検索処理及び圧縮符号マップＭの更新処理は、日本語のみに限らず、他の言語についても有効である。例えば、英語の対象ファイルを用いた場合には、「Ｉ  ｗａｔｃｈｅｄ  ｍａｒｉｏｎｅｔｔｅ  ｐｅｒｆｏｒｍａｎｃｅ．」という文を含む対象ファイルＦｉは、圧縮符号マップＭにおいて、「ｗａｔｃｈ」、「ｍａｒｉｏｎｅｔｔｅ」、「ｐｅｒｆｏｒｍａｎｃｅ」のそれぞれに対応するビットがＯＮとなる。例えば、「ｍａｒｉｏｎｅｔｔｅ  ｐｅｒｆｏｒｍａｎｃｅ」という検索文字列を受け付けた場合には、「ｍａｒｉｏｎｅｔｔｅ」、「ｐｅｒｆｏｒｍａｎｃｅ」のそれぞれに対応するビットと、削除マップＤと、のＡＮＤ結果が「１」である対象ファイルに検索範囲が絞り込まれる。
【００３１】
また、対象ファイルＦｉを「Ｉ  ｗａｔｃｈｅｄ  ａｃｒｏｂａｔｉｃ  ｐｅｒｆｏｒｍａｎｃｅ．」に更新する場合には、Ｆ（ｎ＋ｉ）に対応する圧縮符号マップのビットを、「ｗａｔｃｈ」、「ａｃｒｏｂａｔｉｃ」、「ｐｅｒｆｏｒｍａｎｃｅ」のそれぞれについてＯＮにする。対象ファイルＦｉが、更新後には「ｍａｒｉｏｎｅｔｔｅ」という単語を含まない場合には、「ｍａｒｉｏｎｅｔｔｅ」に対応するＦ（ｎ＋ｉ）のビットはＯＦＦとする。さらに、対象ファイルＦ（ｎ＋ｉ）に対応する削除マップＤをＯＮにして、Ｆｉに対応する削除マップＤをＯＦＦにする。これにより、英語についても対象ファイルＦｉの更新に合わせて、圧縮符号マップＭの更新処理が行われる。
【００３２】
＜情報処理装置のハードウェア構成例＞
図２は、実施の形態にかかる情報処理装置（抽出装置含む）のハードウェア構成例を示すブロック図である。図２において、情報処理装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、ディスプレイ２０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００３３】
ここで、ＣＰＵ２０１は、情報処理装置の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。また、ＲＯＭ２０２は、圧縮符号マップＭを生成・管理するプログラム、圧縮符号マップＭまたは符号マップを用いて検索を行うプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用され、ＣＰＵ２０１は、ＲＯＭ２０２に記憶されたプログラムをＲＡＭ２０３に読み出して実行することができる。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００３４】
光ディスクドライブ２０６は、ＣＰＵ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータを情報処理装置に読み取らせたりする。
【００３５】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３６】
インターフェース（以下、「Ｉ／Ｆ」と略する。）２０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１４に接続され、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３７】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３８】
スキャナ２１２は、画像を光学的に読み取り、情報処理装置内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３９】
また、情報処理装置は、サーバや据置き型のパーソナル・コンピュータのほか、携帯電話機、スマートフォン、電子書籍端末、ノート型パソコンなどの携帯型端末であってもよい。また、本実施の形態は、複数のコンピュータに応じて実施されてもよい。
【００４０】
図３は、本実施の形態にかかるシステム構成例を示す説明図である。図３において、システムは、図２に示す各ハードウェアを含みうる情報処理装置３０１〜３０３、ネットワーク３０４、スイッチ３０５、無線基地局３０７を含む。情報処理装置３０３に含まれるＩ／Ｆは、無線通信機能を備える。
【００４１】
例えば、複数のファイルを含むコンテンツについての圧縮符号マップＭを生成する処理を情報処理装置３０１で実行し、情報処理装置３０２及び情報処理装置３０３に配信し、情報処理装置３０２および情報処理装置３０３のそれぞれで配信されたコンテンツについての検索処理を実行してもよい。
【００４２】
また、複数のファイルを含むコンテンツについての圧縮符号マップＭを生成する処理を情報処理装置３０１で実行し、情報処理装置３０２または情報処理装置３０３からコンテンツについての検索依頼を情報処理装置３０１が受け付けて、検索処理を実行し、実行した検索処理の結果を情報処理装置３０２、情報処理装置３０３のそれぞれに返すように構成してもよい。図２と同様に、情報処理装置３０１〜３０３のそれぞれは、サーバや据置き型のパーソナル・コンピュータのほか、携帯電話機、スマートフォン、電子書籍端末、ノート型パソコンなどの携帯型端末であってもよい。
【００４３】
＜機能的構成例１＞
図４は、本実施の形態にかかる情報処理装置の機能的構成例１を示すブロック図であり、図５は、図４に示した情報処理装置の集計部〜第２圧縮部までの処理の流れを示す説明図である。図４において、情報処理装置４００は、集計部４０１と、第１生成部４０２と、第１圧縮部４０３と、作成部４０４と、第２生成部４０５と、第２圧縮部４０６と、を備える。
【００４４】
集計部４０１〜第２圧縮部４０６は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることによりその機能を実現する。なお、集計部４０１〜第２圧縮部４０６は、それぞれ実行結果を記憶装置に書き込んだり、他の部の実行結果を読み出したりして、それぞれ演算を実行する。以下、集計部４０１〜第２圧縮部４０６について簡単に説明する。
【００４５】
集計部４０１は、対象ファイル群内の文字情報の出現回数を集計する。具体的には、たとえば、集計部４０１は、図５の（Ａ）に示したように、対象ファイル群Ｆｓ内の文字情報の出現回数を集計する。集計部４０１では、特定単一文字、上位分割文字コード、下位分割文字コード、２グラム文字、基礎単語別に出現回数を計数する。集計部４０１の詳細な処理内容については後述する。
【００４６】
第１生成部４０２は、集計部４０１の集計結果に基づいて２N分枝無節点ハフマン木Ｈを生成する（図５（Ｂ））。２N分枝無節点ハフマン木Ｈとは、根から分岐する枝が２N本あり、１または複数本の枝で葉を直接ポイントするハフマン木である。節点（内部節点）はない。節点がなく直接葉にヒットするため、節点を有する通常のハフマン木に比べて、伸長速度の高速化を図ることができる。葉は、該当する文字情報とその圧縮符号を含む構造体である。葉の構造体とも呼ぶ。葉に割り当てられる枝数は、割当先の葉に存在する圧縮符号の圧縮符号長に依存する。第１生成部４０２の詳細な処理内容については後述する。
【００４７】
第１圧縮部４０３は、２N分枝無節点ハフマン木Ｈを用いて対象ファイル群Ｆｓの各対象ファイルを圧縮して圧縮ファイル群ｆｓにする（図５（Ｃ））。第１圧縮部４０３の詳細な処理内容については後述する。
【００４８】
作成部４０４は、集計部４０１の集計結果と２N分枝無節点ハフマン木Ｈにおいて文字情報ごとに割り当てられた圧縮符号に基づいて、圧縮符号マップＭを作成する。作成部４０４は、圧縮符号マップＭについても、特定単一文字、上位分割文字コード、下位分割文字コード、２グラム文字、基礎単語別に作成する。作成部４０４は、圧縮符号マップＭにおいて該当する文字情報が１個の対象ファイルに１回でも出現したらそのファイル番号のビットをＯＮにする（図５（Ｄ））。また、初期状態では、削除マップＤは各対象ファイルですべてＯＮにする。作成部４０４の詳細な処理内容については後述する。
【００４９】
第２生成部４０５は、文字情報の出現確率に基づいて出現マップを圧縮するハフマン木ｈを生成する（図５（Ｅ））。第２生成部４０５の詳細な処理内容については後述する。第２圧縮部４０６は、第２生成部４０５で生成されたハフマン木を用いて各出現マップを圧縮する（図５（Ｆ））。第２圧縮部４０６の詳細な処理内容については後述する。
【００５０】
＜集計および圧縮符号マップＭの作成の詳細＞
つぎに、集計部４０１による集計および作成部４０４による圧縮符号マップＭの作成の詳細について説明する。圧縮符号マップＭを作成する場合、作成に先立って、集計部４０１により、対象ファイル群Ｆｓから文字情報の出現回数を集計し、第１生成部４０２により、２N分枝無節点ハフマン木Ｈを生成しておく必要がある。
【００５１】
図６は、集計部４０１による集計および作成部４０４による圧縮符号マップＭの作成例を示す説明図である。
【００５２】
（１）出現回数の集計
まず、情報処理装置４００は、対象ファイル群Ｆｓに存在する文字情報の出現回数を計数する。集計結果は、出現回数の降順にソートされ、出現回数の大きい方から昇順の順位がつけられる。なお、ここでは、文字情報の総種類数は、例として１３０５個（＜２０４８（＝２11））とする。（１）出現回数の集計の詳細は図７で説明する。
【００５３】
（２）圧縮符号長算出
つぎに、（１）で得られた集計結果を基にして、情報処理装置４００は、文字情報ごとの圧縮符号長を算出する。具体的には、情報処理装置４００は、文字情報ごとに、出現率を算出する。出現率は、文字情報の出現回数を全文字情報の総出現回数で割ることで得られる。そして、情報処理装置４００は、出現率に対応する生起確率を求め、生起確率から圧縮符号長を導き出す。
【００５４】
生起確率は、１／２xで表現される。ｘはべき数である。圧縮符号長は、生起確率のべき数ｘとなる。具体的には、出現率が生起確率の以下のどの範囲であるかで圧縮符号長が決定される。ＡＲは出現率である。
１／２0＞ＡＲ≧１／２1・・・圧縮符号長は１ビット。
１／２1＞ＡＲ≧１／２2・・・圧縮符号長は２ビット。
１／２2＞ＡＲ≧１／２3・・・圧縮符号長は３ビット。
１／２3＞ＡＲ≧１／２4・・・圧縮符号長は４ビット。
・
・
・
１／２N-1＞ＡＲ≧１／２N・・・圧縮符号長はＮビット。
【００５５】
（２）圧縮符号長算出の詳細は図８で説明する。
【００５６】
（３）葉数特定
つぎに、情報処理装置４００は、圧縮符号長ごとに葉数を集計することで圧縮符号長ごとの葉数を特定する。ここでは、最大圧縮符号長は１７ビットとする。また、葉数とは、文字情報の種類数である。したがって、圧縮符号長５ビットの葉数が２である場合、５ビットの圧縮符号が割り当てられる文字情報が２つ存在することを示している。
【００５７】
（４）葉数補正
つぎに、情報処理装置４００は、葉数を補正する。具体的には、情報処理装置４００は、枝数の上限２Nのべき数Ｎが最大圧縮符号長となるように補正する。たとえば、べき数Ｎ＝１１の場合、圧縮符号長１１ビット〜１７ビットまでの葉数の総和を、補正後の圧縮符号長１１ビットの葉数にする。そして、情報処理装置４００は、圧縮符号長ごとに葉当たりの枝数を割り当てる。具体的には、補正後の圧縮符号長に対し、その降順に、２0、２1、２2、２3、２4、２5、２6、１６として葉当たりの枝数を決定する。
【００５８】
たとえば、図６では、圧縮符号長１１ビットの圧縮符号が割り当てられる文字情報の総数（葉数）は１２１５個であるが、その葉当たりの枝数は１である。圧縮符号長１１ビットの圧縮符号が割り当てられる文字情報については、それぞれ１本の枝しか割り当てられないこととなる。一方、圧縮符号長６ビットの圧縮符号が割り当てられる文字情報の総数（葉数）は６個であるが、その葉当たりの枝数は３２である。圧縮符号長６ビットの圧縮符号が割り当てられる文字情報については、それぞれ３２本の枝が割り当てられることとなる。（４）葉数補正は、必要な場合に実行すればよく、実行しなくてもよい。
【００５９】
（５）葉の構造体生成
つぎに、情報処理装置４００は、葉の構造体を生成する。葉の構造体とは、文字情報とその圧縮符号長とその圧縮符号長での圧縮符号が対応付けられたデータ構造体である。たとえば、出現順位が１位である文字「０」の圧縮符号長は６ビットであり、圧縮符号は「００００００」となる。図６の例では、文字情報の種類数（葉数）は１３０５個であるため、葉Ｌ１の構造体〜葉Ｌ１３０５の構造体が生成されることとなる。（３）葉数特定〜（５）葉の構造体生成の詳細（Ｎ＝１１）は、図９で説明する。
【００６０】
（６）葉へのポインタ生成
つぎに、情報処理装置４００は、葉の構造体ごとに葉へのポインタを生成する。葉へのポインタは、そのポイント先となる葉の構造体内の圧縮符号に、その葉当たりの枝数分の番号に相当するビット列を連結したビット列である。たとえば、葉Ｌ１である文字「０」に割り当てられた圧縮符号「００００００」の圧縮符号長は６ビットであるため、葉Ｌ１当たりの枝数は３２本である。
【００６１】
したがって、葉Ｌ１へのポインタの先頭６ビットは、圧縮符号「００００００」となる。後続ビット列は、葉Ｌ１当たりの枝数で表現される３２（＝２5）種のビット列となる。すなわち、３２種の５ビットのビット列が圧縮符号「００００００」の後続ビット列となる。したがって、葉Ｌ１へのポインタは、先頭６ビットが「００００００」で固定された３２種の１１ビットのビット列となる。なお、葉当たりの枝数が１本の場合は、葉へのポインタは１個であり、圧縮符号とその葉へのポインタは同一ビット列となる。（６）葉へのポインタ生成の詳細は、図１１で説明する。
【００６２】
（７）２N分枝無節点ハフマン木Ｈの構築
最後に、情報処理装置４００は、２N分枝無節点ハフマン木Ｈを構築する。具体的には、葉のポインタを根とすることで、葉の構造体を直接指定する２N分枝無節点ハフマン木Ｈが構築される。圧縮符号列が、先頭６ビットが「００００００」の１１ビットのビット列である場合、後続の５ビットが３２種のいずれのビット列であっても、２N分枝無節点ハフマン木Ｈにより文字「０」の葉Ｌ１の構造体をポイントすることができる。（７）２N分枝無節点ハフマン木Ｈの構築の詳細は、図１２で説明する。
【００６３】
図７は、（１）出現回数の集計の詳細を示す説明図である。図７において、情報処理装置４００は、（Ａ）対象ファイル群Ｆｓからの集計、（Ｂ）出現頻度の降順でのソート、（Ｃ）目標出現率の順位までの抽出という３つのフェーズを実行する。以下、基礎単語と単一文字に分けて説明する。
【００６４】
（Ａ１）まず、情報処理装置４００は、対象ファイル群Ｆｓを読み込んで、基礎単語の出現頻度（出現回数）を計数する。情報処理装置４００は、基礎単語の構造体を参照して、基礎単語の構造体内の基礎単語に一致する文字列が対象ファイルに存在する場合に、当該基礎単語の出現頻度（初期値は０）を１加算する。基礎単語の構造体とは、基礎単語が記述されたデータ構造体である。
【００６５】
（Ｂ１）対象ファイル群Ｆｓにおいて基礎単語の集計が終了すると、情報処理装置４００は、基礎単語出現頻度集計テーブルを、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い基礎単語から順位付けをおこなう。
【００６６】
（Ａ２）、また、情報処理装置４００は、対象ファイル群Ｆｓを読み込んで、単一文字の出現頻度を計数する。具体的には、情報処理装置４００は、単一文字の出現頻度（初期値は０）を１加算する。
【００６７】
（Ｂ２）対象ファイル群Ｆｓにおいて単一文字の集計が終了すると、情報処理装置４００は、単一文字出現頻度集計テーブルを、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い単一文字から順位付けをおこなう。
【００６８】
（Ｃ１）つぎに、情報処理装置４００は、（Ｂ１）ソート後の基礎単語出現頻度集計テーブルを参照して、目標出現率Ｐｗまでの順位の基礎単語を抽出する。具体的には、情報処理装置４００は、全基礎単語の出現頻度の総和（総出現頻度）を分母とし、順位が１位の基礎単語から降順に出現頻度を累計して分子とし、各順位までの出現率Ｐｗを算出する。
【００６９】
たとえば、総出現頻度が４００００、１位からｙ位までの基礎単語群の累計出現頻度が３００００とすると、ｙ位までの出現頻度は、（４００００／３００００）×１００＝７５［％］となる。ここで、目標出現率Ｐｗが７５［％］である場合は、上位ｙ位までの基礎単語を抽出することとなる。
【００７０】
（Ｃ２１）つぎに、情報処理装置４００は、（Ｂ２）ソート後の単一文字出現頻度集計テーブルを参照して、目標出現率Ｐｃまでの順位の単一文字を抽出する。具体的には、情報処理装置４００は、全単一文字の出現頻度の総和（総出現頻度）を分母とし、順位が１位の単一文字から降順に出現頻度を累計して分子とし、各順位までの出現率を算出する。
【００７１】
たとえば、総出現頻度が５００００、１位からｙ位までの単一文字群の累計出現頻度が４００００とすると、ｙ位までの出現頻度は、（５００００／４００００）×１００＝８０［％］となる。ここで、目標出現率Ｐｃが８０［％］である場合は、上位ｙ位までの単一文字を抽出することとなる。なお、（Ｃ２１）で抽出された単一文字を、元の単一文字群と区別するために、「特定単一文字（群）」と称す。
【００７２】
（Ｃ２２）また、単一文字群のうち特定単一文字群から外された単一文字（以下、「非特定単一文字（群）」）は、出現頻度が各特定単一文字よりも低いため、その文字コードを分割する。具体的には、非特定単一文字の文字コードを、上位ビットの文字コードと、下位ビットの文字コードに分割する。
【００７３】
たとえば、単一文字がＵＴＦ１６ビット文字コードで表現されている場合は、上位８ビットの文字コードと下位８ビットの文字コードに分割する。この場合、分割されたいずれの文字コードも、０ｘ００〜０ｘＦＦのコードで表現される。このように、上位ビットの文字コードが上位分割文字コードであり、下位ビットの文字コードが下位分割文字コードである。
【００７４】
図８は、図６の（２）圧縮符号長算出の詳細（Ｎ＝１１）を示す説明図である。図８の文字情報テーブルは、図６の（１）での集計結果を反映したテーブルであり、文字情報ごとに順位項目、伸長種別項目、コード項目、文字項目、出現回数項目、総回数項目、出現率項目、補正前での生起確率項目および圧縮符号長項目が設定されている。このうち、順位項目〜総回数項目までが再ソート結果で得られた情報である。
【００７５】
ここで、順位項目には、文字情報の出現回数の降順に順位（昇順）が書き込まれている。文字情報項目のうち伸長種別項目には、文字情報の種別が書き込まれる。「１６」は１６ビットコード（の単一文字）を示している。「８」は８ビットの分割文字コードを示している。「基」は基礎単語を示している。
【００７６】
文字情報項目のうちコード項目には、特定単一文字または分割文字コードが書き込まれている。基礎単語の場合は空欄とする。文字情報項目のうち文字項目には、文字や基礎単語が書き込まれている。分割文字コードの場合は空欄とする。出現回数項目には、対象ファイル群Ｆｓでの文字情報の出現回数が書き込まれている。総回数項目には、全文字情報の総出現回数が書き込まれている。
【００７７】
出現率項目には、出現回数を総回数で割り算した値が出現率として書き込まれている。補正前項目の生起確率項目には、出現率に対応する生起確率が書き込まれている。圧縮符号長項目には、生起確率に応じた圧縮符号長、すなわち、生起確率１／２yのべき数ｙが圧縮符号長として書き込まれている。
【００７８】
図９は、図６の（３）葉数特定〜（５）葉の構造体生成の詳細（Ｎ＝１１）を示す説明図である。図８の文字情報テーブルを圧縮符号長単位で葉数（文字情報の総種類数）を集計した結果が、図８における補正前の葉数となる。ここで、補正Ａとは、圧縮符号長の上限長Ｎ（すなわち、２N分枝無節点ハフマン木Ｈの最大枝数２Nのべき数Ｎ）以上の圧縮符号長に割り当てられた葉数を、圧縮符号長の上限長Ｎに集約する補正である。この場合、補正前での最大圧縮符号長は１７ビットであるが、文字情報の総種類数が１３０５種であるため、圧縮符号長の上限長Ｎは、Ｎ＝１１となる。したがって、補正Ａでは、圧縮符号長１１ビットの葉数が、圧縮符号長が１１ビット〜１７ビットの葉数の総和（１１９０個）となる。
【００７９】
そして、情報処理装置４００は、生起確率総和を求める。圧縮符号長ごとの生起確率は決められているため（５ビットなら１／２5）、圧縮符号長ごとに生起確率を葉数で乗じることで、圧縮符号長ごとの乗算結果が得られる。たとえば、補正Ａにおける圧縮符号長５ビットの葉数は２である。圧縮符号長５ビットの生起確率は、１／２5である。したがって、補正Ａにおける圧縮符号長５ビットの生起確率は、２×（１／２5）＝１／２4となる。圧縮符号長６ビット以降も同様に補正Ａにおける圧縮符号長生起確率を求める。そして、補正Ａ後における各圧縮符号長の生起確率を合計することで、補正Ａでの生起確率総和が得られる。
【００８０】
そして、情報処理装置４００は、生起確率総和が１以下であるか否かを判断する。しきい値ｔは０＜ｔ≦１である。しきい値ｔを設けたくない場合は、ｔ＝１とすればよい。しきい値ｔ未満であれば、補正Ｂに移行する。しきい値ｔ以上１以下である場合は、補正Ｂに移行せず、この時点での圧縮符号長ごとの葉数で確定する。
【００８１】
補正Ｂは、補正Ａでの圧縮符号長群（５ビット〜１２ビット）は変えずに、葉数を更新する補正である。具体的には、補正Ａでの生起確率総和が、しきい値ｔ以上１以下でない場合におこなわれる補正である。より具体的には、補正Ｂは２種類ある。
【００８２】
１つ目は、生起確率総和がしきい値ｔ未満である場合、生起確率総和が１以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を増加させる補正（以下、補正Ｂ+）である。もう１つは、生起確率総和が１より大きい場合、生起確率総和が１以下に割り込んでから１以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を減少させる補正（以下、補正Ｂ-）である。
【００８３】
図９に示した例では、補正Ａでの生起確率総和が「１．１４６」であるため、補正Ｂ-をおこなうこととなる。なお、補正Ｂ+および補正Ｂ-のいずれの補正Ｂであっても、葉数を生起確率総和で割るという同じ補正をおこなう。
【００８４】
まず、補正Ｂ-の１回目（補正Ｂ-１）では、圧縮符号長ごとの補正Ａでの葉数を、前回の補正（この場合は補正Ａ）の生起確率の総和（１．１４６）で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Ａでの圧縮符号長の上限長Ｎ（Ｎ＝１１ビット）については、前回の補正（この場合は補正Ａ）の生起確率総和（１．１４６）で割ることはせず、葉の総数（１３０５個）から、補正Ｂ-１での圧縮符号長ごとの葉の総数（圧縮符号長の上限長Ｎの葉数除く）を引くことで、圧縮符号長の上限長Ｎの葉数を求める。この場合は、１２０８個である。
【００８５】
このあと、情報処理装置４００は、補正Ａの場合と同様の計算処理により、補正Ｂ-１での生起確率総和を求める。そして、情報処理装置４００は、補正Ｂ-１での生起確率総和が１以下の最大漸近値に収束したか否かを判断する。補正Ｂ-１での生起確率総和が１以下の最大漸近値に収束していなければ、補正Ｂ-の２回目（補正Ｂ-２）に移行する。最大漸近値に収束した場合は、補正Ｂ-２に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正Ｂ-１で更新された生起確率総和「１．０４２」は１より大きいため、最大漸近値に収束しておらず、補正Ｂ-２に移行する。
【００８６】
補正Ｂ-２では、圧縮符号長ごとの補正Ｂ-１での葉数を、前回の補正（この場合は補正Ｂ-１）の生起確率総和（１．０４２）で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Ｂ-１での圧縮符号長の上限長Ｎ（Ｎ＝１１ビット）については、前回の補正（この場合は補正Ｂ-１）の生起確率総和（１．０４２）で割ることはせず、葉の総数（１３０５個）から、補正Ｂ-２での圧縮符号長ごとの葉の総数（圧縮符号長の上限長Ｎの葉数除く）を引くことで、圧縮符号長の上限長Ｎの葉数を求める。この場合は、１２１５個である。
【００８７】
このあと、情報処理装置４００は、補正Ｂ-１の場合と同様の計算処理により、補正Ｂ-２での生起確率総和を求める。そして、情報処理装置４００は、補正Ｂ-２での生起確率総和が１以下の最大漸近値に収束したか否かを判断する。補正Ｂ-２での生起確率総和が１以下の最大漸近値に収束していなければ、補正Ｂ-の３回目（補正Ｂ-３）に移行する。最大漸近値に収束した場合は、補正Ｂ-３に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正Ｂ-２で更新された生起確率総和「０．９８２」は１以下であるが、最大漸近値に収束しているかが不明であるため、補正Ｂ-３に移行する。
【００８８】
補正Ｂ-３では、圧縮符号長ごとの補正Ｂ-２での葉数を、前回の補正（この場合は補正Ｂ-２）の生起確率総和（０．９８２）で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Ｂ-２での圧縮符号長の上限長Ｎ（Ｎ＝１１ビット）については、前回の補正（この場合は補正Ｂ-２）の生起確率総和（０．９８２）で割ることはせず、葉の総数（１３０５個）から、補正Ｂ-３での圧縮符号長ごとの葉の総数（圧縮符号長の上限長Ｎの葉数除く）を引くことで、圧縮符号長の上限長Ｎの葉数を求める。この場合は、１２１５個である。
【００８９】
このあと、情報処理装置４００は、補正Ｂ-２の場合と同様の計算処理により、補正Ｂ-３での生起確率総和を求める。そして、情報処理装置４００は、補正Ｂ-３での生起確率総和が１以下の最大漸近値に収束したか否かを判断する。補正Ｂ-３での生起確率総和が１以下の最大漸近値に収束していなければ、補正Ｂ-の４回目（補正Ｂ-４）に移行する。最大漸近値に収束した場合は、補正Ｂ-４に移行せず、この時点での圧縮符号長ごとの葉数で確定する。
【００９０】
補正Ｂ-３で更新された生起確率総和「０．９８２」は、補正Ｂ-２で更新された生起確率総和「０．９８２」と同じ値である。すなわち、補正Ｂ-３での各圧縮符号長の葉数と補正Ｂ-２での各圧縮符号長の葉数とは同じである。この場合、情報処理装置４００は、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。
【００９１】
このようにして、葉数が確定するまで補正Ｂ-を継続することとなる。図９の例では、補正Ｂ-３で圧縮符号長ごとの葉数が確定したこととなる。このあと、情報処理装置４００は、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長Ｎ（この場合はＮ＝１１ビット）から降順に、２0、２1、２2、２3、２4、２5、２6として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。
【００９２】
図１０は、文字情報ごとの補正結果を示す説明図である。図１０において、文字情報テーブルには、補正Ａ、補正Ｂ-１〜補正Ｂ-２までの補正結果が追加されている。図１０に示したように、補正により圧縮符号長別の葉数が更新されるため、順位項目の１位の文字情報から短い圧縮符号長が割り当てられることとなる。
【００９３】
たとえば、補正Ｂ-２で確定した場合、圧縮符号長６ビットでは葉数が６、圧縮符号長７ビットでは葉数が１８、…、圧縮符号長１１ビットでは葉数が１２１５となっている。したがって、順位が１位から６位までの文字情報（葉数６個分）については６ビットの圧縮符号長、順位が７位から２４位までの文字情報（葉数１８個分）については７ビットの圧縮符号長、…、順位が９１位から１３０５位までの文字情報（葉数１２１５個分）については１１ビットの圧縮符号長が割り当てられる。
【００９４】
そして、情報処理装置４００は、文字情報と文字情報に割り当てられた圧縮符号長と圧縮符号長ごとの葉数とに基づいて、文字情報ごとに圧縮符号を割り当て、葉の構造体を生成することとなる。たとえば、出現率１位の単一文字「０」は５ビットの圧縮符号長が割り当てられているため、圧縮符号が「００００００」となる。したがって、圧縮符号「００００００」、圧縮符号長「６」、文字情報「０」を含む葉Ｌ１の構造体が生成されることとなる。
【００９５】
なお、上述した補正処理では、圧縮符号長が５ビット〜１１ビットとしたが、２グラム文字列の圧縮符号マップＭを分割する場合もあるため、圧縮符号長は偶数ビットとなるように、補正してもよい。具体的には、たとえば、圧縮符号長５ビットおよび７ビットの文字情報については６ビット、９ビットの文字情報については８ビット、１１ビットの文字情報については１０ビットとする。
【００９６】
図１１は、図６の（６）葉へのポインタ生成の詳細（Ｎ＝１１）を示す説明図である。図１１は、圧縮符号長の上限Ｎが１１ビットの場合の葉へのポインタを示している。図１１において、圧縮符号長が６ビットの葉数は６個であるため、圧縮符号は「００００００」〜「０００１０１」が割り当てられる。また、圧縮符号長が６ビットの葉当たりの枝数は、３２本である。したがって、圧縮符号長が６ビットの圧縮符号についての葉へのポインタは、３２（＝２5）個生成される。具体的には、葉へのポインタの先頭６ビットが圧縮符号で後続５ビットが３２種のビット列となる。したがって、圧縮符号長が６ビットの圧縮符号の各々について、３２種の葉へのポインタが生成されることとなる。
【００９７】
なお、図示はしないが、圧縮符号長が７ビットの葉数は１８個であるため、圧縮符号「０００１１００」〜「００１１１１１」が割り当てられる。また、圧縮符号長が７ビットの葉当たりの枝数は、１６本である。したがって、圧縮符号長が７ビットの圧縮符号についての葉へのポインタは、１６（＝２4）個生成される。具体的には、葉へのポインタの先頭７ビットが圧縮符号で後続４ビットが１６種のビット列となる。したがって、圧縮符号長が７ビットの圧縮符号の各々について、１６種の葉へのポインタが生成されることとなる。
【００９８】
同様に、圧縮符号長が８ビットの葉数は２３個であるため、圧縮符号「０１００００００」〜「０１０１０１１０」が割り当てられる。また、圧縮符号長が８ビットの葉当たりの枝数は、８本である。したがって、圧縮符号長が８ビットの圧縮符号についての葉へのポインタは、８（＝２3）個生成される。具体的には、葉へのポインタの先頭８ビットが圧縮符号で後続３ビットが８種のビット列となる。したがって、圧縮符号長が８ビットの圧縮符号の各々について、８種の葉へのポインタが生成されることとなる。
【００９９】
同様に、圧縮符号長が９ビットの葉数は２３個であるため、圧縮符号「０１０１０１１１０」〜「０１１０００１００」が割り当てられる。また、圧縮符号長が９ビットの葉当たりの枝数は、４本である。したがって、圧縮符号長が９ビットの圧縮符号についての葉へのポインタは、４（＝２2）個生成される。具体的には、葉へのポインタの先頭９ビットが圧縮符号で後続２ビットが４種のビット列となる。したがって、圧縮符号長が９ビットの圧縮符号の各々について、４種の葉へのポインタが生成されることとなる。
【０１００】
同様に、圧縮符号長が１０ビットの葉数は２０個であるため、圧縮符号「０１１００００１１０」〜「０１１００１１１０１」が割り当てられる。また、圧縮符号長が１０ビットの葉当たりの枝数は、２本である。したがって、圧縮符号長が１０ビットの圧縮符号についての葉へのポインタは、２（＝２1）個生成される。具体的には、葉へのポインタの先頭１０ビットが圧縮符号で後続１ビットが２種のビット列となる。したがって、圧縮符号長が１０ビットの圧縮符号の各々について、２種の葉へのポインタが生成されることとなる。
【０１０１】
同様に、圧縮符号長が１１ビットの葉数は１２１５個であるため、圧縮符号「０１１００１１１１００」〜「１１１１１１１１０１０」が割り当てられる。また、圧縮符号長が１１ビットの葉当たりの枝数は、１本である。したがって、圧縮符号長が１１ビットの圧縮符号についての葉へのポインタは、１（＝２0）個生成される。具体的には、圧縮符号がそのまま葉へのポインタとなる。したがって、圧縮符号長が１１ビットの圧縮符号の各々について、１種の葉へのポインタが生成されることとなる。
【０１０２】
図１２は、図６の（７）２N分枝無節点ハフマン木Ｈの構築の詳細（Ｎ＝１１）を示す説明図である。図１２では、Ｎ＝１１とした場合の２０４８（＝２11）分枝無節点ハフマン木Ｈを示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。
【０１０３】
具体的には、圧縮符号長が６ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図１１に示したように３２個生成される。したがって、葉Ｌ１の構造体については、根の構造体に３２個の葉Ｌ１へのポインタＬ１Ｐ（１）〜Ｌ１Ｐ（３２）が格納される。葉Ｌ２の構造体〜葉Ｌ６の構造体についても同様である。葉Ｌ７以降の構造体については、図１２のとおりである。
【０１０４】
図１３は、葉の構造体を示す説明図である。葉の構造体は、第１領域〜第４領域を有するデータ構造体である。葉の構造体は、第１領域には、圧縮符号およびその圧縮符号長が格納される。第２領域には、葉の標識と伸長種別（図８参照）、出現率（図１０参照）が格納される。第３領域には、伸長種別に応じて特定単一文字である１６ビットの文字コード、非特定単一文字の文字コードが分割された８ビットの分割文字コード、または基礎単語へのポインタが格納される。基礎単語へのポインタにより基礎単語の構造体内の基礎単語が指定される。また、照合フラグも格納されている。照合フラグはデフォルトでは「０」である。「０」の場合は、伸長する文字をそのまま伸長バッファに書き出し、「１」の場合は、＜ｃｏｌｏｒ＞タグと＜／ｃｏｌｏｒ＞タグで挟み込んで伸長バッファに書き出す。
【０１０５】
第４領域には、格納されている文字情報の出現率と出現率領域が格納される。出現率とは、図８に示した文字情報の出現率である。出現率領域については図４８および図４９で説明する。なお、第４領域には、そのほか、符号種別と符号区分が格納される。符号種別とは、文字コードが数字、英字、特殊記号、カタカナ、ひらがな、漢字のいずれに該当するか、または基礎単語へのポインタであるかを識別する情報である。符号区分とは、文字コードが１６ビットであるか８ビットであるかを識別する情報である。１６ビットの文字コードである場合または予約語である場合、符号区分として“１”を割り当て、８ビットの分割文字コードの場合、符号区分として“０”を割り当てる。
【０１０６】
なお、第１領域〜第４領域内の情報は、後述する構築処理（ステップＳ３２０５）において格納されることとなる。
【０１０７】
図１４は、特定単一文字の構造体を示す説明図である。特定単一文字の構造体１４００は、特定単一文字コードｅ♯とその葉Ｌ♯へのポインタを格納するデータ構造体である。具体的には、たとえば、情報処理装置４００は、対象ファイル群Ｆｓからの集計結果が得られたときに、情報処理装置４００が、特定単一文字の構造体１４００に特定単一文字コードｅ♯を格納する。そして、情報処理装置４００は、２N分枝無節点ハフマン木Ｈが構築されると、２N分枝無節点ハフマン木Ｈにおける各葉の構造体に格納された圧縮符号に対応する、特定単一文字の構造体１４００における特定文字コードｅ♯へのポインタを格納する。
【０１０８】
また、特定単一文字コードｅ♯へのポインタが対応する葉の構造体に格納されると、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける各特定単一文字コードｅ♯に対応する葉へのポインタを、特定単一文字の構造体１４００内の対応する特定単一文字コードｅ♯に関連付けて格納する。これにより、特定単一文字の構造体１４００が生成される。
【０１０９】
図１５は、分割文字コードの構造体を示す説明図である。分割文字コードの構造体１５００は、分割文字コードとその葉Ｌ♯へのポインタを格納する。具体的には、たとえば、情報処理装置４００は、対象ファイル群Ｆｓからの集計結果が得られたときに、情報処理装置４００が、分割文字コードの構造体１５００に分割文字コードを格納する。そして、情報処理装置４００は、２N分枝無節点ハフマン木Ｈが構築されると、２N分枝無節点ハフマン木Ｈにおける各葉の構造体に格納された圧縮符号に対応する、分割文字コードの構造体１５００における分割文字コードへのポインタを格納する。
【０１１０】
また、分割文字コードへのポインタが対応する葉の構造体に格納されると、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける各分割文字コードに対応する葉へのポインタを、分割文字コードの構造体１５００内の対応する分割文字コードに関連付けて格納する。これにより、分割文字コードの構造体１５００が生成される。
【０１１１】
図１６は、基礎単語の構造体を示す説明図である。基礎単語の構造体１６００は、基礎単語とその葉Ｌ♯へのポインタを格納するデータ構造体である。基礎単語の構造体１６００には、あらかじめ基礎単語が格納されている。情報処理装置４００は、２N分枝無節点ハフマン木Ｈが構築されると、２N分枝無節点ハフマン木Ｈにおける各葉の構造体に格納された圧縮符号に対応する、基礎単語の構造体１６００における基礎単語へのポインタを格納する。
【０１１２】
また、基礎単語へのポインタが対応する葉の構造体に格納されると、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける各基礎単語に対応する葉へのポインタを、基礎単語の構造体１６００内の対応する基礎に関連付けて格納することとなる。
【０１１３】
＜圧縮符号マップＭの作成例＞
第１生成部４０２により２N分枝無節点ハフマン木Ｈが生成されると、作成部４０４は、単一文字の圧縮符号マップＭ、上位分割文字コードの圧縮符号マップＭ、下位分割文字コードの圧縮符号マップＭ、単語の圧縮符号マップＭ、２グラム文字列の圧縮符号マップＭを作成する。以下、単一文字の圧縮符号マップＭ、上位分割文字コードの圧縮符号マップＭ、下位分割文字コードの圧縮符号マップＭ、２グラム文字列の圧縮符号マップＭの詳細な作成例について説明する。なお、基礎単語の圧縮符号マップＭは、単一文字の圧縮符号マップＭと同様に行われるため省略する。
【０１１４】
図１７は、圧縮符号マップＭの生成例を示す説明図である。図１７では、対象ファイルＦｉ内に『竜馬は脱藩した』という文字列が記述されているものとする。
【０１１５】
（Ａ）まず、先頭文字「竜」が対象文字である。対象文字「竜」は特定単一文字であるため、２N分枝無節点ハフマン木Ｈにアクセスして特定単一文字「竜」の圧縮符号を取得し、特定単一文字「竜」の出現マップを特定する。未生成の場合は、特定単一文字「竜」の圧縮符号をポインタとし、かつ、対象ファイルの存否を示すビット列をオール０にした特定単一文字「竜」の出現マップを生成する。そして、特定単一文字「竜」の出現マップについて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。
【０１１６】
（Ｂ）つぎに、対象文字を１グラムシフトして、対象文字を「馬」にする。対象文字「馬」は特定単一文字であるため、２N分枝無節点ハフマン木Ｈにアクセスして特定単一文字「馬」の圧縮符号を取得し、特定単一文字「馬」の出現マップを特定する。未生成の場合は、特定単一文字「馬」の圧縮符号をポインタとし、かつ、対象ファイルの存否を示すビット列をオール０にした特定単一文字「馬」の出現マップを生成する。そして、特定単一文字「馬」の出現マップについて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。
【０１１７】
また、対象文字が「馬」にシフトされた場合、「竜馬」という２グラム文字列が得られるため、「竜」の圧縮符号と「馬」の圧縮符号を結合した「竜馬」の圧縮符号列により、２グラム文字列「竜馬」の出現マップを特定する。未生成の場合は、「竜馬」の圧縮符号列をポインタとし、かつ、対象ファイルの存否を示すビット列をオール０にした２グラム文字列「竜馬」の出現マップを生成する。そして、２グラム文字列「竜馬」の出現マップにおいて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。
【０１１８】
（Ｃ）つぎに、対象文字を１グラムシフトして、対象文字を「は」にする。対象文字「は」についても（Ｂ）と同様に処理することで、特定単一文字「は」の出現マップについて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。同様に、２グラム文字列「馬は」の出現マップにおいて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。
【０１１９】
（Ｄ）つぎに、対象文字を１グラムシフトして、対象文字を「脱」にする。対象文字「脱」は特定単一文字ではないため、対象文字「脱」の文字コード「０ｘ８１３１」を、上位分割文字コード「０ｘ８１」と下位分割文字コード「０ｘ３１」に分割する。そして、対象文字を上位分割文字コード「０ｘ８１」にする。上位分割文字コード「０ｘ８１」についても、特定単一文字と同様に処理することで、上位分割文字コード「０ｘ８１」の出現マップについて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。同様に、２グラム文字列「は  ０ｘ８１」の出現マップにおいて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。
【０１２０】
（Ｅ）つぎに、対象文字を１グラムシフトして、文字「脱」の下位分割文字コード「０ｘ３１」を、対象文字にする。下位分割文字コード「０ｘ３１」についても、同様に処理することで、下位分割文字コード「０ｘ３１」の出現マップについて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。同様に、２グラム文字列「０ｘ８１  ０ｘ３１」の出現マップにおいて対象ファイルＦｉのビットをＯＮ（“０”→“１”）にする。
【０１２１】
（Ｆ）〜（Ｉ）についても同様の処理をおこない、最後の対象ファイルＦｎについても処理を完了することで、単一文字、上位分割文字コード、下位分割文字コード、２グラム文字列のそれぞれについて、圧縮符号マップＭが生成される。
【０１２２】
＜圧縮符号マップＭ生成処理手順＞
つぎに、作成部４０４による圧縮符号マップ作成処理手順例について説明する。
【０１２３】
図１８は、作成部４０４による圧縮符号マップ作成処理手順例を示すフローチャートである。情報処理装置４００は、集計処理（ステップＳ１８０１）、マップ割当数決定処理（ステップＳ１８０２）、再集計処理（ステップＳ１８０３）、ハフマン木生成処理（ステップＳ１８０４）、マップ作成処理（ステップＳ１８０５）を実行する。情報処理装置４００は、集計部４０１により集計処理（ステップＳ１８０１）〜再集計処理（ステップＳ１８０３）を実行する。また、第１生成部４０２によりハフマン木生成処理（ステップＳ１８０４）を実行し、作成部４０４によりマップ作成処理（ステップＳ１８０５）を実行する。
【０１２４】
集計処理（ステップＳ１８０１）とは、対象ファイル群Ｆｓ内の単一文字や基礎単語の出現回数（出現頻度ともいう）を計数する処理である。マップ割当数決定処理（ステップＳ１８０２）とは、集計処理（ステップＳ１８０１）で集計された単一文字および基礎単語についてのマップ割当数を決定する処理である。マップ割当数に対応する出現順位の単一文字および基礎単語が、それぞれ特定単一文字および基礎単語となる。
【０１２５】
再集計処理（ステップＳ１８０３）とは、単一文字のうち特定単一文字以外の非特定単一文字を分割して、上位分割文字コードおよび下位分割文字コードとし、それぞれの出現回数を集計する処理である。また、再集計処理（ステップＳ１８０３）では、２グラム文字列の出現回数も集計する。
【０１２６】
ハフマン木生成処理（ステップＳ１８０４）とは、図８〜図１３に示したように、２N分枝無節点ハフマン木Ｈを生成する処理である。マップ作成処理（ステップＳ１８０５）とは、特定単一文字、基礎単語、上位分割文字コード、下位分割文字コード、２グラム文字列についての圧縮符号マップＭを生成する処理である。
【０１２７】
（集計処理（ステップＳ１８０１））
図１９は、図１８に示した集計処理（ステップＳ１８０１）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、ファイル番号ｉをｉ＝１に設定し（ステップＳ１９０１）、対象ファイルＦｉを読み込む（ステップＳ１９０２）。そして、情報処理装置４００は、対象ファイルＦｉの集計処理を実行する（ステップＳ１９０３）。対象ファイルＦｉの集計処理（ステップＳ１９０３）の詳細については、図２０で説明する。このあと、情報処理装置４００は、ファイル番号ｉがｉ＞ｎ（ｎは対象ファイルＦ１〜Ｆｎの総数）であるか否かを判断する（ステップＳ１９０４）。
【０１２８】
ｉ＞ｎでない場合（ステップＳ１９０４：Ｎｏ）、情報処理装置４００は、ｉをインクリメントし（ステップＳ１９０５）、ステップＳ１９０２に戻る。一方、ｉ＞ｎである場合（ステップＳ１９０４：Ｙｅｓ）、情報処理装置４００は、図１８に示したマップ割当数決定処理（ステップＳ１８０２）に移行して、集計処理（ステップＳ１８０１）を終了する。この集計処理（ステップＳ１８０１）によれば、対象ファイルＦｉごとに対象ファイルＦｉの集計処理（ステップＳ１９０３）を実行することができる。
【０１２９】
（対象ファイルＦｉの集計処理（ステップＳ１９０３））
図２０は、図１９に示した対象ファイルＦｉの集計処理（ステップＳ１９０３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、対象文字を対象ファイルＦｉの先頭文字とし（ステップＳ２００１）、基礎単語集計処理を実行する（ステップＳ２００２）。基礎単語集計処理（ステップＳ２００２）の詳細については図２２で説明する。このあと、情報処理装置４００は、文字出現頻度集計テーブルにおいて対象文字の出現回数を１増加する（ステップＳ２００３）。
【０１３０】
図２１は、文字出現頻度集計テーブルを示す説明図である。文字出現頻度集計テーブル２１００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する文字が出現する都度出現回数を１ずつ増加させる。
【０１３１】
図２０に戻り、情報処理装置４００は、対象文字が対象ファイルＦｉの末尾文字であるか否かを判断する（ステップＳ２００４）。対象文字が対象ファイルＦｉの末尾文字でない場合（ステップＳ２００４：Ｎｏ）、情報処理装置４００は、対象文字を末尾方向へ１文字シフトし（ステップＳ２００５）、ステップＳ２００２に戻る。
【０１３２】
一方、対象文字が対象ファイルＦｉの末尾文字である場合（ステップＳ２００４：Ｙｅｓ）、情報処理装置４００は、ステップＳ１９０４に移行して、対象ファイルＦｉの集計処理（ステップＳ１９０３）を終了する。この対象ファイルＦｉの集計処理（ステップＳ１９０３）によれば、対象ファイル群Ｆｓに存在する基礎単語および単一文字の出現頻度を集計することができる。
【０１３３】
（基礎単語集計処理（ステップＳ２００２））
図２２は、図２０に示した基礎単語集計処理（ステップＳ２００２）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、最長一致検索処理を実行し（ステップＳ２２０１）、最長一致した基礎単語があったか否かを判断する（ステップＳ２２０２）。最長一致検索処理（ステップＳ２２０２）の詳細については図２４で説明する。最長一致した基礎単語があった場合（ステップＳ２２０２：Ｙｅｓ）、情報処理装置４００は、基礎単語出現頻度集計テーブルにおいて最長一致した基礎単語の出現回数を１増加し（ステップＳ２２０３）、ステップＳ２００３に移行する。
【０１３４】
図２３は、基礎単語出現頻度集計テーブルを示す説明図である。基礎単語出現頻度集計テーブル２３００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する基礎単語が出現する都度出現回数を１ずつ増加させる。
【０１３５】
図２２に戻り、最長一致した基礎単語がなかった場合（ステップＳ２２０２：Ｎｏ）、ステップＳ２００３に移行する。これにより、基礎単語集計処理（ステップＳ２００２）を終了する。この基礎単語集計処理（ステップＳ２００２）によれば、最長一致検索処理（ステップＳ２２０１）により基礎単語を計数することができるため、文字列が長い基礎単語を優先的に計数することができる。
【０１３６】
（最長一致検索処理（ステップＳ２２０１））
図２４は、図２２に示した最長一致検索処理（ステップＳ２２０１）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、ｃ＝１とする（ステップＳ２４０１）。ｃは対象文字からの文字数（対象文字含む）である。ｃ＝１の場合は、対象文字だけである。つぎに、情報処理装置４００は、対象文字からｃ文字目までの対象文字列と前方一致する基礎単語を２分探索する（ステップＳ２４０２）。そして、情報処理装置４００は、検索により基礎単語があるか否かを判断する（ステップＳ２４０３）。２分探索により基礎単語がヒットしなかった場合（ステップＳ２４０３：Ｎｏ）、ステップＳ２４０６に移行する。
【０１３７】
一方、２分探索により基礎単語がヒットした場合（ステップＳ２４０３：Ｙｅｓ）、情報処理装置４００は、ヒットした基礎単語と対象文字列とが完全一致するか否かを判断する（ステップＳ２４０４）。そして、完全一致しない場合（ステップＳ２４０４：Ｎｏ）、ステップＳ２４０６に移行する。一方、完全一致する場合（ステップＳ２４０４：Ｙｅｓ）、情報処理装置４００は、最長一致候補として記憶装置に保持し（ステップＳ２４０５）、ステップＳ２４０６に移行する。
【０１３８】
ステップＳ２４０６では、情報処理装置４００は、対象文字列について２分探索が終了したか否かを判断する（ステップＳ２４０６）。具体的には、情報処理装置４００は、末尾の基礎単語まで２分探索したか否かを判断する。２分探索が終了していない場合（ステップＳ２４０６：Ｎｏ）、情報処理装置４００は、ステップＳ２４０２に移行して、２分探索が終了するまで継続する。
【０１３９】
一方、対象文字列について２分探索が終了した場合（ステップＳ２４０６：Ｙｅｓ）、情報処理装置４００は、ｃ文字目の文字が対象ファイルＦｉの末尾文字であるか否かを判断する（ステップＳ２４０７）。ｃ文字目の文字が対象ファイルＦｉの末尾文字である場合（ステップＳ２４０７：Ｙｅｓ）、ステップＳ２４１０に移行する。一方、ｃ文字目の文字が対象ファイルＦｉの末尾文字でない場合（ステップＳ２４０７：Ｎｏ）、情報処理装置４００は、ｃ＞ｃｍａｘであるか否かを判断する（ステップＳ２４０８）。ｃｍａｘは予め設定された値であり、これにより対象文字列の上限文字数が設定される。
【０１４０】
ｃ＞ｃｍａｘでない場合（ステップＳ２４０８：Ｎｏ）、情報処理装置４００は、ｃをインクリメントして（ステップＳ２４０９）、ステップＳ２４０２に戻る。一方、ｃ＞ｃｍａｘである場合（ステップＳ２４０８：Ｙｅｓ）、情報処理装置４００は、最長一致候補があるか否かを判断する（ステップＳ２４１０）。具体的には、情報処理装置４００は、ステップＳ２４０５において１つでも最長一致候補がメモリに保持されているか否かを判断する。
【０１４１】
最長一致候補がある場合（ステップＳ２４１０：Ｙｅｓ）、情報処理装置４００は、最長一致候補のうち最長文字列を、最長一致した基礎単語に決定する（ステップＳ２４１１）。そして、ステップＳ２２０２に移行する。一方、ステップＳ２４１０において、最長一致候補が１つもない場合（ステップＳ２４１０：Ｎｏ）、ステップＳ２２０２に移行する。これにより、最長一致検索処理（ステップＳ２２０１）を終了する。この最長一致検索処理（ステップＳ２２０１）によれば、基礎単語の構造体にある基礎単語の中から、完全一致した文字列の中でかつ最長の文字列を基礎単語として検索することができる。
【０１４２】
（マップ割当数決定処理（ステップＳ１８０２））
図２５は、図１８に示したマップ割当数決定処理（ステップＳ１８０２）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、集計処理（ステップＳ１８０１）による基礎単語ごとの出現頻度を示す基礎単語出現頻度集計テーブル２３００と単一文字ごとの出現頻度を示す文字出現頻度集計テーブル２１００を出現頻度の高い順にソートする（ステップＳ２５０１）。そして、情報処理装置４００は、ソート後の基礎単語出現頻度集計テーブル２３００を参照して、基礎単語の出現順位ＲｗをＲｗ＝１とし（ステップＳ２５０２）、出現順位Ｒｗまでの累積出現回数Ａｒｗを計数する（ステップＳ２５０３）。そして、情報処理装置４００は、下記式（１）を満たすか否かを判断する（ステップＳ２５０４）。
【０１４３】
Ａｒｗ＞Ｐｗ×Ａｗ・・・（１）
Ａｗは集計された基礎単語の総出現回数である。
【０１４４】
上記（１）式を満たさない場合（ステップＳ２５０４：Ｎｏ）、情報処理装置４００は、出現順位Ｒｗをインクリメントして（ステップＳ２５０５）、ステップＳ２５０３に戻る。すなわち、上記式（１）を満たすまで出現順位Ｒｗを下げ続ける。
【０１４５】
そして、上記式（１）を満たした場合（ステップＳ２５０４：Ｙｅｓ）、情報処理装置４００は、基礎単語のマップ割当数ＮｗをＮｗ＝Ｒｗ−１とする（ステップＳ２５０６）。ここで、マップ割当数Ｎｗとは、マップ作成処理（ステップＳ１８０５）で生成される基礎単語出現マップに割り当てられる基礎単語数であり、基礎単語出現マップのレコード数（行数）を意味する。
【０１４６】
また、情報処理装置４００は、単一文字の出現順位ＲｃをＲｃ＝１とし（ステップＳ２５０７）、出現順位Ｒｃまでの累積出現回数Ａｒｃを計数する（ステップＳ２５０８）。そして、情報処理装置４００は、下記式（２）を満たすか否かを判断する（ステップＳ２５０９）。
【０１４７】
Ａｒｃ＞Ｐｃ×Ａｃ・・・（２）
Ａｃは集計された単一文字の総出現回数である。
【０１４８】
上記（２）式を満たさない場合（ステップＳ２５０９：Ｎｏ）、情報処理装置４００は、出現順位Ｒｃをインクリメントして（ステップＳ２５１０）、ステップＳ２５０８に戻る。すなわち、上記式（２）を満たすまで出現順位Ｒｃを下げ続ける。
【０１４９】
そして、上記式（２）を満たした場合（ステップＳ２５０９：Ｙｅｓ）、情報処理装置４００は、単一文字のマップ割当数ＮｃをＮｃ＝Ｒｃ−１とする（ステップＳ２５１１）。ここで、マップ割当数Ｎｃとは、マップ作成処理（ステップＳ１８０５）で生成される特定単一文字出現マップに割り当てられる特定単一文字数であり、特定単一文字出現マップのレコード数（行数）を意味する。この後、再集計処理（ステップＳ１８０３）に移行して、マップ割当数決定処理（ステップＳ１８０２）を終了する。
【０１５０】
このマップ割当数決定処理（ステップＳ１８０２）によれば、マップ作成処理（ステップＳ１８０５）において目標出現率Ｐｗに応じた数の基礎単語分について基礎単語出現マップを生成することができる。したがって、すべての基礎単語についてマップ割当をおこなう必要はなく、目標出現率Ｐｗにしたがって決められるため、マップサイズの最適化を図ることができる。
【０１５１】
また、単一文字についても、マップ作成処理（ステップＳ１８０５）において目標出現率Ｐｃに応じた数の単一文字分について特定単一文字の圧縮符号マップＭを生成することができる。したがって、すべての単一文字についてマップ割当をおこなう必要はなく、目標出現率Ｐｃにしたがって決められるため、マップサイズの最適化を図ることができる。
【０１５２】
（再集計処理（ステップＳ１８０３））
図２６は、図１８に示した再集計処理（ステップＳ１８０３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、ファイル番号ｉをｉ＝１に設定し（ステップＳ２６０１）、対象ファイルＦｉを読み込む（ステップＳ２６０２）。そして、情報処理装置４００は、対象ファイルＦｉの再集計処理を実行する（ステップＳ２６０３）。対象ファイルＦｉの再集計処理（ステップＳ２６０３）の詳細については、図２７で説明する。このあと、情報処理装置４００は、ファイル番号ｉがｉ＞ｎ（ｎは対象ファイルＦ１〜Ｆｎの総数）であるか否かを判断する（ステップＳ２６０４）。
【０１５３】
ｉ＞ｎでない場合（ステップＳ２６０４：Ｎｏ）、情報処理装置４００は、ｉをインクリメントし（ステップＳ２６０５）、ステップＳ２６０２に戻る。一方、ｉ＞ｎである場合（ステップＳ２６０４：Ｙｅｓ）、情報処理装置４００は、図１８に示したハフマン木生成処理（ステップＳ１８０４）に移行して、再集計処理（ステップＳ１８０３）を終了する。この再集計処理（ステップＳ１８０３）によれば、対象ファイルＦｉごとに対象ファイルＦｉの再集計処理（ステップＳ２６０３）を実行することができる。
【０１５４】
（対象ファイルＦｉの再集計処理（ステップＳ２６０３））
図２７は、対象ファイルＦｉの再集計処理（ステップＳ２６０３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、対象文字を対象ファイルＦｉの先頭文字とし（ステップＳ２７０１）、対象文字が特定単一文字であるか否かを判断する（ステップＳ２７０２）。特定単一文字である場合（ステップＳ２７０２：Ｙｅｓ）、分割せずにステップＳ２７０４に移行する。
【０１５５】
一方、特定単一文字でない場合（ステップＳ２７０２：Ｎｏ）、情報処理装置４００は、対象文字の文字コードを上位分割文字コードと下位分割文字コードとに分割する（ステップＳ２７０３）。そして、ステップＳ２７０４に移行する。
【０１５６】
ステップＳ２７０４では、情報処理装置４００は、上位分割文字コード出現頻度集計テーブルに対し、ステップＳ２７０３で得られた上位分割文字コードと同一分割文字コードの出現回数を１加算する（ステップＳ２７０４）。
【０１５７】
図２８は、上位分割文字コード出現頻度集計テーブルを示す説明図である。上位分割文字コード出現頻度集計テーブル２８００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する上位分割文字コードが出現する都度出現回数を１ずつ増加させる。
【０１５８】
また、図２７において、情報処理装置４００は、下位分割文字コード出現頻度集計テーブルに対し、ステップＳ２７０３で得られた下位分割文字コードと同一分割文字コードの出現回数を１加算する（ステップＳ２７０５）。
【０１５９】
図２９は、下位分割文字コード出現頻度集計テーブルを示す説明図である。下位分割文字コード出現頻度集計テーブル２９００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する下位分割文字コードが出現する都度出現回数を１ずつ増加させる。
【０１６０】
また、図２７において、情報処理装置４００は、２グラム文字列特定処理を実行する（ステップＳ２７０６）。２グラム文字列特定処理（ステップＳ２７０６）では、対象文字を基点とする２グラム文字列を特定する。２グラム文字列特定処理（ステップＳ２７０６）の詳細は図３０で説明する。
【０１６１】
情報処理装置４００は、２グラム文字列出現頻度集計テーブルに対し、２グラム文字列特定処理（ステップＳ２７０６）で特定された２グラム文字列の出現回数を１加算する（ステップＳ２７０７）。
【０１６２】
図３０は、図２７で示した２グラム文字列特定処理（ステップＳ２７０６）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、対象文字に対し、対象文字は分割されたか否かを判断する（ステップＳ３００１）。すなわち、情報処理装置４００は、対象文字が分割文字コードか否かを判断する。分割されていない場合（ステップＳ３００１：Ｎｏ）、すなわち、単一文字の場合、情報処理装置４００は、１つ前の文字があるか否かを判断する（ステップＳ３００２）。
【０１６３】
１つ前の文字がある場合（ステップＳ３００２：Ｙｅｓ）、情報処理装置４００は、１つ前の文字は分割されたか否かを判断する（ステップＳ３００３）。すなわち、情報処理装置４００は、１つ前の文字が分割文字コードか否かを判断する。分割されていない場合（ステップＳ３００３：Ｎｏ）、すなわち、単一文字の場合、情報処理装置４００は、対象文字の１つ前の単一文字と対象文字（単一文字）からなる文字列を、２グラム文字列に決定する（ステップＳ３００４）。そして、ステップＳ２７０７に移行する。
【０１６４】
一方、ステップＳ３００３において、１つ前の文字が分割された場合（ステップＳ３００３：Ｙｅｓ）、すなわち、分割文字コードである場合、その１つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、情報処理装置４００は、１つ前の文字である下位分割文字コードと対象文字からなる文字列を、２グラム文字列に決定する（ステップＳ３００５）。そして、ステップＳ２７０７に移行する。
【０１６５】
また、ステップＳ３００２において、１つ前の文字がない場合（ステップＳ３００２：Ｎｏ）、対象文字だけとなるため、２グラム文字列を決定せずに、ステップＳ２７０７に移行する。
【０１６６】
また、ステップＳ３００１において、対象文字が分割された場合（ステップＳ３００１：Ｙｅｓ）、すなわち、分割文字コードである場合、情報処理装置４００は、その分割文字コードが上位分割文字コードか下位分割文字コードであるかを判断する（ステップＳ３００６）。
【０１６７】
上位分割文字コードである場合（ステップＳ３００６：上位）、情報処理装置４００は、１つ前の文字は分割されたか否かを判断する（ステップＳ３００７）。すなわち、１つ前の文字が分割文字コードか否かを判断する。分割されていない場合（ステップＳ３００７：Ｎｏ）、すなわち、単一文字の場合、情報処理装置４００は、対象文字の１つ前の単一文字と対象文字から分割された上位分割文字コードからなる文字列を、２グラム文字列に決定する（ステップＳ３００８）。そして、ステップＳ２７０７に移行する。
【０１６８】
一方、ステップＳ３００７において、１つ前の文字が分割された場合（ステップＳ３００７：Ｙｅｓ）、すなわち、分割文字コードである場合、その１つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、情報処理装置４００は、１つ前の文字である下位分割文字コードと対象文字から分割された上位分割文字コードからなる文字列を、２グラム文字列に決定する（ステップＳ３００９）。そして、ステップＳ２７０７に移行する。
【０１６９】
また、ステップＳ３００６において、下位分割文字コードである場合（ステップＳ３００６：下位）、情報処理装置４００は、対象文字から分割された上位分割文字コードおよび下位分割文字コードからなる文字列を、２グラム文字列に決定する（ステップＳ３０１０）。そして、ステップＳ２７０７に移行する。
【０１７０】
この２グラム文字列特定処理（ステップＳ２７０６）によれば、対象文字が分割された場合であっても２グラム文字列を特定することができる。また、１文字シフトにしたがって２グラム文字列を特定するため、基礎単語の圧縮符号マップＭおよび特定単一文字の圧縮符号マップＭと同時並行で生成することができる。
【０１７１】
このように、上述した情報生成によれば、目標出現率Ｐｗ，Ｐｃにより、マップ作成される基礎単語数および単一文字数が制限されるため、無駄なマップ作成がなくなり、マップ作成の高速化およびマップサイズの最適化を同時に実現することができる。また、１文字シフトにより複数種類のマップ作成を同時並行で実行することができ、高精度な検索に用いる複数種類のマップ作成の効率化を図ることができる。
【０１７２】
図３１は、２グラム文字列出現頻度集計テーブルを示す説明図である。２グラム文字列出現頻度集計テーブル３１００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する２グラム文字列が出現する都度出現回数を１ずつ増加させる。
【０１７３】
このあと、情報処理装置４００は、対象文字の後続文字が対象ファイルＦｉ内にあるか否かを判断し（ステップＳ２７０８）、後続文字がある場合（ステップＳ２７０８：Ｙｅｓ）、後続文字を対象文字に設定し（ステップＳ２７０９）、ステップＳ２７０２に戻る。一方、後続文字がない場合（ステップＳ２７０８：Ｎｏ）、対象ファイルＦｉの再集計処理（ステップＳ２６０３）を終了して、ステップＳ２６０４に移行する。
【０１７４】
これにより、対象ファイルＦｉごとに、対象ファイルＦｉ内に存在する上位分割文字コード、下位分割文字コード、および２グラム文字列の出現回数を集計することができる。
【０１７５】
（ハフマン木生成処理（ステップＳ１８０４））
図３２は、図１８に示したハフマン木生成処理（ステップＳ１８０４）の詳細な処理手順例を示すフローチャートである。図３２において、情報処理装置４００は、圧縮符号長の上限長Ｎを決定する（ステップＳ３２０１）。つぎに、情報処理装置４００は、補正処理を実行する（ステップＳ３２０２）。ここで、補正処理とは、図８〜図１０で説明したように、文字情報ごとの生起確率および圧縮符号長を、圧縮符号長の上限長Ｎを用いて補正する処理である。
【０１７６】
つぎに、情報処理装置４００は、文字情報ごとに葉の構造体を生成する（ステップＳ３２０３）。そして、情報処理装置４００は、枝数特定処理を実行する（ステップＳ３２０６）。枝数特定処理（ステップＳ３２０４）では、圧縮符号長ごとの葉当たりの枝数を特定する。枝数特定処理（ステップＳ３２０４）の詳細は図３３で説明する。
【０１７７】
そして、情報処理装置４００は、構築処理を実行する（ステップＳ３２０５）。枝数特定処理（ステップＳ３２０４）により葉の構造体ごとの枝数が特定されるため、まず、情報処理装置４００は、葉の構造体ごとに、枝数分の葉へのポインタ群を生成する。そして、生成された各葉の構造体についての葉へのポインタ群を集約して根の構造体とする。これにより、２N分枝無節点ハフマン木Ｈが生成されることとなる。なお、生成された２N分枝無節点ハフマン木Ｈは、情報処理装置４００内の記憶装置（ＲＡＭ２０３や磁気ディスク２０５など）に格納される。このあと、図１８のマップ作成処理（ステップＳ１８０５）に移行する。
【０１７８】
図３３は、図３２に示した枝数特定処理（ステップＳ３２０４）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、最大圧縮符号長ＣＬｍａｘ（＝Ｎ）と最小圧縮符号長ＣＬｍｉｎ（＝Ｍ）との差分Ｄ（＝Ｎ−Ｍ）を算出する（ステップＳ３３０１）。たとえば、Ｎ＝１１の場合、図１９を参照すると、Ｍ＝６である。したがって、Ｄ＝５である。
【０１７９】
つぎに、情報処理装置４００は、２のべき数の変数ｊをｊ＝０とし、圧縮符号長の変数ＣＬをＣＬ＝Ｎとする（ステップＳ３３０２）。そして、情報処理装置４００は、ｊ＞Ｄであるか否かを判断する（ステップＳ３３０３）。ｊ＞Ｄでない場合（ステップＳ３３０３：Ｎｏ）、情報処理装置４００は、圧縮符号長ＣＬの葉当たりの枝数ｂ（ＣＬ）を算出する（ステップＳ３３０４）。圧縮符号長ＣＬの葉当たりの枝数ｂ（ＣＬ）は、ｂ（ＣＬ）＝２jで算出される。たとえば、ｊ＝０のとき、圧縮符号長ＣＬ＝Ｎ＝１１であるため、圧縮符号長１１ビットでの葉当たりの枝数ｂ（１１）は、ｂ（１１）＝２j＝２0＝１となる。
【０１８０】
つぎに、情報処理装置４００は、圧縮符号長ＣＬの総枝数Ｂ（Ｌ）を算出する（ステップＳ３３０５）。圧縮符号長ＣＬの総枝数Ｂ（Ｌ）は、Ｂ（Ｌ）＝Ｌ（ＣＬ）×ｂ（ＣＬ）で算出される。Ｌ（ＣＬ）は、圧縮符号長ＣＬでの葉数（文字情報の種類数）である。たとえば、ｊ＝０のとき、圧縮符号長ＣＬ＝Ｎ＝１１であるため、圧縮符号長１１ビットでの総枝数Ｂ（Ｌ）は、１２１６×２0＝１２１６となる。
【０１８１】
このあと、情報処理装置４００は、ｊをインクリメントし、圧縮符号長ＣＬをデクリメントして（ステップＳ３３０６）、ステップＳ３３０３に戻り、インクリメント後のｊがｊ＞Ｄであるか否かが判断される。なお、Ｎ＝１１の場合は、ｊ＝Ｄになるとｊ＝Ｄ＝５となり、ＣＬ＝Ｍ＝６となる。したがって、ステップＳ３３０４では、圧縮符号長ＣＬ（５ビット）の葉当たりの枝数ｂ（６）は、ｂ（６）＝２6＝６４となる。同様に、総枝数Ｂ（Ｌ）は、Ｂ（６）＝０×２6＝０となる。そして、ｊ＞Ｄである場合（ステップＳ３３０３：Ｙｅｓ）、構築処理（ステップＳ３２０５）に移行する。
【０１８２】
図３４は、図３２に示した構築処理（ステップＳ３２０５）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、圧縮符号長ＣＬをＣＬ＝ＣＬｍｉｎ＝Ｍとする（ステップＳ３４０１）。つぎに、情報処理装置４００は、圧縮符号長ＣＬでの未選択の葉があるか否かを判断する（ステップＳ３４０２）。未選択の葉がある場合（ステップＳ３４０２：Ｙｅｓ）、情報処理装置４００は、葉へのポインタ生成処理（ステップＳ３４０３）を実行して、ステップＳ３４０２に戻る。葉へのポインタ生成処理（ステップＳ３４０３）では、葉の構造体ごとに、圧縮符号長ＣＬに応じた枝数分の葉へのポインタ群を生成する。なお、葉へのポインタ生成処理（ステップＳ３４０３）の詳細は図３５で説明する。
【０１８３】
一方、ステップＳ３４０２において、未選択の葉がない場合（ステップＳ３４０２：Ｎｏ）、情報処理装置４００は、ＣＬ＞Ｎであるか否かを判断する（ステップＳ３４０４）。ＣＬ＞Ｎでない場合（ステップＳ３４０４：Ｎｏ）、情報処理装置４００は、ＣＬをインクリメントして（ステップＳ３４０５）、ステップＳ３４０２に戻る。一方、ＣＬ＞Ｎである場合（ステップＳ３４０４：Ｙｅｓ）、２N分枝無節点ハフマン木Ｈが構築されたこととなり、ステップＳ１８０５に移行することとなる。なお、第１領域〜第５領域内の情報は、この構築処理（ステップＳ３２０５）において格納されることとなる。
【０１８４】
図３５は、図３４に示した葉へのポインタ生成処理（ステップＳ３４０３）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、未選択の葉Ｌを選択し（ステップＳ３５０１）、選択葉へのポインタ数ｋをｋ＝１に設定する（ステップＳ３５０２）。そして、情報処理装置４００は、選択葉へのポインタＰＬ（ｋ）の先行ビット列を、選択葉の圧縮符号に設定する（ステップＳ３５０３）。たとえば、上限長Ｎ＝１１については、選択葉が、文字情報「０」の葉の構造体である場合、圧縮符号は「００００００」である。したがって、選択葉へのポインタＰＬ（ｋ）の先行ビット列も、「００００００」となる。
【０１８５】
つぎに、情報処理装置４００は、選択葉へのポインタＰＬ（ｋ）の後続ビット列のビット長を、最大圧縮符号長Ｎから選択葉の圧縮符号長ＣＬを引いた差分とし、後続ビット列の初期値をオール０に設定する（ステップＳ３５０４）。たとえば、選択葉が、文字情報「０」の葉の構造体である場合、圧縮符号長ＣＬは６ビットであるため、後続ビット列のビット長は５ビット（＝１１−６）となる。ｋ＝１の場合は、後続ビット列はオール０となるため、後続ビット列は、５ビットの「０００００」となる。
【０１８６】
そして、情報処理装置４００は、選択葉へのポインタＰＬ（ｋ）を根の構造体に格納する（ステップＳ３５０５）。このあと、情報処理装置４００は、ｋ＞ｂ（ＣＬ）であるか否かを判断する（ステップＳ３５０６）。ｂ（ＣＬ）は、選択葉の圧縮符号長ＣＬの葉当たりの枝数である。ｋ＞ｂ（ＣＬ）でない場合（ステップＳ３５０６：Ｎｏ）、選択葉に割り当てられたすべての枝について葉へのポインタが生成されていないため、情報処理装置４００は、ｋをインクリメントする（ステップＳ３５０７）。
【０１８７】
そして、情報処理装置４００は、現在の後続ビット列をインクリメントして、インクリメント後の後続ビット列を先行ビット列の末端に連結することで、あらたに、選択葉へのポインタＰＬ（ｋ）を生成する（ステップＳ３５０８）。そして、情報処理装置４００は、選択葉へのポインタＰＬ（ｋ）を根の構造体に格納し（ステップＳ３５０９）、ステップＳ３５０６に戻る。ステップＳ３５０６〜ステップＳ３５０９を繰り返すことで、葉当たりの枝数分の葉へのポインタ群が生成されることとなる。そして、ステップＳ３５０６において、ｋ＞ｂ（ＣＬ）である場合（ステップＳ３５０６：Ｙｅｓ）、ステップＳ３４０２に移行する。
【０１８８】
このように、対象ファイル群Ｆｓに出現する文字情報の種類数に応じて、２N分枝無節点ハフマン木Ｈの最大枝数２Nを最適な本数に設定することができるため、２N分枝無節点ハフマン木Ｈのサイズの適正化を図ることができる。また、本実施の形態によれば、上限長Ｎが２〜４の整数倍でない場合（たとえば、上限長Ｎ＝１１，１３）であっても、圧縮効率のよい２N分枝無節点ハフマン木Ｈを生成することができる。
【０１８９】
このあと、情報処理装置４００は、２N分枝無節点ハフマン木Ｈの各葉の構造体と、基礎単語の構造体，特定文字コードの構造体，分割文字コードの構造体とを、図１０の文字情報テーブルを参照して、相互に関連付ける。具体的には、上述したように、葉の構造体には、当該葉に格納されている圧縮符号に対応する特定文字、分割文字コードおよび葉へのポインタや基礎単語へのポインタを格納する。
【０１９０】
また、情報処理装置４００は、基礎単語の構造体の基礎単語ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、情報処理装置４００は、特定文字コードの構造体の特定文字ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、情報処理装置４００は、分割文字コードの構造体の分割文字コードごとに、対応する圧縮符号を格納する葉へのポインタを格納する。
【０１９１】
（マップ作成処理（ステップＳ１８０５））
図３６は、図３０に示したマップ作成処理（ステップＳ１８０５）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、ファイル番号ｉをｉ＝１に設定し（ステップＳ３６０１）、対象ファイルＦｉを読み込む（ステップＳ３６０２）。そして、情報処理装置４００は、対象ファイルＦｉのマップ作成処理を実行する（ステップＳ３６０３）。対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）の詳細は、図３８で説明する。このあと、情報処理装置４００は、ファイル番号ｉがｉ＞ｎ（ｎは対象ファイルＦ１〜Ｆｎの総数）であるか否かを判断する（ステップＳ３６０４）。
【０１９２】
ｉ＞ｎでない場合（ステップＳ３６０４：Ｎｏ）、情報処理装置４００は、ｉをインクリメントし（ステップＳ３６０５）、ステップＳ３６０２に戻る。一方、ｉ＞ｎである場合（ステップＳ３６０４：Ｙｅｓ）、マップ作成処理（ステップＳ１８０５）が終了する。このマップ作成処理（ステップＳ１８０５）によれば、対象ファイルＦｉごとに対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）を実行することができる。
【０１９３】
図３７は、図３６に示した対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、対象文字を対象ファイルＦｉの先頭文字とし（ステップＳ３７０１）、基礎単語出現マップ作成処理（ステップＳ３７０２）、特定単一文字出現マップ作成処理（ステップＳ３７０３）、２グラム文字列出現マップ作成処理（ステップＳ３７０４）を実行する。
【０１９４】
基礎単語出現マップ作成処理（ステップＳ３７０２）の詳細は図３８で説明する。また、特定単一文字出現マップ作成処理（ステップＳ３７０３）の詳細は図３９で説明する。さらに、２グラム文字列出現マップ作成処理（ステップＳ３７０４）の詳細は図４１で説明する。
【０１９５】
このあと、情報処理装置４００は、対象文字が対象ファイルＦｉの末尾文字であるか否かを判断する（ステップＳ３７０５）。対象文字が対象ファイルＦｉの末尾文字でない場合（ステップＳ３７０５：Ｎｏ）、情報処理装置４００は、対象文字を末尾方向へ１文字シフトし（ステップＳ３７０６）、ステップＳ３７０２に戻る。一方、対象文字が対象ファイルＦｉの末尾文字である場合（ステップＳ３７０５：Ｙｅｓ）、ステップＳ３６０４に移行して、対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）を終了する。
【０１９６】
この対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）によれば、基礎単語出現マップ、特定単一文字出現マップおよび２グラム文字列出現マップを、対象文字を１文字ずつシフトしながら、同時並行で生成することができる。
【０１９７】
図３８は、図３７で示した基礎単語出現マップ作成処理（ステップＳ３７０２）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、対象文字について最長一致検索処理を実行する（ステップＳ３８０１）。最長一致検索処理（ステップＳ３８０１）の詳細な処理手順は、図２２に示した最長一致検索処理（ステップＳ２２０１）と同一処理内容であるため説明を省略する。
【０１９８】
そして、情報処理装置４００は、最長一致した基礎単語、すなわち、基礎単語があるか否かを判断する（ステップＳ３８０２）。最長一致した基礎単語がない場合（ステップＳ３８０２：Ｎｏ）、特定単一文字出現マップ作成処理（ステップＳ３７０３）に移行する。一方、最長一致した基礎単語がある場合（ステップＳ３８０２：Ｙｅｓ）、情報処理装置４００は、その最長一致した基礎単語について、基礎単語出現マップが設定済みであるか否かを判断する（ステップＳ３８０３）。
【０１９９】
設定済みである場合（ステップＳ３８０３：Ｙｅｓ）、ステップＳ３８０６に移行する。一方、設定済みでない場合（ステップＳ３８０３：Ｎｏ）、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける最長一致した基礎単語の葉にアクセスして、その圧縮符号を取得する（ステップＳ３８０４）。そして、情報処理装置４００は、取得した圧縮符号を、最長一致した基礎単語についての基礎単語出現マップへのポインタに設定して（ステップＳ３８０５）、ステップＳ３８０６に移行する。このあと、ステップＳ３８０６では、情報処理装置４００は、最長一致した基礎単語についての基礎単語出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ３８０６）。
【０２００】
これにより、基礎単語出現マップ作成処理（ステップＳ３７０２）を終了し、特定単一文字出現マップ作成処理（ステップＳ３７０３）に移行する。この基礎単語出現マップ作成処理（ステップＳ３７０２）によれば、対象文字ごとに最長一致した基礎単語を基礎単語としてマップ作成することができる。
【０２０１】
図３９は、図３７で示した特定単一文字出現マップ作成処理（ステップＳ３７０３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、特定単一文字の構造体に対して対象文字の２分探索をおこない（ステップＳ３９０１）、一致したか否かを判断する（ステップＳ３９０２）。一致する単一文字がなかった場合（ステップＳ３９０２：Ｎｏ）、情報処理装置４００は、分割文字コード出現マップ作成処理を実行して（ステップＳ３９０３）、２グラム文字列出現マップ作成処理（ステップＳ３７０４）に移行する。分割文字コード出現マップ作成処理（ステップＳ３９０３）の詳細は図４０で説明する。
【０２０２】
一方、ステップＳ３９０２において、２分探索により対象文字と一致する単一文字があった場合（ステップＳ３９０２：Ｙｅｓ）、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける２分探索された単一文字の葉にアクセスして、その圧縮符号を取得する（ステップＳ３９０４）。そして、情報処理装置４００は、その取得された圧縮符号について、特定単一文字出現マップが設定済みであるか否かを判断する（ステップＳ３９０５）。設定済みである場合（ステップＳ３９０５：Ｙｅｓ）、ステップＳ３９０７に移行する。
【０２０３】
一方、設定済みでない場合（ステップＳ３９０５：Ｎｏ）、情報処理装置４００は、取得した圧縮符号を、２分探索された単一文字についての特定単一文字出現マップへのポインタに設定して（ステップＳ３９０６）、ステップＳ３９０７に移行する。このあと、ステップＳ３９０７では、２分探索された単一文字についての特定単一文字出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ３９０７）。
【０２０４】
これにより、特定単一文字出現マップ作成処理（ステップＳ３７０３）を終了し、２グラム文字列出現マップ作成処理（ステップＳ３７０４）に移行する。この特定単一文字出現マップ作成処理（ステップＳ３７０３）によれば、２分探索された対象文字を特定単一文字としてマップ作成することができる。
【０２０５】
図４０は、図３９で示した分割文字コード出現マップ作成処理（ステップＳ４００３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、対象文字を分割し（ステップＳ４００１）、２N分枝無節点ハフマン木Ｈにおける上位分割文字コードの葉にアクセスして、圧縮符号を取得する（ステップＳ４００２）。そして、情報処理装置４００は、その取得された圧縮符号について、上位分割文字コード出現マップが設定済みであるか否かを判断する（ステップＳ４００３）。
【０２０６】
設定済みである場合（ステップＳ４００３：Ｙｅｓ）、ステップＳ４００５に移行する。一方、設定済みでない場合（ステップＳ４００３：Ｎｏ）、情報処理装置４００は、取得した圧縮符号を、上位分割文字コードの出現マップへのポインタに設定して（ステップＳ４００４）、ステップＳ４００５に移行する。このあと、ステップＳ４００５では、情報処理装置４００は、対象文字から分割された上位分割文字コードの出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ４００５）。
【０２０７】
また、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける下位分割文字コードの葉にアクセスして、圧縮符号を取得する（ステップＳ４００６）。そして、情報処理装置４００は、その取得された圧縮符号について、下位分割文字コードの出現マップが設定済みであるか否かを判断する（ステップＳ４００７）。設定済みである場合（ステップＳ４００７：Ｙｅｓ）、ステップＳ４００９に移行する。
【０２０８】
一方、設定済みでない場合（ステップＳ４００７：Ｎｏ）、情報処理装置４００は、取得した圧縮符号を、下位分割文字コードの出現マップへのポインタに設定して（ステップＳ４００８）、ステップＳ４００９に移行する。このあと、ステップＳ４００９では、情報処理装置４００は、対象文字から分割された下位分割文字コードの出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ４００９）。
【０２０９】
これにより、分割文字コード出現マップ作成処理（ステップＳ４００３）を終了し、２グラム文字列出現マップ作成処理（ステップＳ３７０４）に移行する。この分割文字コード出現マップ作成処理（ステップＳ４００３）によれば、目標出現率Ｐｃに応じた順位よりも下位の単一文字については、出現頻度が低いため、ＯＦＦのビットが多数出現することとなる。
【０２１０】
しかしながら、目標出現率Ｐｃに応じた順位よりも下位の単一文字については特定単一文字の出現マップの生成対象外とすることで、特定単一文字の圧縮符号マップＭのマップサイズの最適化を図ることができる。また、分割することで、目標出現率Ｐｃに応じた順位よりも下位の単一文字については、上位分割文字コードの圧縮符号マップＭおよび下位分割文字コードの圧縮符号マップＭといったマップサイズが固定化されたマップに設定される。したがって、目標出現率Ｐｃをどのような出現率に設定しても、マップサイズの増大化を防止でき、省メモリ化を図ることができる。
【０２１１】
図４１は、図３７に示した２グラム文字列マップ作成処理（ステップＳ３７０４）の詳細な処理手順例を示すフローチャートである。図４１において、まず、情報処理装置４００は、２グラム文字列特定処理を実行する（ステップＳ４１０１）。２グラム文字列特定処理（ステップＳ４１０１）の詳細な処理手順は、図３０に示した２グラム文字列特定処理（ステップＳ２７０６）と同一処理内容であるため説明を省略する。
【０２１２】
つぎに、情報処理装置４００は、２グラム文字列特定処理（ステップＳ４１０１）により２グラム文字列が特定されたか否かを判断する（ステップＳ４１０２）。特定されなかった場合（ステップＳ４１０２：Ｎｏ）、図３７のステップＳ３７０５に移行する。
【０２１３】
一方、特定された場合（ステップＳ４１０２：Ｙｅｓ）、情報処理装置４００は、２グラム文字列出現マップ生成処理を実行して（ステップＳ４１０３）、ステップＳ３７０５に移行する。
【０２１４】
図４２は、２グラム文字列出現マップ生成処理（ステップＳ４１０３）の詳細な処理手順例を示すフローチャートである。図４２において、まず、情報処理装置４００は、図４１の２グラム文字列特定処理（ステップＳ４１０１）で特定された２グラム文字列の第１グラム（特定単一文字または分割文字コード）について、２N分枝無節点ハフマン木Ｈの葉にアクセスして、圧縮符号を取得する（ステップＳ４２０１）。同様に、情報処理装置４００は、第２グラム（特定単一文字または分割文字コード）について、２N分枝無節点ハフマン木Ｈの葉にアクセスして、圧縮符号を取得する（ステップＳ４２０２）。
【０２１５】
そして、情報処理装置４００は、第１グラムの圧縮符号と第２グラムの圧縮符号を連結する（ステップＳ４２０３）。そして、情報処理装置４００は、連結圧縮符号をポインタとする出現マップが設定済みであるか否かを判断する（ステップＳ４２０４）。設定済みである場合（ステップＳ４２０４：Ｙｅｓ）、ステップＳ４２０６に移行する。
【０２１６】
一方、設定済みでない場合（ステップＳ４２０４：Ｎｏ）、情報処理装置４００は、連結圧縮符号を、特定された２グラム文字列の出現マップへのポインタに設定する（ステップＳ４２０５）。このあと、ステップＳ４２０６では、情報処理装置４００は、特定された２グラム文字列の出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ４２０６）。
【０２１７】
これにより、２グラム文字列出現マップ生成処理（ステップＳ４１０３）を終了し、ステップＳ３７０５に移行する。この２グラム文字列出現マップ生成処理（ステップＳ４２０３）によれば、２グラム文字列の連結圧縮符号により、２グラム文字列の出現マップを直接指定することができる。
【０２１８】
＜圧縮処理の具体例＞
つぎに、対象ファイルＦｉの圧縮処理の具体例について説明する。上述のように、圧縮符号マップＭを生成した場合は、検索文字列を圧縮した圧縮符号列により圧縮符号マップＭ内の出現マップをポイントすることが可能となる。以下、圧縮処理の具体例について説明する。
【０２１９】
図４３は、２N分枝無節点ハフマン木Ｈを用いた圧縮処理の具体例を示す説明図である。まず、情報処理装置４００は、対象ファイル群Ｆｓから１文字目の圧縮対象文字コードを取得し、対象ファイルＦｉ上の位置を保持しておく。そして、情報処理装置４００は、基礎単語の構造体１６００に対して２分木探索をおこなう。基礎単語は２文字以上の文字コード列であるため、１文字目の圧縮対象文字コードがヒットした場合、２文字目の文字コードを圧縮対象文字コードとして取得する。
【０２２０】
そして、２文字目の文字コードは、１文字目の圧縮対象文字コードがヒットした位置から探索する。３文字目以降も、不一致の圧縮対象文字コードが出現するまで繰り返し２分木探索をおこなう。一致する基礎単語ｒａ（ａは葉の番号）が探索された場合、基礎単語の構造体１６００において対応付けされている葉Ｌａへのポインタにより葉Ｌａの構造体にアクセスする。そして、情報処理装置４００は、アクセス先の葉Ｌａの構造体に格納されている基礎単語ｒａの圧縮符号を探索して、圧縮バッファ４３００に格納する。
【０２２１】
一方、不一致の圧縮文字コードが出現した場合、基礎単語の構造体１６００に対する２分木探索を終了する（ＥＯＴ（Ｅｎｄ  Ｏｆ  Ｔｒａｎｓｍｉｓｓｉｏｎ）まで進む）。そして、情報処理装置４００は、１文字目の圧縮対象文字コードを再度レジスタにセットして、特定単一文字の構造体１４００に対する２分木探索をおこなう。
【０２２２】
一致する文字コードｅｂ（ｂは葉の番号）が探索された場合、情報処理装置４００は、その葉Ｌｂへのポインタにより葉Ｌｂの構造体にアクセスする。そして、情報処理装置４００は、アクセス先の葉Ｌｂの構造体に格納されている文字コードｅｂの圧縮符号を探索して、圧縮バッファ４３００に格納する。
【０２２３】
一方、一致する文字コードが出現せず２分木探索を終了した場合、圧縮対象文字コードは特定単一文字コードではないため、情報処理装置４００は、上位８ビットと下位８ビットに分割する。そして、情報処理装置４００は、上位８ビットの分割文字コードについて、分割文字コードの構造体１５００に対する２分木探索をおこなう。一致する分割文字コードＤｃ１（ｃ１は葉の番号）が探索された場合、情報処理装置４００は、その葉Ｌｃ１へのポインタにより葉Ｌｃ１の構造体にアクセスする。そして、情報処理装置４００は、アクセス先の葉Ｌｃ１の構造体に格納されている分割文字コードＤｃ１の圧縮符号を探索して、圧縮バッファ４３００に格納する。
【０２２４】
引き続き、情報処理装置４００は、下位８ビットの分割文字コードについて、分割文字コードの構造体に対する２分木探索をおこなう。一致する分割文字コードＤｃ２（ｃ２は葉の番号）が探索された場合、情報処理装置４００は、その葉Ｌｃ２へのポインタにより葉Ｌｃ２の構造体にアクセスする。そして、情報処理装置４００は、アクセス先の葉Ｌｃ２の構造体に格納されている分割文字コードＤｃ２の圧縮符号を探索して、圧縮バッファ４３００に格納する。これにより、対象ファイルＦｉが圧縮されることとなる。
【０２２５】
＜対象ファイル群Ｆｓの圧縮処理＞
つぎに、第１圧縮部４０３による対象ファイル群Ｆｓの圧縮処理の処理手順について説明する。
【０２２６】
図４４は、第１圧縮部４０３による２N分枝無節点ハフマン木Ｈを用いた対象ファイル群Ｆｓの圧縮処理手順例を示すフローチャートである。まず、情報処理装置４００は、ファイル番号：ｐをｐ＝１とし（ステップＳ４４０１）、対象ファイルＦｐを読み込む（ステップＳ４４０２）。つぎに、情報処理装置４００は、圧縮処理を実行して（ステップＳ４４０３）、ファイル番号：ｐをインクリメントする（ステップＳ４４０４）。圧縮処理（ステップＳ４４０３）の詳細は図４５で説明する。
【０２２７】
そして、情報処理装置４００は、ｐ＞ｎであるか否かを判断する（ステップＳ４４０５）。ｎは対象ファイル群Ｆｓの総数である。ｐ＞ｎでない場合（ステップＳ４４０５：Ｎｏ）、ステップＳ４４０２に戻る。一方、ｐ＞ｎである場合（ステップＳ４４０５：Ｙｅｓ）、対象ファイル群Ｆｓの圧縮処理を終了する。
【０２２８】
図４５は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その１）である。図４５において、まず、情報処理装置４００は、対象ファイル群Ｆｓに圧縮対象文字コードがあるか否かを判断する（ステップＳ４５０１）。ある場合（ステップＳ４５０１：Ｙｅｓ）、情報処理装置４００は、圧縮対象文字コードを取得してレジスタにセットする（ステップＳ４５０２）。そして、情報処理装置４００は、先頭の圧縮対象文字コードか否かを判断する（ステップＳ４５０３）。
【０２２９】
ここで、先頭の圧縮対象文字コードとは、未圧縮の１文字目の文字コードをいう。先頭である場合（ステップＳ４５０３：Ｙｅｓ）、情報処理装置４００は、その圧縮対象文字コードの対象ファイル群Ｆｓ上の位置（先頭位置）となるポインタを取得し（ステップＳ４５０４）、ステップＳ４５０５に移行する。一方、先頭でない場合（ステップＳ４５０３：Ｎｏ）、先頭位置を取得せずにステップＳ４５０５に移行する。
【０２３０】
そして、情報処理装置４００は、基礎単語の構造体１６００に対して２分木探索をおこなう（ステップＳ４５０５）。圧縮対象文字コードが一致した場合（ステップＳ４５０６：Ｙｅｓ）、情報処理装置４００は、連続して一致した文字コード列が基礎単語（の文字コード列）に該当するか否かを判断する（ステップＳ４５０７）。該当しない場合（ステップＳ４５０７：Ｎｏ）、情報処理装置４００は、ステップＳ４５０２に戻って後続の文字コードを圧縮対象文字コードとして取得する。この場合、後続の文字コードは先頭ではないため、先頭位置は取得しないこととなる。
【０２３１】
一方、ステップＳ４５０７において、基礎単語に該当する場合（ステップＳ４５０７：Ｙｅｓ）、情報処理装置４００は、該当する基礎単語の葉Ｌ♯へのポインタにより葉Ｌ♯の構造体にアクセスする（ステップＳ４５０８）。そして、情報処理装置４００は、ポイントされた葉Ｌ♯の構造体に格納されている基礎単語の圧縮符号を抽出する（ステップＳ４５０９）。
【０２３２】
この後、情報処理装置４００は、抽出された圧縮符号を圧縮バッファ４３００に格納して（ステップＳ４５１０）、ステップＳ４５０１に戻る。このループが基礎単語の圧縮処理の流れとなる。ステップＳ４５０１において、圧縮対象文字コードがない場合（ステップＳ４５０１：Ｎｏ）、情報処理装置４００は、対象ファイルＦｐから圧縮された圧縮ファイルｆｐを圧縮バッファ４３００からファイル出力して保存する（ステップＳ４５１１）。そして、ステップＳ４４０４に移行する。一方、ステップＳ４５０６において不一致となった場合（ステップＳ４５０６：Ｎｏ）、１６ビットの文字コードの圧縮処理のループに入る。
【０２３３】
図４６は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その２）である。図４６において、情報処理装置４００は、ステップＳ４６０４で取得された先頭位置のポインタを参照して、対象ファイル群Ｆｓから圧縮対象文字コードを取得してレジスタにセットする（ステップＳ４６０１）。
【０２３４】
つぎに、情報処理装置４００は、圧縮対象文字コードについて、特定単一文字の構造体１４００に対して２分木探索をおこなう（ステップＳ４６０２）。一致した場合（ステップＳ４６０３：Ｙｅｓ）、情報処理装置４００は、該当する文字の葉Ｌ♯へのポインタにより葉Ｌ♯の構造体にアクセスする（ステップＳ４６０４）。そして、情報処理装置４００は、ポイントされた葉Ｌ♯の構造体に格納されている圧縮対象文字コードの圧縮符号を抽出する（ステップＳ４６０５）。
【０２３５】
この後、情報処理装置４００は、探索された圧縮符号を圧縮バッファ４３００に格納して（ステップＳ４６０６）、ステップＳ４５０１に戻る。このループが１６ビットの文字コードの圧縮処理の流れとなる。一方、ステップＳ４６０３において一致する文字コードが存在しなかった場合（ステップＳ４６０３：Ｎｏ）、分割文字コードの圧縮処理のループに入る。
【０２３６】
図４７は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その３）である。図４７において、まず、情報処理装置４００は、圧縮対象文字コードを上位８ビットと下位８ビットとに分割し（ステップＳ４７０１）、上位８ビットの分割文字コードを抽出する（ステップＳ４７０２）。そして、情報処理装置４００は、分割文字コードの構造体１５００に対して２分木探索をおこなう（ステップＳ４７０３）。
【０２３７】
そして、情報処理装置４００は、探索された分割文字コードの葉Ｌ♯へのポインタにより葉Ｌ♯の構造体にアクセスする（ステップＳ４７０４）。そして、情報処理装置４００は、ポイントされた葉Ｌ♯の構造体に格納されている分割文字コードの圧縮符号を抽出する（ステップＳ４７０５）。この後、情報処理装置４００は、探索された圧縮符号を圧縮バッファ４３００に格納する（ステップＳ４７０６）。
【０２３８】
つぎに、情報処理装置４００は、下位８ビットが探索済みか否かを判断し（ステップＳ４７０７）、探索済みでない場合（ステップＳ４７０７：Ｎｏ）、情報処理装置４００は、下位８ビットの分割文字コードを抽出して（ステップＳ４７０８）、ステップＳ４７０３〜Ｓ４７０６を実行する。一方、下位８ビットが探索済みである場合（ステップＳ４７０７：Ｙｅｓ）、ステップＳ４６０１に戻り、基礎単語の圧縮処理のループに入る。
【０２３９】
このように、２N分枝無節点ハフマン木Ｈを用いた圧縮処理では、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉Ｌ♯の構造体に格納されている文字情報を抽出して、圧縮バッファ４３００に書き込むだけでよい。したがって、圧縮処理の高速化を図ることができる。
【０２４０】
また、圧縮対象文字コードが格納されている葉Ｌ♯の構造体を、基礎単語の構造体、特定単一文字コードの構造体および分割文字コードの構造体により即座に特定することができる。したがって、２N分枝無節点ハフマン木Ｈの葉を探索する必要がなく、圧縮処理の高速化を図ることができる。また、低位文字コードを上位ビットコードと下位ビットコードに分割することで、非特定単一文字を２５６種の分割文字コードの圧縮符号に圧縮することができる。したがって、圧縮率の向上を図ることができる。
【０２４１】
＜マップ圧縮の具体例＞
つぎに、第２圧縮部４０６による圧縮符号マップＭ内の各出現マップのマップ圧縮の具体例について説明する。第２圧縮部４０６は、圧縮領域内の出現マップを圧縮し、非圧縮領域の出現マップは圧縮しない。圧縮領域とは、ファイル番号１〜ｎまで採番されている場合に、α×（ｎ／αの商）となるファイル番号までの出現マップのビット列である。ｎは現在の対象ファイルの総数である。たとえば、α＝２５６ビットであり、現在の対象ファイル数ｎ＝６００である場合、ｎ／αの商は２となるため、ファイル番号１〜２αまでの出現マップのビット列が圧縮領域となる。そして、ファイル番号（２α＋１）〜ｎまでのビット列は非圧縮領域となり圧縮されない。
【０２４２】
また、出現マップのビット列は、ファイル総数αが増大することで、ビット列内の“０”が連続する箇所も多くなる。また、出現頻度が高い文字情報については、これとは逆に“１”が連続する箇所が多くなる。したがって、文字の出現率に応じた出現率領域を設定する。出現率領域とは、出現率の範囲である。出現率領域に応じて、出現マップ圧縮用のハフマン木ｈを割り当てることとする。
【０２４３】
図４８は、出現率と出現率領域との関係を示す説明図である。出現率が０〜１００％の範囲とすると、図４８に示したように、Ａ〜Ｅ領域およびＡ´〜Ｅ´領域に領域分割することができる。したがって、Ａ〜Ｅ領域およびＡ´〜Ｅ´領域で特定された出現率領域に応じて、出現マップ圧縮用のハフマン木ｈを圧縮パターンとして割り当てる。
【０２４４】
図４９は、出現率領域別の圧縮パターンを有する圧縮パターンテーブルを示す説明図である。出現率は、図１３に示したように、葉Ｌ＃の構造体の第５領域に格納されているため、葉Ｌ＃の構造体が指定されることで、圧縮パターンテーブル４９００を参照して、圧縮パターンが特定されることとなる。なお、Ａ領域およびＡ´領域は、非圧縮のため、圧縮パターンとなるハフマン木は存在しない。
【０２４５】
図５０は、Ｂ領域およびＢ´領域の場合の圧縮パターンを示す説明図である。圧縮パターン５０００は、葉が１６種のハフマン木ｈとなる。
【０２４６】
図５１は、Ｃ領域およびＣ´領域の場合の圧縮パターンを示す説明図である。圧縮パターン５１００は、葉が１６種＋１種のハフマン木ｈとなる。圧縮パターン５１００では、Ｂ領域およびＢ´領域に比べて、“０”が連続する箇所または“１”が連続する箇所が確率的に多くなる。したがって、１６ビット連続して値が“０”であるビット列に、符号語“００”が割り当てられている。
【０２４７】
図５２は、Ｄ領域およびＤ´領域の場合の圧縮パターンを示す説明図である。圧縮パターン５２００は、葉が１６種＋１種のハフマン木となる。圧縮パターン５２００では、Ｃ領域およびＣ´領域に比べて、“０”が連続する箇所または“１”が連続する箇所が確率的に多くなる。したがって、３２ビット連続して値が“０”であるビット列に、符号語“００”が割り当てられている。
【０２４８】
図５３は、Ｅ領域およびＥ´領域の場合の圧縮パターンを示す説明図である。圧縮パターン５３００は、葉が１６種＋１種のハフマン木となる。圧縮パターン５３００では、Ｄ領域およびＤ´領域に比べて、“０”が連続する箇所または“１”が連続する箇所が確率的に多くなる。したがって、６４ビット連続して値が“０”であるビット列に、符号語“００”が割り当てられている。このように、出現率領域に応じて、文字コードが存在しないことを意味する“０”の連続数が増加するため、文字コードの出現率に応じて圧縮符号マップＭの圧縮効率の向上を図ることができる。
【０２４９】
（圧縮符号マップ圧縮処理手順）
つぎに、圧縮符号マップ圧縮処理について説明する。圧縮符号マップ圧縮処理は、圧縮領域のビット列を圧縮する処理である。具体的には、図４９に示した圧縮パターンテーブル４９００と図５０〜図５３に示した圧縮パターン５０００〜５３００（ハフマン木ｈ）を用いて、圧縮符号マップＭの圧縮領域のビット列を圧縮する。以下、圧縮符号マップ圧縮処理手順について説明する。
【０２５０】
図５４は、圧縮符号マップＭ圧縮処理手順を示すフローチャートである。図５４において、まず、情報処理装置４００は、圧縮符号マップＭ群Ｍｓにおいて、未選択の出現マップへのポインタがあるか否かを判断する（ステップＳ５４０１）。未選択のアドレスがある場合（ステップＳ５４０１：Ｙｅｓ）、情報処理装置４００は、未選択のアドレスを選択して葉Ｌ＃の構造体にアクセスし（ステップＳ５４０２）、葉Ｌ＃の構造体の第１領域の中から文字コードを取得する（ステップＳ５４０３）。そして、情報処理装置４００は、アクセス先の葉Ｌ＃の構造体の第５領域から出現率領域を取得することで、取得された文字コードの出現率領域を特定する（ステップＳ５４０４）。
【０２５１】
このあと、情報処理装置４００は、図５２の圧縮パターンテーブルを参照して、特定された出現率領域が非圧縮領域（たとえば、出現率領域Ａ、Ａ´）であるか否かを判断する（ステップＳ５４０５）。非圧縮領域である場合（ステップＳ５４０５：Ｙｅｓ）、ステップＳ５４０１に戻り、つぎのアドレスを選択する。
【０２５２】
一方、非圧縮領域でない場合（ステップＳ５４０５：Ｎｏ）、情報処理装置４００は、特定された出現率領域により、図５０〜図５３に示した圧縮パターン５０００〜５３００（ハフマン木ｈ）の中から該当する圧縮パターン（ハフマン木ｈ）を選択する（ステップＳ５４０６）。また、情報処理装置４００は、圧縮対象となる取得文字コードの出現マップにおける圧縮領域のビット列を抽出する（ステップＳ５４０７）。
【０２５３】
そして、情報処理装置４００は、取得文字コードの出現率が５０％以上であるか否かを判断する（ステップＳ５４０８）。出現率とは、上述したように、対象ファイル群Ｆｓ内の全ファイル数を母集団（分母）とし、当該文字情報が存在するファイル数を分子とした値である。出現率領域は、出現率に応じて決められているため（図４８を参照）、出現率領域がＡ〜Ｅである場合、取得文字コードの出現率が５０％以上でないと判断する。一方、出現率領域がＡ´〜Ｅ´である場合、情報処理装置４００は、取得文字コードの出現率が５０％以上であると判断する。
【０２５４】
そして、出現率が５０％以上である場合（ステップＳ５４０８：Ｙｅｓ）、情報処理装置４００は、圧縮効率を上げるために、ステップＳ５４０７で抽出されたビット列を反転する（ステップＳ５４０９）。たとえば、抽出されたビット列が“１１１０”である場合、“０００１”にして、“０”の個数を増やす。そして、情報処理装置４００は、反転後のビット列を、ステップＳ５４０６で選択したハフマン木を用いて圧縮して、記憶装置（たとえば、フラッシュメモリや磁気ディスク２０５）に格納する（ステップＳ５４１０）。そして、ステップＳ５４０１に戻る。このように、ビット列反転をおこなうことで、出現率領域Ａ´〜Ｅ´のハフマン木ｈを用意する必要がないため、省メモリ化を図ることができる。
【０２５５】
一方、ステップＳ５４０８において、出現率が５０％以上でない場合（ステップＳ５４０８：Ｎｏ）、情報処理装置４００は、ビット列反転（ステップＳ５４０９）をおこなうことなく、ステップＳ５４０７で抽出されたビット列を、ステップＳ５４０６で選択したハフマン木を用いて圧縮して（ステップＳ５４１０）、ステップＳ５４０１に戻る。また、ステップＳ５４０１において、未選択のアドレスがない場合（ステップＳ５４０１：Ｎｏ）、圧縮符号マップ圧縮処理を終了する。
【０２５６】
このような圧縮符号マップ圧縮処理手順により、図１（Ａ）に示したように、文字情報ごとに圧縮領域内のビット列が、出現率に応じて圧縮される。このように、出現率領域に応じて、文字情報が存在しないことを意味する“０”の連続数が増加するため、文字情報の出現率に応じて圧縮符号マップＭの圧縮効率の向上を図ることができる。
【０２５７】
また、対象ファイルが後から追加されると、追加された対象ファイルを圧縮する際、圧縮符号マップＭにも文字の存否を示すビット列を追加する必要がある。圧縮前の圧縮符号マップＭでは、ファイル番号：１〜ｎの出現マップのビット列については、圧縮パターン５０００〜５３００により圧縮されてレコードごとに符号長が異なる。すなわち、可変長であるため圧縮領域となる。
【０２５８】
したがって、図１（Ａ）に示したように、圧縮符号列の先頭（ファイル番号ｎ側）は整列するが末尾（ファイル番号１側）が整列しない。仮に、ビット列の並びを、ファイル番号：１〜ｎの順に、圧縮符号マップＭへのポインタ（文字情報の圧縮符号）側から割り当てると、追加ファイルのビット列は、圧縮符号列の末尾側に挿入することとなり、圧縮符号列と追加ファイルのビット列とが非連続となってしまう。したがって、あらかじめ、圧縮符号マップＭ群Ｍｓの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Ｆｓのファイル番号ｐの降順に配列しておく。そして、圧縮符号マップＭにおいて、出現マップへのポインタ（文字情報の圧縮符号）と圧縮領域との間に非圧縮領域を設定する。
【０２５９】
図１（Ｃ）に示すように、ファイル番号；１〜ｎのうち圧縮符号列が整列する側にファイル番号：ｎ＋１のビットを割り当てる。これにより、ファイル番号；１〜ｎのビット列を圧縮した場合でも、非圧縮のファイル番号：ｎ＋１〜２ｎのビット列を挿入しても、ファイル番号順にビット列を連続させることができる。これにより、ファイル番号；１〜ｎのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルの絞込みを正確に実行することができる。
【０２６０】
＜機能的構成例２＞
図５５は、本実施の形態にかかる情報処理装置４００の機能的構成例２を示すブロック図である。図５５において、情報処理装置４００は、指定部５５０１と、第１伸長部５５０２と、第１圧縮部４０３と、入力部５５０３と、抽出部５５０４と、第２伸長部５５０５と、特定部５５０６と、更新部５５０７と、を備える。指定部５５０１〜更新部５５０７は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることによりその機能を実現する。なお、指定部５５０１〜更新部５５０７は、それぞれ実行結果を記憶装置に書き込んだり、他の部の実行結果を読み出したりして、それぞれ演算を実行する。以下、指定部５５０１〜更新部５５０７について簡単に説明する。
【０２６１】
指定部５５０１は、対象ファイル群Ｆｓ内のいずれかの対象ファイルのオープン指定を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、指定部５５０１は、対象ファイルＦｉのオープン指定を受け付ける。当該オープン指定が受け付けられると、圧縮符号マップＭにおいて、オープン指定された対象ファイルＦｉのファイル番号ｉに関連付けられている圧縮ファイルｆｉへのポインタが指定される。これにより、ポイント先となるアドレスに格納されている、オープン指定された対象ファイルＦｉの圧縮ファイルｆｉが読み出される。
【０２６２】
また、指定部５５０１は、オープンされている対象ファイルＦｉの保存指定を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、指定部５５０１は、対象ファイルＦｉの保存指定を受け付ける。当該保存指定が受け付けられると、保存指定された対象ファイルＦｉが第１圧縮部４０３により２N分枝無節点ハフマン木Ｈで圧縮され、圧縮ファイルｆｉとして記憶装置内に保存される。
【０２６３】
第１伸長部５５０２は、対象ファイルＦｉの圧縮ファイルｆｉを、２N分枝無節点ハフマン木Ｈで伸長する。具体的には、たとえば、第１伸長部５５０２は、指定部５５０１によってオープン指定された対象ファイルＦｉの圧縮ファイルｆｉを、２N分枝無節点ハフマン木Ｈで伸長する。また、後述する特定部５５０６で特定された対象ファイルＦｉについても２N分枝無節点ハフマン木Ｈで伸長する。伸長の具体例については後述する。
【０２６４】
入力部５５０３は、検索文字列の入力を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、入力部５５０３は、検索文字列の入力を受け付ける。
【０２６５】
抽出部５５０４は、入力部５５０３によって入力された検索文字列内の文字情報の圧縮符号を２N分枝無節点ハフマン木Ｈから抽出する。具体的には、たとえば、抽出部５５０４は、検索文字列から、特定単一文字、上位分割文字コード、下位分割文字コード、２グラム文字列、および基礎単語のうち該当する文字情報を抽出する。
【０２６６】
たとえば、検索文字列が「人形」である場合、特定単一文字「人」、「形」と、２グラム文字列「人形」が抽出される。そして、抽出部５５０４は、抽出された文字情報の圧縮符号を２N分枝無節点ハフマン木Ｈで特定し、圧縮符号マップＭの該当する出現マップを抽出する。たとえば、特定単一文字「人」の圧縮済みの出現マップと、「形」の圧縮済みの出現マップと、２グラム文字列「人形」の圧縮済みの出現マップとが抽出される。
【０２６７】
第２伸長部５５０５は、抽出部５５０４によって抽出された圧縮済みの出現マップを伸長する。具体的には、文字情報の出現率から出現率領域が特定できるため、第２伸長部５５０５は、特定された出現率領域に応じたマップ用のハフマン木により、圧縮済みの出現マップの圧縮領域を伸長する。たとえば、上記の例では、図１（Ｂ）に示したように、特定単一文字「人」の圧縮済みの出現マップと、「形」の圧縮済みの出現マップと、２グラム文字列「人形」の圧縮済みの出現マップとが、伸長される。
【０２６８】
特定部５５０６は、第２伸長部５５０５による伸長後の出現マップ群および削除マップＤのＡＮＤ演算を実行することで、検索文字列内の文字情報を含む対象ファイルの圧縮ファイルを圧縮ファイル群から特定する。上記の例では、図１（Ｂ）に示したように、特定部５５０６は、特定単一文字「人」の圧縮済みの出現マップと、「形」の圧縮済みの出現マップと、２グラム文字列「人形」の圧縮済みの出現マップと、削除マップＤと、をＡＮＤ演算する。特定部５５０６までの処理が、情報処理装置４００内の抽出装置での処理となる。
【０２６９】
これにより、ファイル番号３（の圧縮ファイルｆ３）が特定される。第１伸長部５５０２では、特定部５５０６によって特定された圧縮ファイル（上記の例では圧縮ファイルｆ３）を２N分枝無節点ハフマン木Ｈで伸長することとなる。
【０２７０】
更新部５５０７は、オープン中の対象ファイルを更新して保存する場合、あらたなファイル番号を採番して、圧縮符号マップＭおよび削除マップＤについて、あらたなファイル番号についてのビットを設定する。圧縮符号マップＭでは「０」（ＯＦＦ）、削除マップＤでは「１」（ＯＮ）とする。
【０２７１】
そして、更新される対象ファイル内の文字情報を集計部４０１により集計して、１回でも出現した文字情報については、あらたに採番されたファイル番号のビットをＯＮにする。また、削除マップＤにおけるオープンしたときのファイル番号のビットをＯＦＦにする。また、新たに採番されたファイル番号については、更新部５５０７は、更新後の圧縮ファイルのアドレスをポインタとして関連付ける。これにより、更新後において、あらたに採番されたファイル番号が指定された場合、指定部５５０１により、更新後の圧縮ファイルが指定されることになる。更新部５５０７の詳細については後述する。
【０２７２】
＜ファイル伸長例＞
つぎに、ファイル伸長例について説明する。圧縮ファイルｆｉを伸長する場合、対象ファイルＦｉをオープンするにあたり、直接ファイル番号ｉを指定する方法（Ｇ１）と、検索文字列によりオープンさせる対象ファイルＦｉを絞り込む方法（Ｇ２）がある。前者（Ｇ１）については図５６で説明し、後者（Ｇ２）については図５７で説明する。なお、（Ｇ１）および（Ｇ２）のいずれについても、本実施の形態の更新前と更新後のいずれの場合にも実行することができる。
【０２７３】
図５６は、ファイル伸長例（Ｇ１）を示す説明図である。ファイル伸長例（Ｇ１）で示す処理は、指定部５５０１および第１伸長部５５０２により実行される。ここでは、例としてファイル番号３をオープン指定することとする。なお、図５６中、符号５６００は圧縮符号マップＭの管理領域である。管理領域５６００には、出現マップのビットに対応するファイル番号ｉ（ｉ＝１〜ｎ）が記憶されている。また、管理領域５６００には、ファイル番号ｉで特定される圧縮ファイルｆｉの格納先と指定するポインタが、そのファイル番号ｉに関連付けられて保存されている。したがって、ファイル番号ｉが指定されると、その圧縮ファイルｆｉがポイントされて読み出すことができる。
【０２７４】
（Ｇ１１）まず、指定部５５０１により対象ファイルＦ３のオープン指定がされる。圧縮符号マップＭのファイル番号３は、対象ファイルＦ３の圧縮ファイルｆ３へのポインタに関連付けられている。（Ｇ１２）したがって、当該ポインタにより、圧縮ファイルｆ３が抽出される。（Ｇ１３）抽出された圧縮ファイルｆ３は、２N分枝無節点ハフマン木Ｈで伸長される。詳細な伸長処理については後述する。
【０２７５】
図５７は、ファイル伸長例（Ｇ２）を示す説明図である。ファイル伸長例（Ｇ２）で示す処理は、入力部５５０３、抽出部５５０４、第２伸長部５５０５、特定部５５０６、第１伸長部５５０２により実行される。（Ｇ２１）まず、入力部５５０３により検索文字列「人形」が入力された場合、検索文字列「人形」を構成する文字「人」、「形」について特定単一文字の構造体１４００に対し２分探索することで、特定単一文字「人」、「形」が検索される。特定単一文字の構造体１４００には、２N分枝無節点ハフマン木Ｈの葉（特定単一文字）へのポインタが関連付けられている。したがって、特定単一文字の構造体でヒットすると、２N分枝無節点ハフマン木Ｈの葉を直接指定することができる。
【０２７６】
（Ｇ２２）２N分枝無節点ハフマン木Ｈの葉を直接指定すると、当該葉の構造体内の照合フラグがＯＮに設定され、圧縮符号が抽出される。圧縮符号は特定単一文字の出現マップへのポインタとなるため、直接指定することができる。本例の場合、特定単一文字「人」、「形」の圧縮符号が抽出されるため、「人」の出現マップと「形」の出現マップとが抽出される。また、「人」の圧縮符号および「形」の圧縮符号を連結した連結圧縮符号も２グラム文字列の出現マップへのポインタとなるため、直接指定することができる。したがって、２グラム文字列「人形」の出現マップも抽出される。
【０２７７】
（Ｇ２３）抽出された３個の出現マップは、マップ用ハフマン木により伸長される。そして、伸長された出現マップと削除マップＤとによりＡＮＤ演算が実行され、ＡＮＤ結果が得られる。
【０２７８】
（Ｇ２４）ＡＮＤ結果においてファイル番号３がＯＮになっているため、検索文字列「人形」が対象ファイルＦ３に存在することが判明する。したがって、圧縮ファイル群から圧縮ファイルｆ３が抽出される。これにより伸長すべき圧縮ファイルが絞り込まれることになり、無駄な伸長処理を低減することができる。
【０２７９】
（Ｇ２５）最後に、抽出された圧縮ファイルｆ３を圧縮状態のまま、照合、伸長することで、伸長後の対象ファイルＦ３がオープンされる。なお、「人」、「形」の葉の構造体では照合フラグがＯＮになっているため、「人」、「形」の伸長の際、強調表示となるように文字列置換されて伸長される。たとえば、照合フラグがＯＮである「人」、「形」については、＜Ｂ＞＜／Ｂ＞タグではさんで伸長することで、太字で表示される。照合フラグがＯＦＦの文字については＜Ｂ＞＜／Ｂ＞タグではさむことなくそのまま伸長する。
【０２８０】
＜伸長処理の具体例＞
つぎに、図５６および図５７での伸長処理の具体例について説明する。ここでは、検索文字列「人形」の圧縮符号列を用いて圧縮ファイルｆｉについて照合しながら伸張する例について説明する。なお、例として、特定単一文字「人」の圧縮符号を「１１０００１００１１」（１０ビット）とし、特定単一文字「形」の圧縮符号を「０１０００１００１０」（１０ビット）とする。
【０２８１】
また、伸長処理では、レジスタに圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。抽出した圧縮符号を、１パス（１枝分のアクセス）で２N分枝無節点ハフマン木Ｈの根から探索する。そして、アクセスした葉Ｌ♯の構造体に格納されている文字コードを読み出して伸長バッファに格納する。
【０２８２】
また、圧縮符号を抽出するため、マスクパターンのマスク位置をオフセットする。また、マスクパターンの初期値を“０ｘＦＦＦ０００００”とする。このマスクパターンは先頭１２ビットが“１”であり、後続の２０ビットが“０”のビット列である。
【０２８３】
図５８および図５９は、図５６および図５７での伸長処理の具体例を示す説明図である。図５８では、特定単一文字「人」についての伸張例（Ａ）を示している。図５８において、まず、ＣＰＵは、ビットアドレスａｂｉとバイトオフセットｂｙｏｓとビットオフセットｂｉｏｓとを算出する。ビットアドレスａｂｉは、抽出された圧縮符号のビット位置を示す値であり、今回のビットアドレスａｂｉは、前回のビットアドレスａｂｉに前回抽出された圧縮符号の圧縮符号長ｌｅｇを加算した値となる。なお、初期状態では、ビットアドレスａｂｉはａｂｉ＝０とする。
【０２８４】
バイトオフセットｂｙｏｓは、メモリに保持されている圧縮符号列のバイト境界を示す値であり、ビットアドレスａｂｉ／８の商で求められる。たとえば、バイトオフセットｂｙｏｓ＝０のときは、メモリに記憶されている先頭からの圧縮符号列をレジスタにセットし、バイトオフセットｂｙｏｓ＝１のときは、メモリに記憶されている先頭１バイト目からの圧縮符号列をレジスタにセットする。
【０２８５】
また、ビットオフセットｂｉｏｓは、マスクパターンのマスク位置（“ＦＦＦ”）をオフセットする値であり、ビットアドレスａｂｉ／８の余りである。たとえば、ビットオフセットｂｉｏｓ＝０のときは、マスク位置はシフトされないこととなり、マスクパターンは、“０ｘＦＦＦ０００００”となる。一方、ビットオフセットｂｉｏｓ＝４のときは、マスク位置は末尾方向に４ビットシフトすることとなり、マスクパターンは、“０ｘ０ＦＦＦ００００”となる。
【０２８６】
レジスタシフト数ｒｓは、マスクパターンとのＡＮＤ演算後のレジスタ内の圧縮符号列を末尾方向にシフトするビット数であり、ｒｓ＝３２−１２−ｂｉｏｓで求められる。このシフトにより、シフト後のレジスタの末尾ｍビットのビット列を対象ビット列として抽出する。対象ビット列の抽出後はレジスタをクリアする。
【０２８７】
なお、メモリ内のブロックは１バイトのビット列を示しており、内部の数字は、バイト境界となるバイト位置を示している。図５８では、ビットアドレスａｂｉ＝０により、バイトオフセットｂｙｏｓ＝０、ビットオフセットｂｉｏｓ＝０となる。バイトオフセットｂｙｏｓ＝０により、メモリに保持されている圧縮符号列のうち先頭から４バイト分（図中、網掛け）の圧縮符号列をレジスタにセットする。
【０２８８】
また、ビットオフセットｂｉｏｓ＝０により、マスクパターンは、“０ｘＦＦＦ０００００”である。したがって、レジスタにセットされた圧縮符号列とマスクパターン“０ｘＦＦＦ０００００”を論理積（ＡＮＤ）演算することにより、ＡＮＤ結果が得られる。
【０２８９】
また、ビットオフセットｂｉｏｓ＝０により、レジスタシフト数ｒｓは、ｒｓ＝３２−ｍ―ｂｉｏｓ＝３２−１２−０＝２０となる。したがって、レジスタ内のＡＮＤ結果を末尾方向に２０ビット分シフトする。このシフトによりレジスタには、“１１０００１００１１００”が残されるため、末尾１２ビットを対象ビット列として抽出する。この場合は、“１１０００１００１１００”が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
【０２９０】
２N分枝無節点ハフマン木Ｈの根の構造体には、抽出された対象ビット列“１１０００１００１１００”があるため、この対象ビット列と一致する葉Ｌ♯へのポインタ（枝番号）を探索する。この場合、葉Ｌ９７へのポインタ群の中の１つと一致するため、該当する葉Ｌ９７へのポインタを読み出して、葉Ｌ９７の構造体にアクセスする。
【０２９１】
葉Ｌ９７の構造体には、文字コード“０ｘＢＡ４Ｅ”が格納されているため、当該文字コード“０ｘＢＡ４Ｅ”を抽出して伸長バッファに格納する。ファイル伸長例（Ｇ１）の場合は、そのまま伸長バッファに格納するが、ファイル伸長例（Ｇ２）の場合は、照合フラグがＯＮであるため、文字コード“０ｘＢＡ４Ｅ”を＜Ｂ＞＜／Ｂ＞タグで挟み込んで格納する。
【０２９２】
また、葉Ｌ９７の構造体には、文字コード“０ｘＢＡ４Ｅ”の圧縮符号長ｌｅｇ（＝１０ビット）も格納されているため、文字コード“０ｘＢＡ４Ｅ”の圧縮符号長ｌｅｇも抽出する。この抽出された圧縮符号長ｌｅｇによりビットアドレスａｂｉを更新する。この場合、更新後のビットアドレスａｂｉはａｂｉ＝０＋１０＝１０となる。
【０２９３】
図５９では、特定単一文字「形」について伸張する例（Ｂ）を示している。具体的には、図５８の状態（Ａ）からレジスタをバイトオフセットｂｉｏｓ分シフトした場合、前回である（Ａ）のビットアドレスａｂｉはａｂｉ＝０、圧縮符号長ｌｅｇは１０ビットであるため、（Ｂ）のビットアドレスａｂｉはａｂｉ＝１０ビットとなる。
【０２９４】
また、このビットアドレスａｂｉ＝１０により、バイトオフセットｂｙｏｓ＝１、ビットオフセットｂｉｏｓ＝２となる。バイトオフセットｂｙｏｓ＝１により、メモリに保持されている圧縮符号列のうち先頭１バイト目から４バイト分（図中、網掛け）の圧縮符号列をレジスタにセットする。
【０２９５】
また、ビットオフセットｂｉｏｓ＝２により、マスクパターンは、“０ｘ３ＦＦＣ００００”である。したがって、レジスタにセットされた圧縮符号列とマスクパターン“０ｘ３ＦＦＣ００００”を論理積（ＡＮＤ）演算することにより、ＡＮＤ結果が得られる。
【０２９６】
また、ビットオフセットｂｉｏｓ＝２により、レジスタシフト数ｒｓは、ｒｓ＝３２−ｍ―ｂｉｏｓ＝３２−１２−２＝１８となる。したがって、レジスタ内のＡＮＤ結果を末尾方向に１８ビット分シフトする。このシフトによりレジスタには、“０００００１０００１００１０”が残されるため、末尾１０ビットを対象ビット列として抽出する。この場合は、“０１０００１００１０”が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
【０２９７】
２N分枝無節点ハフマン木Ｈの根の構造体には、抽出された対象ビット列“０１０００１００１０”があるため、このビット列と一致する葉Ｌ♯へのポインタ（枝番号）を探索する。この場合、対象ビット列“０１０００１００１０”が葉Ｌ１０５へのポインタ群の中の１つと一致するため、該当する葉Ｌ１０５へのポインタを読み出して、葉Ｌ２４の構造体にアクセスする。
【０２９８】
葉Ｌ１０５の構造体には、文字コード“０ｘ６２５Ｆ”が格納されているため、当該文字コード“０ｘ６２５Ｆ”を抽出して伸長バッファに格納する。ファイル伸長例（Ｇ１）の場合は、そのまま伸長バッファに格納するが、ファイル伸長例（Ｇ２）の場合は、照合フラグがＯＮであるため、文字コード“０ｘ６２５Ｆ”を＜Ｂ＞＜／Ｂ＞タグで挟み込んで格納する。また、葉Ｌ１０５の構造体には、文字コード“０ｘ６２５Ｆ”の圧縮符号長ｌｅｇ（＝８ビット）も格納されているため、文字コード“０ｘ６２５Ｆ”の圧縮符号長ｌｅｇも抽出する。この抽出された圧縮符号長ｌｅｇによりビットアドレスａｂｉを更新する。この場合、更新後のビットアドレスａｂｉはａｂｉ＝１０＋８＝１８となる。このようにして伸長することで、対象ファイルがオープンされることとなる。
【０２９９】
＜検索処理手順＞
つぎに、本実施の形態にかかる検索処理手順について説明する。具体的には、たとえば、図５７に示したファイル伸長例（Ｇ２）についての処理手順となる。
【０３００】
図６０は、本実施の形態にかかる検索処理手順を示すフローチャートである。まず、情報処理装置４００は、検索文字列の入力を待ち受け（ステップＳ６００１：Ｎｏ）、検索文字列が入力された場合（ステップＳ６００１：Ｙｅｓ）、ファイル絞込み処理（ステップＳ６００２）、伸長処理（ステップＳ６００３）を実行する。ファイル絞込み処理（ステップＳ６００２）は、圧縮ファイル群ｆｓの中から検索文字列を構成する文字情報が存在する対象ファイルＦｉの圧縮ファイルｆｉを絞り込む。ファイル絞込み処理（ステップＳ６００２）の詳細は、図６１および図６２で説明する。
【０３０１】
伸長処理（ステップＳ６００３）は、ファイル絞込み処理（ステップＳ６００２）で絞り込まれた圧縮ファイルｆｉを伸長する過程で、伸長対象となる圧縮符号列と検索文字列の圧縮文字列とを照合する。伸長処理（ステップＳ６００３）の詳細は、図６３および図６４で説明する。
【０３０２】
図６１は、図６０に示したファイル絞込み処理（ステップＳ６００２）の詳細な処理手順を示すフローチャート（その１）である。まず、情報処理装置４００は、検索文字列を対象文字列に設定し（ステップＳ６１０１）、最長一致検索処理を実行する（ステップＳ６１０２）。最長一致検索処理（ステップＳ６１０２）は、図３８に示した最長一致検索処理（ステップＳ３８０１）と同一処理であるため説明を省略する。
【０３０３】
そして、情報処理装置４００は、基礎単語の構造体において、最長一致検索処理（ステップＳ６１０２）で得られた最長一致検索結果を２分探索する（ステップＳ６１０３）。最長一致検索結果が、基礎単語の構造体で探索された場合（ステップＳ６１０３：Ｙｅｓ）、対象文字列である基礎単語について、その基礎単語の出現マップを基礎単語の出現マップ群から取得する（ステップＳ６１０４）。
【０３０４】
そして、情報処理装置４００は、対象文字列に後続があるか否かを判断する（ステップＳ６１０５）。後続がある場合（ステップＳ６１０５：Ｙｅｓ）、情報処理装置４００は、後続文字列を対象文字列に設定して（ステップＳ６１０６）、最長一致検索処理（ステップＳ６１０２）に戻る。一方、後続がない場合（ステップＳ６１０５：Ｎｏ）、これまでに取得された出現マップ群のＡＮＤ演算で対象ファイルを絞り込む（ステップＳ６１０７）。これにより、ファイル絞込み処理（ステップＳ６００２）は終了し、伸長処理（ステップＳ６００３）に移行する。
【０３０５】
また、ステップＳ６１０３において、最長一致検索結果が、基礎単語の構造体で探索されなかった場合（ステップＳ６１０３：Ｎｏ）、図６２のステップＳ６２０１に移行する。具体的には、最長一致検索結果が基礎単語の構造体に登録されていない場合、または、最長一致検索で最長一致候補がなかった場合（ステップＳ６１０３：Ｎｏ）に、図６２のステップＳ６２０１に移行する。
【０３０６】
図６２は、図６０に示したファイル絞込み処理（ステップＳ６００２）の詳細な処理手順を示すフローチャート（その２）である。図６２では、対象文字列を構成する文字ごとに、出現マップを取得する処理を示している。
【０３０７】
まず、情報処理装置４００は、対象文字列の先頭文字を対象文字に設定する（ステップＳ６２０１）。つぎに、情報処理装置４００は、特定単一文字の構造体において対象文字を２分探索する（ステップＳ６２０２）。対象文字が探索された場合（ステップＳ６２０３：Ｙｅｓ）、情報処理装置４００は、特定単一文字の圧縮符号マップＭから対象文字の出現マップを取得する（ステップＳ６２０４）。
【０３０８】
一方、ステップＳ６２０３において、探索されなかった場合（ステップＳ６２０３：Ｎｏ）、情報処理装置４００は、対象文字を上位８ビットと下位８ビットに分割する（ステップＳ６２０５）。そして、情報処理装置４００は、上位分割文字コードの圧縮符号マップＭの中から、ステップＳ６２０５の分割で得られた上位分割文字コードの出現マップを取得する（ステップＳ６２０６）。
【０３０９】
また、情報処理装置４００は、下位分割文字コードの圧縮符号マップＭの中から、ステップＳ６２０５の分割で得られた下位分割文字コードの出現マップを取得する（ステップＳ６２０７）。また、情報処理装置４００は、対象文字やステップＳ６２０５で分割された分割文字コードについて、２N分枝無節点ハフマン木Ｈの葉にアクセスし、照合フラグをＯＮにする（ステップＳ６２０８）。このあと、情報処理装置４００は、２グラム文字列特定処理を実行する（ステップＳ６２０９）。２グラム文字列特定処理（ステップＳ６２０９）は、図３０に示した２グラム文字列特定処理（ステップＳ２７０６）と同一処理であるため説明を省略する。
【０３１０】
そして、情報処理装置４００は、２グラム文字列特定処理（ステップＳ６２０９）で２グラム文字列が特定されなかった場合（ステップＳ６２１０：Ｎｏ）、図６１のステップＳ６１０５に戻る。一方、２グラム文字列が特定された場合（ステップＳ６２１０：Ｙｅｓ）、情報処理装置４００は、２グラム文字列の出現マップを取得する（ステップＳ６２１１）。具体的には、たとえば、情報処理装置４００は、第１グラムの圧縮符号および第２グラムの圧縮符号を２N分枝無節点ハフマン木Ｈにアクセスすることで取得、連結し、２グラム文字列の圧縮符号マップＭから連結圧縮符号で指定された出現マップを取得する。そして、図６１のステップＳ６１０５に戻る。
【０３１１】
このように、図６２に示した処理手順により、対象文字についての出現マップ群と２グラム文字列についての出現マップ群を取得することができる。したがって、図６１のステップＳ６１０７でのＡＮＤ演算により圧縮ファイルｆｉの絞込みができることとなる。
【０３１２】
図６３は、図６０に示した２N分枝無節点ハフマン木Ｈを用いた伸長処理（ステップＳ６００３）の詳細な処理手順例を示すフローチャート（その１）である。図６３において、まず、情報処理装置４００は、ビットアドレスａｂｉをａｂｉ＝０とし（ステップＳ６３０１）、バイトオフセットｂｙｏｓを算出し（ステップＳ６３０２）、ビットオフセットｂｉｏｓを算出する（ステップＳ６３０３）。そして、情報処理装置４００は、バイトオフセットｂｙｏｓの位置からの圧縮符号列をレジスタｒ１にセットする（ステップＳ６３０４）。
【０３１３】
つぎに、情報処理装置４００は、レジスタｒ２にセットされたマスクパターンをビットオフセットｂｉｏｓ分、末尾方向にシフトして（ステップＳ６３０５）、レジスタｒ１にセットされた圧縮符号列とのＡＮＤ演算をおこなう（ステップＳ６３０６）。このあと、情報処理装置４００は、レジスタシフト数ｒｓを算出して（ステップＳ６３０７）、ＡＮＤ演算後のレジスタｒ２をレジスタシフト数ｒｓ分、末尾にシフトする（ステップＳ６３０８）。
【０３１４】
図６４は、図６０に示した２N分枝無節点ハフマン木Ｈを用いた伸長処理（ステップＳ６００３）の詳細な処理手順例を示すフローチャート（その２）である。ステップＳ６３０８のあと、図６４において、情報処理装置４００は、シフト後のレジスタｒ２から末尾Ｎビットを対象ビット列として抽出する（ステップＳ６４０１）。つぎに、情報処理装置４００は、２N分枝無節点ハフマン木Ｈの根の構造体から葉Ｌ♯へのポインタを特定し（ステップＳ６４０２）、ポイント先となる葉Ｌ♯の構造体に１パスでアクセスする（ステップＳ６４０３）。このあと、情報処理装置４００は、アクセス先の葉Ｌ♯の構造体の照合フラグがＯＮであるか否かを判断する（ステップＳ６４０４）。
【０３１５】
照合フラグがＯＮである場合（ステップＳ６４０４：Ｙｅｓ）、情報処理装置４００は、アクセス先の葉Ｌ♯の構造体内の文字情報について置換文字を伸長バッファに書き出して（ステップＳ６４０５）、ステップＳ６４０７に移行する。一方、照合フラグがＯＦＦの場合（ステップＳ６４０４：Ｎｏ）、情報処理装置４００は、アクセス先の葉Ｌ♯の構造体内の文字情報（伸長文字）を伸長バッファに書き出して（ステップＳ６４０６）、ステップＳ６４０７に移行する。
【０３１６】
ステップＳ６４０７では、情報処理装置４００は、アクセス先の葉Ｌ♯の構造体から圧縮符号長ｌｅｇを抽出し（ステップＳ６４０７）、ビットアドレスａｂｉを更新する（ステップＳ６４０８）。このあと、情報処理装置４００は、メモリに圧縮符号列があるか否か、具体的には、マスクパターンによるマスク処理が施されていない圧縮符号列があるか否かを判断する（ステップＳ６４０９）。たとえば、バイトオフセットｂｙｏｓに該当するバイト位置があるか否かにより判断する。圧縮符号列がある場合（ステップＳ６４０９：Ｙｅｓ）、図６３のステップＳ６３０２に戻る。一方、圧縮符号列がない場合（ステップＳ６４０９：Ｎｏ）、伸長処理（ステップＳ６００３）を終了する。
【０３１７】
このような伸長処理（ステップＳ６００３）により、圧縮状態のまま照合・伸長をおこなうことができ、伸長速度の高速化を図ることができる。
【０３１８】
＜更新処理の具体例＞
つぎに、図１に示した更新処理の具体例について説明する。ここでは、図１で示したように、圧縮済みの圧縮符号マップＭを伸長することなく、対象ファイルＦｉの更新と、圧縮符号マップＭの更新とを実行する。
【０３１９】
図６５は、更新処理の具体例を示す説明図である。図６５では、対象ファイルＦ３を更新する場合を例に挙げて説明する。まず、図５６のファイル伸長例（Ｇ１）または図５７のファイル伸長例（Ｇ２）により、圧縮ファイル群ｆｓから圧縮ファイルｆ３が伸長され、伸長後の対象ファイルＦ３がメインメモリ（たとえば、ＲＡＭ２０３）上に書き出されたとする。
【０３２０】
（Ｈ）ここで、対象ファイルＦ３内の文字列「人形芝居を見た。」を「紙芝居を見た。」に変更し、保存指示を与えたとする。この場合、メインメモリ上の対象ファイルＦ３にはあたらしく採番されたファイル番号ｎ＋１が割り与えられ、対象ファイルＦ（ｎ＋１）となる。
【０３２１】
（Ｉ）そして、対象ファイルＦ（ｎ＋１）を２N分枝無節点ハフマン木Ｈで圧縮して圧縮ファイルｆ（ｎ＋１）とし、記憶装置内に保存する。この場合、記憶装置内において圧縮ファイルｆ（ｎ＋１）を圧縮ファイルｆ３に上書き保存する。
【０３２２】
（Ｊ）また、メインメモリ上の対象ファイルＦ（ｎ＋１）の文字情報を集計部４０１により集計することで、文字情報の存否を検出することができる。したがって、新たに採番されたファイル番号ｎ＋１のビットを、各文字情報の出現マップに追加（デフォルトはＯＦＦ）し、文字情報が出現したビットについてＯＮにする。また、ファイル番号ｎ＋１のビットを削除マップＤにも追加（デフォルトはＯＮ）する。さらに、削除マップＤにおいて更新元となる対象ファイルＦ３のファイル番号３のビットをＯＦＦにする。
【０３２３】
（Ｋ）また、圧縮ファイルｆ３は圧縮ファイルｆ（ｎ＋１）に上書き保存されるため、ファイル番号ｎ＋１については、管理領域においてファイル番号３に関連付けられていたポインタが関連付けされる。これにより、以降において、ファイル番号（ｎ＋１）が指定されると、圧縮ファイルｆ（ｎ＋１）を伸長して対象ファイルＦ（ｎ＋１）をオープンすることができる。
【０３２４】
なお、図６５では、圧縮ファイルｆ（ｎ＋１）を圧縮ファイルｆ３に対して上書き保存することとしたが、上書き保存せず別途保存することとしてもよい。この場合、圧縮符号マップＭの管理領域５６００において、ファイル番号ｎ＋１には、圧縮ファイルｆ３へのポインタではなく、空き領域を指定するあらたなポインタが割り当てられることとなる。この場合、圧縮ファイルｆ３は残存するが、削除マップＤではファイル番号３がＯＦＦに変更されているため、検索に影響は与えない。
【０３２５】
また、更新前の状態に復元させる場合は、更新前のファイル番号３と更新後のファイル番号ｎ＋１とを関連付けさせておけばよい。これにより、ファイル番号ｎ＋１を含む復元指示を与えることで、ファイル番号３を介して圧縮ファイルｆ３を指定することができるため、伸長することで対象ファイルＦ３を得ることができる。
【０３２６】
＜更新処理手順＞
つぎに、図６５に示した更新処理手順について説明する。
【０３２７】
図６６は、図６５に示した更新処理手順を示すフローチャートである。まず、情報処理装置４００は、更新要求が受け付けられるのを待ち受け（ステップＳ６６０１：Ｎｏ）、更新要求が受け付けられた場合（ステップＳ６６０１：Ｙｅｓ）、情報処理装置４００は、更新要求のあった対象ファイルＦｉのファイル番号ｉを特定する（ステップＳ６６０２）。
【０３２８】
そして、情報処理装置４００は、削除マップＤにおける特定先のファイル番号ｉのビットをＯＦＦにする（ステップＳ６６０３）。これにより、特定先のファイル番号ｉの対象ファイルＦｉが検索されることがなくなり、検索精度の向上を図ることができる。
【０３２９】
つぎに、情報処理装置４００は、対象ファイルＦｉのファイル番号ｉを更新する（ステップＳ６６０４）。すなわち、現時点での末尾のファイル番号に１加算したファイル番号を採番して、対象ファイルに割り与える。たとえば、図６５に示したように、ファイル番号ｎ＋１を採番して、メインメモリ（ＲＡＭ２０３）上の対象ファイルＦ３に付与して対象ファイルＦ（ｎ＋１）とする。このように、あらたに採番されたファイル番号が付与された対象ファイルを追加ファイルと称す。
【０３３０】
このあと、情報処理装置４００は、追加ファイルＦ（ｎ＋１）を２N分枝無節点ハフマン木Ｈで圧縮して圧縮ファイルとして保存する（ステップＳ６６０５）。そして、情報処理装置４００は、圧縮符号マップＭの管理領域５６００内に、追加ファイルＦ（ｎ＋１）のファイル番号（ｎ＋１）に関連付けて追加ファイルＦ（ｎ＋１）の圧縮ファイルへのポインタを関連付ける（ステップＳ６６０６）。
【０３３１】
このあと、情報処理装置４００は、総ファイル数（末尾のファイル番号）がｎの倍数であるか否かを判断する（ステップＳ６６０７）。ｎの倍数である場合（ステップＳ６６０７：Ｙｅｓ）、圧縮符号マップＭの全ビットが圧縮領域となるため、圧縮符号マップＭの各出現マップを圧縮する（ステップＳ６６０８）。これにより、圧縮符号マップＭのサイズ縮小を図ることができる。
【０３３２】
一方、ｎの倍数でない場合（ステップＳ６６０７：Ｎｏ）、追加ファイルＦ（ｎ＋１）のマップ更新処理を実行して（ステップＳ６６０９）、一連の処理を終了する。追加ファイルＦ（ｎ＋１）のマップ更新処理（ステップＳ６６０９）の詳細については、図６７および図６８で説明する。
【０３３３】
図６７は、図６６に示した追加ファイルのマップ更新処理（ステップＳ６６０９）の詳細な処理手順を示すフローチャート（前半）である。まず、情報処理装置４００は、圧縮符号マップＭおよび削除マップＤにおいて、追加ファイルのファイル番号のビットを設定する（ステップＳ６７０１）。具体的には、出現マップについてはＯＦＦのビットを追加ファイルのファイル番号に対して設定し、削除マップＤについてはＯＮのビットを追加ファイルのファイル番号に対して設定する。
【０３３４】
つぎに、情報処理装置４００は、追加ファイル内の先頭文字を対象文字に設定し（ステップＳ６７０２）、対象文字について最長一致検索処理を実行する（ステップＳ６７０３）。最長一致検索処理（ステップＳ６７０３）は、図２４に示した処理と同一処理であるため説明を省略する。
【０３３５】
このあと、情報処理装置４００は、最長一致した基礎単語が基礎単語の構造体１６００にあるか否かを判断する（ステップＳ６７０４）。ない場合（ステップＳ６７０４：Ｎｏ）、図６８のステップＳ６８０１に移行する。一方、ある場合（ステップＳ６７０４：Ｙｅｓ）、情報処理装置４００は、最長一致した基礎単語の圧縮符号を２N分枝無節点ハフマン木Ｈから特定して、当該圧縮符号により、最長一致した基礎単語の出現マップを指定する（ステップＳ６７０５）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにする（ステップＳ６７０６）。このあと、図６８のステップＳ６８０１に移行する。
【０３３６】
図６８は、図６６に示した追加ファイルのマップ更新処理（ステップＳ６６０９）の詳細な処理手順を示すフローチャート（後半）である。まず、情報処理装置４００は、対象文字が特定単一文字であるか否かを判断する（ステップＳ６８０１）。具体的には、たとえば、情報処理装置４００は、対象文字が特定単一文字の構造体でヒットしたか否かを判断する。
【０３３７】
対象文字が特定単一文字である場合（ステップＳ６８０１：Ｙｅｓ）、情報処理装置４００は、ヒットした特定単一文字の圧縮符号を２N分枝無節点ハフマン木Ｈから特定して、当該圧縮符号により、ヒットした特定単一文字の出現マップを指定する（ステップＳ６８０２）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにする（ステップＳ６８０３）。このあと、ステップＳ６８０９に移行する。
【０３３８】
一方、対象文字が特定単一文字でない場合（ステップＳ６８０１：Ｎｏ）、情報処理装置４００は、対象文字を上位分割文字コードと下位分割文字コードとに分割する（ステップＳ６８０４）。そして、情報処理装置４００は、分割文字コードの構造体でヒットした上位分割文字コードの圧縮符号を２N分枝無節点ハフマン木Ｈから特定して、当該圧縮符号により、ヒットした上位分割文字コードの出現マップを指定する（ステップＳ６８０５）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにする（ステップＳ６８０６）。
【０３３９】
同様に、情報処理装置４００は、分割文字コードの構造体でヒットした下位分割文字コードの圧縮符号を２N分枝無節点ハフマン木Ｈから特定して、当該圧縮符号により、ヒットした下位分割文字コードの出現マップを指定する（ステップＳ６８０７）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにする（ステップＳ６８０８）。このあと、ステップＳ６８０９に移行する。
【０３４０】
また、ステップＳ６８０９において、情報処理装置４００は、２グラム文字列特定処理を実行する（ステップＳ６８０９）。２グラム文字列特定処理（ステップＳ６８０９）は、図３０に示した処理と同一処理であるため説明を省略する。
【０３４１】
このあと、情報処理装置４００は、２グラム文字列（たとえば「人形」）のうち先頭グラム文字（たとえば、「人」）の圧縮符号と末尾グラム文字（たとえば、「形」）の圧縮符号とを連結する（ステップＳ６８１０）。つぎに、情報処理装置４００は、連結圧縮符号により、２グラム文字列の出現マップを指定する（ステップＳ６８１１）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにして（ステップＳ６８１２）、一連の処理を終了する。
【０３４２】
以上説明したように、本実施の形態によれば、追加されたファイル番号に、更新後の対象ファイルの圧縮ファイルへのポインタが付与される。したがって、更新後において追加ファイルのファイル番号を指定／検索された場合に、速やかに追加ファイルの圧縮ファイルを指定して伸長することができることになる。
【０３４３】
したがって、インデックス情報を用いた検索の対象となる複数のファイルのいずれかを更新する場合に、更新処理を開始してから、更新後の複数のファイルに対応したインデックス情報による検索を実行可能とするまでの処理時間を低減することができる。
【０３４４】
また、上書き保存により対象ファイルＦｉが削除されても、ファイル番号ｎ＋１についての出現マップおよび削除マップＤのビット追加と、削除マップＤのビット変更により、マップ更新が可能となる。すなわち、出現マップの圧縮領域を伸長して削除となったファイル番号ｉのビットを削除して、圧縮しなおすといった処理を実行する必要がなく、効率的なマップ更新をおこなうことができる。
【０３４５】
また、あらかじめ、圧縮符号マップＭの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Ｆｓのファイル番号ｐの降順に配列しておく。これにより、ファイル番号；１〜ｎのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルＦｉの絞込みを正確に実行することができる。
【０３４６】
また、圧縮符号マップＭの圧縮領域を所定数の最大倍数（たとえば、所定ファイル数２５６の最大倍数）のビット列にすることで、対象ファイルが追加される都度、圧縮符号マップＭの圧縮をおこなう必要がない。これにより、情報処理装置４００の演算負荷を低減することができる。また、追加後のファイル総数が初期のファイル数の最大倍数に達した場合に、圧縮符号マップＭのファイル番号に対応する全ビットが圧縮領域となるため、圧縮符号マップＭがハフマン木ｈにより圧縮される。これにより、省メモリ化を図ることができる。このように、所定ファイル数（たとえば２５６個）単位で圧縮がおこなわれるため、演算負荷低減と省メモリ化を同時に実現することができる。
【０３４７】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等の情報処理装置４００で実行することにより実現することができる。本情報処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等の情報処理装置４００で読み取り可能な記録媒体に記録され、情報処理装置４００によって記録媒体から読み出されることによって実行される。また本情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０３４８】
４００  情報処理装置
４０１  集計部
４０２  第１生成部
４０３  第１圧縮部
４０４  作成部
４０５  第２生成部
４０６  第２圧縮部
５５０１  指定部
５５０２  第１伸長部
５５０３  入力部
５５０４  抽出部
５５０５  第２伸長部
５５０６  特定部
５５０７  更新部
【図１】
2012150637.tif 000003
【図２】
2012150637.tif 000004
【図３】
2012150637.tif 000005
【図４】
2012150637.tif 000006
【図５】
2012150637.tif 000007
【図６】
2012150637.tif 000008
【図７】
2012150637.tif 000009
【図８】
2012150637.tif 000010
【図９】
2012150637.tif 000011
【図１０】
2012150637.tif 000012
【図１１】
2012150637.tif 000013
【図１２】
2012150637.tif 000014
【図１３】
2012150637.tif 000015
【図１４】
2012150637.tif 000016
【図１５】
2012150637.tif 000017
【図１６】
2012150637.tif 000018
【図１７】
2012150637.tif 000019
【図１８】
2012150637.tif 000020
【図１９】
2012150637.tif 000021
【図２０】
2012150637.tif 000022
【図２１】
2012150637.tif 000023
【図２２】
2012150637.tif 000024
【図２３】
2012150637.tif 000025
【図２４】
2012150637.tif 000026
【図２５】
2012150637.tif 000027
【図２６】
2012150637.tif 000028
【図２７】
2012150637.tif 000029
【図２８】
2012150637.tif 000030
【図２９】
2012150637.tif 000031
【図３０】
2012150637.tif 000032
【図３１】
2012150637.tif 000033
【図３２】
2012150637.tif 000034
【図３３】
2012150637.tif 000035
【図３４】
2012150637.tif 000036
【図３５】
2012150637.tif 000037
【図３６】
2012150637.tif 000038
【図３７】
2012150637.tif 000039
【図３８】
2012150637.tif 000040
【図３９】
2012150637.tif 000041
【図４０】
2012150637.tif 000042
【図４１】
2012150637.tif 000043
【図４２】
2012150637.tif 000044
【図４３】
2012150637.tif 000045
【図４４】
2012150637.tif 000046
【図４５】
2012150637.tif 000047
【図４６】
2012150637.tif 000048
【図４７】
2012150637.tif 000049
【図４８】
2012150637.tif 000050
【図４９】
2012150637.tif 000051
【図５０】
2012150637.tif 000052
【図５１】
2012150637.tif 000053
【図５２】
2012150637.tif 000054
【図５３】
2012150637.tif 000055
【図５４】
2012150637.tif 000056
【図５５】
2012150637.tif 000057
【図５６】
2012150637.tif 000058
【図５７】
2012150637.tif 000059
【図５８】
2012150637.tif 000060
【図５９】
2012150637.tif 000061
【図６０】
2012150637.tif 000062
【図６１】
2012150637.tif 000063
【図６２】
2012150637.tif 000064
【図６３】
2012150637.tif 000065
【図６４】
2012150637.tif 000066
【図６５】
2012150637.tif 000067
【図６６】
2012150637.tif 000068
【図６７】
2012150637.tif 000069
【図６８】
2012150637.tif 000070
【手続補正書】
【提出日】平成25年12月19日(2013.12.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
複数のファイルのそれぞれについて所定の複数の文字情報をそれぞれ含むか否かを示す第１の情報を記憶手段に記憶し、
前記複数のファイルに含まれる特定のファイルが更新された場合に、更新された前記特定のファイルが前記所定の複数の文字情報をそれぞれ含むか否かを示す第２の情報を前記記憶手段に記憶し、
検索要求を受けた場合に、前記複数のファイルのうち、前記第１の情報および前記第２の情報に基づき、前記検索要求に含まれる検索対象文字情報が含まれないファイルを除外したファイル群を抽出する、
ことを実行させることを特徴とする抽出方法。
【請求項２】
前記コンピュータに、
前記複数のファイルに含まれる特定のファイルが更新された場合に、さらに、前記特定のファイルを特定可能な第３の情報を前記記憶手段に記憶し、
前記抽出する処理は、
検索要求を受けた場合に、前記複数のファイルのうち、前記第１の情報に基づいて前記検索要求に含まれる検索対象文字情報が含まれないファイル、及び、前記第３の情報によって特定される前記特定のファイルを除外したファイル群を抽出する、
ことを実行させることを特徴とする請求項１に記載の抽出方法。
【請求項３】
前記第１の情報が、
前記複数のファイルそれぞれについて前記所定の複数の文字情報をそれぞれ含むか否かを示すビット列であり、
前記第３の情報が、
前記複数のファイルそれぞれについて検索対象とするか否かを示すビット列であり、
前記コンピュータに、
前記検索要求を受けた場合に、前記第１の情報と前記第３の情報とを用いたビット演算により生成されたビット列に基づいて、前記複数のファイルから前記検索要求に含まれる検索対象文字情報が含まれない旨を示されたファイル及び前記特定のファイルを除外する、
ことを実行させることを特徴とする請求項２に記載の抽出方法。
【請求項４】
コンピュータに、
複数のファイルのそれぞれについて所定の複数の文字情報をそれぞれ含むか否かを示す第１の情報を記憶手段に記憶し、
前記複数のファイルに含まれる特定のファイルが更新された場合に、更新された前記特定のファイルが前記所定の複数の文字情報をそれぞれ含むか否かを示す第２の情報を前記記憶手段に記憶する、
ことを実行させることを特徴とする情報処理方法。
【請求項５】
前記コンピュータに、
前記複数のファイルに含まれる特定のファイルが更新された場合に、さらに、前記特定のファイルを検索対象から除く旨を示す第３の情報を前記記憶手段に記憶する、
ことを実行させることを特徴とする請求項４に記載の情報処理方法。
【請求項６】
前記コンピュータに、
更新された前記特定のファイルを示すポインタを、前記第２の情報と対応付けて前記記憶手段に記憶する、
ことを特徴とする請求項４又は請求項５に記載の情報処理方法。
【請求項７】
前記コンピュータに、
前記第１の情報を、前記複数のファイルにおける前記所定の複数の文字情報の出現率に応じたハフマン木により圧縮して得られる圧縮情報を前記記憶手段に記憶する、
ことを実行させることを特徴とする請求項４〜６のいずれか一つに記載の情報処理方法。
【請求項８】
前記コンピュータに、
前記第１の情報のうち、前記複数のファイルの先頭ファイル番号からファイル数の最大倍数となるファイル番号までの領域を圧縮し、かつ、残余の領域を圧縮せずに、前記記憶手段に記憶する、
ことを実行させることを特徴とする請求項４〜７のいずれか一つに記載の情報処理方法。
【請求項９】
前記コンピュータに、
検索要求を受けた場合に、前記複数のファイルのうち、前記第１の情報に前記検索要求に含まれる検索対象文字情報を含む旨を示され、且つ前記第３の情報に検索対象から除く旨を示されないファイルを抽出するとともに、前記第２の情報が、前記検索要求に含まれる検索対象文字情報を含む旨を示す場合に更新された前記特定のファイルを抽出する、
ことを実行させることを特徴とする請求項５〜８のいずれか一つに記載の情報処理方法。
【請求項１０】
コンピュータに、
複数のファイルのそれぞれについて所定の複数の文字情報をそれぞれ含むか否かを示す第１の情報を記憶手段に記憶し、
前記複数のファイルに含まれる特定のファイルが更新された場合に、更新された前記特定のファイルが前記所定の複数の文字情報をそれぞれ含むか否かを示す第２の情報を前記記憶手段に記憶し、
検索要求を受けた場合に、前記複数のファイルのうち、前記第１の情報および前記第２の情報に基づき、前記検索要求に含まれる検索対象文字情報が含まれないファイルを除外したファイル群を抽出する、
ことを実行させることを特徴とする抽出プログラム。
【請求項１１】
コンピュータに、
複数のファイルのそれぞれについて所定の複数の文字情報をそれぞれ含むか否かを示す第１の情報を記憶手段に記憶し、
前記複数のファイルに含まれる特定のファイルが更新された場合に、更新された前記特定のファイルが前記所定の複数の文字情報をそれぞれ含むか否かを示す第２の情報を前記記憶手段に記憶する、
処理を実行させることを特徴とする情報処理プログラム。
【請求項１２】
複数のファイルのそれぞれについて所定の複数の文字情報をそれぞれ含むか否かを示す第１の情報を記憶する記憶手段と、
前記複数のファイルに含まれる特定のファイルが更新された場合に、更新された前記特定のファイルが前記所定の複数の文字情報をそれぞれ含むか否かを示す第２の情報を前記記憶手段に記憶させる更新手段と、
検索要求を受けた場合に、前記複数のファイルのうち、前記第１の情報および前記第２の情報に基づき、前記検索要求に含まれる検索対象文字情報が含まれないファイルを除外したファイル群を抽出する抽出手段と、
を含むことを特徴とする抽出装置。
【請求項１３】
複数のファイルのそれぞれについて所定の複数の文字情報をそれぞれ含むか否かを示す第１の情報を記憶する記憶手段と、
前記複数のファイルに含まれる特定のファイルが更新された場合に、更新された前記特定のファイルが前記所定の複数の文字情報をそれぞれ含むか否かを示す第２の情報を前記記憶手段に記憶させる更新手段と、
を備えることを特徴とする情報処理装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、抽出方法、情報処理方法、抽出プログラム、情報処理プログラム、抽出装置、および情報処理装置に関する。
【背景技術】
【０００２】
複数のファイルのいずれが所定の文字情報を含むかを示すインデックス情報を圧縮しておき、所定の文字情報を検索する場合に、圧縮されたインデックス情報を伸張し、伸張したインデックス情報を参照して所定の文字情報を含むファイルを特定する技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２００６／１２３４４８号パンフレット
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上述した従来技術では、インデックス情報を用いた検索の対象となる複数のファイルのいずれかが更新された場合、インデックス情報の内容も更新する必要がある。たとえば、更新元のファイルに「人形芝居」と記述されている場合に「人形芝居」を「紙芝居」に更新したとすると、文字「人」および「形」のビットをＯＦＦにし、「紙」のビットをＯＮにするといったインデックス情報の更新処理が必要となる。したがって、ファイルの更新処理を開始してから、更新後の複数のファイルに対応したインデックス情報による検索を実行可能とするまでに時間がかかるという問題がある。
【０００５】
本発明は、インデックス情報を用いた検索の対象となる複数のファイルのいずれかを更新する場合に、更新処理を開始してから、更新後の複数のファイルに対応したインデックス情報による検索を実行可能とするまでの処理時間を低減することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一側面によれば、複数のファイルのそれぞれについて所定の複数の文字情報をそれぞれ含むか否かを示す第１の情報を記憶手段に記憶し、前記複数のファイルに含まれる特定のファイルが更新された場合に、更新された前記特定のファイルが前記所定の複数の文字情報をそれぞれ含むか否かを示す第２の情報を前記記憶手段に記憶する、情報処理方法、情報処理プログラム、および情報処理装置が提案される。
【０００７】
本発明の一側面によれば、複数のファイルのそれぞれについて所定の複数の文字情報をそれぞれ含むか否かを示す第１の情報を記憶手段に記憶し、前記複数のファイルに含まれる特定のファイルが更新された場合に、更新された前記特定のファイルが前記所定の複数の文字情報をそれぞれ含むか否かを示す第２の情報を前記記憶手段に記憶し、検索要求を受けた場合に、前記複数のファイルのうち、前記第１の情報および前記第２の情報に基づき、前記検索要求に含まれる検索対象文字情報が含まれないファイルを除外したファイル群を抽出する、抽出方法、抽出プログラム、および抽出装置が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、インデックス情報を用いた検索の対象となる複数のファイルのいずれかを更新する場合に、更新処理を開始してから、更新後の複数のファイルに対応したインデックス情報による検索を実行可能とするまでの処理時間を低減することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、対象ファイル更新例を示す説明図である。
【図２】図２は、実施の形態にかかる情報処理装置のハードウェア構成例を示すブロック図である。
【図３】図３は、本実施の形態にかかるシステム構成例を示す説明図である。
【図４】図４は、本実施の形態にかかる情報処理装置の機能的構成例１を示すブロック図である。
【図５】図５は、図４に示した情報処理装置の集計部〜第２圧縮部までの処理の流れを示す説明図である。
【図６】図６は、集計部４０１による集計および作成部４０４による圧縮符号マップＭの作成例を示す説明図である。
【図７】図７は、（１）出現回数の集計の詳細を示す説明図である。
【図８】図８は、図６の（２）圧縮符号長算出の詳細（Ｎ＝１１）を示す説明図である。
【図９】図９は、図６の（３）葉数特定〜（５）葉の構造体生成の詳細（Ｎ＝１１）を示す説明図である。
【図１０】図１０は、文字情報ごとの補正結果を示す説明図である。
【図１１】図１１は、図６の（６）葉へのポインタ生成の詳細（Ｎ＝１１）を示す説明図である。
【図１２】図１２は、図６の（７）２N分枝無節点ハフマン木Ｈの構築の詳細（Ｎ＝１１）を示す説明図である。
【図１３】図１３は、葉の構造体を示す説明図である。
【図１４】図１４は、特定単一文字の構造体を示す説明図である。
【図１５】図１５は、分割文字コードの構造体を示す説明図である。
【図１６】図１６は、基礎単語の構造体を示す説明図である。
【図１７】図１７は、圧縮符号マップＭの生成例を示す説明図である。
【図１８】図１８は、作成部４０４による圧縮符号マップ作成処理手順例を示すフローチャートである。
【図１９】図１９は、図１８に示した集計処理（ステップＳ１８０１）の詳細な処理手順例を示すフローチャートである。
【図２０】図２０は、図１９に示した対象ファイルＦｉの集計処理（ステップＳ１９０３）の詳細な処理手順例を示すフローチャートである。
【図２１】図２１は、文字出現頻度集計テーブルを示す説明図である。
【図２２】図２２は、図２０に示した基礎単語集計処理（ステップＳ２００２）の詳細な処理手順例を示すフローチャートである。
【図２３】図２３は、基礎単語出現頻度集計テーブルを示す説明図である。
【図２４】図２４は、図２２に示した最長一致検索処理（ステップＳ２２０１）の詳細な処理手順を示すフローチャートである。
【図２５】図２５は、図１８に示したマップ割当数決定処理（ステップＳ１８０２）の詳細な処理手順例を示すフローチャートである。
【図２６】図２６は、図１８に示した再集計処理（ステップＳ１８０３）の詳細な処理手順例を示すフローチャートである。
【図２７】図２７は、対象ファイルＦｉの再集計処理（ステップＳ２６０３）の詳細な処理手順例を示すフローチャートである。
【図２８】図２８は、上位分割文字コード出現頻度集計テーブルを示す説明図である。
【図２９】図２９は、下位分割文字コード出現頻度集計テーブルを示す説明図である。
【図３０】図３０は、図２７で示した２グラム文字列特定処理（ステップＳ２７０６）の詳細な処理手順を示すフローチャートである。
【図３１】図３１は、２グラム文字列出現頻度集計テーブルを示す説明図である。
【図３２】図３２は、図１８に示したハフマン木生成処理（ステップＳ１８０４）の詳細な処理手順例を示すフローチャートである。
【図３３】図３３は、図３２に示した枝数特定処理（ステップＳ３２０４）の詳細な処理手順例を示すフローチャートである。
【図３４】図３４は、図３２に示した構築処理（ステップＳ３２０５）の詳細な処理手順を示すフローチャートである。
【図３５】図３５は、図３４に示した葉へのポインタ生成処理（ステップＳ３４０３）の詳細な処理手順を示すフローチャートである。
【図３６】図３６は、図３０に示したマップ作成処理（ステップＳ１８０５）の詳細な処理手順例を示すフローチャートである。
【図３７】図３７は、図３６に示した対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）の詳細な処理手順を示すフローチャートである。
【図３８】図３８は、図３７で示した基礎単語出現マップ作成処理（ステップＳ３７０２）の詳細な処理手順例を示すフローチャートである。
【図３９】図３９は、図３７で示した特定単一文字出現マップ作成処理（ステップＳ３８０３）の詳細な処理手順例を示すフローチャートである。
【図４０】図４０は、図３９で示した分割文字コード出現マップ作成処理（ステップＳ４００３）の詳細な処理手順例を示すフローチャートである。
【図４１】図４１は、図３７に示した２グラム文字列マップ作成処理（ステップＳ３７０４）の詳細な処理手順例を示すフローチャートである。
【図４２】図４２は、２グラム文字列出現マップ生成処理（ステップＳ４１０４）の詳細な処理手順例を示すフローチャートである。
【図４３】図４３は、２N分枝無節点ハフマン木Ｈを用いた圧縮処理の具体例を示す説明図である。
【図４４】図４４は、第１圧縮部４０３による２N分枝無節点ハフマン木Ｈを用いた対象ファイル群Ｆｓの圧縮処理手順例を示すフローチャートである。
【図４５】図４５は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その１）である。
【図４６】図４６は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その２）である。
【図４７】図４７は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その３）である。
【図４８】図４８は、出現率と出現率領域との関係を示す説明図である。
【図４９】図４９は、出現率領域別の圧縮パターンを有する圧縮パターンテーブルを示す説明図である。
【図５０】図５０は、Ｂ領域およびＢ´領域の場合の圧縮パターンを示す説明図である。
【図５１】図５１は、Ｃ領域およびＣ´領域の場合の圧縮パターンを示す説明図である。
【図５２】図５２は、Ｄ領域およびＤ´領域の場合の圧縮パターンを示す説明図である。
【図５３】図５３は、Ｅ領域およびＥ´領域の場合の圧縮パターンを示す説明図である。
【図５４】図５４は、圧縮符号マップＭ圧縮処理手順を示すフローチャートである。
【図５５】図５５は、本実施の形態にかかる情報処理装置４００の機能的構成例２を示すブロック図である。
【図５６】図５６は、ファイル伸長例（Ｇ１）を示す説明図である。
【図５７】図５７は、ファイル伸長例（Ｇ２）を示す説明図である。
【図５８】図５８は、図５６および図５７での伸長処理の具体例を示す説明図（その１）である。
【図５９】図５９は、図５６および図５７での伸長処理の具体例を示す説明図（その２）である。
【図６０】図６０は、本実施の形態にかかる検索処理手順を示すフローチャートである。
【図６１】図６１は、図６０に示したファイル絞込み処理（ステップＳ６００２）の詳細な処理手順を示すフローチャート（その１）である。
【図６２】図６２は、図６０に示したファイル絞込み処理（ステップＳ６００２）の詳細な処理手順を示すフローチャート（その２）である。
【図６３】図６３は、図６０に示した２N分枝無節点ハフマン木Ｈを用いた伸長処理（ステップＳ６００３）の詳細な処理手順例を示すフローチャート（その１）である。
【図６４】図６４は、図６０に示した２N分枝無節点ハフマン木Ｈを用いた伸長処理（ステップＳ６００３）の詳細な処理手順例を示すフローチャート（その２）である。
【図６５】図６５は、更新処理の具体例を示す説明図である。
【図６６】図６６は、図６５に示した更新処理手順を示すフローチャートである。
【図６７】図６７は、図６６に示した追加ファイルのマップ更新処理（ステップＳ６６０９）の詳細な処理手順を示すフローチャート（前半）である。
【図６８】図６８は、図６６に示した追加ファイルのマップ更新処理（ステップＳ６６０９）の詳細な処理手順を示すフローチャート（後半）である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、本発明の実施の形態を詳細に説明する。なお、本明細書において、「文字情報」とは、テキストデータを構成する、単一文字、基礎単語、分割文字コードなどである。対象ファイル群は、たとえば、文書ファイル、Ｗｅｂページ、電子メールなどの電子データであり、たとえば、テキスト形式、ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）形式、ＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）形式の電子データである。
【００１１】
また、「単一文字」とは、１つの文字コードで表現される文字である。単一文字の文字コード長は、文字コード種により異なる。
【００１２】
たとえば、ＵＴＦ（Ｕｎｉｃｏｄｅ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎ  Ｆｏｒｍａｔ）１６の場合は１６ビットコード、ＡＳＣＩＩ（Ａｍｅｒｉｃａｎ  Ｓｔａｎｄａｒｄ  Ｃｏｄｅ  ｆｏｒ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｉｎｔｅｒｃｈａｎｇｅ）コードの場合は８ビットコード、シフトＪＩＳ（Ｊａｐａｎｅｓｅ  Ｉｎｄｕｓｔｒｉａｌ  Ｓｔａｎｄａｒｄ）コードの場合は８ビットコードである。シフトＪＩＳコードで日本語の文字を表現する場合は、２個の８ビットコードを組み合わせることとなる。
【００１３】
また、「基礎単語」とは、小・中学校で学習する基本的な単語や、特定の文字列で表現される予約語をいう。「Ｔｈｉｓ  ｉｓ  ａ・・・．」の英文を例にすると「Ｔｈｉｓ」、「ｉｓ」、「ａ」などの単語であり、千語レベル、２千語レベル、数千語レベルに分類され、英和辞典には、「＊＊＊」、「＊＊」、「＊」マークが付与されている。また、予約語とは、予め決められた文字列であり、たとえば、ＨＴＭＬのタグ（たとえば、＜ｂｒ＞）が挙げられる。
【００１４】
また、「分割文字コード」とは、単一文字を、上位のコードと下位のコードに分割した各々のコードである。本実施の形態では、後述するように、単一文字を、上位のコードと下位のコードに分割する場合がある。たとえば、「芝」という単一文字の文字コードは、ＵＴＦ１６の場合、「９Ｄ８２」で表現されるが、上位分割文字コード「０ｘ９Ｄ」と下位分割文字コード「０ｘ８２」に分割される。
【００１５】
また、「グラム」とは、文字単位である。たとえば、単一文字については、その１文字分が１グラムとなる。分割文字コードについては、分割文字コード単独で１グラムとなる。したがって、単一文字「芝」は２グラムとなる。なお、本実施の形態では、文字コードとしてＵＴＦ１６を例に挙げて説明する。
【００１６】
また、本明細書では、「ビットをＯＮ」とした場合は、そのビットの値を"１"にし、「ビットをＯＦＦ」とした場合は、そのビットの値を"０"として説明する。なお、「ビットをＯＮ」とした場合は、そのビットの値を"０"にし、「ビットをＯＦＦ」とした場合は、そのビットの値を"１"にしてもよい。
【００１７】
「出現マップ」とは、文字情報を指定するポインタと文字情報の各対象ファイルでの存否を示すビット列を連結したビット列である。検索処理時には、このビット列を、ビットのＯＮ・ＯＦＦに応じて検索対象の文字情報を含むか否かを示すインデックスとして用いることができる。文字情報を指定するポインタとしては、たとえば、文字情報の圧縮符号が採用される。文字情報を指定するポインタは、例えば、文字情報そのものを用いても良い。「圧縮符号マップ」とは、圧縮符号のポインタで示される文字情報ごとの出現マップをまとめたビットマップである。２グラム文字列の圧縮符号マップについては、第１グラムの圧縮符号と第２グラムの圧縮符号を組み合わせた圧縮符号列となる。
【００１８】
「２グラム文字列」とは、１グラムの文字コードが連接する文字列である。たとえば、「人形芝居」という文字列には、２連接文字「人形」、「形芝」、「芝居」が含まれている。２連接文字「人形」の「人」、「形」はそれぞれ分割されない単一文字であるため、２連接文字「人形」はそのまま２グラム文字列となる。
【００１９】
「芝」は上述したように分割されるため、単一文字「形」と「芝」の上位分割文字コード「０ｘ９Ｄ」の組み合わせが２グラム文字列となる。また、上位分割文字コード「０ｘ９Ｄ」と下位分割文字コード「０ｘ８２」の組み合わせも２グラム文字列となる。さらに、下位分割文字コード「０ｘ８２」と分割されない単一文字「居」の組み合わせも２グラム文字列となる。
【００２０】
基礎単語により、対象ファイル群が圧縮されている場合、圧縮符号マップの生成時や検索時に１パスでアクセスすることが可能である。なお、対象ファイル群を圧縮しない場合は、文字情報を指定するポインタとしては、文字情報の文字コードをそのまま採用してもよい。
【００２１】
＜対象ファイル更新例＞
図１は、対象ファイル更新例を示す説明図である。ここで、ファイル番号＃＝ｉの対象ファイルを対象ファイルＦｉとする。図１では、ｎ個の対象ファイルのうちファイル番号＃＝３の対象ファイルＦ３を更新する場合を例に挙げている。なお、図１の圧縮符号マップＭでは、文字情報を指定するポインタとなる文字情報の圧縮符号について、便宜上、文字情報を表記している。
【００２２】
（Ａ）において、圧縮符号マップＭには削除マップＤが設定されている。削除マップＤとは、対象ファイルＦｉの存在または削除をビット列で示したインデックスである。なお、削除マップＤにおいてＯＮ（＝１）に該当するビットに対応するファイル番号のファイルＦｉは、存在していることを意味する。一方、ＯＦＦ（＝０）になると、当該ファイルＦｉは削除されたことを意味する。これにより、圧縮符号マップＭを用いて検索を行う場合に、対象ファイルＦｉそのものを削除しなくても、対象ファイルＦｉに対応する削除マップをＯＦＦにすることで、対象ファイルＦｉを検索対象から除くことができる。圧縮符号マップＭ内の出現マップは、圧縮されて保持される。圧縮符号マップＭの圧縮は、例えばハフマン木による圧縮などで、各文字情報に対応するビット列単位で行われても良い。また、圧縮符号マップＭの圧縮は、削除マップＤを除いた圧縮マップＭについて行われても良い。圧縮された圧縮符号マップＭのビット列の桁数は、対象ファイルの数以下となる。図１（Ａ）、（Ｃ）においては、圧縮されたビット列が圧縮前よりも短くなっている様を、各ビット列の表示域を小さく表示することにより便宜的に示している。
【００２３】
（Ｂ）圧縮符号マップＭは、対象ファイル群を絞り込む場合に、圧縮に用いたハフマン木により伸長される。たとえば、検索文字列が「人形」である場合、対象ファイルＦ３には、文字情報「人」、「形」、「人形」のビットがＯＮになっており、削除マップＤのビットもＯＮである。したがって、これら３個のビットのＡＮＤ結果が「１」となる。したがって、対象ファイルＦ３が検索される。
【００２４】
一方、対象ファイルＦ２の場合、文字情報「人」、「形」、「人形」のビットがＯＮであるが、削除マップＤのビットはＯＦＦであるため、これら３個のビットのＡＮＤ結果が「０」となる。したがって、対象ファイルＦ２は検索されない。なお、対象ファイルＦ３を削除する場合は、削除マップＤの対象ファイルＦ３のビットがＯＮからＯＦＦになる。これにより、対象ファイルＦ３は、対象ファイルＦ２のように、検索対象外となる。
【００２５】
（Ｃ）つぎに、対象ファイルＦ３を更新する。たとえば、対象ファイルＦ３に「人形芝居を見た。」という文字列が記述されており、当該文字列以外の文字列には、「人」、「形」および「紙」は存在しないものとする。このうち、「人形」を「紙」に書き換えたとする。この場合、対象ファイルＦ３には、あたらしいファイル番号＃＝ｎ＋１が割り当てられ、更新により対象ファイルＦ（ｎ＋１）として保存される。
【００２６】
また、圧縮符号マップＭには、ファイル番号ｎ＋１のビットが各出現マップに設定される。また、ファイル番号ｎ＋１の削除マップＤのビットはＯＮに設定される。対象ファイルＦ（ｎ＋１）の場合、「人形」の削除により、文字情報「人」、「形」、「人形」のビットがＯＦＦになり、文字情報「紙」のビットがＯＮになる。これにより、対象ファイルＦ（ｎ＋１）は検索対象とすることができる。
【００２７】
一方、ファイル番号３の削除マップＤのビットがＯＮからＯＦＦになる。これにより、対象ファイルＦ３は検索対象外とすることができる。なお、更新元の対象ファイルＦ３は、削除することとしてもよい。この場合、省メモリ化を図ることができる。一方、対象ファイルＦ３は、そのまま残しておくこととしてもよい。この場合、更新前の状態に戻したい場合に、復元することが可能となる。もしくは、対象ファイルＦ３の格納場所を示すポインタを、更新後のファイルＦ（ｎ＋ｉ）の格納場所を示すポインタに用いても良い。すなわち、対象ファイルＦ３そのものを書き換え、書き換えたファイルを、対象ファイルＦ（ｎ＋ｉ）として利用しても良い。
【００２８】
また、更新後のファイルについて新しいファイル番号を採番するため、既存のファイル番号のビットを削除する必要はない。したがって、圧縮済みであるファイル番号１〜ｎの出現マップについては、圧縮状態のまま内容も更新することなく保持することができる。
【００２９】
また、図１（Ｃ）に示したように、あらかじめ、圧縮符号マップＭの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Ｆｓのファイル番号ｐの降順に配列しておく。これにより、これにより、ファイル番号；１〜ｎのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルＦｉの絞込みを正確に実行することができる。
【００３０】
図１を用いて説明した圧縮符号マップＭによる検索処理及び圧縮符号マップＭの更新処理は、日本語のみに限らず、他の言語についても有効である。例えば、英語の対象ファイルを用いた場合には、「Ｉ  ｗａｔｃｈｅｄ  ｍａｒｉｏｎｅｔｔｅ  ｐｅｒｆｏｒｍａｎｃｅ．」という文を含む対象ファイルＦｉは、圧縮符号マップＭにおいて、「ｗａｔｃｈ」、「ｍａｒｉｏｎｅｔｔｅ」、「ｐｅｒｆｏｒｍａｎｃｅ」のそれぞれに対応するビットがＯＮとなる。例えば、「ｍａｒｉｏｎｅｔｔｅ  ｐｅｒｆｏｒｍａｎｃｅ」という検索文字列を受け付けた場合には、「ｍａｒｉｏｎｅｔｔｅ」、「ｐｅｒｆｏｒｍａｎｃｅ」のそれぞれに対応するビットと、削除マップＤと、のＡＮＤ結果が「１」である対象ファイルに検索範囲が絞り込まれる。
【００３１】
また、対象ファイルＦｉを「Ｉ  ｗａｔｃｈｅｄ  ａｃｒｏｂａｔｉｃ  ｐｅｒｆｏｒｍａｎｃｅ．」に更新する場合には、Ｆ（ｎ＋ｉ）に対応する圧縮符号マップのビットを、「ｗａｔｃｈ」、「ａｃｒｏｂａｔｉｃ」、「ｐｅｒｆｏｒｍａｎｃｅ」のそれぞれについてＯＮにする。対象ファイルＦｉが、更新後には「ｍａｒｉｏｎｅｔｔｅ」という単語を含まない場合には、「ｍａｒｉｏｎｅｔｔｅ」に対応するＦ（ｎ＋ｉ）のビットはＯＦＦとする。さらに、対象ファイルＦ（ｎ＋ｉ）に対応する削除マップＤをＯＮにして、Ｆｉに対応する削除マップＤをＯＦＦにする。これにより、英語についても対象ファイルＦｉの更新に合わせて、圧縮符号マップＭの更新処理が行われる。
【００３２】
＜情報処理装置のハードウェア構成例＞
図２は、実施の形態にかかる情報処理装置（抽出装置含む）のハードウェア構成例を示すブロック図である。図２において、情報処理装置は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、ディスプレイ２０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００３３】
ここで、ＣＰＵ２０１は、情報処理装置の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。また、ＲＯＭ２０２は、圧縮符号マップＭを生成・管理するプログラム、圧縮符号マップＭまたは符号マップを用いて検索を行うプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用され、ＣＰＵ２０１は、ＲＯＭ２０２に記憶されたプログラムをＲＡＭ２０３に読み出して実行することができる。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００３４】
光ディスクドライブ２０６は、ＣＰＵ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータを情報処理装置に読み取らせたりする。
【００３５】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００３６】
インターフェース（以下、「Ｉ／Ｆ」と略する。）２０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１４に接続され、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００３７】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３８】
スキャナ２１２は、画像を光学的に読み取り、情報処理装置内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３９】
また、情報処理装置は、サーバや据置き型のパーソナル・コンピュータのほか、携帯電話機、スマートフォン、電子書籍端末、ノート型パソコンなどの携帯型端末であってもよい。また、本実施の形態は、複数のコンピュータに応じて実施されてもよい。
【００４０】
図３は、本実施の形態にかかるシステム構成例を示す説明図である。図３において、システムは、図２に示す各ハードウェアを含みうる情報処理装置３０１〜３０３、ネットワーク３０４、スイッチ３０５、無線基地局３０７を含む。情報処理装置３０３に含まれるＩ／Ｆは、無線通信機能を備える。
【００４１】
例えば、複数のファイルを含むコンテンツについての圧縮符号マップＭを生成する処理を情報処理装置３０１で実行し、情報処理装置３０２及び情報処理装置３０３に配信し、情報処理装置３０２および情報処理装置３０３のそれぞれで配信されたコンテンツについての検索処理を実行してもよい。
【００４２】
また、複数のファイルを含むコンテンツについての圧縮符号マップＭを生成する処理を情報処理装置３０１で実行し、情報処理装置３０２または情報処理装置３０３からコンテンツについての検索依頼を情報処理装置３０１が受け付けて、検索処理を実行し、実行した検索処理の結果を情報処理装置３０２、情報処理装置３０３のそれぞれに返すように構成してもよい。図２と同様に、情報処理装置３０１〜３０３のそれぞれは、サーバや据置き型のパーソナル・コンピュータのほか、携帯電話機、スマートフォン、電子書籍端末、ノート型パソコンなどの携帯型端末であってもよい。
【００４３】
＜機能的構成例１＞
図４は、本実施の形態にかかる情報処理装置の機能的構成例１を示すブロック図であり、図５は、図４に示した情報処理装置の集計部〜第２圧縮部までの処理の流れを示す説明図である。図４において、情報処理装置４００は、集計部４０１と、第１生成部４０２と、第１圧縮部４０３と、作成部４０４と、第２生成部４０５と、第２圧縮部４０６と、を備える。
【００４４】
集計部４０１〜第２圧縮部４０６は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることによりその機能を実現する。なお、集計部４０１〜第２圧縮部４０６は、それぞれ実行結果を記憶装置に書き込んだり、他の部の実行結果を読み出したりして、それぞれ演算を実行する。以下、集計部４０１〜第２圧縮部４０６について簡単に説明する。
【００４５】
集計部４０１は、対象ファイル群内の文字情報の出現回数を集計する。具体的には、たとえば、集計部４０１は、図５の（Ａ）に示したように、対象ファイル群Ｆｓ内の文字情報の出現回数を集計する。集計部４０１では、特定単一文字、上位分割文字コード、下位分割文字コード、２グラム文字、基礎単語別に出現回数を計数する。集計部４０１の詳細な処理内容については後述する。
【００４６】
第１生成部４０２は、集計部４０１の集計結果に基づいて２N分枝無節点ハフマン木Ｈを生成する（図５（Ｂ））。２N分枝無節点ハフマン木Ｈとは、根から分岐する枝が２N本あり、１または複数本の枝で葉を直接ポイントするハフマン木である。節点（内部節点）はない。節点がなく直接葉にヒットするため、節点を有する通常のハフマン木に比べて、伸長速度の高速化を図ることができる。葉は、該当する文字情報とその圧縮符号を含む構造体である。葉の構造体とも呼ぶ。葉に割り当てられる枝数は、割当先の葉に存在する圧縮符号の圧縮符号長に依存する。第１生成部４０２の詳細な処理内容については後述する。
【００４７】
第１圧縮部４０３は、２N分枝無節点ハフマン木Ｈを用いて対象ファイル群Ｆｓの各対象ファイルを圧縮して圧縮ファイル群ｆｓにする（図５（Ｃ））。第１圧縮部４０３の詳細な処理内容については後述する。
【００４８】
作成部４０４は、集計部４０１の集計結果と２N分枝無節点ハフマン木Ｈにおいて文字情報ごとに割り当てられた圧縮符号に基づいて、圧縮符号マップＭを作成する。作成部４０４は、圧縮符号マップＭについても、特定単一文字、上位分割文字コード、下位分割文字コード、２グラム文字、基礎単語別に作成する。作成部４０４は、圧縮符号マップＭにおいて該当する文字情報が１個の対象ファイルに１回でも出現したらそのファイル番号のビットをＯＮにする（図５（Ｄ））。また、初期状態では、削除マップＤは各対象ファイルですべてＯＮにする。作成部４０４の詳細な処理内容については後述する。
【００４９】
第２生成部４０５は、文字情報の出現確率に基づいて出現マップを圧縮するハフマン木ｈを生成する（図５（Ｅ））。第２生成部４０５の詳細な処理内容については後述する。第２圧縮部４０６は、第２生成部４０５で生成されたハフマン木を用いて各出現マップを圧縮する（図５（Ｆ））。第２圧縮部４０６の詳細な処理内容については後述する。
【００５０】
＜集計および圧縮符号マップＭの作成の詳細＞
つぎに、集計部４０１による集計および作成部４０４による圧縮符号マップＭの作成の詳細について説明する。圧縮符号マップＭを作成する場合、作成に先立って、集計部４０１により、対象ファイル群Ｆｓから文字情報の出現回数を集計し、第１生成部４０２により、２N分枝無節点ハフマン木Ｈを生成しておく必要がある。
【００５１】
図６は、集計部４０１による集計および作成部４０４による圧縮符号マップＭの作成例を示す説明図である。
【００５２】
（１）出現回数の集計
まず、情報処理装置４００は、対象ファイル群Ｆｓに存在する文字情報の出現回数を計数する。集計結果は、出現回数の降順にソートされ、出現回数の大きい方から昇順の順位がつけられる。なお、ここでは、文字情報の総種類数は、例として１３０５個（＜２０４８（＝２11））とする。（１）出現回数の集計の詳細は図７で説明する。
【００５３】
（２）圧縮符号長算出
つぎに、（１）で得られた集計結果を基にして、情報処理装置４００は、文字情報ごとの圧縮符号長を算出する。具体的には、情報処理装置４００は、文字情報ごとに、出現率を算出する。出現率は、文字情報の出現回数を全文字情報の総出現回数で割ることで得られる。そして、情報処理装置４００は、出現率に対応する生起確率を求め、生起確率から圧縮符号長を導き出す。
【００５４】
生起確率は、１／２xで表現される。ｘはべき数である。圧縮符号長は、生起確率のべき数ｘとなる。具体的には、出現率が生起確率の以下のどの範囲であるかで圧縮符号長が決定される。ＡＲは出現率である。
１／２0＞ＡＲ≧１／２1・・・圧縮符号長は１ビット。
１／２1＞ＡＲ≧１／２2・・・圧縮符号長は２ビット。
１／２2＞ＡＲ≧１／２3・・・圧縮符号長は３ビット。
１／２3＞ＡＲ≧１／２4・・・圧縮符号長は４ビット。
・
・
・
１／２N-1＞ＡＲ≧１／２N・・・圧縮符号長はＮビット。
【００５５】
（２）圧縮符号長算出の詳細は図８で説明する。
【００５６】
（３）葉数特定
つぎに、情報処理装置４００は、圧縮符号長ごとに葉数を集計することで圧縮符号長ごとの葉数を特定する。ここでは、最大圧縮符号長は１７ビットとする。また、葉数とは、文字情報の種類数である。したがって、圧縮符号長５ビットの葉数が２である場合、５ビットの圧縮符号が割り当てられる文字情報が２つ存在することを示している。
【００５７】
（４）葉数補正
つぎに、情報処理装置４００は、葉数を補正する。具体的には、情報処理装置４００は、枝数の上限２Nのべき数Ｎが最大圧縮符号長となるように補正する。たとえば、べき数Ｎ＝１１の場合、圧縮符号長１１ビット〜１７ビットまでの葉数の総和を、補正後の圧縮符号長１１ビットの葉数にする。そして、情報処理装置４００は、圧縮符号長ごとに葉当たりの枝数を割り当てる。具体的には、補正後の圧縮符号長に対し、その降順に、２0、２1、２2、２3、２4、２5、２6、１６として葉当たりの枝数を決定する。
【００５８】
たとえば、図６では、圧縮符号長１１ビットの圧縮符号が割り当てられる文字情報の総数（葉数）は１２１５個であるが、その葉当たりの枝数は１である。圧縮符号長１１ビットの圧縮符号が割り当てられる文字情報については、それぞれ１本の枝しか割り当てられないこととなる。一方、圧縮符号長６ビットの圧縮符号が割り当てられる文字情報の総数（葉数）は６個であるが、その葉当たりの枝数は３２である。圧縮符号長６ビットの圧縮符号が割り当てられる文字情報については、それぞれ３２本の枝が割り当てられることとなる。（４）葉数補正は、必要な場合に実行すればよく、実行しなくてもよい。
【００５９】
（５）葉の構造体生成
つぎに、情報処理装置４００は、葉の構造体を生成する。葉の構造体とは、文字情報とその圧縮符号長とその圧縮符号長での圧縮符号が対応付けられたデータ構造体である。たとえば、出現順位が１位である文字「０」の圧縮符号長は６ビットであり、圧縮符号は「００００００」となる。図６の例では、文字情報の種類数（葉数）は１３０５個であるため、葉Ｌ１の構造体〜葉Ｌ１３０５の構造体が生成されることとなる。（３）葉数特定〜（５）葉の構造体生成の詳細（Ｎ＝１１）は、図９で説明する。
【００６０】
（６）葉へのポインタ生成
つぎに、情報処理装置４００は、葉の構造体ごとに葉へのポインタを生成する。葉へのポインタは、そのポイント先となる葉の構造体内の圧縮符号に、その葉当たりの枝数分の番号に相当するビット列を連結したビット列である。たとえば、葉Ｌ１である文字「０」に割り当てられた圧縮符号「００００００」の圧縮符号長は６ビットであるため、葉Ｌ１当たりの枝数は３２本である。
【００６１】
したがって、葉Ｌ１へのポインタの先頭６ビットは、圧縮符号「００００００」となる。後続ビット列は、葉Ｌ１当たりの枝数で表現される３２（＝２5）種のビット列となる。すなわち、３２種の５ビットのビット列が圧縮符号「００００００」の後続ビット列となる。したがって、葉Ｌ１へのポインタは、先頭６ビットが「００００００」で固定された３２種の１１ビットのビット列となる。なお、葉当たりの枝数が１本の場合は、葉へのポインタは１個であり、圧縮符号とその葉へのポインタは同一ビット列となる。（６）葉へのポインタ生成の詳細は、図１１で説明する。
【００６２】
（７）２N分枝無節点ハフマン木Ｈの構築
最後に、情報処理装置４００は、２N分枝無節点ハフマン木Ｈを構築する。具体的には、葉のポインタを根とすることで、葉の構造体を直接指定する２N分枝無節点ハフマン木Ｈが構築される。圧縮符号列が、先頭６ビットが「００００００」の１１ビットのビット列である場合、後続の５ビットが３２種のいずれのビット列であっても、２N分枝無節点ハフマン木Ｈにより文字「０」の葉Ｌ１の構造体をポイントすることができる。（７）２N分枝無節点ハフマン木Ｈの構築の詳細は、図１２で説明する。
【００６３】
図７は、（１）出現回数の集計の詳細を示す説明図である。図７において、情報処理装置４００は、（Ａ）対象ファイル群Ｆｓからの集計、（Ｂ）出現頻度の降順でのソート、（Ｃ）目標出現率の順位までの抽出という３つのフェーズを実行する。以下、基礎単語と単一文字に分けて説明する。
【００６４】
（Ａ１）まず、情報処理装置４００は、対象ファイル群Ｆｓを読み込んで、基礎単語の出現頻度（出現回数）を計数する。情報処理装置４００は、基礎単語の構造体を参照して、基礎単語の構造体内の基礎単語に一致する文字列が対象ファイルに存在する場合に、当該基礎単語の出現頻度（初期値は０）を１加算する。基礎単語の構造体とは、基礎単語が記述されたデータ構造体である。
【００６５】
（Ｂ１）対象ファイル群Ｆｓにおいて基礎単語の集計が終了すると、情報処理装置４００は、基礎単語出現頻度集計テーブルを、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い基礎単語から順位付けをおこなう。
【００６６】
（Ａ２）、また、情報処理装置４００は、対象ファイル群Ｆｓを読み込んで、単一文字の出現頻度を計数する。具体的には、情報処理装置４００は、単一文字の出現頻度（初期値は０）を１加算する。
【００６７】
（Ｂ２）対象ファイル群Ｆｓにおいて単一文字の集計が終了すると、情報処理装置４００は、単一文字出現頻度集計テーブルを、出現頻度の降順にソートする。すなわち、出現頻度の高い順に並べ替え、出現頻度が最も高い単一文字から順位付けをおこなう。
【００６８】
（Ｃ１）つぎに、情報処理装置４００は、（Ｂ１）ソート後の基礎単語出現頻度集計テーブルを参照して、目標出現率Ｐｗまでの順位の基礎単語を抽出する。具体的には、情報処理装置４００は、全基礎単語の出現頻度の総和（総出現頻度）を分母とし、順位が１位の基礎単語から降順に出現頻度を累計して分子とし、各順位までの出現率Ｐｗを算出する。
【００６９】
たとえば、総出現頻度が４００００、１位からｙ位までの基礎単語群の累計出現頻度が３００００とすると、ｙ位までの出現頻度は、（４００００／３００００）×１００＝７５［％］となる。ここで、目標出現率Ｐｗが７５［％］である場合は、上位ｙ位までの基礎単語を抽出することとなる。
【００７０】
（Ｃ２１）つぎに、情報処理装置４００は、（Ｂ２）ソート後の単一文字出現頻度集計テーブルを参照して、目標出現率Ｐｃまでの順位の単一文字を抽出する。具体的には、情報処理装置４００は、全単一文字の出現頻度の総和（総出現頻度）を分母とし、順位が１位の単一文字から降順に出現頻度を累計して分子とし、各順位までの出現率を算出する。
【００７１】
たとえば、総出現頻度が５００００、１位からｙ位までの単一文字群の累計出現頻度が４００００とすると、ｙ位までの出現頻度は、（５００００／４００００）×１００＝８０［％］となる。ここで、目標出現率Ｐｃが８０［％］である場合は、上位ｙ位までの単一文字を抽出することとなる。なお、（Ｃ２１）で抽出された単一文字を、元の単一文字群と区別するために、「特定単一文字（群）」と称す。
【００７２】
（Ｃ２２）また、単一文字群のうち特定単一文字群から外された単一文字（以下、「非特定単一文字（群）」）は、出現頻度が各特定単一文字よりも低いため、その文字コードを分割する。具体的には、非特定単一文字の文字コードを、上位ビットの文字コードと、下位ビットの文字コードに分割する。
【００７３】
たとえば、単一文字がＵＴＦ１６ビット文字コードで表現されている場合は、上位８ビットの文字コードと下位８ビットの文字コードに分割する。この場合、分割されたいずれの文字コードも、０ｘ００〜０ｘＦＦのコードで表現される。このように、上位ビットの文字コードが上位分割文字コードであり、下位ビットの文字コードが下位分割文字コードである。
【００７４】
図８は、図６の（２）圧縮符号長算出の詳細（Ｎ＝１１）を示す説明図である。図８の文字情報テーブルは、図６の（１）での集計結果を反映したテーブルであり、文字情報ごとに順位項目、伸長種別項目、コード項目、文字項目、出現回数項目、総回数項目、出現率項目、補正前での生起確率項目および圧縮符号長項目が設定されている。このうち、順位項目〜総回数項目までが再ソート結果で得られた情報である。
【００７５】
ここで、順位項目には、文字情報の出現回数の降順に順位（昇順）が書き込まれている。文字情報項目のうち伸長種別項目には、文字情報の種別が書き込まれる。「１６」は１６ビットコード（の単一文字）を示している。「８」は８ビットの分割文字コードを示している。「基」は基礎単語を示している。
【００７６】
文字情報項目のうちコード項目には、特定単一文字または分割文字コードが書き込まれている。基礎単語の場合は空欄とする。文字情報項目のうち文字項目には、文字や基礎単語が書き込まれている。分割文字コードの場合は空欄とする。出現回数項目には、対象ファイル群Ｆｓでの文字情報の出現回数が書き込まれている。総回数項目には、全文字情報の総出現回数が書き込まれている。
【００７７】
出現率項目には、出現回数を総回数で割り算した値が出現率として書き込まれている。補正前項目の生起確率項目には、出現率に対応する生起確率が書き込まれている。圧縮符号長項目には、生起確率に応じた圧縮符号長、すなわち、生起確率１／２yのべき数ｙが圧縮符号長として書き込まれている。
【００７８】
図９は、図６の（３）葉数特定〜（５）葉の構造体生成の詳細（Ｎ＝１１）を示す説明図である。図８の文字情報テーブルを圧縮符号長単位で葉数（文字情報の総種類数）を集計した結果が、図８における補正前の葉数となる。ここで、補正Ａとは、圧縮符号長の上限長Ｎ（すなわち、２N分枝無節点ハフマン木Ｈの最大枝数２Nのべき数Ｎ）以上の圧縮符号長に割り当てられた葉数を、圧縮符号長の上限長Ｎに集約する補正である。この場合、補正前での最大圧縮符号長は１７ビットであるが、文字情報の総種類数が１３０５種であるため、圧縮符号長の上限長Ｎは、Ｎ＝１１となる。したがって、補正Ａでは、圧縮符号長１１ビットの葉数が、圧縮符号長が１１ビット〜１７ビットの葉数の総和（１１９０個）となる。
【００７９】
そして、情報処理装置４００は、生起確率総和を求める。圧縮符号長ごとの生起確率は決められているため（５ビットなら１／２5）、圧縮符号長ごとに生起確率を葉数で乗じることで、圧縮符号長ごとの乗算結果が得られる。たとえば、補正Ａにおける圧縮符号長５ビットの葉数は２である。圧縮符号長５ビットの生起確率は、１／２5である。したがって、補正Ａにおける圧縮符号長５ビットの生起確率は、２×（１／２5）＝１／２4となる。圧縮符号長６ビット以降も同様に補正Ａにおける圧縮符号長生起確率を求める。そして、補正Ａ後における各圧縮符号長の生起確率を合計することで、補正Ａでの生起確率総和が得られる。
【００８０】
そして、情報処理装置４００は、生起確率総和が１以下であるか否かを判断する。しきい値ｔは０＜ｔ≦１である。しきい値ｔを設けたくない場合は、ｔ＝１とすればよい。しきい値ｔ未満であれば、補正Ｂに移行する。しきい値ｔ以上１以下である場合は、補正Ｂに移行せず、この時点での圧縮符号長ごとの葉数で確定する。
【００８１】
補正Ｂは、補正Ａでの圧縮符号長群（５ビット〜１２ビット）は変えずに、葉数を更新する補正である。具体的には、補正Ａでの生起確率総和が、しきい値ｔ以上１以下でない場合におこなわれる補正である。より具体的には、補正Ｂは２種類ある。
【００８２】
１つ目は、生起確率総和がしきい値ｔ未満である場合、生起確率総和が１以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を増加させる補正（以下、補正Ｂ+）である。もう１つは、生起確率総和が１より大きい場合、生起確率総和が１以下に割り込んでから１以下の最大値が得られるまで、たとえば、最大漸近値に収束するまで、生起確率総和を減少させる補正（以下、補正Ｂ-）である。
【００８３】
図９に示した例では、補正Ａでの生起確率総和が「１．１４６」であるため、補正Ｂ-をおこなうこととなる。なお、補正Ｂ+および補正Ｂ-のいずれの補正Ｂであっても、葉数を生起確率総和で割るという同じ補正をおこなう。
【００８４】
まず、補正Ｂ-の１回目（補正Ｂ-１）では、圧縮符号長ごとの補正Ａでの葉数を、前回の補正（この場合は補正Ａ）の生起確率の総和（１．１４６）で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Ａでの圧縮符号長の上限長Ｎ（Ｎ＝１１ビット）については、前回の補正（この場合は補正Ａ）の生起確率総和（１．１４６）で割ることはせず、葉の総数（１３０５個）から、補正Ｂ-１での圧縮符号長ごとの葉の総数（圧縮符号長の上限長Ｎの葉数除く）を引くことで、圧縮符号長の上限長Ｎの葉数を求める。この場合は、１２０８個である。
【００８５】
このあと、情報処理装置４００は、補正Ａの場合と同様の計算処理により、補正Ｂ-１での生起確率総和を求める。そして、情報処理装置４００は、補正Ｂ-１での生起確率総和が１以下の最大漸近値に収束したか否かを判断する。補正Ｂ-１での生起確率総和が１以下の最大漸近値に収束していなければ、補正Ｂ-の２回目（補正Ｂ-２）に移行する。最大漸近値に収束した場合は、補正Ｂ-２に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正Ｂ-１で更新された生起確率総和「１．０４２」は１より大きいため、最大漸近値に収束しておらず、補正Ｂ-２に移行する。
【００８６】
補正Ｂ-２では、圧縮符号長ごとの補正Ｂ-１での葉数を、前回の補正（この場合は補正Ｂ-１）の生起確率総和（１．０４２）で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Ｂ-１での圧縮符号長の上限長Ｎ（Ｎ＝１１ビット）については、前回の補正（この場合は補正Ｂ-１）の生起確率総和（１．０４２）で割ることはせず、葉の総数（１３０５個）から、補正Ｂ-２での圧縮符号長ごとの葉の総数（圧縮符号長の上限長Ｎの葉数除く）を引くことで、圧縮符号長の上限長Ｎの葉数を求める。この場合は、１２１５個である。
【００８７】
このあと、情報処理装置４００は、補正Ｂ-１の場合と同様の計算処理により、補正Ｂ-２での生起確率総和を求める。そして、情報処理装置４００は、補正Ｂ-２での生起確率総和が１以下の最大漸近値に収束したか否かを判断する。補正Ｂ-２での生起確率総和が１以下の最大漸近値に収束していなければ、補正Ｂ-の３回目（補正Ｂ-３）に移行する。最大漸近値に収束した場合は、補正Ｂ-３に移行せず、この時点での圧縮符号長ごとの葉数で確定する。補正Ｂ-２で更新された生起確率総和「０．９８２」は１以下であるが、最大漸近値に収束しているかが不明であるため、補正Ｂ-３に移行する。
【００８８】
補正Ｂ-３では、圧縮符号長ごとの補正Ｂ-２での葉数を、前回の補正（この場合は補正Ｂ-２）の生起確率総和（０．９８２）で割ることで、葉数を更新する。なお、小数点以下は切り捨てでも、四捨五入でもよい。なお、補正Ｂ-２での圧縮符号長の上限長Ｎ（Ｎ＝１１ビット）については、前回の補正（この場合は補正Ｂ-２）の生起確率総和（０．９８２）で割ることはせず、葉の総数（１３０５個）から、補正Ｂ-３での圧縮符号長ごとの葉の総数（圧縮符号長の上限長Ｎの葉数除く）を引くことで、圧縮符号長の上限長Ｎの葉数を求める。この場合は、１２１５個である。
【００８９】
このあと、情報処理装置４００は、補正Ｂ-２の場合と同様の計算処理により、補正Ｂ-３での生起確率総和を求める。そして、情報処理装置４００は、補正Ｂ-３での生起確率総和が１以下の最大漸近値に収束したか否かを判断する。補正Ｂ-３での生起確率総和が１以下の最大漸近値に収束していなければ、補正Ｂ-の４回目（補正Ｂ-４）に移行する。最大漸近値に収束した場合は、補正Ｂ-４に移行せず、この時点での圧縮符号長ごとの葉数で確定する。
【００９０】
補正Ｂ-３で更新された生起確率総和「０．９８２」は、補正Ｂ-２で更新された生起確率総和「０．９８２」と同じ値である。すなわち、補正Ｂ-３での各圧縮符号長の葉数と補正Ｂ-２での各圧縮符号長の葉数とは同じである。この場合、情報処理装置４００は、生起確率総和が最大漸近値に収束したと判断し、葉数が確定する。
【００９１】
このようにして、葉数が確定するまで補正Ｂ-を継続することとなる。図９の例では、補正Ｂ-３で圧縮符号長ごとの葉数が確定したこととなる。このあと、情報処理装置４００は、圧縮符号長ごとに、葉当たりの枝数を算出することとなる。葉当たりの枝数の算出は、上述したように、圧縮符号長の上限長Ｎ（この場合はＮ＝１１ビット）から降順に、２0、２1、２2、２3、２4、２5、２6として葉当たりの枝数を割り当てることとなる。なお、枝数の小計は、圧縮符号長ごとに、葉当たりの枝数に確定した葉数を乗じた乗算結果である。
【００９２】
図１０は、文字情報ごとの補正結果を示す説明図である。図１０において、文字情報テーブルには、補正Ａ、補正Ｂ-１〜補正Ｂ-２までの補正結果が追加されている。図１０に示したように、補正により圧縮符号長別の葉数が更新されるため、順位項目の１位の文字情報から短い圧縮符号長が割り当てられることとなる。
【００９３】
たとえば、補正Ｂ-２で確定した場合、圧縮符号長６ビットでは葉数が６、圧縮符号長７ビットでは葉数が１８、…、圧縮符号長１１ビットでは葉数が１２１５となっている。したがって、順位が１位から６位までの文字情報（葉数６個分）については６ビットの圧縮符号長、順位が７位から２４位までの文字情報（葉数１８個分）については７ビットの圧縮符号長、…、順位が９１位から１３０５位までの文字情報（葉数１２１５個分）については１１ビットの圧縮符号長が割り当てられる。
【００９４】
そして、情報処理装置４００は、文字情報と文字情報に割り当てられた圧縮符号長と圧縮符号長ごとの葉数とに基づいて、文字情報ごとに圧縮符号を割り当て、葉の構造体を生成することとなる。たとえば、出現率１位の単一文字「０」は５ビットの圧縮符号長が割り当てられているため、圧縮符号が「００００００」となる。したがって、圧縮符号「００００００」、圧縮符号長「６」、文字情報「０」を含む葉Ｌ１の構造体が生成されることとなる。
【００９５】
なお、上述した補正処理では、圧縮符号長が５ビット〜１１ビットとしたが、２グラム文字列の圧縮符号マップＭを分割する場合もあるため、圧縮符号長は偶数ビットとなるように、補正してもよい。具体的には、たとえば、圧縮符号長５ビットおよび７ビットの文字情報については６ビット、９ビットの文字情報については８ビット、１１ビットの文字情報については１０ビットとする。
【００９６】
図１１は、図６の（６）葉へのポインタ生成の詳細（Ｎ＝１１）を示す説明図である。図１１は、圧縮符号長の上限Ｎが１１ビットの場合の葉へのポインタを示している。図１１において、圧縮符号長が６ビットの葉数は６個であるため、圧縮符号は「００００００」〜「０００１０１」が割り当てられる。また、圧縮符号長が６ビットの葉当たりの枝数は、３２本である。したがって、圧縮符号長が６ビットの圧縮符号についての葉へのポインタは、３２（＝２5）個生成される。具体的には、葉へのポインタの先頭６ビットが圧縮符号で後続５ビットが３２種のビット列となる。したがって、圧縮符号長が６ビットの圧縮符号の各々について、３２種の葉へのポインタが生成されることとなる。
【００９７】
なお、図示はしないが、圧縮符号長が７ビットの葉数は１８個であるため、圧縮符号「０００１１００」〜「００１１１１１」が割り当てられる。また、圧縮符号長が７ビットの葉当たりの枝数は、１６本である。したがって、圧縮符号長が７ビットの圧縮符号についての葉へのポインタは、１６（＝２4）個生成される。具体的には、葉へのポインタの先頭７ビットが圧縮符号で後続４ビットが１６種のビット列となる。したがって、圧縮符号長が７ビットの圧縮符号の各々について、１６種の葉へのポインタが生成されることとなる。
【００９８】
同様に、圧縮符号長が８ビットの葉数は２３個であるため、圧縮符号「０１００００００」〜「０１０１０１１０」が割り当てられる。また、圧縮符号長が８ビットの葉当たりの枝数は、８本である。したがって、圧縮符号長が８ビットの圧縮符号についての葉へのポインタは、８（＝２3）個生成される。具体的には、葉へのポインタの先頭８ビットが圧縮符号で後続３ビットが８種のビット列となる。したがって、圧縮符号長が８ビットの圧縮符号の各々について、８種の葉へのポインタが生成されることとなる。
【００９９】
同様に、圧縮符号長が９ビットの葉数は２３個であるため、圧縮符号「０１０１０１１１０」〜「０１１０００１００」が割り当てられる。また、圧縮符号長が９ビットの葉当たりの枝数は、４本である。したがって、圧縮符号長が９ビットの圧縮符号についての葉へのポインタは、４（＝２2）個生成される。具体的には、葉へのポインタの先頭９ビットが圧縮符号で後続２ビットが４種のビット列となる。したがって、圧縮符号長が９ビットの圧縮符号の各々について、４種の葉へのポインタが生成されることとなる。
【０１００】
同様に、圧縮符号長が１０ビットの葉数は２０個であるため、圧縮符号「０１１００００１１０」〜「０１１００１１１０１」が割り当てられる。また、圧縮符号長が１０ビットの葉当たりの枝数は、２本である。したがって、圧縮符号長が１０ビットの圧縮符号についての葉へのポインタは、２（＝２1）個生成される。具体的には、葉へのポインタの先頭１０ビットが圧縮符号で後続１ビットが２種のビット列となる。したがって、圧縮符号長が１０ビットの圧縮符号の各々について、２種の葉へのポインタが生成されることとなる。
【０１０１】
同様に、圧縮符号長が１１ビットの葉数は１２１５個であるため、圧縮符号「０１１００１１１１００」〜「１１１１１１１１０１０」が割り当てられる。また、圧縮符号長が１１ビットの葉当たりの枝数は、１本である。したがって、圧縮符号長が１１ビットの圧縮符号についての葉へのポインタは、１（＝２0）個生成される。具体的には、圧縮符号がそのまま葉へのポインタとなる。したがって、圧縮符号長が１１ビットの圧縮符号の各々について、１種の葉へのポインタが生成されることとなる。
【０１０２】
図１２は、図６の（７）２N分枝無節点ハフマン木Ｈの構築の詳細（Ｎ＝１１）を示す説明図である。図１２では、Ｎ＝１１とした場合の２０４８（＝２11）分枝無節点ハフマン木Ｈを示している。根の構造体には、葉へのポインタが格納されている。葉へのポインタはポイント先の葉の構造体を指定することができる。
【０１０３】
具体的には、圧縮符号長が６ビットの圧縮符号が格納される葉の構造体についての葉へのポインタは、図１１に示したように３２個生成される。したがって、葉Ｌ１の構造体については、根の構造体に３２個の葉Ｌ１へのポインタＬ１Ｐ（１）〜Ｌ１Ｐ（３２）が格納される。葉Ｌ２の構造体〜葉Ｌ６の構造体についても同様である。葉Ｌ７以降の構造体については、図１２のとおりである。
【０１０４】
図１３は、葉の構造体を示す説明図である。葉の構造体は、第１領域〜第４領域を有するデータ構造体である。葉の構造体は、第１領域には、圧縮符号およびその圧縮符号長が格納される。第２領域には、葉の標識と伸長種別（図８参照）、出現率（図１０参照）が格納される。第３領域には、伸長種別に応じて特定単一文字である１６ビットの文字コード、非特定単一文字の文字コードが分割された８ビットの分割文字コード、または基礎単語へのポインタが格納される。基礎単語へのポインタにより基礎単語の構造体内の基礎単語が指定される。また、照合フラグも格納されている。照合フラグはデフォルトでは「０」である。「０」の場合は、伸長する文字をそのまま伸長バッファに書き出し、「１」の場合は、＜ｃｏｌｏｒ＞タグと＜／ｃｏｌｏｒ＞タグで挟み込んで伸長バッファに書き出す。
【０１０５】
第４領域には、格納されている文字情報の出現率と出現率領域が格納される。出現率とは、図８に示した文字情報の出現率である。出現率領域については図４８および図４９で説明する。なお、第４領域には、そのほか、符号種別と符号区分が格納される。符号種別とは、文字コードが数字、英字、特殊記号、カタカナ、ひらがな、漢字のいずれに該当するか、または基礎単語へのポインタであるかを識別する情報である。符号区分とは、文字コードが１６ビットであるか８ビットであるかを識別する情報である。１６ビットの文字コードである場合または予約語である場合、符号区分として"１"を割り当て、８ビットの分割文字コードの場合、符号区分として"０"を割り当てる。
【０１０６】
なお、第１領域〜第４領域内の情報は、後述する構築処理（ステップＳ３２０５）において格納されることとなる。
【０１０７】
図１４は、特定単一文字の構造体を示す説明図である。特定単一文字の構造体１４００は、特定単一文字コードｅ♯とその葉Ｌ♯へのポインタを格納するデータ構造体である。具体的には、たとえば、情報処理装置４００は、対象ファイル群Ｆｓからの集計結果が得られたときに、情報処理装置４００が、特定単一文字の構造体１４００に特定単一文字コードｅ♯を格納する。そして、情報処理装置４００は、２N分枝無節点ハフマン木Ｈが構築されると、２N分枝無節点ハフマン木Ｈにおける各葉の構造体に格納された圧縮符号に対応する、特定単一文字の構造体１４００における特定文字コードｅ♯へのポインタを格納する。
【０１０８】
また、特定単一文字コードｅ♯へのポインタが対応する葉の構造体に格納されると、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける各特定単一文字コードｅ♯に対応する葉へのポインタを、特定単一文字の構造体１４００内の対応する特定単一文字コードｅ♯に関連付けて格納する。これにより、特定単一文字の構造体１４００が生成される。
【０１０９】
図１５は、分割文字コードの構造体を示す説明図である。分割文字コードの構造体１５００は、分割文字コードとその葉Ｌ♯へのポインタを格納する。具体的には、たとえば、情報処理装置４００は、対象ファイル群Ｆｓからの集計結果が得られたときに、情報処理装置４００が、分割文字コードの構造体１５００に分割文字コードを格納する。そして、情報処理装置４００は、２N分枝無節点ハフマン木Ｈが構築されると、２N分枝無節点ハフマン木Ｈにおける各葉の構造体に格納された圧縮符号に対応する、分割文字コードの構造体１５００における分割文字コードへのポインタを格納する。
【０１１０】
また、分割文字コードへのポインタが対応する葉の構造体に格納されると、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける各分割文字コードに対応する葉へのポインタを、分割文字コードの構造体１５００内の対応する分割文字コードに関連付けて格納する。これにより、分割文字コードの構造体１５００が生成される。
【０１１１】
図１６は、基礎単語の構造体を示す説明図である。基礎単語の構造体１６００は、基礎単語とその葉Ｌ♯へのポインタを格納するデータ構造体である。基礎単語の構造体１６００には、あらかじめ基礎単語が格納されている。情報処理装置４００は、２N分枝無節点ハフマン木Ｈが構築されると、２N分枝無節点ハフマン木Ｈにおける各葉の構造体に格納された圧縮符号に対応する、基礎単語の構造体１６００における基礎単語へのポインタを格納する。
【０１１２】
また、基礎単語へのポインタが対応する葉の構造体に格納されると、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける各基礎単語に対応する葉へのポインタを、基礎単語の構造体１６００内の対応する基礎に関連付けて格納することとなる。
【０１１３】
＜圧縮符号マップＭの作成例＞
第１生成部４０２により２N分枝無節点ハフマン木Ｈが生成されると、作成部４０４は、単一文字の圧縮符号マップＭ、上位分割文字コードの圧縮符号マップＭ、下位分割文字コードの圧縮符号マップＭ、単語の圧縮符号マップＭ、２グラム文字列の圧縮符号マップＭを作成する。以下、単一文字の圧縮符号マップＭ、上位分割文字コードの圧縮符号マップＭ、下位分割文字コードの圧縮符号マップＭ、２グラム文字列の圧縮符号マップＭの詳細な作成例について説明する。なお、基礎単語の圧縮符号マップＭは、単一文字の圧縮符号マップＭと同様に行われるため省略する。
【０１１４】
図１７は、圧縮符号マップＭの生成例を示す説明図である。図１７では、対象ファイルＦｉ内に『竜馬は脱藩した』という文字列が記述されているものとする。
【０１１５】
（Ａ）まず、先頭文字「竜」が対象文字である。対象文字「竜」は特定単一文字であるため、２N分枝無節点ハフマン木Ｈにアクセスして特定単一文字「竜」の圧縮符号を取得し、特定単一文字「竜」の出現マップを特定する。未生成の場合は、特定単一文字「竜」の圧縮符号をポインタとし、かつ、対象ファイルの存否を示すビット列をオール０にした特定単一文字「竜」の出現マップを生成する。そして、特定単一文字「竜」の出現マップについて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。
【０１１６】
（Ｂ）つぎに、対象文字を１グラムシフトして、対象文字を「馬」にする。対象文字「馬」は特定単一文字であるため、２N分枝無節点ハフマン木Ｈにアクセスして特定単一文字「馬」の圧縮符号を取得し、特定単一文字「馬」の出現マップを特定する。未生成の場合は、特定単一文字「馬」の圧縮符号をポインタとし、かつ、対象ファイルの存否を示すビット列をオール０にした特定単一文字「馬」の出現マップを生成する。そして、特定単一文字「馬」の出現マップについて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。
【０１１７】
また、対象文字が「馬」にシフトされた場合、「竜馬」という２グラム文字列が得られるため、「竜」の圧縮符号と「馬」の圧縮符号を結合した「竜馬」の圧縮符号列により、２グラム文字列「竜馬」の出現マップを特定する。未生成の場合は、「竜馬」の圧縮符号列をポインタとし、かつ、対象ファイルの存否を示すビット列をオール０にした２グラム文字列「竜馬」の出現マップを生成する。そして、２グラム文字列「竜馬」の出現マップにおいて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。
【０１１８】
（Ｃ）つぎに、対象文字を１グラムシフトして、対象文字を「は」にする。対象文字「は」についても（Ｂ）と同様に処理することで、特定単一文字「は」の出現マップについて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。同様に、２グラム文字列「馬は」の出現マップにおいて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。
【０１１９】
（Ｄ）つぎに、対象文字を１グラムシフトして、対象文字を「脱」にする。対象文字「脱」は特定単一文字ではないため、対象文字「脱」の文字コード「０ｘ８１３１」を、上位分割文字コード「０ｘ８１」と下位分割文字コード「０ｘ３１」に分割する。そして、対象文字を上位分割文字コード「０ｘ８１」にする。上位分割文字コード「０ｘ８１」についても、特定単一文字と同様に処理することで、上位分割文字コード「０ｘ８１」の出現マップについて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。同様に、２グラム文字列「は  ０ｘ８１」の出現マップにおいて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。
【０１２０】
（Ｅ）つぎに、対象文字を１グラムシフトして、文字「脱」の下位分割文字コード「０ｘ３１」を、対象文字にする。下位分割文字コード「０ｘ３１」についても、同様に処理することで、下位分割文字コード「０ｘ３１」の出現マップについて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。同様に、２グラム文字列「０ｘ８１  ０ｘ３１」の出現マップにおいて対象ファイルＦｉのビットをＯＮ（"０"→"１"）にする。
【０１２１】
（Ｆ）〜（Ｉ）についても同様の処理をおこない、最後の対象ファイルＦｎについても処理を完了することで、単一文字、上位分割文字コード、下位分割文字コード、２グラム文字列のそれぞれについて、圧縮符号マップＭが生成される。
【０１２２】
＜圧縮符号マップＭ生成処理手順＞
つぎに、作成部４０４による圧縮符号マップ作成処理手順例について説明する。
【０１２３】
図１８は、作成部４０４による圧縮符号マップ作成処理手順例を示すフローチャートである。情報処理装置４００は、集計処理（ステップＳ１８０１）、マップ割当数決定処理（ステップＳ１８０２）、再集計処理（ステップＳ１８０３）、ハフマン木生成処理（ステップＳ１８０４）、マップ作成処理（ステップＳ１８０５）を実行する。情報処理装置４００は、集計部４０１により集計処理（ステップＳ１８０１）〜再集計処理（ステップＳ１８０３）を実行する。また、第１生成部４０２によりハフマン木生成処理（ステップＳ１８０４）を実行し、作成部４０４によりマップ作成処理（ステップＳ１８０５）を実行する。
【０１２４】
集計処理（ステップＳ１８０１）とは、対象ファイル群Ｆｓ内の単一文字や基礎単語の出現回数（出現頻度ともいう）を計数する処理である。マップ割当数決定処理（ステップＳ１８０２）とは、集計処理（ステップＳ１８０１）で集計された単一文字および基礎単語についてのマップ割当数を決定する処理である。マップ割当数に対応する出現順位の単一文字および基礎単語が、それぞれ特定単一文字および基礎単語となる。
【０１２５】
再集計処理（ステップＳ１８０３）とは、単一文字のうち特定単一文字以外の非特定単一文字を分割して、上位分割文字コードおよび下位分割文字コードとし、それぞれの出現回数を集計する処理である。また、再集計処理（ステップＳ１８０３）では、２グラム文字列の出現回数も集計する。
【０１２６】
ハフマン木生成処理（ステップＳ１８０４）とは、図８〜図１３に示したように、２N分枝無節点ハフマン木Ｈを生成する処理である。マップ作成処理（ステップＳ１８０５）とは、特定単一文字、基礎単語、上位分割文字コード、下位分割文字コード、２グラム文字列についての圧縮符号マップＭを生成する処理である。
【０１２７】
（集計処理（ステップＳ１８０１））
図１９は、図１８に示した集計処理（ステップＳ１８０１）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、ファイル番号ｉをｉ＝１に設定し（ステップＳ１９０１）、対象ファイルＦｉを読み込む（ステップＳ１９０２）。そして、情報処理装置４００は、対象ファイルＦｉの集計処理を実行する（ステップＳ１９０３）。対象ファイルＦｉの集計処理（ステップＳ１９０３）の詳細については、図２０で説明する。このあと、情報処理装置４００は、ファイル番号ｉがｉ＞ｎ（ｎは対象ファイルＦ１〜Ｆｎの総数）であるか否かを判断する（ステップＳ１９０４）。
【０１２８】
ｉ＞ｎでない場合（ステップＳ１９０４：Ｎｏ）、情報処理装置４００は、ｉをインクリメントし（ステップＳ１９０５）、ステップＳ１９０２に戻る。一方、ｉ＞ｎである場合（ステップＳ１９０４：Ｙｅｓ）、情報処理装置４００は、図１８に示したマップ割当数決定処理（ステップＳ１８０２）に移行して、集計処理（ステップＳ１８０１）を終了する。この集計処理（ステップＳ１８０１）によれば、対象ファイルＦｉごとに対象ファイルＦｉの集計処理（ステップＳ１９０３）を実行することができる。
【０１２９】
（対象ファイルＦｉの集計処理（ステップＳ１９０３））
図２０は、図１９に示した対象ファイルＦｉの集計処理（ステップＳ１９０３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、対象文字を対象ファイルＦｉの先頭文字とし（ステップＳ２００１）、基礎単語集計処理を実行する（ステップＳ２００２）。基礎単語集計処理（ステップＳ２００２）の詳細については図２２で説明する。このあと、情報処理装置４００は、文字出現頻度集計テーブルにおいて対象文字の出現回数を１増加する（ステップＳ２００３）。
【０１３０】
図２１は、文字出現頻度集計テーブルを示す説明図である。文字出現頻度集計テーブル２１００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する文字が出現する都度出現回数を１ずつ増加させる。
【０１３１】
図２０に戻り、情報処理装置４００は、対象文字が対象ファイルＦｉの末尾文字であるか否かを判断する（ステップＳ２００４）。対象文字が対象ファイルＦｉの末尾文字でない場合（ステップＳ２００４：Ｎｏ）、情報処理装置４００は、対象文字を末尾方向へ１文字シフトし（ステップＳ２００５）、ステップＳ２００２に戻る。
【０１３２】
一方、対象文字が対象ファイルＦｉの末尾文字である場合（ステップＳ２００４：Ｙｅｓ）、情報処理装置４００は、ステップＳ１９０４に移行して、対象ファイルＦｉの集計処理（ステップＳ１９０３）を終了する。この対象ファイルＦｉの集計処理（ステップＳ１９０３）によれば、対象ファイル群Ｆｓに存在する基礎単語および単一文字の出現頻度を集計することができる。
【０１３３】
（基礎単語集計処理（ステップＳ２００２））
図２２は、図２０に示した基礎単語集計処理（ステップＳ２００２）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、最長一致検索処理を実行し（ステップＳ２２０１）、最長一致した基礎単語があったか否かを判断する（ステップＳ２２０２）。最長一致検索処理（ステップＳ２２０２）の詳細については図２４で説明する。最長一致した基礎単語があった場合（ステップＳ２２０２：Ｙｅｓ）、情報処理装置４００は、基礎単語出現頻度集計テーブルにおいて最長一致した基礎単語の出現回数を１増加し（ステップＳ２２０３）、ステップＳ２００３に移行する。
【０１３４】
図２３は、基礎単語出現頻度集計テーブルを示す説明図である。基礎単語出現頻度集計テーブル２３００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する基礎単語が出現する都度出現回数を１ずつ増加させる。
【０１３５】
図２２に戻り、最長一致した基礎単語がなかった場合（ステップＳ２２０２：Ｎｏ）、ステップＳ２００３に移行する。これにより、基礎単語集計処理（ステップＳ２００２）を終了する。この基礎単語集計処理（ステップＳ２００２）によれば、最長一致検索処理（ステップＳ２２０１）により基礎単語を計数することができるため、文字列が長い基礎単語を優先的に計数することができる。
【０１３６】
（最長一致検索処理（ステップＳ２２０１））
図２４は、図２２に示した最長一致検索処理（ステップＳ２２０１）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、ｃ＝１とする（ステップＳ２４０１）。ｃは対象文字からの文字数（対象文字含む）である。ｃ＝１の場合は、対象文字だけである。つぎに、情報処理装置４００は、対象文字からｃ文字目までの対象文字列と前方一致する基礎単語を２分探索する（ステップＳ２４０２）。そして、情報処理装置４００は、検索により基礎単語があるか否かを判断する（ステップＳ２４０３）。２分探索により基礎単語がヒットしなかった場合（ステップＳ２４０３：Ｎｏ）、ステップＳ２４０６に移行する。
【０１３７】
一方、２分探索により基礎単語がヒットした場合（ステップＳ２４０３：Ｙｅｓ）、情報処理装置４００は、ヒットした基礎単語と対象文字列とが完全一致するか否かを判断する（ステップＳ２４０４）。そして、完全一致しない場合（ステップＳ２４０４：Ｎｏ）、ステップＳ２４０６に移行する。一方、完全一致する場合（ステップＳ２４０４：Ｙｅｓ）、情報処理装置４００は、最長一致候補として記憶装置に保持し（ステップＳ２４０５）、ステップＳ２４０６に移行する。
【０１３８】
ステップＳ２４０６では、情報処理装置４００は、対象文字列について２分探索が終了したか否かを判断する（ステップＳ２４０６）。具体的には、情報処理装置４００は、末尾の基礎単語まで２分探索したか否かを判断する。２分探索が終了していない場合（ステップＳ２４０６：Ｎｏ）、情報処理装置４００は、ステップＳ２４０２に移行して、２分探索が終了するまで継続する。
【０１３９】
一方、対象文字列について２分探索が終了した場合（ステップＳ２４０６：Ｙｅｓ）、情報処理装置４００は、ｃ文字目の文字が対象ファイルＦｉの末尾文字であるか否かを判断する（ステップＳ２４０７）。ｃ文字目の文字が対象ファイルＦｉの末尾文字である場合（ステップＳ２４０７：Ｙｅｓ）、ステップＳ２４１０に移行する。一方、ｃ文字目の文字が対象ファイルＦｉの末尾文字でない場合（ステップＳ２４０７：Ｎｏ）、情報処理装置４００は、ｃ＞ｃｍａｘであるか否かを判断する（ステップＳ２４０８）。ｃｍａｘは予め設定された値であり、これにより対象文字列の上限文字数が設定される。
【０１４０】
ｃ＞ｃｍａｘでない場合（ステップＳ２４０８：Ｎｏ）、情報処理装置４００は、ｃをインクリメントして（ステップＳ２４０９）、ステップＳ２４０２に戻る。一方、ｃ＞ｃｍａｘである場合（ステップＳ２４０８：Ｙｅｓ）、情報処理装置４００は、最長一致候補があるか否かを判断する（ステップＳ２４１０）。具体的には、情報処理装置４００は、ステップＳ２４０５において１つでも最長一致候補がメモリに保持されているか否かを判断する。
【０１４１】
最長一致候補がある場合（ステップＳ２４１０：Ｙｅｓ）、情報処理装置４００は、最長一致候補のうち最長文字列を、最長一致した基礎単語に決定する（ステップＳ２４１１）。そして、ステップＳ２２０２に移行する。一方、ステップＳ２４１０において、最長一致候補が１つもない場合（ステップＳ２４１０：Ｎｏ）、ステップＳ２２０２に移行する。これにより、最長一致検索処理（ステップＳ２２０１）を終了する。この最長一致検索処理（ステップＳ２２０１）によれば、基礎単語の構造体にある基礎単語の中から、完全一致した文字列の中でかつ最長の文字列を基礎単語として検索することができる。
【０１４２】
（マップ割当数決定処理（ステップＳ１８０２））
図２５は、図１８に示したマップ割当数決定処理（ステップＳ１８０２）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、集計処理（ステップＳ１８０１）による基礎単語ごとの出現頻度を示す基礎単語出現頻度集計テーブル２３００と単一文字ごとの出現頻度を示す文字出現頻度集計テーブル２１００を出現頻度の高い順にソートする（ステップＳ２５０１）。そして、情報処理装置４００は、ソート後の基礎単語出現頻度集計テーブル２３００を参照して、基礎単語の出現順位ＲｗをＲｗ＝１とし（ステップＳ２５０２）、出現順位Ｒｗまでの累積出現回数Ａｒｗを計数する（ステップＳ２５０３）。そして、情報処理装置４００は、下記式（１）を満たすか否かを判断する（ステップＳ２５０４）。
【０１４３】
Ａｒｗ＞Ｐｗ×Ａｗ・・・（１）
Ａｗは集計された基礎単語の総出現回数である。
【０１４４】
上記（１）式を満たさない場合（ステップＳ２５０４：Ｎｏ）、情報処理装置４００は、出現順位Ｒｗをインクリメントして（ステップＳ２５０５）、ステップＳ２５０３に戻る。すなわち、上記式（１）を満たすまで出現順位Ｒｗを下げ続ける。
【０１４５】
そして、上記式（１）を満たした場合（ステップＳ２５０４：Ｙｅｓ）、情報処理装置４００は、基礎単語のマップ割当数ＮｗをＮｗ＝Ｒｗ−１とする（ステップＳ２５０６）。ここで、マップ割当数Ｎｗとは、マップ作成処理（ステップＳ１８０５）で生成される基礎単語出現マップに割り当てられる基礎単語数であり、基礎単語出現マップのレコード数（行数）を意味する。
【０１４６】
また、情報処理装置４００は、単一文字の出現順位ＲｃをＲｃ＝１とし（ステップＳ２５０７）、出現順位Ｒｃまでの累積出現回数Ａｒｃを計数する（ステップＳ２５０８）。そして、情報処理装置４００は、下記式（２）を満たすか否かを判断する（ステップＳ２５０９）。
【０１４７】
Ａｒｃ＞Ｐｃ×Ａｃ・・・（２）
Ａｃは集計された単一文字の総出現回数である。
【０１４８】
上記（２）式を満たさない場合（ステップＳ２５０９：Ｎｏ）、情報処理装置４００は、出現順位Ｒｃをインクリメントして（ステップＳ２５１０）、ステップＳ２５０８に戻る。すなわち、上記式（２）を満たすまで出現順位Ｒｃを下げ続ける。
【０１４９】
そして、上記式（２）を満たした場合（ステップＳ２５０９：Ｙｅｓ）、情報処理装置４００は、単一文字のマップ割当数ＮｃをＮｃ＝Ｒｃ−１とする（ステップＳ２５１１）。ここで、マップ割当数Ｎｃとは、マップ作成処理（ステップＳ１８０５）で生成される特定単一文字出現マップに割り当てられる特定単一文字数であり、特定単一文字出現マップのレコード数（行数）を意味する。この後、再集計処理（ステップＳ１８０３）に移行して、マップ割当数決定処理（ステップＳ１８０２）を終了する。
【０１５０】
このマップ割当数決定処理（ステップＳ１８０２）によれば、マップ作成処理（ステップＳ１８０５）において目標出現率Ｐｗに応じた数の基礎単語分について基礎単語出現マップを生成することができる。したがって、すべての基礎単語についてマップ割当をおこなう必要はなく、目標出現率Ｐｗにしたがって決められるため、マップサイズの最適化を図ることができる。
【０１５１】
また、単一文字についても、マップ作成処理（ステップＳ１８０５）において目標出現率Ｐｃに応じた数の単一文字分について特定単一文字の圧縮符号マップＭを生成することができる。したがって、すべての単一文字についてマップ割当をおこなう必要はなく、目標出現率Ｐｃにしたがって決められるため、マップサイズの最適化を図ることができる。
【０１５２】
（再集計処理（ステップＳ１８０３））
図２６は、図１８に示した再集計処理（ステップＳ１８０３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、ファイル番号ｉをｉ＝１に設定し（ステップＳ２６０１）、対象ファイルＦｉを読み込む（ステップＳ２６０２）。そして、情報処理装置４００は、対象ファイルＦｉの再集計処理を実行する（ステップＳ２６０３）。対象ファイルＦｉの再集計処理（ステップＳ２６０３）の詳細については、図２７で説明する。このあと、情報処理装置４００は、ファイル番号ｉがｉ＞ｎ（ｎは対象ファイルＦ１〜Ｆｎの総数）であるか否かを判断する（ステップＳ２６０４）。
【０１５３】
ｉ＞ｎでない場合（ステップＳ２６０４：Ｎｏ）、情報処理装置４００は、ｉをインクリメントし（ステップＳ２６０５）、ステップＳ２６０２に戻る。一方、ｉ＞ｎである場合（ステップＳ２６０４：Ｙｅｓ）、情報処理装置４００は、図１８に示したハフマン木生成処理（ステップＳ１８０４）に移行して、再集計処理（ステップＳ１８０３）を終了する。この再集計処理（ステップＳ１８０３）によれば、対象ファイルＦｉごとに対象ファイルＦｉの再集計処理（ステップＳ２６０３）を実行することができる。
【０１５４】
（対象ファイルＦｉの再集計処理（ステップＳ２６０３））
図２７は、対象ファイルＦｉの再集計処理（ステップＳ２６０３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、対象文字を対象ファイルＦｉの先頭文字とし（ステップＳ２７０１）、対象文字が特定単一文字であるか否かを判断する（ステップＳ２７０２）。特定単一文字である場合（ステップＳ２７０２：Ｙｅｓ）、分割せずにステップＳ２７０４に移行する。
【０１５５】
一方、特定単一文字でない場合（ステップＳ２７０２：Ｎｏ）、情報処理装置４００は、対象文字の文字コードを上位分割文字コードと下位分割文字コードとに分割する（ステップＳ２７０３）。そして、ステップＳ２７０４に移行する。
【０１５６】
ステップＳ２７０４では、情報処理装置４００は、上位分割文字コード出現頻度集計テーブルに対し、ステップＳ２７０３で得られた上位分割文字コードと同一分割文字コードの出現回数を１加算する（ステップＳ２７０４）。
【０１５７】
図２８は、上位分割文字コード出現頻度集計テーブルを示す説明図である。上位分割文字コード出現頻度集計テーブル２８００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する上位分割文字コードが出現する都度出現回数を１ずつ増加させる。
【０１５８】
また、図２７において、情報処理装置４００は、下位分割文字コード出現頻度集計テーブルに対し、ステップＳ２７０３で得られた下位分割文字コードと同一分割文字コードの出現回数を１加算する（ステップＳ２７０５）。
【０１５９】
図２９は、下位分割文字コード出現頻度集計テーブルを示す説明図である。下位分割文字コード出現頻度集計テーブル２９００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する下位分割文字コードが出現する都度出現回数を１ずつ増加させる。
【０１６０】
また、図２７において、情報処理装置４００は、２グラム文字列特定処理を実行する（ステップＳ２７０６）。２グラム文字列特定処理（ステップＳ２７０６）では、対象文字を基点とする２グラム文字列を特定する。２グラム文字列特定処理（ステップＳ２７０６）の詳細は図３０で説明する。
【０１６１】
情報処理装置４００は、２グラム文字列出現頻度集計テーブルに対し、２グラム文字列特定処理（ステップＳ２７０６）で特定された２グラム文字列の出現回数を１加算する（ステップＳ２７０７）。
【０１６２】
図３０は、図２７で示した２グラム文字列特定処理（ステップＳ２７０６）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、対象文字に対し、対象文字は分割されたか否かを判断する（ステップＳ３００１）。すなわち、情報処理装置４００は、対象文字が分割文字コードか否かを判断する。分割されていない場合（ステップＳ３００１：Ｎｏ）、すなわち、単一文字の場合、情報処理装置４００は、１つ前の文字があるか否かを判断する（ステップＳ３００２）。
【０１６３】
１つ前の文字がある場合（ステップＳ３００２：Ｙｅｓ）、情報処理装置４００は、１つ前の文字は分割されたか否かを判断する（ステップＳ３００３）。すなわち、情報処理装置４００は、１つ前の文字が分割文字コードか否かを判断する。分割されていない場合（ステップＳ３００３：Ｎｏ）、すなわち、単一文字の場合、情報処理装置４００は、対象文字の１つ前の単一文字と対象文字（単一文字）からなる文字列を、２グラム文字列に決定する（ステップＳ３００４）。そして、ステップＳ２７０７に移行する。
【０１６４】
一方、ステップＳ３００３において、１つ前の文字が分割された場合（ステップＳ３００３：Ｙｅｓ）、すなわち、分割文字コードである場合、その１つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、情報処理装置４００は、１つ前の文字である下位分割文字コードと対象文字からなる文字列を、２グラム文字列に決定する（ステップＳ３００５）。そして、ステップＳ２７０７に移行する。
【０１６５】
また、ステップＳ３００２において、１つ前の文字がない場合（ステップＳ３００２：Ｎｏ）、対象文字だけとなるため、２グラム文字列を決定せずに、ステップＳ２７０７に移行する。
【０１６６】
また、ステップＳ３００１において、対象文字が分割された場合（ステップＳ３００１：Ｙｅｓ）、すなわち、分割文字コードである場合、情報処理装置４００は、その分割文字コードが上位分割文字コードか下位分割文字コードであるかを判断する（ステップＳ３００６）。
【０１６７】
上位分割文字コードである場合（ステップＳ３００６：上位）、情報処理装置４００は、１つ前の文字は分割されたか否かを判断する（ステップＳ３００７）。すなわち、１つ前の文字が分割文字コードか否かを判断する。分割されていない場合（ステップＳ３００７：Ｎｏ）、すなわち、単一文字の場合、情報処理装置４００は、対象文字の１つ前の単一文字と対象文字から分割された上位分割文字コードからなる文字列を、２グラム文字列に決定する（ステップＳ３００８）。そして、ステップＳ２７０７に移行する。
【０１６８】
一方、ステップＳ３００７において、１つ前の文字が分割された場合（ステップＳ３００７：Ｙｅｓ）、すなわち、分割文字コードである場合、その１つ前の文字である分割文字コードは、下位分割文字コードとなる。したがって、情報処理装置４００は、１つ前の文字である下位分割文字コードと対象文字から分割された上位分割文字コードからなる文字列を、２グラム文字列に決定する（ステップＳ３００９）。そして、ステップＳ２７０７に移行する。
【０１６９】
また、ステップＳ３００６において、下位分割文字コードである場合（ステップＳ３００６：下位）、情報処理装置４００は、対象文字から分割された上位分割文字コードおよび下位分割文字コードからなる文字列を、２グラム文字列に決定する（ステップＳ３０１０）。そして、ステップＳ２７０７に移行する。
【０１７０】
この２グラム文字列特定処理（ステップＳ２７０６）によれば、対象文字が分割された場合であっても２グラム文字列を特定することができる。また、１文字シフトにしたがって２グラム文字列を特定するため、基礎単語の圧縮符号マップＭおよび特定単一文字の圧縮符号マップＭと同時並行で生成することができる。
【０１７１】
このように、上述した情報生成によれば、目標出現率Ｐｗ，Ｐｃにより、マップ作成される基礎単語数および単一文字数が制限されるため、無駄なマップ作成がなくなり、マップ作成の高速化およびマップサイズの最適化を同時に実現することができる。また、１文字シフトにより複数種類のマップ作成を同時並行で実行することができ、高精度な検索に用いる複数種類のマップ作成の効率化を図ることができる。
【０１７２】
図３１は、２グラム文字列出現頻度集計テーブルを示す説明図である。２グラム文字列出現頻度集計テーブル３１００は、ＲＡＭ２０３や磁気ディスク２０５などの記憶装置に記憶されており、該当する２グラム文字列が出現する都度出現回数を１ずつ増加させる。
【０１７３】
このあと、情報処理装置４００は、対象文字の後続文字が対象ファイルＦｉ内にあるか否かを判断し（ステップＳ２７０８）、後続文字がある場合（ステップＳ２７０８：Ｙｅｓ）、後続文字を対象文字に設定し（ステップＳ２７０９）、ステップＳ２７０２に戻る。一方、後続文字がない場合（ステップＳ２７０８：Ｎｏ）、対象ファイルＦｉの再集計処理（ステップＳ２６０３）を終了して、ステップＳ２６０４に移行する。
【０１７４】
これにより、対象ファイルＦｉごとに、対象ファイルＦｉ内に存在する上位分割文字コード、下位分割文字コード、および２グラム文字列の出現回数を集計することができる。
【０１７５】
（ハフマン木生成処理（ステップＳ１８０４））
図３２は、図１８に示したハフマン木生成処理（ステップＳ１８０４）の詳細な処理手順例を示すフローチャートである。図３２において、情報処理装置４００は、圧縮符号長の上限長Ｎを決定する（ステップＳ３２０１）。つぎに、情報処理装置４００は、補正処理を実行する（ステップＳ３２０２）。ここで、補正処理とは、図８〜図１０で説明したように、文字情報ごとの生起確率および圧縮符号長を、圧縮符号長の上限長Ｎを用いて補正する処理である。
【０１７６】
つぎに、情報処理装置４００は、文字情報ごとに葉の構造体を生成する（ステップＳ３２０３）。そして、情報処理装置４００は、枝数特定処理を実行する（ステップＳ３２０６）。枝数特定処理（ステップＳ３２０４）では、圧縮符号長ごとの葉当たりの枝数を特定する。枝数特定処理（ステップＳ３２０４）の詳細は図３３で説明する。
【０１７７】
そして、情報処理装置４００は、構築処理を実行する（ステップＳ３２０５）。枝数特定処理（ステップＳ３２０４）により葉の構造体ごとの枝数が特定されるため、まず、情報処理装置４００は、葉の構造体ごとに、枝数分の葉へのポインタ群を生成する。そして、生成された各葉の構造体についての葉へのポインタ群を集約して根の構造体とする。これにより、２N分枝無節点ハフマン木Ｈが生成されることとなる。なお、生成された２N分枝無節点ハフマン木Ｈは、情報処理装置４００内の記憶装置（ＲＡＭ２０３や磁気ディスク２０５など）に格納される。このあと、図１８のマップ作成処理（ステップＳ１８０５）に移行する。
【０１７８】
図３３は、図３２に示した枝数特定処理（ステップＳ３２０４）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、最大圧縮符号長ＣＬｍａｘ（＝Ｎ）と最小圧縮符号長ＣＬｍｉｎ（＝Ｍ）との差分Ｄ（＝Ｎ−Ｍ）を算出する（ステップＳ３３０１）。たとえば、Ｎ＝１１の場合、図１９を参照すると、Ｍ＝６である。したがって、Ｄ＝５である。
【０１７９】
つぎに、情報処理装置４００は、２のべき数の変数ｊをｊ＝０とし、圧縮符号長の変数ＣＬをＣＬ＝Ｎとする（ステップＳ３３０２）。そして、情報処理装置４００は、ｊ＞Ｄであるか否かを判断する（ステップＳ３３０３）。ｊ＞Ｄでない場合（ステップＳ３３０３：Ｎｏ）、情報処理装置４００は、圧縮符号長ＣＬの葉当たりの枝数ｂ（ＣＬ）を算出する（ステップＳ３３０４）。圧縮符号長ＣＬの葉当たりの枝数ｂ（ＣＬ）は、ｂ（ＣＬ）＝２jで算出される。たとえば、ｊ＝０のとき、圧縮符号長ＣＬ＝Ｎ＝１１であるため、圧縮符号長１１ビットでの葉当たりの枝数ｂ（１１）は、ｂ（１１）＝２j＝２0＝１となる。
【０１８０】
つぎに、情報処理装置４００は、圧縮符号長ＣＬの総枝数Ｂ（Ｌ）を算出する（ステップＳ３３０５）。圧縮符号長ＣＬの総枝数Ｂ（Ｌ）は、Ｂ（Ｌ）＝Ｌ（ＣＬ）×ｂ（ＣＬ）で算出される。Ｌ（ＣＬ）は、圧縮符号長ＣＬでの葉数（文字情報の種類数）である。たとえば、ｊ＝０のとき、圧縮符号長ＣＬ＝Ｎ＝１１であるため、圧縮符号長１１ビットでの総枝数Ｂ（Ｌ）は、１２１６×２0＝１２１６となる。
【０１８１】
このあと、情報処理装置４００は、ｊをインクリメントし、圧縮符号長ＣＬをデクリメントして（ステップＳ３３０６）、ステップＳ３３０３に戻り、インクリメント後のｊがｊ＞Ｄであるか否かが判断される。なお、Ｎ＝１１の場合は、ｊ＝Ｄになるとｊ＝Ｄ＝５となり、ＣＬ＝Ｍ＝６となる。したがって、ステップＳ３３０４では、圧縮符号長ＣＬ（５ビット）の葉当たりの枝数ｂ（６）は、ｂ（６）＝２6＝６４となる。同様に、総枝数Ｂ（Ｌ）は、Ｂ（６）＝０×２6＝０となる。そして、ｊ＞Ｄである場合（ステップＳ３３０３：Ｙｅｓ）、構築処理（ステップＳ３２０５）に移行する。
【０１８２】
図３４は、図３２に示した構築処理（ステップＳ３２０５）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、圧縮符号長ＣＬをＣＬ＝ＣＬｍｉｎ＝Ｍとする（ステップＳ３４０１）。つぎに、情報処理装置４００は、圧縮符号長ＣＬでの未選択の葉があるか否かを判断する（ステップＳ３４０２）。未選択の葉がある場合（ステップＳ３４０２：Ｙｅｓ）、情報処理装置４００は、葉へのポインタ生成処理（ステップＳ３４０３）を実行して、ステップＳ３４０２に戻る。葉へのポインタ生成処理（ステップＳ３４０３）では、葉の構造体ごとに、圧縮符号長ＣＬに応じた枝数分の葉へのポインタ群を生成する。なお、葉へのポインタ生成処理（ステップＳ３４０３）の詳細は図３５で説明する。
【０１８３】
一方、ステップＳ３４０２において、未選択の葉がない場合（ステップＳ３４０２：Ｎｏ）、情報処理装置４００は、ＣＬ＞Ｎであるか否かを判断する（ステップＳ３４０４）。ＣＬ＞Ｎでない場合（ステップＳ３４０４：Ｎｏ）、情報処理装置４００は、ＣＬをインクリメントして（ステップＳ３４０５）、ステップＳ３４０２に戻る。一方、ＣＬ＞Ｎである場合（ステップＳ３４０４：Ｙｅｓ）、２N分枝無節点ハフマン木Ｈが構築されたこととなり、ステップＳ１８０５に移行することとなる。なお、第１領域〜第５領域内の情報は、この構築処理（ステップＳ３２０５）において格納されることとなる。
【０１８４】
図３５は、図３４に示した葉へのポインタ生成処理（ステップＳ３４０３）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、未選択の葉Ｌを選択し（ステップＳ３５０１）、選択葉へのポインタ数ｋをｋ＝１に設定する（ステップＳ３５０２）。そして、情報処理装置４００は、選択葉へのポインタＰＬ（ｋ）の先行ビット列を、選択葉の圧縮符号に設定する（ステップＳ３５０３）。たとえば、上限長Ｎ＝１１については、選択葉が、文字情報「０」の葉の構造体である場合、圧縮符号は「００００００」である。したがって、選択葉へのポインタＰＬ（ｋ）の先行ビット列も、「００００００」となる。
【０１８５】
つぎに、情報処理装置４００は、選択葉へのポインタＰＬ（ｋ）の後続ビット列のビット長を、最大圧縮符号長Ｎから選択葉の圧縮符号長ＣＬを引いた差分とし、後続ビット列の初期値をオール０に設定する（ステップＳ３５０４）。たとえば、選択葉が、文字情報「０」の葉の構造体である場合、圧縮符号長ＣＬは６ビットであるため、後続ビット列のビット長は５ビット（＝１１−６）となる。ｋ＝１の場合は、後続ビット列はオール０となるため、後続ビット列は、５ビットの「０００００」となる。
【０１８６】
そして、情報処理装置４００は、選択葉へのポインタＰＬ（ｋ）を根の構造体に格納する（ステップＳ３５０５）。このあと、情報処理装置４００は、ｋ＞ｂ（ＣＬ）であるか否かを判断する（ステップＳ３５０６）。ｂ（ＣＬ）は、選択葉の圧縮符号長ＣＬの葉当たりの枝数である。ｋ＞ｂ（ＣＬ）でない場合（ステップＳ３５０６：Ｎｏ）、選択葉に割り当てられたすべての枝について葉へのポインタが生成されていないため、情報処理装置４００は、ｋをインクリメントする（ステップＳ３５０７）。
【０１８７】
そして、情報処理装置４００は、現在の後続ビット列をインクリメントして、インクリメント後の後続ビット列を先行ビット列の末端に連結することで、あらたに、選択葉へのポインタＰＬ（ｋ）を生成する（ステップＳ３５０８）。そして、情報処理装置４００は、選択葉へのポインタＰＬ（ｋ）を根の構造体に格納し（ステップＳ３５０９）、ステップＳ３５０６に戻る。ステップＳ３５０６〜ステップＳ３５０９を繰り返すことで、葉当たりの枝数分の葉へのポインタ群が生成されることとなる。そして、ステップＳ３５０６において、ｋ＞ｂ（ＣＬ）である場合（ステップＳ３５０６：Ｙｅｓ）、ステップＳ３４０２に移行する。
【０１８８】
このように、対象ファイル群Ｆｓに出現する文字情報の種類数に応じて、２N分枝無節点ハフマン木Ｈの最大枝数２Nを最適な本数に設定することができるため、２N分枝無節点ハフマン木Ｈのサイズの適正化を図ることができる。また、本実施の形態によれば、上限長Ｎが２〜４の整数倍でない場合（たとえば、上限長Ｎ＝１１，１３）であっても、圧縮効率のよい２N分枝無節点ハフマン木Ｈを生成することができる。
【０１８９】
このあと、情報処理装置４００は、２N分枝無節点ハフマン木Ｈの各葉の構造体と、基礎単語の構造体，特定文字コードの構造体，分割文字コードの構造体とを、図１０の文字情報テーブルを参照して、相互に関連付ける。具体的には、上述したように、葉の構造体には、当該葉に格納されている圧縮符号に対応する特定文字、分割文字コードおよび葉へのポインタや基礎単語へのポインタを格納する。
【０１９０】
また、情報処理装置４００は、基礎単語の構造体の基礎単語ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、情報処理装置４００は、特定文字コードの構造体の特定文字ごとに、対応する圧縮符号を格納する葉へのポインタを格納する。また、情報処理装置４００は、分割文字コードの構造体の分割文字コードごとに、対応する圧縮符号を格納する葉へのポインタを格納する。
【０１９１】
（マップ作成処理（ステップＳ１８０５））
図３６は、図３０に示したマップ作成処理（ステップＳ１８０５）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、ファイル番号ｉをｉ＝１に設定し（ステップＳ３６０１）、対象ファイルＦｉを読み込む（ステップＳ３６０２）。そして、情報処理装置４００は、対象ファイルＦｉのマップ作成処理を実行する（ステップＳ３６０３）。対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）の詳細は、図３８で説明する。このあと、情報処理装置４００は、ファイル番号ｉがｉ＞ｎ（ｎは対象ファイルＦ１〜Ｆｎの総数）であるか否かを判断する（ステップＳ３６０４）。
【０１９２】
ｉ＞ｎでない場合（ステップＳ３６０４：Ｎｏ）、情報処理装置４００は、ｉをインクリメントし（ステップＳ３６０５）、ステップＳ３６０２に戻る。一方、ｉ＞ｎである場合（ステップＳ３６０４：Ｙｅｓ）、マップ作成処理（ステップＳ１８０５）が終了する。このマップ作成処理（ステップＳ１８０５）によれば、対象ファイルＦｉごとに対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）を実行することができる。
【０１９３】
図３７は、図３６に示した対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）の詳細な処理手順を示すフローチャートである。まず、情報処理装置４００は、対象文字を対象ファイルＦｉの先頭文字とし（ステップＳ３７０１）、基礎単語出現マップ作成処理（ステップＳ３７０２）、特定単一文字出現マップ作成処理（ステップＳ３７０３）、２グラム文字列出現マップ作成処理（ステップＳ３７０４）を実行する。
【０１９４】
基礎単語出現マップ作成処理（ステップＳ３７０２）の詳細は図３８で説明する。また、特定単一文字出現マップ作成処理（ステップＳ３７０３）の詳細は図３９で説明する。さらに、２グラム文字列出現マップ作成処理（ステップＳ３７０４）の詳細は図４１で説明する。
【０１９５】
このあと、情報処理装置４００は、対象文字が対象ファイルＦｉの末尾文字であるか否かを判断する（ステップＳ３７０５）。対象文字が対象ファイルＦｉの末尾文字でない場合（ステップＳ３７０５：Ｎｏ）、情報処理装置４００は、対象文字を末尾方向へ１文字シフトし（ステップＳ３７０６）、ステップＳ３７０２に戻る。一方、対象文字が対象ファイルＦｉの末尾文字である場合（ステップＳ３７０５：Ｙｅｓ）、ステップＳ３６０４に移行して、対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）を終了する。
【０１９６】
この対象ファイルＦｉのマップ作成処理（ステップＳ３６０３）によれば、基礎単語出現マップ、特定単一文字出現マップおよび２グラム文字列出現マップを、対象文字を１文字ずつシフトしながら、同時並行で生成することができる。
【０１９７】
図３８は、図３７で示した基礎単語出現マップ作成処理（ステップＳ３７０２）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、対象文字について最長一致検索処理を実行する（ステップＳ３８０１）。最長一致検索処理（ステップＳ３８０１）の詳細な処理手順は、図２２に示した最長一致検索処理（ステップＳ２２０１）と同一処理内容であるため説明を省略する。
【０１９８】
そして、情報処理装置４００は、最長一致した基礎単語、すなわち、基礎単語があるか否かを判断する（ステップＳ３８０２）。最長一致した基礎単語がない場合（ステップＳ３８０２：Ｎｏ）、特定単一文字出現マップ作成処理（ステップＳ３７０３）に移行する。一方、最長一致した基礎単語がある場合（ステップＳ３８０２：Ｙｅｓ）、情報処理装置４００は、その最長一致した基礎単語について、基礎単語出現マップが設定済みであるか否かを判断する（ステップＳ３８０３）。
【０１９９】
設定済みである場合（ステップＳ３８０３：Ｙｅｓ）、ステップＳ３８０６に移行する。一方、設定済みでない場合（ステップＳ３８０３：Ｎｏ）、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける最長一致した基礎単語の葉にアクセスして、その圧縮符号を取得する（ステップＳ３８０４）。そして、情報処理装置４００は、取得した圧縮符号を、最長一致した基礎単語についての基礎単語出現マップへのポインタに設定して（ステップＳ３８０５）、ステップＳ３８０６に移行する。このあと、ステップＳ３８０６では、情報処理装置４００は、最長一致した基礎単語についての基礎単語出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ３８０６）。
【０２００】
これにより、基礎単語出現マップ作成処理（ステップＳ３７０２）を終了し、特定単一文字出現マップ作成処理（ステップＳ３７０３）に移行する。この基礎単語出現マップ作成処理（ステップＳ３７０２）によれば、対象文字ごとに最長一致した基礎単語を基礎単語としてマップ作成することができる。
【０２０１】
図３９は、図３７で示した特定単一文字出現マップ作成処理（ステップＳ３７０３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、特定単一文字の構造体に対して対象文字の２分探索をおこない（ステップＳ３９０１）、一致したか否かを判断する（ステップＳ３９０２）。一致する単一文字がなかった場合（ステップＳ３９０２：Ｎｏ）、情報処理装置４００は、分割文字コード出現マップ作成処理を実行して（ステップＳ３９０３）、２グラム文字列出現マップ作成処理（ステップＳ３７０４）に移行する。分割文字コード出現マップ作成処理（ステップＳ３９０３）の詳細は図４０で説明する。
【０２０２】
一方、ステップＳ３９０２において、２分探索により対象文字と一致する単一文字があった場合（ステップＳ３９０２：Ｙｅｓ）、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける２分探索された単一文字の葉にアクセスして、その圧縮符号を取得する（ステップＳ３９０４）。そして、情報処理装置４００は、その取得された圧縮符号について、特定単一文字出現マップが設定済みであるか否かを判断する（ステップＳ３９０５）。設定済みである場合（ステップＳ３９０５：Ｙｅｓ）、ステップＳ３９０７に移行する。
【０２０３】
一方、設定済みでない場合（ステップＳ３９０５：Ｎｏ）、情報処理装置４００は、取得した圧縮符号を、２分探索された単一文字についての特定単一文字出現マップへのポインタに設定して（ステップＳ３９０６）、ステップＳ３９０７に移行する。このあと、ステップＳ３９０７では、２分探索された単一文字についての特定単一文字出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ３９０７）。
【０２０４】
これにより、特定単一文字出現マップ作成処理（ステップＳ３７０３）を終了し、２グラム文字列出現マップ作成処理（ステップＳ３７０４）に移行する。この特定単一文字出現マップ作成処理（ステップＳ３７０３）によれば、２分探索された対象文字を特定単一文字としてマップ作成することができる。
【０２０５】
図４０は、図３９で示した分割文字コード出現マップ作成処理（ステップＳ４００３）の詳細な処理手順例を示すフローチャートである。まず、情報処理装置４００は、対象文字を分割し（ステップＳ４００１）、２N分枝無節点ハフマン木Ｈにおける上位分割文字コードの葉にアクセスして、圧縮符号を取得する（ステップＳ４００２）。そして、情報処理装置４００は、その取得された圧縮符号について、上位分割文字コード出現マップが設定済みであるか否かを判断する（ステップＳ４００３）。
【０２０６】
設定済みである場合（ステップＳ４００３：Ｙｅｓ）、ステップＳ４００５に移行する。一方、設定済みでない場合（ステップＳ４００３：Ｎｏ）、情報処理装置４００は、取得した圧縮符号を、上位分割文字コードの出現マップへのポインタに設定して（ステップＳ４００４）、ステップＳ４００５に移行する。このあと、ステップＳ４００５では、情報処理装置４００は、対象文字から分割された上位分割文字コードの出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ４００５）。
【０２０７】
また、情報処理装置４００は、２N分枝無節点ハフマン木Ｈにおける下位分割文字コードの葉にアクセスして、圧縮符号を取得する（ステップＳ４００６）。そして、情報処理装置４００は、その取得された圧縮符号について、下位分割文字コードの出現マップが設定済みであるか否かを判断する（ステップＳ４００７）。設定済みである場合（ステップＳ４００７：Ｙｅｓ）、ステップＳ４００９に移行する。
【０２０８】
一方、設定済みでない場合（ステップＳ４００７：Ｎｏ）、情報処理装置４００は、取得した圧縮符号を、下位分割文字コードの出現マップへのポインタに設定して（ステップＳ４００８）、ステップＳ４００９に移行する。このあと、ステップＳ４００９では、情報処理装置４００は、対象文字から分割された下位分割文字コードの出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ４００９）。
【０２０９】
これにより、分割文字コード出現マップ作成処理（ステップＳ４００３）を終了し、２グラム文字列出現マップ作成処理（ステップＳ３７０４）に移行する。この分割文字コード出現マップ作成処理（ステップＳ４００３）によれば、目標出現率Ｐｃに応じた順位よりも下位の単一文字については、出現頻度が低いため、ＯＦＦのビットが多数出現することとなる。
【０２１０】
しかしながら、目標出現率Ｐｃに応じた順位よりも下位の単一文字については特定単一文字の出現マップの生成対象外とすることで、特定単一文字の圧縮符号マップＭのマップサイズの最適化を図ることができる。また、分割することで、目標出現率Ｐｃに応じた順位よりも下位の単一文字については、上位分割文字コードの圧縮符号マップＭおよび下位分割文字コードの圧縮符号マップＭといったマップサイズが固定化されたマップに設定される。したがって、目標出現率Ｐｃをどのような出現率に設定しても、マップサイズの増大化を防止でき、省メモリ化を図ることができる。
【０２１１】
図４１は、図３７に示した２グラム文字列マップ作成処理（ステップＳ３７０４）の詳細な処理手順例を示すフローチャートである。図４１において、まず、情報処理装置４００は、２グラム文字列特定処理を実行する（ステップＳ４１０１）。２グラム文字列特定処理（ステップＳ４１０１）の詳細な処理手順は、図３０に示した２グラム文字列特定処理（ステップＳ２７０６）と同一処理内容であるため説明を省略する。
【０２１２】
つぎに、情報処理装置４００は、２グラム文字列特定処理（ステップＳ４１０１）により２グラム文字列が特定されたか否かを判断する（ステップＳ４１０２）。特定されなかった場合（ステップＳ４１０２：Ｎｏ）、図３７のステップＳ３７０５に移行する。
【０２１３】
一方、特定された場合（ステップＳ４１０２：Ｙｅｓ）、情報処理装置４００は、２グラム文字列出現マップ生成処理を実行して（ステップＳ４１０３）、ステップＳ３７０５に移行する。
【０２１４】
図４２は、２グラム文字列出現マップ生成処理（ステップＳ４１０３）の詳細な処理手順例を示すフローチャートである。図４２において、まず、情報処理装置４００は、図４１の２グラム文字列特定処理（ステップＳ４１０１）で特定された２グラム文字列の第１グラム（特定単一文字または分割文字コード）について、２N分枝無節点ハフマン木Ｈの葉にアクセスして、圧縮符号を取得する（ステップＳ４２０１）。同様に、情報処理装置４００は、第２グラム（特定単一文字または分割文字コード）について、２N分枝無節点ハフマン木Ｈの葉にアクセスして、圧縮符号を取得する（ステップＳ４２０２）。
【０２１５】
そして、情報処理装置４００は、第１グラムの圧縮符号と第２グラムの圧縮符号を連結する（ステップＳ４２０３）。そして、情報処理装置４００は、連結圧縮符号をポインタとする出現マップが設定済みであるか否かを判断する（ステップＳ４２０４）。設定済みである場合（ステップＳ４２０４：Ｙｅｓ）、ステップＳ４２０６に移行する。
【０２１６】
一方、設定済みでない場合（ステップＳ４２０４：Ｎｏ）、情報処理装置４００は、連結圧縮符号を、特定された２グラム文字列の出現マップへのポインタに設定する（ステップＳ４２０５）。このあと、ステップＳ４２０６では、情報処理装置４００は、特定された２グラム文字列の出現マップの対象ファイルＦｉのビットをＯＮにする（ステップＳ４２０６）。
【０２１７】
これにより、２グラム文字列出現マップ生成処理（ステップＳ４１０３）を終了し、ステップＳ３７０５に移行する。この２グラム文字列出現マップ生成処理（ステップＳ４２０３）によれば、２グラム文字列の連結圧縮符号により、２グラム文字列の出現マップを直接指定することができる。
【０２１８】
＜圧縮処理の具体例＞
つぎに、対象ファイルＦｉの圧縮処理の具体例について説明する。上述のように、圧縮符号マップＭを生成した場合は、検索文字列を圧縮した圧縮符号列により圧縮符号マップＭ内の出現マップをポイントすることが可能となる。以下、圧縮処理の具体例について説明する。
【０２１９】
図４３は、２N分枝無節点ハフマン木Ｈを用いた圧縮処理の具体例を示す説明図である。まず、情報処理装置４００は、対象ファイル群Ｆｓから１文字目の圧縮対象文字コードを取得し、対象ファイルＦｉ上の位置を保持しておく。そして、情報処理装置４００は、基礎単語の構造体１６００に対して２分木探索をおこなう。基礎単語は２文字以上の文字コード列であるため、１文字目の圧縮対象文字コードがヒットした場合、２文字目の文字コードを圧縮対象文字コードとして取得する。
【０２２０】
そして、２文字目の文字コードは、１文字目の圧縮対象文字コードがヒットした位置から探索する。３文字目以降も、不一致の圧縮対象文字コードが出現するまで繰り返し２分木探索をおこなう。一致する基礎単語ｒａ（ａは葉の番号）が探索された場合、基礎単語の構造体１６００において対応付けされている葉Ｌａへのポインタにより葉Ｌａの構造体にアクセスする。そして、情報処理装置４００は、アクセス先の葉Ｌａの構造体に格納されている基礎単語ｒａの圧縮符号を探索して、圧縮バッファ４３００に格納する。
【０２２１】
一方、不一致の圧縮文字コードが出現した場合、基礎単語の構造体１６００に対する２分木探索を終了する（ＥＯＴ（Ｅｎｄ  Ｏｆ  Ｔｒａｎｓｍｉｓｓｉｏｎ）まで進む）。そして、情報処理装置４００は、１文字目の圧縮対象文字コードを再度レジスタにセットして、特定単一文字の構造体１４００に対する２分木探索をおこなう。
【０２２２】
一致する文字コードｅｂ（ｂは葉の番号）が探索された場合、情報処理装置４００は、その葉Ｌｂへのポインタにより葉Ｌｂの構造体にアクセスする。そして、情報処理装置４００は、アクセス先の葉Ｌｂの構造体に格納されている文字コードｅｂの圧縮符号を探索して、圧縮バッファ４３００に格納する。
【０２２３】
一方、一致する文字コードが出現せず２分木探索を終了した場合、圧縮対象文字コードは特定単一文字コードではないため、情報処理装置４００は、上位８ビットと下位８ビットに分割する。そして、情報処理装置４００は、上位８ビットの分割文字コードについて、分割文字コードの構造体１５００に対する２分木探索をおこなう。一致する分割文字コードＤｃ１（ｃ１は葉の番号）が探索された場合、情報処理装置４００は、その葉Ｌｃ１へのポインタにより葉Ｌｃ１の構造体にアクセスする。そして、情報処理装置４００は、アクセス先の葉Ｌｃ１の構造体に格納されている分割文字コードＤｃ１の圧縮符号を探索して、圧縮バッファ４３００に格納する。
【０２２４】
引き続き、情報処理装置４００は、下位８ビットの分割文字コードについて、分割文字コードの構造体に対する２分木探索をおこなう。一致する分割文字コードＤｃ２（ｃ２は葉の番号）が探索された場合、情報処理装置４００は、その葉Ｌｃ２へのポインタにより葉Ｌｃ２の構造体にアクセスする。そして、情報処理装置４００は、アクセス先の葉Ｌｃ２の構造体に格納されている分割文字コードＤｃ２の圧縮符号を探索して、圧縮バッファ４３００に格納する。これにより、対象ファイルＦｉが圧縮されることとなる。
【０２２５】
＜対象ファイル群Ｆｓの圧縮処理＞
つぎに、第１圧縮部４０３による対象ファイル群Ｆｓの圧縮処理の処理手順について説明する。
【０２２６】
図４４は、第１圧縮部４０３による２N分枝無節点ハフマン木Ｈを用いた対象ファイル群Ｆｓの圧縮処理手順例を示すフローチャートである。まず、情報処理装置４００は、ファイル番号：ｐをｐ＝１とし（ステップＳ４４０１）、対象ファイルＦｐを読み込む（ステップＳ４４０２）。つぎに、情報処理装置４００は、圧縮処理を実行して（ステップＳ４４０３）、ファイル番号：ｐをインクリメントする（ステップＳ４４０４）。圧縮処理（ステップＳ４４０３）の詳細は図４５で説明する。
【０２２７】
そして、情報処理装置４００は、ｐ＞ｎであるか否かを判断する（ステップＳ４４０５）。ｎは対象ファイル群Ｆｓの総数である。ｐ＞ｎでない場合（ステップＳ４４０５：Ｎｏ）、ステップＳ４４０２に戻る。一方、ｐ＞ｎである場合（ステップＳ４４０５：Ｙｅｓ）、対象ファイル群Ｆｓの圧縮処理を終了する。
【０２２８】
図４５は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その１）である。図４５において、まず、情報処理装置４００は、対象ファイル群Ｆｓに圧縮対象文字コードがあるか否かを判断する（ステップＳ４５０１）。ある場合（ステップＳ４５０１：Ｙｅｓ）、情報処理装置４００は、圧縮対象文字コードを取得してレジスタにセットする（ステップＳ４５０２）。そして、情報処理装置４００は、先頭の圧縮対象文字コードか否かを判断する（ステップＳ４５０３）。
【０２２９】
ここで、先頭の圧縮対象文字コードとは、未圧縮の１文字目の文字コードをいう。先頭である場合（ステップＳ４５０３：Ｙｅｓ）、情報処理装置４００は、その圧縮対象文字コードの対象ファイル群Ｆｓ上の位置（先頭位置）となるポインタを取得し（ステップＳ４５０４）、ステップＳ４５０５に移行する。一方、先頭でない場合（ステップＳ４５０３：Ｎｏ）、先頭位置を取得せずにステップＳ４５０５に移行する。
【０２３０】
そして、情報処理装置４００は、基礎単語の構造体１６００に対して２分木探索をおこなう（ステップＳ４５０５）。圧縮対象文字コードが一致した場合（ステップＳ４５０６：Ｙｅｓ）、情報処理装置４００は、連続して一致した文字コード列が基礎単語（の文字コード列）に該当するか否かを判断する（ステップＳ４５０７）。該当しない場合（ステップＳ４５０７：Ｎｏ）、情報処理装置４００は、ステップＳ４５０２に戻って後続の文字コードを圧縮対象文字コードとして取得する。この場合、後続の文字コードは先頭ではないため、先頭位置は取得しないこととなる。
【０２３１】
一方、ステップＳ４５０７において、基礎単語に該当する場合（ステップＳ４５０７：Ｙｅｓ）、情報処理装置４００は、該当する基礎単語の葉Ｌ♯へのポインタにより葉Ｌ♯の構造体にアクセスする（ステップＳ４５０８）。そして、情報処理装置４００は、ポイントされた葉Ｌ♯の構造体に格納されている基礎単語の圧縮符号を抽出する（ステップＳ４５０９）。
【０２３２】
この後、情報処理装置４００は、抽出された圧縮符号を圧縮バッファ４３００に格納して（ステップＳ４５１０）、ステップＳ４５０１に戻る。このループが基礎単語の圧縮処理の流れとなる。ステップＳ４５０１において、圧縮対象文字コードがない場合（ステップＳ４５０１：Ｎｏ）、情報処理装置４００は、対象ファイルＦｐから圧縮された圧縮ファイルｆｐを圧縮バッファ４３００からファイル出力して保存する（ステップＳ４５１１）。そして、ステップＳ４４０４に移行する。一方、ステップＳ４５０６において不一致となった場合（ステップＳ４５０６：Ｎｏ）、１６ビットの文字コードの圧縮処理のループに入る。
【０２３３】
図４６は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その２）である。図４６において、情報処理装置４００は、ステップＳ４６０４で取得された先頭位置のポインタを参照して、対象ファイル群Ｆｓから圧縮対象文字コードを取得してレジスタにセットする（ステップＳ４６０１）。
【０２３４】
つぎに、情報処理装置４００は、圧縮対象文字コードについて、特定単一文字の構造体１４００に対して２分木探索をおこなう（ステップＳ４６０２）。一致した場合（ステップＳ４６０３：Ｙｅｓ）、情報処理装置４００は、該当する文字の葉Ｌ♯へのポインタにより葉Ｌ♯の構造体にアクセスする（ステップＳ４６０４）。そして、情報処理装置４００は、ポイントされた葉Ｌ♯の構造体に格納されている圧縮対象文字コードの圧縮符号を抽出する（ステップＳ４６０５）。
【０２３５】
この後、情報処理装置４００は、探索された圧縮符号を圧縮バッファ４３００に格納して（ステップＳ４６０６）、ステップＳ４５０１に戻る。このループが１６ビットの文字コードの圧縮処理の流れとなる。一方、ステップＳ４６０３において一致する文字コードが存在しなかった場合（ステップＳ４６０３：Ｎｏ）、分割文字コードの圧縮処理のループに入る。
【０２３６】
図４７は、図４４に示した圧縮処理（ステップＳ４４０３）の詳細な処理手順を示すフローチャート（その３）である。図４７において、まず、情報処理装置４００は、圧縮対象文字コードを上位８ビットと下位８ビットとに分割し（ステップＳ４７０１）、上位８ビットの分割文字コードを抽出する（ステップＳ４７０２）。そして、情報処理装置４００は、分割文字コードの構造体１５００に対して２分木探索をおこなう（ステップＳ４７０３）。
【０２３７】
そして、情報処理装置４００は、探索された分割文字コードの葉Ｌ♯へのポインタにより葉Ｌ♯の構造体にアクセスする（ステップＳ４７０４）。そして、情報処理装置４００は、ポイントされた葉Ｌ♯の構造体に格納されている分割文字コードの圧縮符号を抽出する（ステップＳ４７０５）。この後、情報処理装置４００は、探索された圧縮符号を圧縮バッファ４３００に格納する（ステップＳ４７０６）。
【０２３８】
つぎに、情報処理装置４００は、下位８ビットが探索済みか否かを判断し（ステップＳ４７０７）、探索済みでない場合（ステップＳ４７０７：Ｎｏ）、情報処理装置４００は、下位８ビットの分割文字コードを抽出して（ステップＳ４７０８）、ステップＳ４７０３〜Ｓ４７０６を実行する。一方、下位８ビットが探索済みである場合（ステップＳ４７０７：Ｙｅｓ）、ステップＳ４６０１に戻り、基礎単語の圧縮処理のループに入る。
【０２３９】
このように、２N分枝無節点ハフマン木Ｈを用いた圧縮処理では、内部節点がないため根に向かって探索する必要はなく、ポイントされた葉Ｌ♯の構造体に格納されている文字情報を抽出して、圧縮バッファ４３００に書き込むだけでよい。したがって、圧縮処理の高速化を図ることができる。
【０２４０】
また、圧縮対象文字コードが格納されている葉Ｌ♯の構造体を、基礎単語の構造体、特定単一文字コードの構造体および分割文字コードの構造体により即座に特定することができる。したがって、２N分枝無節点ハフマン木Ｈの葉を探索する必要がなく、圧縮処理の高速化を図ることができる。また、低位文字コードを上位ビットコードと下位ビットコードに分割することで、非特定単一文字を２５６種の分割文字コードの圧縮符号に圧縮することができる。したがって、圧縮率の向上を図ることができる。
【０２４１】
＜マップ圧縮の具体例＞
つぎに、第２圧縮部４０６による圧縮符号マップＭ内の各出現マップのマップ圧縮の具体例について説明する。第２圧縮部４０６は、圧縮領域内の出現マップを圧縮し、非圧縮領域の出現マップは圧縮しない。圧縮領域とは、ファイル番号１〜ｎまで採番されている場合に、α×（ｎ／αの商）となるファイル番号までの出現マップのビット列である。ｎは現在の対象ファイルの総数である。たとえば、α＝２５６ビットであり、現在の対象ファイル数ｎ＝６００である場合、ｎ／αの商は２となるため、ファイル番号１〜２αまでの出現マップのビット列が圧縮領域となる。そして、ファイル番号（２α＋１）〜ｎまでのビット列は非圧縮領域となり圧縮されない。
【０２４２】
また、出現マップのビット列は、ファイル総数αが増大することで、ビット列内の"０"が連続する箇所も多くなる。また、出現頻度が高い文字情報については、これとは逆に"１"が連続する箇所が多くなる。したがって、文字の出現率に応じた出現率領域を設定する。出現率領域とは、出現率の範囲である。出現率領域に応じて、出現マップ圧縮用のハフマン木ｈを割り当てることとする。
【０２４３】
図４８は、出現率と出現率領域との関係を示す説明図である。出現率が０〜１００％の範囲とすると、図４８に示したように、Ａ〜Ｅ領域およびＡ´〜Ｅ´領域に領域分割することができる。したがって、Ａ〜Ｅ領域およびＡ´〜Ｅ´領域で特定された出現率領域に応じて、出現マップ圧縮用のハフマン木ｈを圧縮パターンとして割り当てる。
【０２４４】
図４９は、出現率領域別の圧縮パターンを有する圧縮パターンテーブルを示す説明図である。出現率は、図１３に示したように、葉Ｌ＃の構造体の第５領域に格納されているため、葉Ｌ＃の構造体が指定されることで、圧縮パターンテーブル４９００を参照して、圧縮パターンが特定されることとなる。なお、Ａ領域およびＡ´領域は、非圧縮のため、圧縮パターンとなるハフマン木は存在しない。
【０２４５】
図５０は、Ｂ領域およびＢ´領域の場合の圧縮パターンを示す説明図である。圧縮パターン５０００は、葉が１６種のハフマン木ｈとなる。
【０２４６】
図５１は、Ｃ領域およびＣ´領域の場合の圧縮パターンを示す説明図である。圧縮パターン５１００は、葉が１６種＋１種のハフマン木ｈとなる。圧縮パターン５１００では、Ｂ領域およびＢ´領域に比べて、"０"が連続する箇所または"１"が連続する箇所が確率的に多くなる。したがって、１６ビット連続して値が"０"であるビット列に、符号語"００"が割り当てられている。
【０２４７】
図５２は、Ｄ領域およびＤ´領域の場合の圧縮パターンを示す説明図である。圧縮パターン５２００は、葉が１６種＋１種のハフマン木となる。圧縮パターン５２００では、Ｃ領域およびＣ´領域に比べて、"０"が連続する箇所または"１"が連続する箇所が確率的に多くなる。したがって、３２ビット連続して値が"０"であるビット列に、符号語"００"が割り当てられている。
【０２４８】
図５３は、Ｅ領域およびＥ´領域の場合の圧縮パターンを示す説明図である。圧縮パターン５３００は、葉が１６種＋１種のハフマン木となる。圧縮パターン５３００では、Ｄ領域およびＤ´領域に比べて、"０"が連続する箇所または"１"が連続する箇所が確率的に多くなる。したがって、６４ビット連続して値が"０"であるビット列に、符号語"００"が割り当てられている。このように、出現率領域に応じて、文字コードが存在しないことを意味する"０"の連続数が増加するため、文字コードの出現率に応じて圧縮符号マップＭの圧縮効率の向上を図ることができる。
【０２４９】
（圧縮符号マップ圧縮処理手順）
つぎに、圧縮符号マップ圧縮処理について説明する。圧縮符号マップ圧縮処理は、圧縮領域のビット列を圧縮する処理である。具体的には、図４９に示した圧縮パターンテーブル４９００と図５０〜図５３に示した圧縮パターン５０００〜５３００（ハフマン木ｈ）を用いて、圧縮符号マップＭの圧縮領域のビット列を圧縮する。以下、圧縮符号マップ圧縮処理手順について説明する。
【０２５０】
図５４は、圧縮符号マップＭ圧縮処理手順を示すフローチャートである。図５４において、まず、情報処理装置４００は、圧縮符号マップＭ群Ｍｓにおいて、未選択の出現マップへのポインタがあるか否かを判断する（ステップＳ５４０１）。未選択のアドレスがある場合（ステップＳ５４０１：Ｙｅｓ）、情報処理装置４００は、未選択のアドレスを選択して葉Ｌ＃の構造体にアクセスし（ステップＳ５４０２）、葉Ｌ＃の構造体の第１領域の中から文字コードを取得する（ステップＳ５４０３）。そして、情報処理装置４００は、アクセス先の葉Ｌ＃の構造体の第５領域から出現率領域を取得することで、取得された文字コードの出現率領域を特定する（ステップＳ５４０４）。
【０２５１】
このあと、情報処理装置４００は、図５２の圧縮パターンテーブルを参照して、特定された出現率領域が非圧縮領域（たとえば、出現率領域Ａ、Ａ´）であるか否かを判断する（ステップＳ５４０５）。非圧縮領域である場合（ステップＳ５４０５：Ｙｅｓ）、ステップＳ５４０１に戻り、つぎのアドレスを選択する。
【０２５２】
一方、非圧縮領域でない場合（ステップＳ５４０５：Ｎｏ）、情報処理装置４００は、特定された出現率領域により、図５０〜図５３に示した圧縮パターン５０００〜５３００（ハフマン木ｈ）の中から該当する圧縮パターン（ハフマン木ｈ）を選択する（ステップＳ５４０６）。また、情報処理装置４００は、圧縮対象となる取得文字コードの出現マップにおける圧縮領域のビット列を抽出する（ステップＳ５４０７）。
【０２５３】
そして、情報処理装置４００は、取得文字コードの出現率が５０％以上であるか否かを判断する（ステップＳ５４０８）。出現率とは、上述したように、対象ファイル群Ｆｓ内の全ファイル数を母集団（分母）とし、当該文字情報が存在するファイル数を分子とした値である。出現率領域は、出現率に応じて決められているため（図４８を参照）、出現率領域がＡ〜Ｅである場合、取得文字コードの出現率が５０％以上でないと判断する。一方、出現率領域がＡ´〜Ｅ´である場合、情報処理装置４００は、取得文字コードの出現率が５０％以上であると判断する。
【０２５４】
そして、出現率が５０％以上である場合（ステップＳ５４０８：Ｙｅｓ）、情報処理装置４００は、圧縮効率を上げるために、ステップＳ５４０７で抽出されたビット列を反転する（ステップＳ５４０９）。たとえば、抽出されたビット列が"１１１０"である場合、"０００１"にして、"０"の個数を増やす。そして、情報処理装置４００は、反転後のビット列を、ステップＳ５４０６で選択したハフマン木を用いて圧縮して、記憶装置（たとえば、フラッシュメモリや磁気ディスク２０５）に格納する（ステップＳ５４１０）。そして、ステップＳ５４０１に戻る。このように、ビット列反転をおこなうことで、出現率領域Ａ´〜Ｅ´のハフマン木ｈを用意する必要がないため、省メモリ化を図ることができる。
【０２５５】
一方、ステップＳ５４０８において、出現率が５０％以上でない場合（ステップＳ５４０８：Ｎｏ）、情報処理装置４００は、ビット列反転（ステップＳ５４０９）をおこなうことなく、ステップＳ５４０７で抽出されたビット列を、ステップＳ５４０６で選択したハフマン木を用いて圧縮して（ステップＳ５４１０）、ステップＳ５４０１に戻る。また、ステップＳ５４０１において、未選択のアドレスがない場合（ステップＳ５４０１：Ｎｏ）、圧縮符号マップ圧縮処理を終了する。
【０２５６】
このような圧縮符号マップ圧縮処理手順により、図１（Ａ）に示したように、文字情報ごとに圧縮領域内のビット列が、出現率に応じて圧縮される。このように、出現率領域に応じて、文字情報が存在しないことを意味する"０"の連続数が増加するため、文字情報の出現率に応じて圧縮符号マップＭの圧縮効率の向上を図ることができる。
【０２５７】
また、対象ファイルが後から追加されると、追加された対象ファイルを圧縮する際、圧縮符号マップＭにも文字の存否を示すビット列を追加する必要がある。圧縮前の圧縮符号マップＭでは、ファイル番号：１〜ｎの出現マップのビット列については、圧縮パターン５０００〜５３００により圧縮されてレコードごとに符号長が異なる。すなわち、可変長であるため圧縮領域となる。
【０２５８】
したがって、図１（Ａ）に示したように、圧縮符号列の先頭（ファイル番号ｎ側）は整列するが末尾（ファイル番号１側）が整列しない。仮に、ビット列の並びを、ファイル番号：１〜ｎの順に、圧縮符号マップＭへのポインタ（文字情報の圧縮符号）側から割り当てると、追加ファイルのビット列は、圧縮符号列の末尾側に挿入することとなり、圧縮符号列と追加ファイルのビット列とが非連続となってしまう。したがって、あらかじめ、圧縮符号マップＭ群Ｍｓの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Ｆｓのファイル番号ｐの降順に配列しておく。そして、圧縮符号マップＭにおいて、出現マップへのポインタ（文字情報の圧縮符号）と圧縮領域との間に非圧縮領域を設定する。
【０２５９】
図１（Ｃ）に示すように、ファイル番号；１〜ｎのうち圧縮符号列が整列する側にファイル番号：ｎ＋１のビットを割り当てる。これにより、ファイル番号；１〜ｎのビット列を圧縮した場合でも、非圧縮のファイル番号：ｎ＋１〜２ｎのビット列を挿入しても、ファイル番号順にビット列を連続させることができる。これにより、ファイル番号；１〜ｎのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルの絞込みを正確に実行することができる。
【０２６０】
＜機能的構成例２＞
図５５は、本実施の形態にかかる情報処理装置４００の機能的構成例２を示すブロック図である。図５５において、情報処理装置４００は、指定部５５０１と、第１伸長部５５０２と、第１圧縮部４０３と、入力部５５０３と、抽出部５５０４と、第２伸長部５５０５と、特定部５５０６と、更新部５５０７と、を備える。指定部５５０１〜更新部５５０７は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることによりその機能を実現する。なお、指定部５５０１〜更新部５５０７は、それぞれ実行結果を記憶装置に書き込んだり、他の部の実行結果を読み出したりして、それぞれ演算を実行する。以下、指定部５５０１〜更新部５５０７について簡単に説明する。
【０２６１】
指定部５５０１は、対象ファイル群Ｆｓ内のいずれかの対象ファイルのオープン指定を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、指定部５５０１は、対象ファイルＦｉのオープン指定を受け付ける。当該オープン指定が受け付けられると、圧縮符号マップＭにおいて、オープン指定された対象ファイルＦｉのファイル番号ｉに関連付けられている圧縮ファイルｆｉへのポインタが指定される。これにより、ポイント先となるアドレスに格納されている、オープン指定された対象ファイルＦｉの圧縮ファイルｆｉが読み出される。
【０２６２】
また、指定部５５０１は、オープンされている対象ファイルＦｉの保存指定を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、指定部５５０１は、対象ファイルＦｉの保存指定を受け付ける。当該保存指定が受け付けられると、保存指定された対象ファイルＦｉが第１圧縮部４０３により２N分枝無節点ハフマン木Ｈで圧縮され、圧縮ファイルｆｉとして記憶装置内に保存される。
【０２６３】
第１伸長部５５０２は、対象ファイルＦｉの圧縮ファイルｆｉを、２N分枝無節点ハフマン木Ｈで伸長する。具体的には、たとえば、第１伸長部５５０２は、指定部５５０１によってオープン指定された対象ファイルＦｉの圧縮ファイルｆｉを、２N分枝無節点ハフマン木Ｈで伸長する。また、後述する特定部５５０６で特定された対象ファイルＦｉについても２N分枝無節点ハフマン木Ｈで伸長する。伸長の具体例については後述する。
【０２６４】
入力部５５０３は、検索文字列の入力を受け付ける。具体的には、キーボード、マウス、タッチパネルをユーザが操作することで、入力部５５０３は、検索文字列の入力を受け付ける。
【０２６５】
抽出部５５０４は、入力部５５０３によって入力された検索文字列内の文字情報の圧縮符号を２N分枝無節点ハフマン木Ｈから抽出する。具体的には、たとえば、抽出部５５０４は、検索文字列から、特定単一文字、上位分割文字コード、下位分割文字コード、２グラム文字列、および基礎単語のうち該当する文字情報を抽出する。
【０２６６】
たとえば、検索文字列が「人形」である場合、特定単一文字「人」、「形」と、２グラム文字列「人形」が抽出される。そして、抽出部５５０４は、抽出された文字情報の圧縮符号を２N分枝無節点ハフマン木Ｈで特定し、圧縮符号マップＭの該当する出現マップを抽出する。たとえば、特定単一文字「人」の圧縮済みの出現マップと、「形」の圧縮済みの出現マップと、２グラム文字列「人形」の圧縮済みの出現マップとが抽出される。
【０２６７】
第２伸長部５５０５は、抽出部５５０４によって抽出された圧縮済みの出現マップを伸長する。具体的には、文字情報の出現率から出現率領域が特定できるため、第２伸長部５５０５は、特定された出現率領域に応じたマップ用のハフマン木により、圧縮済みの出現マップの圧縮領域を伸長する。たとえば、上記の例では、図１（Ｂ）に示したように、特定単一文字「人」の圧縮済みの出現マップと、「形」の圧縮済みの出現マップと、２グラム文字列「人形」の圧縮済みの出現マップとが、伸長される。
【０２６８】
特定部５５０６は、第２伸長部５５０５による伸長後の出現マップ群および削除マップＤのＡＮＤ演算を実行することで、検索文字列内の文字情報を含む対象ファイルの圧縮ファイルを圧縮ファイル群から特定する。上記の例では、図１（Ｂ）に示したように、特定部５５０６は、特定単一文字「人」の圧縮済みの出現マップと、「形」の圧縮済みの出現マップと、２グラム文字列「人形」の圧縮済みの出現マップと、削除マップＤと、をＡＮＤ演算する。特定部５５０６までの処理が、情報処理装置４００内の抽出装置での処理となる。
【０２６９】
これにより、ファイル番号３（の圧縮ファイルｆ３）が特定される。第１伸長部５５０２では、特定部５５０６によって特定された圧縮ファイル（上記の例では圧縮ファイルｆ３）を２N分枝無節点ハフマン木Ｈで伸長することとなる。
【０２７０】
更新部５５０７は、オープン中の対象ファイルを更新して保存する場合、あらたなファイル番号を採番して、圧縮符号マップＭおよび削除マップＤについて、あらたなファイル番号についてのビットを設定する。圧縮符号マップＭでは「０」（ＯＦＦ）、削除マップＤでは「１」（ＯＮ）とする。
【０２７１】
そして、更新される対象ファイル内の文字情報を集計部４０１により集計して、１回でも出現した文字情報については、あらたに採番されたファイル番号のビットをＯＮにする。また、削除マップＤにおけるオープンしたときのファイル番号のビットをＯＦＦにする。また、新たに採番されたファイル番号については、更新部５５０７は、更新後の圧縮ファイルのアドレスをポインタとして関連付ける。これにより、更新後において、あらたに採番されたファイル番号が指定された場合、指定部５５０１により、更新後の圧縮ファイルが指定されることになる。更新部５５０７の詳細については後述する。
【０２７２】
＜ファイル伸長例＞
つぎに、ファイル伸長例について説明する。圧縮ファイルｆｉを伸長する場合、対象ファイルＦｉをオープンするにあたり、直接ファイル番号ｉを指定する方法（Ｇ１）と、検索文字列によりオープンさせる対象ファイルＦｉを絞り込む方法（Ｇ２）がある。前者（Ｇ１）については図５６で説明し、後者（Ｇ２）については図５７で説明する。なお、（Ｇ１）および（Ｇ２）のいずれについても、本実施の形態の更新前と更新後のいずれの場合にも実行することができる。
【０２７３】
図５６は、ファイル伸長例（Ｇ１）を示す説明図である。ファイル伸長例（Ｇ１）で示す処理は、指定部５５０１および第１伸長部５５０２により実行される。ここでは、例としてファイル番号３をオープン指定することとする。なお、図５６中、符号５６００は圧縮符号マップＭの管理領域である。管理領域５６００には、出現マップのビットに対応するファイル番号ｉ（ｉ＝１〜ｎ）が記憶されている。また、管理領域５６００には、ファイル番号ｉで特定される圧縮ファイルｆｉの格納先と指定するポインタが、そのファイル番号ｉに関連付けられて保存されている。したがって、ファイル番号ｉが指定されると、その圧縮ファイルｆｉがポイントされて読み出すことができる。
【０２７４】
（Ｇ１１）まず、指定部５５０１により対象ファイルＦ３のオープン指定がされる。圧縮符号マップＭのファイル番号３は、対象ファイルＦ３の圧縮ファイルｆ３へのポインタに関連付けられている。（Ｇ１２）したがって、当該ポインタにより、圧縮ファイルｆ３が抽出される。（Ｇ１３）抽出された圧縮ファイルｆ３は、２N分枝無節点ハフマン木Ｈで伸長される。詳細な伸長処理については後述する。
【０２７５】
図５７は、ファイル伸長例（Ｇ２）を示す説明図である。ファイル伸長例（Ｇ２）で示す処理は、入力部５５０３、抽出部５５０４、第２伸長部５５０５、特定部５５０６、第１伸長部５５０２により実行される。（Ｇ２１）まず、入力部５５０３により検索文字列「人形」が入力された場合、検索文字列「人形」を構成する文字「人」、「形」について特定単一文字の構造体１４００に対し２分探索することで、特定単一文字「人」、「形」が検索される。特定単一文字の構造体１４００には、２N分枝無節点ハフマン木Ｈの葉（特定単一文字）へのポインタが関連付けられている。したがって、特定単一文字の構造体でヒットすると、２N分枝無節点ハフマン木Ｈの葉を直接指定することができる。
【０２７６】
（Ｇ２２）２N分枝無節点ハフマン木Ｈの葉を直接指定すると、当該葉の構造体内の照合フラグがＯＮに設定され、圧縮符号が抽出される。圧縮符号は特定単一文字の出現マップへのポインタとなるため、直接指定することができる。本例の場合、特定単一文字「人」、「形」の圧縮符号が抽出されるため、「人」の出現マップと「形」の出現マップとが抽出される。また、「人」の圧縮符号および「形」の圧縮符号を連結した連結圧縮符号も２グラム文字列の出現マップへのポインタとなるため、直接指定することができる。したがって、２グラム文字列「人形」の出現マップも抽出される。
【０２７７】
（Ｇ２３）抽出された３個の出現マップは、マップ用ハフマン木により伸長される。そして、伸長された出現マップと削除マップＤとによりＡＮＤ演算が実行され、ＡＮＤ結果が得られる。
【０２７８】
（Ｇ２４）ＡＮＤ結果においてファイル番号３がＯＮになっているため、検索文字列「人形」が対象ファイルＦ３に存在することが判明する。したがって、圧縮ファイル群から圧縮ファイルｆ３が抽出される。これにより伸長すべき圧縮ファイルが絞り込まれることになり、無駄な伸長処理を低減することができる。
【０２７９】
（Ｇ２５）最後に、抽出された圧縮ファイルｆ３を圧縮状態のまま、照合、伸長することで、伸長後の対象ファイルＦ３がオープンされる。なお、「人」、「形」の葉の構造体では照合フラグがＯＮになっているため、「人」、「形」の伸長の際、強調表示となるように文字列置換されて伸長される。たとえば、照合フラグがＯＮである「人」、「形」については、＜Ｂ＞＜／Ｂ＞タグではさんで伸長することで、太字で表示される。照合フラグがＯＦＦの文字については＜Ｂ＞＜／Ｂ＞タグではさむことなくそのまま伸長する。
【０２８０】
＜伸長処理の具体例＞
つぎに、図５６および図５７での伸長処理の具体例について説明する。ここでは、検索文字列「人形」の圧縮符号列を用いて圧縮ファイルｆｉについて照合しながら伸張する例について説明する。なお、例として、特定単一文字「人」の圧縮符号を「１１０００１００１１」（１０ビット）とし、特定単一文字「形」の圧縮符号を「０１０００１００１０」（１０ビット）とする。
【０２８１】
また、伸長処理では、レジスタに圧縮符号列をセットし、マスクパターンにより圧縮符号を抽出する。抽出した圧縮符号を、１パス（１枝分のアクセス）で２N分枝無節点ハフマン木Ｈの根から探索する。そして、アクセスした葉Ｌ♯の構造体に格納されている文字コードを読み出して伸長バッファに格納する。
【０２８２】
また、圧縮符号を抽出するため、マスクパターンのマスク位置をオフセットする。また、マスクパターンの初期値を"０ｘＦＦＦ０００００"とする。このマスクパターンは先頭１２ビットが"１"であり、後続の２０ビットが"０"のビット列である。
【０２８３】
図５８および図５９は、図５６および図５７での伸長処理の具体例を示す説明図である。図５８では、特定単一文字「人」についての伸張例（Ａ）を示している。図５８において、まず、ＣＰＵは、ビットアドレスａｂｉとバイトオフセットｂｙｏｓとビットオフセットｂｉｏｓとを算出する。ビットアドレスａｂｉは、抽出された圧縮符号のビット位置を示す値であり、今回のビットアドレスａｂｉは、前回のビットアドレスａｂｉに前回抽出された圧縮符号の圧縮符号長ｌｅｇを加算した値となる。なお、初期状態では、ビットアドレスａｂｉはａｂｉ＝０とする。
【０２８４】
バイトオフセットｂｙｏｓは、メモリに保持されている圧縮符号列のバイト境界を示す値であり、ビットアドレスａｂｉ／８の商で求められる。たとえば、バイトオフセットｂｙｏｓ＝０のときは、メモリに記憶されている先頭からの圧縮符号列をレジスタにセットし、バイトオフセットｂｙｏｓ＝１のときは、メモリに記憶されている先頭１バイト目からの圧縮符号列をレジスタにセットする。
【０２８５】
また、ビットオフセットｂｉｏｓは、マスクパターンのマスク位置（"ＦＦＦ"）をオフセットする値であり、ビットアドレスａｂｉ／８の余りである。たとえば、ビットオフセットｂｉｏｓ＝０のときは、マスク位置はシフトされないこととなり、マスクパターンは、"０ｘＦＦＦ０００００"となる。一方、ビットオフセットｂｉｏｓ＝４のときは、マスク位置は末尾方向に４ビットシフトすることとなり、マスクパターンは、"０ｘ０ＦＦＦ００００"となる。
【０２８６】
レジスタシフト数ｒｓは、マスクパターンとのＡＮＤ演算後のレジスタ内の圧縮符号列を末尾方向にシフトするビット数であり、ｒｓ＝３２−１２−ｂｉｏｓで求められる。このシフトにより、シフト後のレジスタの末尾ｍビットのビット列を対象ビット列として抽出する。対象ビット列の抽出後はレジスタをクリアする。
【０２８７】
なお、メモリ内のブロックは１バイトのビット列を示しており、内部の数字は、バイト境界となるバイト位置を示している。図５８では、ビットアドレスａｂｉ＝０により、バイトオフセットｂｙｏｓ＝０、ビットオフセットｂｉｏｓ＝０となる。バイトオフセットｂｙｏｓ＝０により、メモリに保持されている圧縮符号列のうち先頭から４バイト分（図中、網掛け）の圧縮符号列をレジスタにセットする。
【０２８８】
また、ビットオフセットｂｉｏｓ＝０により、マスクパターンは、"０ｘＦＦＦ０００００"である。したがって、レジスタにセットされた圧縮符号列とマスクパターン"０ｘＦＦＦ０００００"を論理積（ＡＮＤ）演算することにより、ＡＮＤ結果が得られる。
【０２８９】
また、ビットオフセットｂｉｏｓ＝０により、レジスタシフト数ｒｓは、ｒｓ＝３２−ｍ―ｂｉｏｓ＝３２−１２−０＝２０となる。したがって、レジスタ内のＡＮＤ結果を末尾方向に２０ビット分シフトする。このシフトによりレジスタには、"１１０００１００１１００"が残されるため、末尾１２ビットを対象ビット列として抽出する。この場合は、"１１０００１００１１００"が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
【０２９０】
２N分枝無節点ハフマン木Ｈの根の構造体には、抽出された対象ビット列"１１０００１００１１００"があるため、この対象ビット列と一致する葉Ｌ♯へのポインタ（枝番号）を探索する。この場合、葉Ｌ９７へのポインタ群の中の１つと一致するため、該当する葉Ｌ９７へのポインタを読み出して、葉Ｌ９７の構造体にアクセスする。
【０２９１】
葉Ｌ９７の構造体には、文字コード"０ｘＢＡ４Ｅ"が格納されているため、当該文字コード"０ｘＢＡ４Ｅ"を抽出して伸長バッファに格納する。ファイル伸長例（Ｇ１）の場合は、そのまま伸長バッファに格納するが、ファイル伸長例（Ｇ２）の場合は、照合フラグがＯＮであるため、文字コード"０ｘＢＡ４Ｅ"を＜Ｂ＞＜／Ｂ＞タグで挟み込んで格納する。
【０２９２】
また、葉Ｌ９７の構造体には、文字コード"０ｘＢＡ４Ｅ"の圧縮符号長ｌｅｇ（＝１０ビット）も格納されているため、文字コード"０ｘＢＡ４Ｅ"の圧縮符号長ｌｅｇも抽出する。この抽出された圧縮符号長ｌｅｇによりビットアドレスａｂｉを更新する。この場合、更新後のビットアドレスａｂｉはａｂｉ＝０＋１０＝１０となる。
【０２９３】
図５９では、特定単一文字「形」について伸張する例（Ｂ）を示している。具体的には、図５８の状態（Ａ）からレジスタをバイトオフセットｂｉｏｓ分シフトした場合、前回である（Ａ）のビットアドレスａｂｉはａｂｉ＝０、圧縮符号長ｌｅｇは１０ビットであるため、（Ｂ）のビットアドレスａｂｉはａｂｉ＝１０ビットとなる。
【０２９４】
また、このビットアドレスａｂｉ＝１０により、バイトオフセットｂｙｏｓ＝１、ビットオフセットｂｉｏｓ＝２となる。バイトオフセットｂｙｏｓ＝１により、メモリに保持されている圧縮符号列のうち先頭１バイト目から４バイト分（図中、網掛け）の圧縮符号列をレジスタにセットする。
【０２９５】
また、ビットオフセットｂｉｏｓ＝２により、マスクパターンは、"０ｘ３ＦＦＣ００００"である。したがって、レジスタにセットされた圧縮符号列とマスクパターン"０ｘ３ＦＦＣ００００"を論理積（ＡＮＤ）演算することにより、ＡＮＤ結果が得られる。
【０２９６】
また、ビットオフセットｂｉｏｓ＝２により、レジスタシフト数ｒｓは、ｒｓ＝３２−ｍ―ｂｉｏｓ＝３２−１２−２＝１８となる。したがって、レジスタ内のＡＮＤ結果を末尾方向に１８ビット分シフトする。このシフトによりレジスタには、"０００００１０００１００１０"が残されるため、末尾１０ビットを対象ビット列として抽出する。この場合は、"０１０００１００１０"が対象ビット列として抽出される。抽出後、レジスタはクリアされる。
【０２９７】
２N分枝無節点ハフマン木Ｈの根の構造体には、抽出された対象ビット列"０１０００１００１０"があるため、このビット列と一致する葉Ｌ♯へのポインタ（枝番号）を探索する。この場合、対象ビット列"０１０００１００１０"が葉Ｌ１０５へのポインタ群の中の１つと一致するため、該当する葉Ｌ１０５へのポインタを読み出して、葉Ｌ２４の構造体にアクセスする。
【０２９８】
葉Ｌ１０５の構造体には、文字コード"０ｘ６２５Ｆ"が格納されているため、当該文字コード"０ｘ６２５Ｆ"を抽出して伸長バッファに格納する。ファイル伸長例（Ｇ１）の場合は、そのまま伸長バッファに格納するが、ファイル伸長例（Ｇ２）の場合は、照合フラグがＯＮであるため、文字コード"０ｘ６２５Ｆ"を＜Ｂ＞＜／Ｂ＞タグで挟み込んで格納する。また、葉Ｌ１０５の構造体には、文字コード"０ｘ６２５Ｆ"の圧縮符号長ｌｅｇ（＝８ビット）も格納されているため、文字コード"０ｘ６２５Ｆ"の圧縮符号長ｌｅｇも抽出する。この抽出された圧縮符号長ｌｅｇによりビットアドレスａｂｉを更新する。この場合、更新後のビットアドレスａｂｉはａｂｉ＝１０＋８＝１８となる。このようにして伸長することで、対象ファイルがオープンされることとなる。
【０２９９】
＜検索処理手順＞
つぎに、本実施の形態にかかる検索処理手順について説明する。具体的には、たとえば、図５７に示したファイル伸長例（Ｇ２）についての処理手順となる。
【０３００】
図６０は、本実施の形態にかかる検索処理手順を示すフローチャートである。まず、情報処理装置４００は、検索文字列の入力を待ち受け（ステップＳ６００１：Ｎｏ）、検索文字列が入力された場合（ステップＳ６００１：Ｙｅｓ）、ファイル絞込み処理（ステップＳ６００２）、伸長処理（ステップＳ６００３）を実行する。ファイル絞込み処理（ステップＳ６００２）は、圧縮ファイル群ｆｓの中から検索文字列を構成する文字情報が存在する対象ファイルＦｉの圧縮ファイルｆｉを絞り込む。ファイル絞込み処理（ステップＳ６００２）の詳細は、図６１および図６２で説明する。
【０３０１】
伸長処理（ステップＳ６００３）は、ファイル絞込み処理（ステップＳ６００２）で絞り込まれた圧縮ファイルｆｉを伸長する過程で、伸長対象となる圧縮符号列と検索文字列の圧縮文字列とを照合する。伸長処理（ステップＳ６００３）の詳細は、図６３および図６４で説明する。
【０３０２】
図６１は、図６０に示したファイル絞込み処理（ステップＳ６００２）の詳細な処理手順を示すフローチャート（その１）である。まず、情報処理装置４００は、検索文字列を対象文字列に設定し（ステップＳ６１０１）、最長一致検索処理を実行する（ステップＳ６１０２）。最長一致検索処理（ステップＳ６１０２）は、図３８に示した最長一致検索処理（ステップＳ３８０１）と同一処理であるため説明を省略する。
【０３０３】
そして、情報処理装置４００は、基礎単語の構造体において、最長一致検索処理（ステップＳ６１０２）で得られた最長一致検索結果を２分探索する（ステップＳ６１０３）。最長一致検索結果が、基礎単語の構造体で探索された場合（ステップＳ６１０３：Ｙｅｓ）、対象文字列である基礎単語について、その基礎単語の出現マップを基礎単語の出現マップ群から取得する（ステップＳ６１０４）。
【０３０４】
そして、情報処理装置４００は、対象文字列に後続があるか否かを判断する（ステップＳ６１０５）。後続がある場合（ステップＳ６１０５：Ｙｅｓ）、情報処理装置４００は、後続文字列を対象文字列に設定して（ステップＳ６１０６）、最長一致検索処理（ステップＳ６１０２）に戻る。一方、後続がない場合（ステップＳ６１０５：Ｎｏ）、これまでに取得された出現マップ群のＡＮＤ演算で対象ファイルを絞り込む（ステップＳ６１０７）。これにより、ファイル絞込み処理（ステップＳ６００２）は終了し、伸長処理（ステップＳ６００３）に移行する。
【０３０５】
また、ステップＳ６１０３において、最長一致検索結果が、基礎単語の構造体で探索されなかった場合（ステップＳ６１０３：Ｎｏ）、図６２のステップＳ６２０１に移行する。具体的には、最長一致検索結果が基礎単語の構造体に登録されていない場合、または、最長一致検索で最長一致候補がなかった場合（ステップＳ６１０３：Ｎｏ）に、図６２のステップＳ６２０１に移行する。
【０３０６】
図６２は、図６０に示したファイル絞込み処理（ステップＳ６００２）の詳細な処理手順を示すフローチャート（その２）である。図６２では、対象文字列を構成する文字ごとに、出現マップを取得する処理を示している。
【０３０７】
まず、情報処理装置４００は、対象文字列の先頭文字を対象文字に設定する（ステップＳ６２０１）。つぎに、情報処理装置４００は、特定単一文字の構造体において対象文字を２分探索する（ステップＳ６２０２）。対象文字が探索された場合（ステップＳ６２０３：Ｙｅｓ）、情報処理装置４００は、特定単一文字の圧縮符号マップＭから対象文字の出現マップを取得する（ステップＳ６２０４）。
【０３０８】
一方、ステップＳ６２０３において、探索されなかった場合（ステップＳ６２０３：Ｎｏ）、情報処理装置４００は、対象文字を上位８ビットと下位８ビットに分割する（ステップＳ６２０５）。そして、情報処理装置４００は、上位分割文字コードの圧縮符号マップＭの中から、ステップＳ６２０５の分割で得られた上位分割文字コードの出現マップを取得する（ステップＳ６２０６）。
【０３０９】
また、情報処理装置４００は、下位分割文字コードの圧縮符号マップＭの中から、ステップＳ６２０５の分割で得られた下位分割文字コードの出現マップを取得する（ステップＳ６２０７）。また、情報処理装置４００は、対象文字やステップＳ６２０５で分割された分割文字コードについて、２N分枝無節点ハフマン木Ｈの葉にアクセスし、照合フラグをＯＮにする（ステップＳ６２０８）。このあと、情報処理装置４００は、２グラム文字列特定処理を実行する（ステップＳ６２０９）。２グラム文字列特定処理（ステップＳ６２０９）は、図３０に示した２グラム文字列特定処理（ステップＳ２７０６）と同一処理であるため説明を省略する。
【０３１０】
そして、情報処理装置４００は、２グラム文字列特定処理（ステップＳ６２０９）で２グラム文字列が特定されなかった場合（ステップＳ６２１０：Ｎｏ）、図６１のステップＳ６１０５に戻る。一方、２グラム文字列が特定された場合（ステップＳ６２１０：Ｙｅｓ）、情報処理装置４００は、２グラム文字列の出現マップを取得する（ステップＳ６２１１）。具体的には、たとえば、情報処理装置４００は、第１グラムの圧縮符号および第２グラムの圧縮符号を２N分枝無節点ハフマン木Ｈにアクセスすることで取得、連結し、２グラム文字列の圧縮符号マップＭから連結圧縮符号で指定された出現マップを取得する。そして、図６１のステップＳ６１０５に戻る。
【０３１１】
このように、図６２に示した処理手順により、対象文字についての出現マップ群と２グラム文字列についての出現マップ群を取得することができる。したがって、図６１のステップＳ６１０７でのＡＮＤ演算により圧縮ファイルｆｉの絞込みができることとなる。
【０３１２】
図６３は、図６０に示した２N分枝無節点ハフマン木Ｈを用いた伸長処理（ステップＳ６００３）の詳細な処理手順例を示すフローチャート（その１）である。図６３において、まず、情報処理装置４００は、ビットアドレスａｂｉをａｂｉ＝０とし（ステップＳ６３０１）、バイトオフセットｂｙｏｓを算出し（ステップＳ６３０２）、ビットオフセットｂｉｏｓを算出する（ステップＳ６３０３）。そして、情報処理装置４００は、バイトオフセットｂｙｏｓの位置からの圧縮符号列をレジスタｒ１にセットする（ステップＳ６３０４）。
【０３１３】
つぎに、情報処理装置４００は、レジスタｒ２にセットされたマスクパターンをビットオフセットｂｉｏｓ分、末尾方向にシフトして（ステップＳ６３０５）、レジスタｒ１にセットされた圧縮符号列とのＡＮＤ演算をおこなう（ステップＳ６３０６）。このあと、情報処理装置４００は、レジスタシフト数ｒｓを算出して（ステップＳ６３０７）、ＡＮＤ演算後のレジスタｒ２をレジスタシフト数ｒｓ分、末尾にシフトする（ステップＳ６３０８）。
【０３１４】
図６４は、図６０に示した２N分枝無節点ハフマン木Ｈを用いた伸長処理（ステップＳ６００３）の詳細な処理手順例を示すフローチャート（その２）である。ステップＳ６３０８のあと、図６４において、情報処理装置４００は、シフト後のレジスタｒ２から末尾Ｎビットを対象ビット列として抽出する（ステップＳ６４０１）。つぎに、情報処理装置４００は、２N分枝無節点ハフマン木Ｈの根の構造体から葉Ｌ♯へのポインタを特定し（ステップＳ６４０２）、ポイント先となる葉Ｌ♯の構造体に１パスでアクセスする（ステップＳ６４０３）。このあと、情報処理装置４００は、アクセス先の葉Ｌ♯の構造体の照合フラグがＯＮであるか否かを判断する（ステップＳ６４０４）。
【０３１５】
照合フラグがＯＮである場合（ステップＳ６４０４：Ｙｅｓ）、情報処理装置４００は、アクセス先の葉Ｌ♯の構造体内の文字情報について置換文字を伸長バッファに書き出して（ステップＳ６４０５）、ステップＳ６４０７に移行する。一方、照合フラグがＯＦＦの場合（ステップＳ６４０４：Ｎｏ）、情報処理装置４００は、アクセス先の葉Ｌ♯の構造体内の文字情報（伸長文字）を伸長バッファに書き出して（ステップＳ６４０６）、ステップＳ６４０７に移行する。
【０３１６】
ステップＳ６４０７では、情報処理装置４００は、アクセス先の葉Ｌ♯の構造体から圧縮符号長ｌｅｇを抽出し（ステップＳ６４０７）、ビットアドレスａｂｉを更新する（ステップＳ６４０８）。このあと、情報処理装置４００は、メモリに圧縮符号列があるか否か、具体的には、マスクパターンによるマスク処理が施されていない圧縮符号列があるか否かを判断する（ステップＳ６４０９）。たとえば、バイトオフセットｂｙｏｓに該当するバイト位置があるか否かにより判断する。圧縮符号列がある場合（ステップＳ６４０９：Ｙｅｓ）、図６３のステップＳ６３０２に戻る。一方、圧縮符号列がない場合（ステップＳ６４０９：Ｎｏ）、伸長処理（ステップＳ６００３）を終了する。
【０３１７】
このような伸長処理（ステップＳ６００３）により、圧縮状態のまま照合・伸長をおこなうことができ、伸長速度の高速化を図ることができる。
【０３１８】
＜更新処理の具体例＞
つぎに、図１に示した更新処理の具体例について説明する。ここでは、図１で示したように、圧縮済みの圧縮符号マップＭを伸長することなく、対象ファイルＦｉの更新と、圧縮符号マップＭの更新とを実行する。
【０３１９】
図６５は、更新処理の具体例を示す説明図である。図６５では、対象ファイルＦ３を更新する場合を例に挙げて説明する。まず、図５６のファイル伸長例（Ｇ１）または図５７のファイル伸長例（Ｇ２）により、圧縮ファイル群ｆｓから圧縮ファイルｆ３が伸長され、伸長後の対象ファイルＦ３がメインメモリ（たとえば、ＲＡＭ２０３）上に書き出されたとする。
【０３２０】
（Ｈ）ここで、対象ファイルＦ３内の文字列「人形芝居を見た。」を「紙芝居を見た。」に変更し、保存指示を与えたとする。この場合、メインメモリ上の対象ファイルＦ３にはあたらしく採番されたファイル番号ｎ＋１が割り与えられ、対象ファイルＦ（ｎ＋１）となる。
【０３２１】
（Ｉ）そして、対象ファイルＦ（ｎ＋１）を２N分枝無節点ハフマン木Ｈで圧縮して圧縮ファイルｆ（ｎ＋１）とし、記憶装置内に保存する。この場合、記憶装置内において圧縮ファイルｆ（ｎ＋１）を圧縮ファイルｆ３に上書き保存する。
【０３２２】
（Ｊ）また、メインメモリ上の対象ファイルＦ（ｎ＋１）の文字情報を集計部４０１により集計することで、文字情報の存否を検出することができる。したがって、新たに採番されたファイル番号ｎ＋１のビットを、各文字情報の出現マップに追加（デフォルトはＯＦＦ）し、文字情報が出現したビットについてＯＮにする。また、ファイル番号ｎ＋１のビットを削除マップＤにも追加（デフォルトはＯＮ）する。さらに、削除マップＤにおいて更新元となる対象ファイルＦ３のファイル番号３のビットをＯＦＦにする。
【０３２３】
（Ｋ）また、圧縮ファイルｆ３は圧縮ファイルｆ（ｎ＋１）に上書き保存されるため、ファイル番号ｎ＋１については、管理領域においてファイル番号３に関連付けられていたポインタが関連付けされる。これにより、以降において、ファイル番号（ｎ＋１）が指定されると、圧縮ファイルｆ（ｎ＋１）を伸長して対象ファイルＦ（ｎ＋１）をオープンすることができる。
【０３２４】
なお、図６５では、圧縮ファイルｆ（ｎ＋１）を圧縮ファイルｆ３に対して上書き保存することとしたが、上書き保存せず別途保存することとしてもよい。この場合、圧縮符号マップＭの管理領域５６００において、ファイル番号ｎ＋１には、圧縮ファイルｆ３へのポインタではなく、空き領域を指定するあらたなポインタが割り当てられることとなる。この場合、圧縮ファイルｆ３は残存するが、削除マップＤではファイル番号３がＯＦＦに変更されているため、検索に影響は与えない。
【０３２５】
また、更新前の状態に復元させる場合は、更新前のファイル番号３と更新後のファイル番号ｎ＋１とを関連付けさせておけばよい。これにより、ファイル番号ｎ＋１を含む復元指示を与えることで、ファイル番号３を介して圧縮ファイルｆ３を指定することができるため、伸長することで対象ファイルＦ３を得ることができる。
【０３２６】
＜更新処理手順＞
つぎに、図６５に示した更新処理手順について説明する。
【０３２７】
図６６は、図６５に示した更新処理手順を示すフローチャートである。まず、情報処理装置４００は、更新要求が受け付けられるのを待ち受け（ステップＳ６６０１：Ｎｏ）、更新要求が受け付けられた場合（ステップＳ６６０１：Ｙｅｓ）、情報処理装置４００は、更新要求のあった対象ファイルＦｉのファイル番号ｉを特定する（ステップＳ６６０２）。
【０３２８】
そして、情報処理装置４００は、削除マップＤにおける特定先のファイル番号ｉのビットをＯＦＦにする（ステップＳ６６０３）。これにより、特定先のファイル番号ｉの対象ファイルＦｉが検索されることがなくなり、検索精度の向上を図ることができる。
【０３２９】
つぎに、情報処理装置４００は、対象ファイルＦｉのファイル番号ｉを更新する（ステップＳ６６０４）。すなわち、現時点での末尾のファイル番号に１加算したファイル番号を採番して、対象ファイルに割り与える。たとえば、図６５に示したように、ファイル番号ｎ＋１を採番して、メインメモリ（ＲＡＭ２０３）上の対象ファイルＦ３に付与して対象ファイルＦ（ｎ＋１）とする。このように、あらたに採番されたファイル番号が付与された対象ファイルを追加ファイルと称す。
【０３３０】
このあと、情報処理装置４００は、追加ファイルＦ（ｎ＋１）を２N分枝無節点ハフマン木Ｈで圧縮して圧縮ファイルとして保存する（ステップＳ６６０５）。そして、情報処理装置４００は、圧縮符号マップＭの管理領域５６００内に、追加ファイルＦ（ｎ＋１）のファイル番号（ｎ＋１）に関連付けて追加ファイルＦ（ｎ＋１）の圧縮ファイルへのポインタを関連付ける（ステップＳ６６０６）。
【０３３１】
このあと、情報処理装置４００は、総ファイル数（末尾のファイル番号）がｎの倍数であるか否かを判断する（ステップＳ６６０７）。ｎの倍数である場合（ステップＳ６６０７：Ｙｅｓ）、圧縮符号マップＭの全ビットが圧縮領域となるため、圧縮符号マップＭの各出現マップを圧縮する（ステップＳ６６０８）。これにより、圧縮符号マップＭのサイズ縮小を図ることができる。
【０３３２】
一方、ｎの倍数でない場合（ステップＳ６６０７：Ｎｏ）、追加ファイルＦ（ｎ＋１）のマップ更新処理を実行して（ステップＳ６６０９）、一連の処理を終了する。追加ファイルＦ（ｎ＋１）のマップ更新処理（ステップＳ６６０９）の詳細については、図６７および図６８で説明する。
【０３３３】
図６７は、図６６に示した追加ファイルのマップ更新処理（ステップＳ６６０９）の詳細な処理手順を示すフローチャート（前半）である。まず、情報処理装置４００は、圧縮符号マップＭおよび削除マップＤにおいて、追加ファイルのファイル番号のビットを設定する（ステップＳ６７０１）。具体的には、出現マップについてはＯＦＦのビットを追加ファイルのファイル番号に対して設定し、削除マップＤについてはＯＮのビットを追加ファイルのファイル番号に対して設定する。
【０３３４】
つぎに、情報処理装置４００は、追加ファイル内の先頭文字を対象文字に設定し（ステップＳ６７０２）、対象文字について最長一致検索処理を実行する（ステップＳ６７０３）。最長一致検索処理（ステップＳ６７０３）は、図２４に示した処理と同一処理であるため説明を省略する。
【０３３５】
このあと、情報処理装置４００は、最長一致した基礎単語が基礎単語の構造体１６００にあるか否かを判断する（ステップＳ６７０４）。ない場合（ステップＳ６７０４：Ｎｏ）、図６８のステップＳ６８０１に移行する。一方、ある場合（ステップＳ６７０４：Ｙｅｓ）、情報処理装置４００は、最長一致した基礎単語の圧縮符号を２N分枝無節点ハフマン木Ｈから特定して、当該圧縮符号により、最長一致した基礎単語の出現マップを指定する（ステップＳ６７０５）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにする（ステップＳ６７０６）。このあと、図６８のステップＳ６８０１に移行する。
【０３３６】
図６８は、図６６に示した追加ファイルのマップ更新処理（ステップＳ６６０９）の詳細な処理手順を示すフローチャート（後半）である。まず、情報処理装置４００は、対象文字が特定単一文字であるか否かを判断する（ステップＳ６８０１）。具体的には、たとえば、情報処理装置４００は、対象文字が特定単一文字の構造体でヒットしたか否かを判断する。
【０３３７】
対象文字が特定単一文字である場合（ステップＳ６８０１：Ｙｅｓ）、情報処理装置４００は、ヒットした特定単一文字の圧縮符号を２N分枝無節点ハフマン木Ｈから特定して、当該圧縮符号により、ヒットした特定単一文字の出現マップを指定する（ステップＳ６８０２）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにする（ステップＳ６８０３）。このあと、ステップＳ６８０９に移行する。
【０３３８】
一方、対象文字が特定単一文字でない場合（ステップＳ６８０１：Ｎｏ）、情報処理装置４００は、対象文字を上位分割文字コードと下位分割文字コードとに分割する（ステップＳ６８０４）。そして、情報処理装置４００は、分割文字コードの構造体でヒットした上位分割文字コードの圧縮符号を２N分枝無節点ハフマン木Ｈから特定して、当該圧縮符号により、ヒットした上位分割文字コードの出現マップを指定する（ステップＳ６８０５）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにする（ステップＳ６８０６）。
【０３３９】
同様に、情報処理装置４００は、分割文字コードの構造体でヒットした下位分割文字コードの圧縮符号を２N分枝無節点ハフマン木Ｈから特定して、当該圧縮符号により、ヒットした下位分割文字コードの出現マップを指定する（ステップＳ６８０７）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにする（ステップＳ６８０８）。このあと、ステップＳ６８０９に移行する。
【０３４０】
また、ステップＳ６８０９において、情報処理装置４００は、２グラム文字列特定処理を実行する（ステップＳ６８０９）。２グラム文字列特定処理（ステップＳ６８０９）は、図３０に示した処理と同一処理であるため説明を省略する。
【０３４１】
このあと、情報処理装置４００は、２グラム文字列（たとえば「人形」）のうち先頭グラム文字（たとえば、「人」）の圧縮符号と末尾グラム文字（たとえば、「形」）の圧縮符号とを連結する（ステップＳ６８１０）。つぎに、情報処理装置４００は、連結圧縮符号により、２グラム文字列の出現マップを指定する（ステップＳ６８１１）。そして、情報処理装置４００は、指定された出現マップにおいて追加ファイルのファイル番号に対応するビットをＯＮにして（ステップＳ６８１２）、一連の処理を終了する。
【０３４２】
以上説明したように、本実施の形態によれば、追加されたファイル番号に、更新後の対象ファイルの圧縮ファイルへのポインタが付与される。したがって、更新後において追加ファイルのファイル番号を指定／検索された場合に、速やかに追加ファイルの圧縮ファイルを指定して伸長することができることになる。
【０３４３】
したがって、インデックス情報を用いた検索の対象となる複数のファイルのいずれかを更新する場合に、更新処理を開始してから、更新後の複数のファイルに対応したインデックス情報による検索を実行可能とするまでの処理時間を低減することができる。
【０３４４】
また、上書き保存により対象ファイルＦｉが削除されても、ファイル番号ｎ＋１についての出現マップおよび削除マップＤのビット追加と、削除マップＤのビット変更により、マップ更新が可能となる。すなわち、出現マップの圧縮領域を伸長して削除となったファイル番号ｉのビットを削除して、圧縮しなおすといった処理を実行する必要がなく、効率的なマップ更新をおこなうことができる。
【０３４５】
また、あらかじめ、圧縮符号マップＭの圧縮領域のビット列を、先頭位置から末尾位置にかけて対象ファイル群Ｆｓのファイル番号ｐの降順に配列しておく。これにより、ファイル番号；１〜ｎのビット列が圧縮されても、追加ファイルのファイル番号とそのビットとのずれがなく、対象ファイルＦｉの絞込みを正確に実行することができる。
【０３４６】
また、圧縮符号マップＭの圧縮領域を所定数の最大倍数（たとえば、所定ファイル数２５６の最大倍数）のビット列にすることで、対象ファイルが追加される都度、圧縮符号マップＭの圧縮をおこなう必要がない。これにより、情報処理装置４００の演算負荷を低減することができる。また、追加後のファイル総数が初期のファイル数の最大倍数に達した場合に、圧縮符号マップＭのファイル番号に対応する全ビットが圧縮領域となるため、圧縮符号マップＭがハフマン木ｈにより圧縮される。これにより、省メモリ化を図ることができる。このように、所定ファイル数（たとえば２５６個）単位で圧縮がおこなわれるため、演算負荷低減と省メモリ化を同時に実現することができる。
【０３４７】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等の情報処理装置４００で実行することにより実現することができる。本情報処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等の情報処理装置４００で読み取り可能な記録媒体に記録され、情報処理装置４００によって記録媒体から読み出されることによって実行される。また本情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０３４８】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０３４９】
（付記１）コンピュータに、
複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第１の情報を圧縮した圧縮情報を記憶手段に記憶し、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを特定可能な第３の情報を前記記憶手段に記憶し、
前記所定の文字情報についての検索要求を受けた場合に、前記複数のファイル及び前記更新されたファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報又は前記第２の情報によって前記所定の文字情報が含まれない旨を示されたファイル、及び、前記第３の情報によって特定される前記あるファイルを除外したファイルを抽出する、
ことを実行させることを特徴とする抽出方法。
【０３５０】
（付記２）前記第１の情報が、
前記複数のファイルそれぞれについて前記所定の文字情報を含むか否かを示すビット列であり、
前記第３の情報が、
前記複数のファイルそれぞれについて検索対象とするか否かを示すビット列であり、
前記コンピュータに、
前記検索要求を受けた場合に、前記第１の情報と前記第３の情報とを用いたビット演算により生成されたビット列に基づいて、前記複数のファイルから前記所定の文字情報が含まれない旨を示されたファイル及び前記あるファイルを除外する、
ことを実行させることを特徴とする付記１に記載の抽出方法。
【０３５１】
（付記３）コンピュータに、
複数のファイルのそれぞれについて所定の文字情報を含むかを示す第１の情報を圧縮して記憶手段に記憶し、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを検索対象から除く旨を示す第３の情報を前記記憶手段に記憶する、
ことを実行させることを特徴とする情報処理方法。
【０３５２】
（付記４）前記コンピュータに、
更新された前記あるファイルを示すポインタを、前記第２の情報と対応付けて前記記憶手段に記憶する、
ことを特徴とする付記３に記載の情報処理方法。
【０３５３】
（付記５）前記コンピュータに、
前記圧縮情報は、前記第１の情報を、前記複数のファイルにおける前記所定の文字情報の出現率に応じたハフマン木により圧縮して得られる、
ことを実行させることを特徴とする付記３又は付記４に記載の情報処理方法。
【０３５４】
（付記６）前記コンピュータに、
前記第１の情報のうち、前記複数のファイルの先頭ファイル番号からファイル数の最大倍数となるファイル番号までの領域を圧縮し、かつ、残余の領域を圧縮せずに、前記記憶手段に記憶する、
ことを実行させることを特徴とする付記３〜５のいずれか一つに記載の情報処理方法。
【０３５５】
（付記７）前記コンピュータに、
前記所定の文字情報の検索要求を受けた場合に、前記複数のファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報に前記所定の文字情報を含む旨を示され、且つ前記第３の情報に検索対象から除く旨を示されないファイルを抽出するとともに、前記第２の情報が、前記所定の文字情報を含む旨を示す場合に更新された前記あるファイルを抽出する、
ことを実行させることを特徴とする付記３〜６のいずれか一つに記載の情報処理方法。
【０３５６】
（付記８）コンピュータに、
複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第１の情報を圧縮した圧縮情報を記憶手段に記憶し、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを特定可能な第３の情報を前記記憶手段に記憶し、
前記所定の文字情報についての検索要求を受けた場合に、前記複数のファイル及び前記更新されたファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報又は前記第２の情報によって前記所定の文字情報が含まれない旨示されたファイル、及び、前記第３の情報によって特定される前記あるファイルを除外したファイルを抽出する、
ことを実行させることを特徴とする抽出プログラム。
【０３５７】
（付記９）コンピュータに、
複数のファイルのそれぞれについて所定の文字情報を含むかを示す第１の情報を圧縮して記憶手段に記憶し、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを検索対象から除く旨を示す第３の情報を前記記憶手段に記憶する、
処理を実行させることを特徴とする情報処理プログラム。
【０３５８】
（付記１０）複数のファイルのそれぞれについて所定の文字情報を含むか否かを示す第１の情報を圧縮した圧縮情報を記憶手段に記憶する記憶手段と、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶するとともに、前記あるファイルを特定可能な第３の情報を前記記憶手段に記憶させる更新手段と、
前記所定の文字情報についての検索要求を受けた場合に、前記複数のファイル及び前記更新されたファイルのうち、前記圧縮情報を伸張して得られる前記第１の情報又は前記第２の情報によって前記所定の文字情報が含まれない旨示されたファイル、及び、前記第３の情報によって特定される前記あるファイルを除外したファイルを抽出する抽出手段と、
を含むことを特徴とする抽出装置。
【０３５９】
（付記１１）複数のファイルのいずれが所定の文字情報を含むかを示す第１の情報を圧縮して記憶する記憶手段と、
前記複数のファイルに含まれるあるファイルが更新された場合に、更新された前記あるファイルが前記所定の文字情報を含むか否かを示す第２の情報を前記記憶手段に記憶させ、前記あるファイルを検索対象から除く旨を示す第３の情報を前記記憶手段に記憶させる更新手段と、
を備えることを特徴とする情報処理装置。
【符号の説明】
【０３６０】
４００  情報処理装置
４０１  集計部
４０２  第１生成部
４０３  第１圧縮部
４０４  作成部
４０５  第２生成部
４０６  第２圧縮部
５５０１  指定部
５５０２  第１伸長部
５５０３  入力部
５５０４  抽出部
５５０５  第２伸長部
５５０６  特定部
５５０７  更新部
【国際調査報告】
2012150637.tif 000071
2012150637.tif 000072