(57)【要約】  一側面においては、圧縮処理に用いられる圧縮辞書データのサイズを低減させることを目的とする。  一態様によれば、圧縮処理を実行するコンピュータに、所定長ビット列により格納位置が示される記憶領域内で、圧縮対象の文字情報に割り当てられる圧縮符号を含んだ複数種類の所定長ビット列に示される格納位置のそれぞれに、前記文字情報および前記圧縮符号の符号長を格納する処理を実行させることによって、圧縮辞書データの生成を行なう。【選択図】  図６
2014030180.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
所定長ビット列により格納位置が示される記憶領域内で、圧縮対象の文字情報に割り当てられる圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記文字情報を格納する、
処理を実行させることを特徴とする格納プログラム。
【請求項２】
前記圧縮符号は、前記所定長ビット列よりも符号長が短い、
ことを特徴とする請求項１に記載の格納プログラム。
【請求項３】
圧縮対象の他の文字情報に割り当てられる他の圧縮符号の符号長が、前記文字情報に割り当てられる前記圧縮符号の符号長と異なり、
前記圧縮符号の符号長が前記文字情報と関連付けて格納される、
ことを特徴とする請求項１または請求項２に記載の格納プログラム。
【請求項４】
前記複数種類の所定長ビット列は、前記圧縮符号を共通したビット位置に含み、前記所定長ビット列のうち前記圧縮符号を除く冗長ビット列が互いに異なる、
ことを特徴とする請求項１〜請求項３のいずれか１項に記載の格納プログラム。
【請求項５】
前記複数種類の所定長ビット列は、前記符号長に応じた数の種類が存在する、
ことを特徴とする請求項１〜請求項４のいずれか１項に記載の格納プログラム。
【請求項６】
前記コンピュータに、さらに、
圧縮対象のファイル内に前記文字情報が含まれると、前記ファイル内の前記文字情報を前記圧縮符号に変換する、
処理を実行させることを特徴とする請求項１〜５のいずれか１項に記載の格納プログラム。
【請求項７】
コンピュータに、
所定長ビット列により格納位置が示される記憶領域内で、圧縮対象の文字情報に割り当てられる圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記文字情報を格納する、
処理を実行させることを特徴とする格納方法。
【請求項８】
所定長ビット列により格納位置が示される記憶領域を含む記憶部と、
前記記憶領域内の格納位置であって、圧縮対象の文字情報に割り当てられる圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記文字情報を格納する制御部と、
を含むことを特徴とする格納装置。
【請求項９】
コンピュータに、
共通の圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記圧縮符号に対応する伸張文字情報および前記圧縮符号の符号長が格納された記憶領域に対し、前記圧縮符号を含む所定長ビット列を圧縮ファイル内の読み出し位置から読み出した場合に、読み出した前記所定長ビット列に示される格納位置から前記伸張文字情報および前記符号長の読み出しを行ない、
前記圧縮ファイルから読み出した前記所定長ビット列を前記伸張文字情報に変換し、
前記読み出し位置を前記符号長に基づいて調整する、
処理を実行させることを特徴とする伸張プログラム。
【請求項１０】
前記圧縮ファイルから読み出した前記所定長ビット列および前記複数種類の所定長ビット列のそれぞれは、前記圧縮符号を共通のビット位置に含み、前記圧縮符号を除く冗長ビット列が互いに異なる、
こと特徴とする請求項９に記載の伸張プログラム。
【請求項１１】
前記複数種類の所定長ビット列は、前記符号長に応じた数の種類が存在する、
ことを特徴とする請求項９または請求項１０に記載の伸張プログラム。
【請求項１２】
前記読出し位置が調整されることにより、前記所定長ビット列に後続する読出しにおいて、前記冗長ビット列が少なくとも一部読み出される、
ことを特徴とする請求項１０または請求項１１のいずれか１項に記載の伸張プログラム。
【請求項１３】
コンピュータに、
共通の圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記圧縮符号に対応する伸張文字情報および前記圧縮符号の符号長が格納された記憶領域に対し、前記圧縮符号を含む所定長ビット列を圧縮ファイル内の読み出し位置から読み出した場合に、読み出した前記所定長ビット列に示される格納位置から前記伸張文字情報および前記符号長の読み出しを行ない、
前記圧縮ファイルから読み出した前記所定長ビット列を前記伸張文字情報に変換し、
前記読み出し位置を前記符号長に基づいて調整する、
処理を実行させることを特徴とする伸張方法。
【請求項１４】
共通の圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記圧縮符号に対応する伸張文字情報および前記圧縮符号の符号長が格納された記憶領域を含む記憶部と、
前記圧縮符号を含む所定長ビット列を圧縮ファイル内の読み出し位置から読み出した場合に、読み出した前記所定長ビット列に示される格納位置から前記伸張文字情報および前記符号長の読み出し前記記憶部に対して行なう読出部と、
前記圧縮ファイルから読み出した前記所定長ビット列を前記伸張文字情報に変換する変換部と、
前記読み出し位置を前記符号長に基づいて調整する調整部と、
を含むことを特徴とする伸張装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの圧縮技術または伸張技術に関する。
【背景技術】
【０００２】
ハフマン符号化と呼ばれる圧縮伸張アルゴリズムにおいては、圧縮対象データに含まれる各記号（文字など）と、各記号に割り当てられる圧縮符号との関係が二分木の構造で示される。この二分木はハフマン木と呼ばれる。ハフマン木における葉部分（終端）のデータがそれぞれ各記号を示し、記号に対応する圧縮符号は、ハフマン木における根（始端）から葉までの探索経路を示す。ハフマン符号化を用いた伸張処理においては、圧縮データからの１ビットデータの読み出しと、読みだしたデータに応じたハフマン木内の分岐（木構造の根部分及び節部分）の判定とが繰り返されることで、ハフマン木の探索が行なわれる。ハフマン木の探索が行なわれることにより、圧縮データ内のビット列（すなわち圧縮符号）に対応する記号が特定される。【０００３】
ハフマン符号化の圧縮伸張アルゴリズムにおいては、参照先を示す情報（ポインタなど。以下ではポインタと呼ぶ。）や伸張文字コードを複数含むデータ構造体が、ハフマン木の各データ構造体に含まれる。ハフマン木探索における分岐判定は、次の参照先を示すポインタを、圧縮データから読み出されたビットに応じて選択することにより行なわれる。すなわち各分岐のデータ構造体に含まれる複数のポインタは、圧縮データから読みだされたビットに応じていずれが用いられるか定められている。圧縮データから読み出されたビットに対応するポインタにより、次に参照するデータ構造体が示される。圧縮符号の末尾のビットに応じた判定が行なわれるデータ構造体には、その圧縮符号に対応する記号を示す葉のデータ構造体が格納される。【０００４】
一方、所定長のビット列を圧縮データからまとめて読み出し、読みだしたビット列に基づいて伸張文字情報を特定する技術がある（例えば、特許文献１）。ハフマン符号化では、出現頻度に応じて圧縮符号の符号長が設定されるので、符号長が所定長未満の圧縮符号も存在する。そのため、伸張文字情報と圧縮符号と対応関係は、圧縮符号に余分なビットを付加した所定長のビット列に、伸張文字情報を含むデータ構造体へのポインタを関連付けて示される。同じ圧縮符号に異なるビットが付加された所定長のビット列同士は、それぞれ同じポインタと関連付けられる。このアルゴリズムによる伸張処理では、余分なビットも含めて圧縮データから所定長のビット列が読み出され、読みだされた所定長のビットに基づいてポインタが取得され、取得されたポインタに基づいて伸張文字情報が読み出される。さらに、圧縮データから次に所定長のビット列を読み出す読出し位置は、前回の読み出し時の読み出し位置から圧縮符号長のビット数進めた位置に設定される。これにより、出現頻度に応じた符号長で圧縮符号を割り当てる圧縮伸張アルゴリズムにおいて、圧縮データからまとめて読みだしたビットに基づく伸張処理が行なわれる。【０００５】
上述の技術においては、圧縮データからまとめて読みだしたビット列により伸張文字列の取得を行なうため、同じ圧縮符号に異なるビットが付加された所定のビット列同士のそれぞれについて、同じポインタが冗長に格納される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１０−９３４１４号公報
【特許文献２】国際公開第２００８／１４２８００号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述の技術によれば、伸張処理において読み出したビット列に基づくポインタの参照と、ポインタいに基づく伸張文字情報の参照との２回の参照処理が発生する。【０００８】
本発明の一側面においては、伸張処理量を低減させることを目的とする。
【課題を解決するための手段】
【０００９】
一態様によれば、格納プログラムは、コンピュータに、所定長ビット列により格納位置が示される記憶領域内で、圧縮対象の文字情報に割り当てられる圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記文字情報を格納する、処理を実行させる。【００１０】
一態様によれば、コンピュータに、所定長ビット列により格納位置が示される記憶領域内で、圧縮対象の文字情報に割り当てられる圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記文字情報を格納する、処理を実行させる格納方法が用いられる。【００１１】
一態様によれば、格納装置が、所定長ビット列により格納位置が示される記憶領域を含む記憶部と、前記記憶領域内の格納位置であって、圧縮対象の文字情報に割り当てられる圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記文字情報を格納する制御部と、を含む。【００１２】
一態様によれば、伸張プログラムは、コンピュータに、共通の圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記圧縮符号に対応する伸張文字情報および前記圧縮符号の符号長が格納された記憶領域に対し、前記圧縮符号を含む所定長ビット列を圧縮ファイル内の読み出し位置から読み出した場合に、読み出した前記所定長ビット列に示される格納位置から前記伸張文字情報および前記符号長の読み出しを行ない、前記圧縮ファイルから読み出した前記所定長ビット列を前記伸張文字情報に変換し、前記読み出し位置を前記符号長に基づいて調整する、処理を実行させる。【００１３】
一態様によれば、コンピュータに、共通の圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記圧縮符号に対応する伸張文字情報および前記圧縮符号の符号長が格納された記憶領域に対し、前記圧縮符号を含む所定長ビット列を圧縮ファイル内の読み出し位置から読み出した場合に、読み出した前記所定長ビット列に示される格納位置から前記伸張文字情報および前記符号長の読み出しを行ない、前記圧縮ファイルから読み出した前記所定長ビット列を前記伸張文字情報に変換し、前記読み出し位置を前記符号長に基づいて調整する、処理を実行させる伸張方法が用いられる。【００１４】
一態様によれば、伸張装置は、共通の圧縮符号を含む複数種類の所定長ビット列に示される格納位置のそれぞれに、前記圧縮符号に対応する伸張文字情報および前記圧縮符号の符号長が格納された記憶領域を含む記憶部と、前記圧縮符号を含む所定長ビット列を圧縮ファイル内の読み出し位置から読み出した場合に、読み出した前記所定長ビット列に示される格納位置から前記伸張文字情報および前記符号長の読み出し前記記憶部に対して行なう読出部と、前記圧縮ファイルから読み出した前記所定長ビット列を前記伸張文字情報に変換する変換部と、前記読み出し位置を前記符号長に基づいて調整する調整部と、を含む。
【発明の効果】
【００１５】
本発明の一側面によれば、伸張処理量を低減させることができる。
【図面の簡単な説明】
【００１６】
【図１】図１は、ハフマン木の例を示す。
【図２】図２は、データ構造体同士の参照関係を示す。
【図３】図３は、圧縮伸張辞書のデータ構造例を示す。
【図４】図４は、ハフマン木の変形例を示す。
【図５】図５は、圧縮伸張辞書のデータ構造例を示す。
【図６】図６は、圧縮伸張辞書のデータ構造の変形例を示す。
【図７】図７は、コンピュータ１の機能ブロックの構成例を示す。
【図８】図８は、コンピュータ１のハードウェア構成例を示す。
【図９】図９は、コンピュータ１のソフトウェア構成例を示す。
【図１０】図１０は、コンピュータ１を用いたシステムの構成例を示す。
【図１１】図１１は、圧縮部１０１による圧縮処理のフローチャート例を示す。
【図１２】図１２は、圧縮伸張辞書データ生成処理のフローチャート例を示す。
【図１３】図１３は、頻度集計テーブルＴ７の例を示す。
【図１４】図１４は、文字列リストＴ８の例を示す。
【図１５】図１５は、符号長分布テーブルＴ９の例を示す。
【図１６】図１６は、変換処理のフローチャート例を示す。
【図１７】図１７は、伸張部１０２による伸張処理のフローチャート例を示す。
【図１８】図１８は、変換処理のフローチャート例を示す。
【図１９】図１９は、検索部１０３による検索処理のフローチャート例を示す。
【図２０】図２０は、圧縮伸張辞書データＴ１０の例を示す。
【図２１】図２１は、照合処理のフローチャート例を示す。
【発明を実施するための形態】
【００１７】
まず、ハフマン符号化による圧縮伸張処理と、その変形例について説明する。
【００１８】
図１は、ハフマン木の例を示す。図１に示されるハフマン木は、文字情報（０、＞、＜ｂｒ＞、１、＜、ａ、ｓ、ｔ、ｘ）と圧縮符号との対応関係を示す。
【００１９】
文字情報（０、＞、＜ｂｒ＞、１、＜、ａ、ｓ、ｔ、ｘ）は、あくまでハフマン木の説明のために用いられる例示の文字情報である。圧縮対象の文字情報として、例えば、数字、アルファベット、ひらがな、カタカナ、漢字、アラビア文字、キリル文字、記号（全角または半角）などの文字コードや、複数の文字を組み合わせた文字列（予約語）、さらには、固定長のビット列などが用いられる。図１に示すリストＴ１は、圧縮対象の文字情報がリスト化され、圧縮対象データ内での出現頻度順にソートされたものである。さらに、圧縮対象の文字情報のうち、文字コードとビット長が同一でない文字情報（図１の例においては、予約語「＜ｂｒ＞」など）は、リストＴ１以外のリストをさらに用いて管理される。リストＴ１の各文字情報は、ハフマン木の葉のデータ構造体ＨＬ（ＨＬ１〜ＨＬ９）にそれぞれ格納される。
【００２０】
リストＴ１の各文字情報と圧縮符号との対応関係は、ハフマン木の根のデータ構造体ＨＲから葉のデータ構造体ＨＬ（ＨＬ１〜ＨＬ９）への探索経路により示される。根ＨＲ、節のデータ構造体ＨＮ（ＨＮ１１、ＨＮ１２、ＨＮ２１−ＨＮ２３、ＨＮ３１、ＨＮ３２）のそれぞれでは、ビットが「０」か「１」かに応じた分岐が存在し、探索経路における分岐で用いられたビットにより圧縮符号が示される。また、ハフマン符号化においては、出現頻度の高い文字情報ほど符号長が短い圧縮符号が割り当てられ、出現頻度の低い文字情報ほど符号長が長い圧縮符号が割り当てられる。例えば、文字情報「ｔ」の圧縮符号は、文字情報「ｔ」を格納する葉のデータ構造体ＨＬ８への探索経路により示される。根ＨＲからデータ構造体ＨＬ８への探索は、ビット「１」で示される根ＨＲから節ＨＮ１２への経路と、ビット「１」で示される節ＨＮ１２から節ＨＮ２３への経路と、ビット「１」で示される節ＨＮ２３から節ＨＮ３２への経路と、ビット「０」で示される節ＨＮ３２から葉ＨＬ８への経路と、を順に辿ることで行なわれる。図１においては、根ＨＲから葉のデータ構造体ＨＬ８までの探索経路に含まれる経路を示すビットを順に並べた「１１１０」が文字情報「ｔ」に割り当てられた圧縮符号となる。
【００２１】
図２は、データ構造体同士の参照関係を示す。図１を用いて説明した探索は、図２に示すポインタの参照関係を用いて行なわれる。根のデータ構造体ＨＲおよび節のデータ構造体ＨＮの凡例をＨＸ１〜ＨＸ３に示す。凡例ＨＸ１には、上位のデータ構造体へのポインタ、ポインタを格納していることの１つめの識別子（図中では「０」）、下位のデータ構造体（１つめ）へのポインタ、さらにポインタを格納していることの２つめの識別子（図中では「０」）及び下位のデータ構造体（２つめ）へのポインタが含まれる。凡例ＨＸ２には、上位のデータ構造体へのポインタ、文字コードを格納していることの識別子（図中では「１」）、文字コード、さらにポインタを格納していることの識別子（図中では「０」）及び下位のデータ構造体へのポインタが含まれる。また、凡例ＨＸ３には、上位のデータ構造体へのポインタ、文字コード（１つめ）を格納していることの識別子（図中では「１」）、文字コード（１つめ）、さらに文字コード（２つめ）を格納していることの識別子（図中では「１」）及び文字コード（２つめ）が含まれる。根のデータ構造体ＨＲおよび節のデータ構造体ＨＮのそれぞれは、凡例ＨＸ１〜ＨＸ３のいずれかのデータ構造となる。また、葉のデータ構造体部分には、文字コードでなく、文字列（予約語）の文字コードを格納した格納位置を示すポインタが格納される場合がある。このポインタは、後述のリストＴ８における対応の文字列の格納位置を示す。データ構造体から読み出される識別子に基づいて、データ構造体から読み出される情報が、ポインタであるのか、文字コードであるのかが判断される。例えば、識別子（１つめ）へのポインタを読み出す際のオフセットや、識別子（２つめ）へのポインタをよみだす際のオフセットは予め定められている。例えば、データ構造体内部に格納されるポインタ及び識別子、または文字コードおよび識別子の格納領域がそれぞれ３２ｂｉｔであり、読み出したビットがｘであるとすると、３２×（１＋ｘ）で識別子読出しのオフセットが算出される。
【００２２】
伸張処理においては、圧縮符号に基づいて、圧縮符号に対応する文字情報が読み出される。例えば、圧縮データから読み出したビットが「０」の場合に下位のデータ構造体（１つめ）の参照が行なわれ、ビットが「１」の場合に下位のデータ構造体（２つめ）の参照が行なわれる。すると、圧縮データから読み出したビットに応じたポインタを用いて、次に参照するデータ構造体が特定される。例えば、圧縮データから「１１１０・・・」の順でデータが読み出されるとする。すると、根のデータ構造体ＨＲにおいて下位のデータ構造体（２つめ）へのポインタは、節のデータ構造体ＨＮ１２へのポインタであり、ポインタに基づいて節のデータ構造体ＨＮ１２が参照される。さらに、節のデータ構造体ＨＮ１２において、下位のデータ構造体（２つめ）へのポインタは、節のデータ構造体ＨＮ２３へのポインタであり、ポインタに基づいて節のデータ構造体ＨＮ２３が参照される。節のデータ構造体ＨＮ２３において、下位のデータ構造体（２つめ）へのポインタは、節のデータ構造体ＨＮ３２へのポインタであり、ポインタに基づいて節のデータ構造体ＨＮ３２が参照される。節のデータ構造体ＨＮ３２には、文字コードが格納されており、４番目の圧縮符号が「１」であるため、圧縮符号「１１１０」に対応する文字情報「ｔ」を格納する葉のデータ構造体ＨＬ８が参照される。葉のデータ構造体においては、データ構造体に含まれる情報が文字コードであることを示す識別子（図中では「１」）が付されるため、識別子に基づいて、ポインタでなく文字コードを取得したことが判断される。
【００２３】
逆に、圧縮処理においては、文字情報に基づいて圧縮符号が読み出される。文字情報を格納する葉のデータ構造体から、上位のデータ構造体へのポインタに基づいてデータ構造体を参照することによって圧縮符号が得られる。ただし、圧縮処理においては、例えば、ハフマン木を辿らずに、文字情報と圧縮符号とを対応付けたテーブルを生成し、生成したテーブルに基づいて圧縮符号を取得する方法を用いてもよい。
【００２４】
図３は、圧縮伸張辞書のデータ構造Ｔ３の例を示す。図３に例示する圧縮伸張辞書には、ヘッダ領域のデータ構造体ＨＨ、根のデータ構造体ＨＲ及び節のデータ構造体ＨＮが含まれる。ヘッダ領域のデータ構造体ＨＨは、根のデータ構造体ＨＲ及び節のデータ構造体ＨＮに関する情報を含む。データ構造体ＨＨは、根のデータ構造体ＨＲのメモリ空間上での先頭アドレスと、根のデータ構造体ＨＲ及び節のデータ構造体ＨＮのデータサイズと、を含む。
【００２５】
図３の例においては、図２に示す根のデータ構造体ＨＲ及び葉のデータ構造体ＨＮ（ＨＮ１１，ＨＮ１２，ＨＮ２１−２３，ＨＮ３１およびＨＮ３２）が連続して格納される。図３に例示するように各データ構造体が連続する場合には、根のデータ構造体ＨＲ及び節のデータ構造体ＨＮに含まれるポインタは、ヘッダ領域ＨＨに格納される先頭アドレスからのオフセットでもよい。例えば、根のデータ構造体ＨＲおよび節のデータ構造体ＨＮのそれぞれのデータサイズが３２×３ｂｉｔであるとすると、節のデータ構造体ＨＮ２１へのポインタは３２×３×３などで示される。すると、根の構造体ＨＲの先頭アドレスからオフセットが３２×３×３の位置に、節のデータ構造体ＨＮ２１が存在すると判断できる。
【００２６】
図４は、ハフマン木の変形例を示す。図４においても、図１と同様に、０、＞、＜ｂｒ＞、１、＜、ａ、ｓ、ｔ、ｘを圧縮対象の文字情報の例としている。また、図４に示す変形させたハフマン木においても、各文字情報には図１に示すハフマン木と同じ圧縮符号が割り当てられている。図４においては、葉のデータ構造体ＫＬ（ＫＬ１〜ＫＬ９）のそれぞれには、文字情報と、文字情報に割り当てられる圧縮符号の符号長とが格納される。葉のデータ構造体ＫＬの内容は、図４のテーブルＴ４に示す通りである。
【００２７】
図４に示す変形例においては、根のデータ構造体ＫＲにおける分岐判定は、４ビットのビット列に基づいて行なわれる。図４の例においては、４ビットのビット列で分岐判定されるが、当然ながら、圧縮対象の文字情報種類の数などに応じて他のビット数で行なうように変形可能である。例えば、ビット列「０１００」を圧縮データから読み出した場合には、葉のデータ構造体ＫＬ２が読み出される。また、ビット列「０１０１」が圧縮データから読み出された場合にも葉のデータ構造体ＫＬ２が読み出される。すなわち、根のデータ構造体ＫＲにおける分岐判定では、互いに異なるビット列「０１００」及び「０１０１」のいずれが読み出された場合にも、同じ葉のデータ構造体ＫＬ２を示すポインタが読み出され、そのポインタに基づいて葉のデータ構造体の読み出しが行なわれる。
【００２８】
また、圧縮データから４ビット読み出したにも関わらず、葉のデータ構造体ＫＬ２に格納された文字情報「＞」に対応するする圧縮符号は、「０１０」である。そのため、圧縮データからのビット読み出し位置は、実際に読み出した４ビットではなく、葉のデータ構造体ＫＬ２に格納された符号長に応じて３ビット進められる。これにより、実際に割り当てられた圧縮符号よりも余分に圧縮データから読み出した分のビットが調整される。根のデータ構造体ＫＲにおいても、図２に示すハフマン木と同様に、読み出したビット列に応じて、ポインタを読み出すオフセットが定められている。
【００２９】
図５は、図４に示すハフマン木の変形例における圧縮伸張辞書データＴ５のデータ構造の例を示す。圧縮伸張辞書データＴ５は、ヘッダ領域ＨＨ（ヘッダのデータ構造体ＫＨ１及びヘッダのデータ構造体ＫＨ２を含む）、根のデータ構造体ＫＲ、葉のデータ構造体ＫＬ（ＫＬ１〜ＫＬ９）を含む。ヘッダのデータ構造体ＫＨ１は、メモリ空間上での根のデータ構造体ＫＲの先頭アドレスと、根のデータ構造体ＫＲのデータサイズとを含む。ヘッダのデータ構造体ＫＨ２は、メモリ空間上での葉のデータ構造体ＫＬの先頭アドレスと、葉のデータ構造体ＫＬのデータサイズとを含む。
【００３０】
圧縮伸張辞書データＴ５の根のデータ構造体ＫＲにおいては、４ビットのビット列「００００」〜「１１１１」のそれぞれに基づいて定められるオフセットの位置に、葉のデータ構造体へのポインタが格納される。葉のデータ構造体へのポインタのサイズが３２ビットであるとすると、例えば、データ構造Ｔ５の始点から、オフセットは４ビットのビット列×３２の位置で示される。圧縮符号長が４ビットよりも短い文字情報を格納する葉のデータ構造体へのポインタは、複数の位置に格納される。例えば、文字情報「＞」には圧縮符号「０１０」が割り当てられており、圧縮符号長は４ビットに対して１ビット短い。この場合は、文字情報「＞」を格納する葉のデータ構造体ＫＬ２へのポインタは、圧縮符号「０１０」に冗長に１ビットを付加して得られる４ビットのビット列「０１００」及び「０１０１」に示される位置に格納される。このように、冗長に葉のデータ構造体へのポインタを格納しておくことで、まとめて読み出したビット列に基づく文字情報の読み出しが行なわれる。
【００３１】
圧縮伸張辞書データＴ５の葉のデータ構造体ＫＬは、圧縮対象のそれぞれの文字コードと、文字コードに割り当てられた圧縮符号の符号長とを含む。また、根のデータ構造体ＫＲのそれぞれは、ポインタを格納していることを示す識別子を含み、葉のデータ構造体ＫＬのそれぞれは、文字コードを格納していることを示す識別子を含む。
【００３２】
図４及び５の変形例においては、文字情報と、文字情報に割り当てられた圧縮符号との組に対して、同一のポインタを複数格納することにより、まとめて読み出したビット列に基づいてポインタを特定することを可能としている。
【００３３】
図４及び５に示されるハフマン木の変形例においては、節のデータ構造体へのポインタが含まれない。そのため、節のデータ構造体へのポインタと、葉のデータ構造体へのポインタとの双方が含まれるデータ構造体が存在しない。そのため、例えば、葉のデータ構造体へのポインタの代わりに、文字情報及び圧縮符号長などの葉のデータ構造体に含まれる情報を格納しても、文字情報とポインタがデータ構造体内部に混在する事態が生じない。すなわち、各データ構造体の中身を確認しなくても、圧縮伸張辞書データから圧縮対象の文字情報群を取得することができる。また、文字情報と併せて圧縮符号長も格納されるので、圧縮符号長に基づけば、圧縮伸張辞書内において何個連続で同じ文字情報が格納されているかも算出可能である。そのため、圧縮伸張辞書内から文字情報を読み出す場合に、重複する文字情報については読み飛ばすことができる。
【００３４】
そこで、本実施形態においては、例えば、図６に例示する圧縮伸張辞書データを用いる。図６に例示される圧縮伸張辞書データＴ６は、ヘッダ領域Ｈと葉のデータ構造体Ｌとを含む。ヘッダ領域Ｈには、メモリ空間上での葉のデータ構造体Ｌの先頭アドレスと、葉のデータ構造体Ｌのデータサイズとが含まれる。葉のデータ構造体Ｌにおいては、４ビットのビット列「００００」〜「１１１１」のそれぞれに基づいて定められるオフセットの位置に、それぞれのビット列に対応する文字情報および圧縮符号長が格納される。葉のデータ構造体Ｌのサイズが３２ビットであるとすると、各葉のデータ構造体の読み出し位置は、例えば、葉のデータ構造体Ｌの先頭アドレスからのオフセットは、４ビットのビット列×３２の位置で示される。圧縮符号長が４ビットよりも短い圧縮符号を割り当てられた文字情報を格納する葉のデータ構造体Ｌは、複数の位置に格納される。例えば、文字情報「＞」には圧縮符号「０１０」が割り当てられており、圧縮符号長は４ビットに対して１ビット短い。この場合は、文字情報「＞」を格納する葉のデータ構造体は、圧縮伸張辞書データＴ６において、圧縮符号「０１０」に冗長に１ビットを付加して得られる４ビットのビット列「０１００」及び「０１０１」に示される位置に格納される。このように、冗長に葉のデータ構造体Ｌを格納しておくことで、まとめて読み出したビット列に基づく文字情報の読み出しが行なわれる。
【００３５】
例えば、圧縮伸張辞書データＴ６を用いた伸張処理では、圧縮符号を含むビット列が読み出されると、ヘッダ領域Ｈ内の葉のデータ構造体Ｌの先頭アドレスの読み出しが行なわれ、読み出した先頭アドレスからのオフセットの算出が、読み出したビット列に基づいて行なわれる。さらに、算出されたオフセットに基づいて文字情報及び符号長の読み出しが行なわれることで伸張が行なわれる。一方の圧縮伸張辞書データＴ５を用いた伸張処理では、圧縮符号を含むビット列が読み出されると、ヘッダのデータ構造体ＫＨ１内の根のデータ構造体ＫＲの先頭アドレスの読み出しが行なわれ、読み出した先頭アドレスからのオフセットの算出が、読み出したビット列に基づいて行なわれる。算出したオフセットに基づいてポインタを読み出すと、さらに、ヘッダのデータ構造体ＫＨ２から葉のデータ構造体ＫＬの先頭アドレスの読み出しが行なわれる。読みだした先頭アドレスからオフセットの算出を、読み出したポインタに基づいて行ない、その結果、算出されたオフセットに基づいて文字情報の読み出し及び符号長が行なわれる。上述のように、圧縮伸張データＴ５を用いた伸張処理では、圧縮伸張データＴ６を用いた伸張処理よりもヘッダ領域にアクセスする回数が多くなってしまう。圧縮伸張辞書データＴ６を用いた伸張処理では、圧縮伸張辞書データＴ５を用いた伸張処理おいて行なわれるヘッダ領域ＫＨ１へのアクセスおよび根のデータ構造体ＫＲへのアクセス分のアクセス処理が行なわれない。そのため、圧縮伸張辞書データＴ６を用いた伸張処理は、圧縮伸張辞書データＴ５を用いた伸張処理よりも伸張速度が速くなることが見込まれる。
【００３６】
さらに、例えば、圧縮伸張辞書データＴ５における各節のデータ構造体及び各葉のデータ構造体も、圧縮伸張辞書データＴ６における各葉のデータ構造体も、データサイズが共通であるとする。すると、圧縮伸張辞書データＴ５においてポインタが格納される節のデータ構造体ＫＮに、葉のデータ構造体Ｌが収まることとなる。そのため、圧縮伸張辞書データＴ６は、圧縮伸張辞書データＴ５よりも、圧縮対象の文字情報の種類の数×各データ構造体のデータサイズの分だけデータサイズが小さくなる。
【００３７】
本実施形態の他の側面によれば、ポインタの参照処理が抑制されるので伸張処理速度を向上させることができる。
【００３８】
続いて、本実施形態の詳細について説明する。
【００３９】
図７は、コンピュータ１の機能ブロックの構成例を示す。コンピュータ１は、制御部１０及び記憶部１１を含む。制御部１０は、コンピュータ１全体の制御を行なうとともに、記憶部１１に記憶されたデータに対し、圧縮処理、伸張処理及び検索処理を実行する。記憶部１１は、制御部１０により行なわれる圧縮処理、伸張処理及び検索処理の処理対象となるデータおよび処理に使用されるデータを記憶する。また、記憶部１１は、制御部１０が処理を実行する際にワークエリアとして用いられる。また、例えば、記憶部１１がコンピュータ１の外部に存在し、コンピュータ１との通信により制御部１０が記憶部１１に記憶されたデータにアクセスすることとしてもよい。
【００４０】
制御部１０は、圧縮部１０１、伸張部１０２および検索部１０３を含む。圧縮部１０１は記憶部１１に記憶された圧縮対象のデータの圧縮処理を行ない、伸張部１０２は記憶部１１に記憶された伸張対象のデータの伸張処理を行ない、検索部１０３は検索要求に応じて記憶部１１に記憶された検索対象のデータに対して検索処理を行なう。
【００４１】
圧縮部１０１は、生成部１０１１及び変換部１０１２を含む。生成部１０１１は、圧縮対象のデータと、圧縮対象の文字情報のリストとに基づいて、図６に例示する圧縮伸張辞書データを生成する。変換部１０１２は、生成部１０１１が生成した圧縮伸張辞書データに基づいて、圧縮対象のデータを圧縮符号に変換する。生成部１０１１及び変換部１０１２の処理の詳細については後述する。
【００４２】
伸張部１０２は、変換部１０２１及び調整部１０２２を含む。変換部１０２１は、伸張対象のデータに対応する圧縮伸張辞書データに基づいて、伸張対象のデータを文字情報に変換する。調整部１０２２は、変換部１０２１が伸張対象のデータを読み出す際の読み出し位置を、圧縮伸張辞書データに基づいて調整する。変換部１０２１及び調整部１０２２の処理の詳細については後述する。
【００４３】
検索部１０３は、探索部１０３１、調整部１０３２及び照合部１０３３を含む。探索部１０３１は、検索要求に含まれる検索条件に基づいて照合対象を抽出する抽出条件を設定し、圧縮データ内に抽出条件を満たすデータが含まれているか探索し、抽出条件を満たす圧縮データを伸張する。調整部１０３２は、探索部１０３１による圧縮データの読み出し位置を圧縮伸張辞書データに基づいて調整する。照合部１０３３は、探索部１０３１の伸張により得られた文字情報と検索条件との照合を行なう。探索部１０３１、調整部１０３２及び照合部１０３３の処理の詳細については後述する。
【００４４】
図８は、コンピュータ１のハードウェア構成例を示す。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【００４５】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【００４６】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう。ＳＡＮインターフェース３１１は、コンピュータ１に接続されたストレージエリアネットワークを介して記憶装置と通信の制御を行なう。
【００４７】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であってもよい。
【００４８】
プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って制御部１０の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１１の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（圧縮対象のデータファイルや圧縮ファイル）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図９を用いて説明する。
【００４９】
図９は、コンピュータ１で動作するプログラムの構成例を示す。コンピュータ１において、図８に示すハードウェア群２１の制御を行なうＯＳ（オペレーションシステム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア２１の制御・管理が行なわれることにより、アプリケーションプログラム２４やミドルウェア２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェア２３またはアプリケーションプログラム２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【００５０】
プロセッサ３０１が、ミドルウェア２３またはアプリケーションプログラム２４に含まれる圧縮機能に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア２１を制御して）圧縮部１０１の機能が実現される。また、プロセッサ３０１が、ミドルウェア２３またはアプリケーションプログラム２４に含まれる伸張機能に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア２１を制御して）伸張部１０２の機能が実現される。また、プロセッサ３０１が、ミドルウェア２３またはアプリケーションプログラム２４に含まれる検索機能に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア２１を制御して）検索部１０３の機能が実現される。圧縮機能、伸張機能及び検索機能は、それぞれアプリケーションプログラム２４自体に定義されてもよいし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の機能であってもよい。
【００５１】
図１０は、コンピュータ１を用いたシステムの構成例を示す。図１０のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。例えば、図１０のシステムにおいて、コンピュータ１ｂが本実施形態の圧縮処理により圧縮したデータファイルをコンピュータ１ａが取得し、コンピュータ１ａがコンピュータ１ｂから取得した圧縮ファイルを本実施形態の伸張処理により伸張する。逆に、例えば、図１０のシステムにおいて、コンピュータ１ａが本実施形態の圧縮処理により圧縮したデータファイルをコンピュータ１ｂが取得し、コンピュータ１ｂがコンピュータ１ａから取得した圧縮ファイルを本実施形態の伸張処理により伸張する。また、例えば、図１０のシステムにおいて、コンピュータ１ｂが本実施形態の圧縮処理により圧縮したデータファイルをコンピュータ１ａが取得し、コンピュータ１ａがコンピュータ１ｂから取得した圧縮ファイルを本実施形態の検索処理により検索する。逆に、例えば、図１０のシステムにおいて、コンピュータ１ａが本実施形態の圧縮処理により圧縮したデータファイルをコンピュータ１ｂが取得し、コンピュータ１ｂがコンピュータ１ａから取得した圧縮ファイルを本実施形態の検索処理により検索する。また、圧縮処理、伸張処理及び検索処理の少なくとも２つがコンピュータ１ａ内で行なわれることとしてもよい。さらに、圧縮処理及び検索処理がコンピュータ１ａもしくは１ｂのいずれか一方で行なわれ、他方のコンピュータから検索要求が送信されることとしてもよい。
【００５２】
次に、コンピュータ１で行なわれる圧縮処理手順を説明する。
【００５３】
図１１は、圧縮部１０１による圧縮処理のフローチャート例を示す。アプリケーションプログラム２４の機能もしくはユーザの入力指示に応じて、圧縮処理機能が呼び出される（Ｓ１００）と、圧縮部１０１は、圧縮処理機能の呼び出しにおいて指定される圧縮対象のデータファイルを記憶部１１から読み出す（Ｓ１０１）。Ｓ１０１で読みだした圧縮対象のデータファイルに基づいて、生成部１０１１は、図６に示す圧縮伸張辞書データＴ６を生成する（Ｓ１０２）。生成部１０１１による圧縮伸張辞書データＴ６の生成については、図１２を用いて後述する。続いて、変換部１０１２は、生成部１０１１により生成された圧縮伸張辞書データＴ６に基づいて、圧縮対象のデータファイルを圧縮符号に変換する（Ｓ１０３）。変換部１０１２による圧縮符号への変換については、図１６を用いて後述する。変換部１０１２による圧縮符号への変換処理が圧縮対象データに対して行なわれると、圧縮部１０１は、変換により得られたデータをファイル化して圧縮ファイルを生成する（Ｓ１０４）。圧縮部１０１により圧縮ファイルが得られると、Ｓ１００で呼び出された圧縮処理は終了となる（Ｓ１０５）。
【００５４】
図１２は、圧縮伸張辞書データＴ６の生成処理のフローチャート例を示す。図１１におけるＳ１０２の処理が行なわれる（Ｓ２００）と、生成部１０１１は、Ｓ１０１で読み出された圧縮対象のデータファイルに含まれる文字情報の出現頻度の集計を行なう（Ｓ２０１）。Ｓ２０１の処理において、圧縮伸張辞書データを格納する記憶領域を確保し、ヘッダのデータ構造体Ｈを生成する。生成部１０１１は、圧縮対象のデータファイルから文字情報を順次読み出し、読出し結果を図１３に示す頻度集計テーブルＴ７に反映させる。
【００５５】
図１３は、頻度集計テーブルＴ７の例を示す。図１３に示す例においては、頻度集計テーブルＴ７に含まれる各レコードにおいて文字情報と、文字情報の出現回数を示す計数値とが対応付けて格納される。頻度集計テーブルＴ７に格納される文字情報は、例えば、圧縮対象のデータファイルに用いられる文字コード系における数字、アルファベット、ひらがな、カタカナ、漢字、アラビア文字、キリル文字などの少なくとも一部の文字である。漢字については、例えば常用漢字の文字コードのみが頻度集計テーブルＴ７に格納されてもよい。また、文字情報は、例えば、文字コード以外の固定長データも含む。例えば、ＬＺ７７に基づいて得られる圧縮符号列は、スライド窓内のアドレスと一致したデータの長さ情報とが圧縮符号列として出力されるため固定長となる。ＺＩＰなどの圧縮アルゴリズムでは、ＬＺ７７により得られた固定長の圧縮符号列に対し、ハフマン符号化が用いられる。さらに、文字情報は、文字列を含んでもよい。例えば、文字情報は、図１４に例示される文字列リストＴ８に含まれる文字列も含む。本実施形態においては、簡易な説明とする例として、頻度集計テーブルＴ７に格納される文字情報は、図１のリストＴ１に示す文字情報とする。
【００５６】
Ｓ２０１の処理において、生成部１０１１は、圧縮対象のデータファイルから順次データを読み出す。この際、生成部１０１１は、例えば、圧縮対象のデータファイルに用いられる文字コード系で１字当たりのビット長のデータを読み出す。生成部１０１１は、例えば、読み出したデータと合致する文字コードを頻度集計テーブルＴ７から検出し、検出されたレコードに格納される計数値をインクリメントする。また、頻度集計テーブルＴ７に、文字列リストＴ８に格納される文字列も含まれる場合には、生成部１０１１は、圧縮対象のデータファイルからのデータの読み出しにおいて、まず、文字列リストＴ８に格納される文字列の読み出しであるかを判定する。その判定において文字列リストＴ８に格納される文字列の読み出しであると判定した場合には、生成部１０１１は、その文字列を読み出し、頻度集計テーブルＴ７のうち、読み出した文字列を含むレコード内の計数値をインクリメントする。判定において文字列リストＴ８に格納される文字列の読みだしで無いと判定した場合には、生成部１０１１は、１字当たりのビット長のデータを読み出し、読出し結果を頻度集計テーブルＴ７の計数値に反映させる。
【００５７】
Ｓ２０１の頻度集計処理が終了すると、生成部１０１１は、頻度集計テーブルＴ７に反映された集計結果に基づいて、頻度集計テーブルＴ７を頻度順にソートする（Ｓ２０２）。さらに、生成部１０１１は、圧縮対象のデータファイル内の文字情報の出現頻度分布に基づいて、圧縮符号長の分布を算出する（Ｓ２０３）。算出された圧縮符号長は、図１５に示す符号長分布テーブルＴ９に格納される。
【００５８】
図１５は、符号長分布テーブルＴ９の例を示す。図１５の例においては、符号長１〜４のそれぞれに文字情報の数が対応付けられている。図１５の例では、符号長が１の文字情報の数は０、符号長が２の文字情報の数は１、符号長が３の文字情報の数は４、符号長が４の文字情報の数は４である。
【００５９】
符号長の分布は、圧縮対象の文字情報の頻度分布に応じて算出される。例えば、圧縮対象の文字情報それぞれについて、頻度に基づいて符号長が定められることとしてもよい。例えば、圧縮対象のファイルで出現する頻度が、圧縮ファイル全体に対して１／（２のｎ乗）の頻度であれば、ｎビットの圧縮符号を割り当てるなどとしてもよい。
【００６０】
Ｓ２０３の処理が行なわれると、生成部１０１１は、圧縮対象の文字情報のそれぞれに対して圧縮符号の割り当てを行なう（Ｓ２０４〜Ｓ２１０）。圧縮対象の文字情報の種類がｋ種類であるとした場合に、１番目からｋ番目までの圧縮対象の文字情報に、例えばソートされた順番で圧縮符号の割り当てが繰り返し行なわれる。また、圧縮符号の割り当てが何回目かをｉで示すとする。ｉの初期値は１である。
【００６１】
まず、ｉがｋ未満であるか否かを判定する（Ｓ２０４）。ｉがｋに達した場合（Ｓ２０４：ＮＯ）には、圧縮符号の割り当てと、圧縮伸張辞書のデータ構造体の生成とが、圧縮対象の各文字情報について完了するので、圧縮伸張辞書データの生成処理を終了する（Ｓ２１１）。
【００６２】
ｉがｋ未満である場合（Ｓ２０４：ＹＥＳ）には、生成部１０１１は、ソートされた頻度集計テーブルから、圧縮対象の文字情報のうちｉ番目の文字情報を読み出す（Ｓ２０５）。さらに、生成部１０１１は、符号長分布テーブルＴ９から、読みだしたｉ番目の文字情報に対応する符号長を読み出し、読みだした符号長に応じてコピー数Ｃを算出する（Ｓ２０６）。コピー数Ｃは、読みだした文字情報を複製する数を示す。コピー数Ｃは、例えば、２を底とし、（所定長−読みだした符号長）をべき数とするべき乗で表される。
【００６３】
また、生成部１０１１は、Ｓ２０５で読みだした文字情報についての葉の構造体を生成する（Ｓ２０７）。Ｓ２０７で生成する葉の構造体は、ｉ番目の文字情報の文字コードおよび符号長を含む。また、例えば、葉の構造体は、照合フラグを含む。Ｓ２０６とＳ２０７とで順序が入れ替えられてもよい。
【００６４】
続いて、生成部１０１１は、Ｓ２０７で生成された葉の構造体を、Ｓ２０６で算出されたコピー数Ｃだけ複製し、複製して得られた情報を記憶部１１の記憶領域に格納する（Ｓ２０８）。次に、生成部１０１１は、コピー数Ｃに応じて情報の書き込み位置を更新する（Ｓ２０９）。例えば、各葉の構造体が３２ビットであるとすると、書込み位置を３２×コピー数Ｃ進める。さらに、生成部１０１１は、ｉの値をインクリメントして（Ｓ２１０）、Ｓ２０４の処理を再度行なう。  
【００６５】
図１６は、変換処理のフローチャート例を示す。図１１に示すＳ１０３の処理が行なわれる（Ｓ３００）と、まず、変換部１０１２は、圧縮対象のデータファイル内に文字情報が残されているか否かを判定する（Ｓ３０１）。続いて、変換部１０１２は、圧縮対象のデータファイルから文字情報を読み出す（Ｓ３０２）。変換部１０１２は、生成部が生成した圧縮伸張辞書データＴ６を参照し、読み出した文字情報と一致する文字情報を探索する（Ｓ３０３）。変換部１０１２は、読みだした文字情報と一致する文字情報を格納する葉の構造体の格納位置に基づいて圧縮符号を算出し、算出された圧縮符号を記憶部１１の記憶領域に書き込む（Ｓ３０４）。圧縮符号は、葉の構造体の格納位置（葉のデータ構造体Ｌの先頭アドレスからのオフセット）を各葉の構造体のデータサイズで除算することにより得られる。Ｓ３０４の処理を行なうと、変換部１０１２は再度Ｓ３０１の処理を行なう。Ｓ３０１〜Ｓ３０４を繰り返し行ない、圧縮対象のデータファイルに文字情報が含まれなくなったら、変換部１０１２は、変換処理を終了する（Ｓ３０５）。
【００６６】
図１１のＳ１０３の処理が終了すると、圧縮部１０１は、生成部１０１１によって生成された圧縮伸張辞書データＴ６と、変換部１０１２によって記憶部１１に書き込まれた圧縮符号列と、を含む圧縮ファイルを生成する（Ｓ１０４）。Ｓ１０４の処理が行なわれると、ファイルの圧縮処理を終了する（Ｓ１０５）。
【００６７】
続いて、コンピュータ１で行なわれる伸張処理手順を説明する。
【００６８】
図１７は、伸張部１０２による伸張処理のフローチャート例を示す。アプリケーションプログラム２４の機能もしくはユーザの入力指示に応じて、伸張処理機能が呼び出される（Ｓ４００）と、伸張部１０２は、伸張処理機能の呼び出しにおいて指定される圧縮ファイルを記憶部１１から読み出す（Ｓ４０１）。伸張部１０２は、Ｓ４０１で読みだした圧縮ファイルから記憶部１１に圧縮伸張データを展開する（Ｓ４０２）。図１１の説明において例示された圧縮データであれば、図６に示す圧縮伸張データＴ６が展開される。続いて、伸張部１０２は、変換部１０２１と調整部１０２２との処理により、圧縮ファイルの伸張を行なう（Ｓ４０３）。
【００６９】
図１８は、圧縮符号を伸張文字情報に変換する変換処理のフローチャート例を示す。図１７のＳ４０３で伸張処理が行なわれる（Ｓ５００）と、調整部１０２２は、Ｓ４０１で読みだした圧縮ファイルのうちの圧縮符号列の始点に読み出し位置をセットする（Ｓ５０１）。変換部１０２１は、セットされた読み出し位置から圧縮符号を読み出し可能か否かを判定する（Ｓ５０２）。セットされた読み出し位置から圧縮符号が読みだせない（圧縮符号を全て読みだした）場合（Ｓ５０２：ＮＯ）には、変換処理のフローが終了される（Ｓ５０６）。
【００７０】
Ｓ５０２の処理で圧縮符号を読み出し可能である場合（Ｓ５０２：ＹＥＳ）は、変換部１０２１は、セットされた読出し位置から所定長のビット列を読み出す。所定長は、例えば、圧縮に用いられた圧縮符号のうちの最大のビット長である。さらに、変換部１０２１は、Ｓ４０２で展開された圧縮伸張辞書データのうち、読み出したビット列に示される位置の葉のデータ構造体を読み出す（Ｓ５０３）。Ｓ５０３においては、まずヘッダの構造体Ｈから葉のデータ構造体Ｌの先頭アドレスを読み出す。読みだしたビット列に示される位置は、例えば、葉のデータ構造体Ｌの先頭アドレスからのオフセットが、各葉のデータ構造体のデータサイズ×読みだしたビット列で示される位置である。Ｓ５０３の処理で読み出される葉のデータ構造体には、文字情報（伸張文字情報）と圧縮符号長とが含まれている。
【００７１】
続いて、変換部１０２１は、Ｓ５０３の処理で読みだした文字情報を、記憶部１１の記憶領域に書き込む（Ｓ５０４）。また、調整部１０２２は、Ｓ５０３の処理で読み出された圧縮符号長に示されるビット数だけ、読出し位置を進める（Ｓ５０５）。上述のＳ５０２〜Ｓ５０５の処理が繰り返し行なわれることで、圧縮データが伸張文字列に変換され、変換された伸張文字列が記憶部１１に書き込まれる。
【００７２】
図１７に示すＳ４０３の処理が行なわれると、伸張部１０２は、変換部１０２１により記憶部１１に書き込まれた伸張文字情報群を含む伸張ファイルを生成する。Ｓ４０４で伸張ファイルが生成されると、図１７に示す伸張処理のフローは終了となる（Ｓ４０５）。
【００７３】
さらに、コンピュータ１で行なわれる検索処理手順を説明する。
【００７４】
図１９は、検索部１０３による検索処理のフローチャート例を示す。記憶部１１に記憶された圧縮ファイルに対して、検索文字列を抽出させる検索要求を検索部１０３が受ける（Ｓ６００）と、検索対象の圧縮ファイルが読み出される（Ｓ６０１）。さらに、検索部１０３は、Ｓ６００で受けた検索要求を解析し、解析結果に応じて図２０に示す圧縮伸張辞書データＴ１０の照合フラグ領域にフラグをセットする（Ｓ６０２）。
【００７５】
図２０は、検索処理に本実施形態の検索処理に対応した圧縮伸張辞書データＴ１０を示す。図２０に示すように、圧縮伸張辞書データＴ１０は、図６に示す圧縮伸張辞書データＴ６に加えて、照合フラグ領域を有している。初期状態では、照合フラグ領域の各ビットは「０」にセットされる。本実施形態における照合フラグ領域のビットは、「０」の場合は「照合処理の必要なし」を示し、「１」の場合は「照合処理の必要あり」を示す。
【００７６】
検索部１０３は、例えば、Ｓ６００で受けた検索要求に含まれる検索文字列の最初の文字情報に対応する照合フラグをセットする。例えば、検索文字列が「ａｐｐｌｅ」であったとすると、圧縮伸張辞書データＴ１０のうち、文字情報「ａ」に対応する照合フラグを「１」とする（図２０参照）。
【００７７】
Ｓ６０２の処理が終わると、調整部１０３２は、調整部１０２２のＳ５０１の処理と同様に、圧縮ファイルからビット列を読み出す位置をセットする（Ｓ６０３）。続いて、探索部１０３１は、変換部１０２２のＳ５０２の処理と同様に、圧縮ファイル内に読み出されていないデータが存在するか否かを判定する（Ｓ６０４）。圧縮ファイル内に読み出されていないデータが存在しない場合（Ｓ６０４：ＮＯ）には、検索処理のフローが終了される（Ｓ６１０）。
【００７８】
圧縮ファイル内に読み出されていないデータが存在する場合（Ｓ６０４：ＹＥＳ）には、探索部１０３１は、圧縮ファイルから所定長のビット列を読み出す（Ｓ６０５）。所定長は、例えば、圧縮に用いられた圧縮符号のうちの最大のビット長である。さらに、探索部１０３１は、圧縮伸張辞書データＴ１０のうち、Ｓ６０５の処理で読み出したビット列に対応する領域の照合フラグを参照する（Ｓ６０６）。探索部１０３１は、Ｓ６０６の処理で参照した照合フラグが「０」か「１」かについての判定を行なう（Ｓ６０７）。照合フラグが「１」にセットされている場合（Ｓ６０７：ＹＥＳ）には、照合部１０３３が検索文字列との照合処理を行なう（Ｓ６０８）。照合部１０３３による検索文字列との照合処理が行なわれるか、Ｓ６０７の判定において照合フラグが「０」にセットされている（Ｓ６０７：ＮＯ）と、調整部１０３２は、調整部１０２２のＳ５０５の処理と同様に、読出し位置の更新を行なう（Ｓ６０９）。調整部１０３２は、Ｓ６０６の参照処理で参照した領域に格納された符号長に基づいて読み出し位置を調整する。Ｓ６０９の処理が終わると、再度Ｓ６０４の処理が探索部１０３１によって行なわれる。
【００７９】
図２１は、照合部１０３３による照合処理のフローチャート例を示す。図１９のＳ６０８の処理が行なわれる（Ｓ７００）と、調整部１０３３は、読出し位置を示す情報をコピーする（Ｓ７０１）。照合部１０３３は、コピーされた読み出し位置情報に基づいて、照合処理を行なう。照合部１０３３は、何文字目の照合であるかを示すカウンタの値ｉをインクリメントする（Ｓ７０２）。ｉの初期値は１とする。照合部１０３３は、符号長にもとづいてＳ７０１でコピーした読み出し位置の更新を行なう（Ｓ７０３）。初回の読み出し位置の更新は、Ｓ６０６で参照された領域の符号長に基づいて行なわれる。２回目以降の読み出し位置の更新は、後述するＳ７０５の処理で取得する符号長に基づいて行なわれる。
【００８０】
次に、照合部１０３３は、探索部１０３１のＳ６０５の処理と同様に、所定長ビット列の読み出しを行なう（Ｓ７０４）。照合部１０３１は、圧縮伸張辞書データＴ１０のうち、Ｓ７０４で読み出したビット列に示される位置に格納された文字情報及び符号長を読み出す（Ｓ７０５）。次に、照合部１０３３は、検索文字列のｉ番目の文字情報を取得する（Ｓ７０６）。さらに、照合部１０３３は、Ｓ７０５で読み出した文字情報と、Ｓ７０６で取得した文字情報とが合致するか否かを判定する（Ｓ７０７）。Ｓ７０７の判定で、文字情報同士が合致しないと判定された場合（Ｓ７０７：ＮＯ）には、照合処理のフローは終了され（Ｓ７１０）、図１９のＳ６０９の処理が行なわれる。
【００８１】
Ｓ７０７の判定で、文字情報同士が合致すると判定された場合（Ｓ７０７：ＹＥＳ）には、照合部１０３３は、Ｓ７０６で読み出された文字情報が検索文字列の末尾の文字であるか否かを判定する（Ｓ７０８）。Ｓ７０８の判定の結果、検索文字列の末尾でないと判定された場合（Ｓ７０８：ＮＯ）には、照合部１０３３が再度Ｓ７０２の処理を行なう。      
【００８２】
Ｓ７０８の判定の結果、検索文字列の末尾であると判定された場合（Ｓ７０８：ＹＥＳ）には、照合部１０３３は、検索文字列に合致する文字情報が存在する位置として、読出し位置を記憶部１１に記憶する（Ｓ７０９）。Ｓ７０９で記憶される読み出し位置は、例えば、Ｓ７０１でコピーされる元の読み出し位置か、Ｓ７０３において更新された読み出し位置かのいずれかを用いる。Ｓ７０９で読み出し位置が格納されると、図１９のフローに戻り（Ｓ７１０）、図１９のＳ６０９の処理が行なわれる。
【００８３】
図１９に示す照合処理は、圧縮伸張辞書データＴ５を用いた場合にも行なうことができる。しかし、その場合には、Ｓ６０６の処理において、根のデータ構造体ＫＲの参照によりポインタを読み出してから、葉のデータ構造体ＫＬにアクセスして照合フラグを確認することとなる。圧縮伸張辞書データＴ５を用いて行なわれる照合処理と同様のルーチンにより、上述の圧縮伸張辞書データＴ６を用いた照合処理を実装することができる。
【００８４】
上述の実施形態において、１つの文字情報を１６ビットで表現する文字コード系を用いて、２０００種の文字情報を圧縮対象としたとする。また、圧縮対象の各文字情報に割り当てる圧縮符号の符号長は１２ビットまでとする。
【００８５】
例えば、圧縮伸張辞書データＴ５においては用いられるポインタには、圧縮対象の文字情報の種類を判別する必要があるので、２０００種以上を識別可能なビット数が必要となる。１バイト単位でデータを管理するメモリを用いた場合に、根のデータ構造体ＫＲは、それぞれ２バイトの領域にポインタが格納されて構成される。一方、葉のデータ構造体ＫＬのそれぞれに、１６ビットの文字コードと符号長を記憶するので、３バイトの領域が設けられる。そのため、根のデータ構造体ＫＲ（２の１２乗×２バイト）と葉のデータ構造体ＫＬ（２０００×２バイト）とで、１４キロバイト程度の記憶領域を必要とする。
【００８６】
圧縮伸張辞書データＴ６においては、葉のデータ構造体Ｌのそれぞれには、葉のデータ構造体ＫＬと同様に３バイトの記憶領域が設けられる。そのため、２の１２乗×３バイトで、１２キロバイト程度の記憶領域が必要となる。
【００８７】
上述の例においては、圧縮対象の文字情報が１３３０文字程度あれば、圧縮伸張辞書データＴ６の方が圧縮伸張辞書データＴ５よりもデータサイズが小さい。
【００８８】
上記に説明される実施形態は一例であり、発明を実施しうる範囲内で適宜変形可能である。また、上記の説明された各処理のさらに詳細な内容については、当業者に周知の技術が適宜用いられる。
【符号の説明】
【００８９】
１        コンピュータ
２        基地局
３        ネットワーク
１ａ      コンピュータ
１ｂ      コンピュータ
１０      制御部
１１      記憶部
１０１    圧縮部
１０２    伸張部
１０３    検索部
１０１１  生成部
１０１２  変換部
１０２１  変換部
１０２２  調整部
１０３１  探索部
１０３２  調整部
１０３３  照合部
【図１】
2014030180.tif 000003
【図２】
2014030180.tif 000004
【図３】
2014030180.tif 000005
【図４】
2014030180.tif 000006
【図５】
2014030180.tif 000007
【図６】
2014030180.tif 000008
【図７】
2014030180.tif 000009
【図８】
2014030180.tif 000010
【図９】
2014030180.tif 000011
【図１０】
2014030180.tif 000012
【図１１】
2014030180.tif 000013
【図１２】
2014030180.tif 000014
【図１３】
2014030180.tif 000015
【図１４】
2014030180.tif 000016
【図１５】
2014030180.tif 000017
【図１６】
2014030180.tif 000018
【図１７】
2014030180.tif 000019
【図１８】
2014030180.tif 000020
【図１９】
2014030180.tif 000021
【図２０】
2014030180.tif 000022
【図２１】
2014030180.tif 000023
【手続補正書】
【提出日】平成27年10月13日(2015.10.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
対象データ中に含まれる文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木に対し、前記無節点ハフマン木の根からのそれぞれの葉へのポインタ情報を当該ポインタ情報が参照する葉のデータであって、対応する符号のビット単位の符号長のデータを含むデータに置換する、
処理を実行させることを特徴とする符号化情報生成プログラム。
【請求項２】
コンピュータに、
対象データ中に含まれる文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木に対し、前記無節点ハフマン木の根からのそれぞれの葉へのポインタ情報を当該ポインタ情報が参照する葉のデータであって、対応する符号のビット単位の符号長のデータを含むデータに置換する、
処理を実行させることを特徴とする符号化情報生成方法。
【請求項３】
対象データ中に含まれる文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木に対し、前記無節点ハフマン木の根からのそれぞれの葉へのポインタ情報を当該ポインタ情報が参照する葉のデータであって、対応する符号のビット単位の符号長のデータを含むデータに置換する置換部、
を含むことを特徴とする符号化情報生成装置。
【請求項４】
コンピュータに、
文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木を、根からのそれぞれの葉へのポインタ情報が当該ポインタ情報が参照する葉のデータに置換されたデータ構造を参照し、圧縮ファイルに含まれる符号を、当該符号に対応する文字または文字列に変換し、
前記符号の先頭のビット位置に対し、前記データ構造の葉のデータに含まれる、当該符号のビット単位の符号長より求められるビット位置を開始位置として、前記符号に続く符号を読み出す、
処理を実行させることを特徴とする復号化情報生成プログラム。
【請求項５】
コンピュータに、
文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木を、根からのそれぞれの葉へのポインタ情報が当該ポインタ情報が参照する葉のデータに置換されたデータ構造を参照し、圧縮ファイルに含まれる符号を、当該符号に対応する文字または文字列に変換し、
前記符号の先頭のビット位置に対し、前記データ構造の葉のデータに含まれる、当該符号のビット単位の符号長より求められるビット位置を開始位置として、前記符号に続く符号を読み出す、
処理を実行させることを特徴とする復号化情報生成方法。
【請求項６】
文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木を、根からのそれぞれの葉へのポインタ情報が当該ポインタ情報が参照する葉のデータに置換されたデータ構造を参照し、圧縮ファイルに含まれる符号を、当該符号に対応する文字または文字列に変換する変換部と、
前記符号の先頭のビット位置に対し、前記データ構造の葉のデータに含まれる、当該符号のビット単位の符号長より求められるビット位置を開始位置として、前記符号に続く符号を読み出す読出部と、
を含むことを特徴とする復号化情報生成装置。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
一態様によれば、符号化情報生成プログラムは、コンピュータに、対象データ中に含まれる文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木に対し、前記無節点ハフマン木の根からのそれぞれの葉へのポインタ情報を当該ポインタ情報が参照する葉のデータであって、対応する符号のビット単位の符号長のデータを含むデータに置換する、処理を実行させる。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
一態様によれば、コンピュータに、対象データ中に含まれる文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木に対し、前記無節点ハフマン木の根からのそれぞれの葉へのポインタ情報を当該ポインタ情報が参照する葉のデータであって、対応する符号のビット単位の符号長のデータを含むデータに置換する、処理を実行させる符号化情報生成方法が用いられる。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
一態様によれば、符号化情報生成装置が、対象データ中に含まれる文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木に対し、前記無節点ハフマン木の根からのそれぞれの葉へのポインタ情報を当該ポインタ情報が参照する葉のデータであって、対応する符号のビット単位の符号長のデータを含むデータに置換する置換部、を含む。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００１２
【補正方法】変更
【補正の内容】
【００１２】
一態様によれば、復号化情報生成プログラムは、コンピュータに、文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木を、根からのそれぞれの葉へのポインタ情報が当該ポインタ情報が参照する葉のデータに置換されたデータ構造を参照し、圧縮ファイルに含まれる符号を、当該符号に対応する文字または文字列に変換し、前記符号の先頭のビット位置に対し、前記データ構造の葉のデータに含まれる、当該符号のビット単位の符号長より求められるビット位置を開始位置として、前記符号に続く符号を読み出す、処理を実行させる。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００１３
【補正方法】変更
【補正の内容】
【００１３】
一態様によれば、コンピュータに、文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木を、根からのそれぞれの葉へのポインタ情報が当該ポインタ情報が参照する葉のデータに置換されたデータ構造を参照し、圧縮ファイルに含まれる符号を、当該符号に対応する文字または文字列に変換し、前記符号の先頭のビット位置に対し、前記データ構造の葉のデータに含まれる、当該符号のビット単位の符号長より求められるビット位置を開始位置として、前記符号に続く符号を読み出す、処理を実行させる復号化情報生成方法が用いられる。
【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００１４
【補正方法】変更
【補正の内容】
【００１４】
一態様によれば、符号化情報生成装置が、文字または文字列の頻度に基づきビット単位に生成される無節点ハフマン木を、根からのそれぞれの葉へのポインタ情報が当該ポインタ情報が参照する葉のデータに置換されたデータ構造を参照し、圧縮ファイルに含まれる符号を、当該符号に対応する文字または文字列に変換する変換部と、前記符号の先頭のビット位置に対し、前記データ構造の葉のデータに含まれる、当該符号のビット単位の符号長より求められるビット位置を開始位置として、前記符号に続く符号を読み出す読出部と、を含む。
【国際調査報告】
2014030180.tif 000024
2014030180.tif 000025
2014030180.tif 000026
2014030180.tif 000027