(57)【特許請求の範囲】
【請求項１】
コンピュータに、
文字列と静的符号とを対応付けた静的辞書を参照して、入力テキストデータに含まれる文字列のうち、前記静的辞書に登録された文字列を静的符号に符号化し、前記静的辞書に登録されていない文字列に対しては符号化を行わないことで、静的符号と符号化されていない文字列とを含む静的符号化データを生成し、
前記静的符号化データに対し、複数回出現する文字列または前記静的符号を動的符号に符号化した動的符号化データを生成し、前記動的符号と、前記動的符号に対応する文字列または静的符号とを対応付けた動的辞書を生成し、
前記入力テキストデータにおける、前記動的符号および前記静的符号の出現頻度を基にして、ハフマン木および前記ハフマン木の葉のデータを生成する
処理を実行させることを特徴とする符号化プログラム。
【請求項２】
前記ハフマン木および前記葉のデータを基にして、前記動的符号化データに含まれる前記動的符号および前記静的符号を符号化する処理を更にコンピュータに実行させることを特徴とする請求項１に記載の符号化プログラム。
【請求項３】
前記ハフマン木および前記ハフマン木の葉のデータを生成する処理は、出現頻度の低い前記動的符号または前記静的符号に対する符号の符号長よりも、出現頻度の高い前記動的符号または前記静的符号に対する符号の符号長の方が短くなるハフマン木を生成することを特徴とする請求項１に記載の符号化プログラム。
【請求項４】
前記動的符号化データに含まれる動的符号の出現頻度および静的符号の出現頻度を特定し、動的符号および該動的符号の出現頻度を対応付けた情報と、静的符号および該静的符号の出現頻度を対応付けた情報を格納する処理を更にコンピュータに実行させることを特徴とする請求項１に記載の符号化プログラム。
【請求項５】
前記ハフマン木の葉のデータを生成する処理は、葉の識別子と、前記静的辞書または前記動的辞書を識別する識別ビットと、前記静的辞書または動的辞書へのポインタとを対応付けた情報を、前記葉に登録することを特徴とする請求項１〜４のいずれか一つに記載の符号化プログラム。
【請求項６】
コンピュータが実行する符号化方法であって、
文字列と静的符号とを対応付けた静的辞書を参照して、入力テキストデータに含まれる文字列のうち、前記静的辞書に登録された文字列を静的符号に符号化し、前記静的辞書に登録されていない文字列に対しては符号化を行わないことで、静的符号と符号化されていない文字列とを含む静的符号化データを生成し、
前記静的符号化データに対し、複数回出現する文字列または前記静的符号を動的符号に符号化した動的符号化データを生成し、前記動的符号と、前記動的符号に対応する文字列または静的符号とを対応付けた動的辞書を生成し、
前記入力テキストデータにおける、前記動的符号および前記静的符号の出現頻度を基にして、ハフマン木および前記ハフマン木の葉のデータを生成する
処理を実行することを特徴とする符号化方法。
【請求項７】
文字列と静的符号とを対応付けた静的辞書を参照して、入力テキストデータに含まれる文字列のうち、前記静的辞書に登録された文字列を静的符号に符号化し、前記静的辞書に登録されていない文字列に対しては符号化を行わないことで、静的符号と符号化されていない文字列とを含む静的符号化データを生成する静的符号化部と、
前記静的符号化データに対し、複数回出現する文字列または前記静的符号を動的符号に符号化した動的符号化データを生成し、前記動的符号と、前記動的符号に対応する文字列または静的符号とを対応付けた動的辞書を生成する動的符号化部と、
前記入力テキストデータにおける、前記動的符号および前記静的符号の出現頻度を基にして、ハフマン木および前記ハフマン木の葉のデータを生成するハフマン木生成部と
を有することを特徴とすることを特徴とする符号化装置。
【請求項８】
コンピュータに、
入力する符号化ファイルのヘッダ部より、出現頻度表情報を読み出し、
前記出現頻度表情報より得られる、静的辞書に登録された静的符号と、請求項１の符号化プログラムにより、複数回出現する文字列または静的符号に対して登録された動的符号との出現頻度に関する情報に基づき、ハフマン木および前記ハフマン木の葉のデータを生成し、
前記ハフマン木および前記ハフマン木の葉のデータと、前記符号化ファイルに含まれる符号化データとを基にして、前記符号化ファイルを復号化する
処理を実行させることを特徴とする復号化プログラム。
【請求項９】
コンピュータが実行する復号化方法であって、
入力する符号化ファイルのヘッダ部より、出現頻度表情報を読み出し、
前記出現頻度情報より得られる、静的辞書に登録された静的符号と、請求項６の符号化方法により、複数回出現する文字列または静的符号に対して登録された動的符号との出現頻度に関する情報に基づき、ハフマン木および前記ハフマン木の葉のデータを生成し、
前記ハフマン木および前記ハフマン木の葉のデータと、前記符号化ファイルに含まれる符号化データとを基にして、前記符号化ファイルを復号化する
処理を実行することを特徴とする復号化方法。
【請求項１０】
入力する符号化ファイルのヘッダ部より、出現頻度表情報を読み出し、前記出現頻度表情報より得られる、静的辞書に登録された静的符号と、請求項７の符号化装置により、複数回出現する文字列または静的符号に対して登録された動的符号との出現頻度に関する情報に基づき、ハフマン木および前記ハフマン木の葉のデータを生成する生成部と、
前記ハフマン木および前記ハフマン木の葉のデータと、前記符号化ファイルに含まれる符号化データとを基にして、前記符号化ファイルを復号化する復号化部と
を有することを特徴とする復号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化プログラム等に関する。
【背景技術】
【０００２】
従来の符号化技術においては、テキストデータを符号化する場合に、静的辞書および動的辞書を用いる符号化技術がある。例えば、静的辞書は、単語と、この単語の出現頻度に応じた符号長の静的符号とを対応付ける辞書である。動的辞書は、テキストデータに複数回出現する文字列と動的符号とを対応付ける辞書である。従来の符号化技術では、静的辞書にヒットした単語については、静的辞書の静的符号に置換し、静的辞書にヒットせず、複数回登場する文字列については、動的辞書にかかる文字列を登録し、動的符号を文字列に割り当てる。
【０００３】
ここで、従来の符号化技術によって符号化されたデータを復号する場合において、静的符号と動的符号とでは参照する辞書が異なる。このため、従来の符号化技術では、符号化を行う場合に、静的辞書を用いて符号化を行ったのか、動的辞書を用いて符号化を行ったのかを識別する識別ビットを、静的符号および動的符号の先頭に付加する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００４−５１４３６６号公報
【特許文献２】特開平８−２８８８６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、テキストデータに含まれる文字列の出現頻度に応じたエントロピー符号化を行うことができないという問題がある。
【０００６】
例えば、静的辞書に登録された単語に対応する静的符号の符号長は、対応する単語の出現頻度に応じたものであるが、識別ビットが付加されると、出現頻度に応じた符号長とは異なるものとなる。また、動的辞書の動的符号は、動的単語に対応する文字列の出現頻度にかかわらず所定の符号長となっており、該当する文字列の出現頻度に応じた符号長となっていない。
【０００７】
１つの側面では、本発明は、符号化時の識別ビットを削除し、テキストデータの文字列の出現頻度に応じたエントロピー符号化を行うことができる符号化プログラム、符号化方法および符号化装置を提供することを目的とする。また、符号化プログラム、符号化方法および符号化装置により符号化された情報を復号する復号化プログラム、復号化方法および復号化装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
第１の案では、コンピュータに下記の処理を実行させる。コンピュータは、入力テキストデータに対し、文字列と静的符号とを対応付けた静的辞書を参照して、静的辞書に登録された文字列を静的符号に符号化した、静的符号化データを生成する。コンピュータは、静的符号化データに対し、複数回出現する文字列または静的符号を動的符号に符号化した動的符号化データを生成し、動的符号と、動的符号に対応する文字列または静的符号とを対応付けた動的辞書を生成する。コンピュータは、入力テキストデータにおける、動的符号および静的符号の出現頻度を基にして、ハフマン木およびハフマン木の葉のデータを生成する。
【発明の効果】
【０００９】
テキストデータに含まれる文字列の出現頻度に応じたエントロピー符号化を行うことができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本実施例に係る情報処理装置の符号化処理の流れの一例を示す図である。
【図２】図２は、符号化ファイルＦ２のブロック構成例を示す図である。
【図３】図３は、本実施例に係る情報処理装置の構成を示す機能ブロック図である。
【図４】図４は、本実施例に係る圧縮部の構成の一例を示す機能ブロック図である。
【図５】図５は、静的辞書情報のデータ構造の一例を示す図である。
【図６】図６は、動的辞書情報のデータ構造の一例を示す図である。
【図７】図７は、動的符号化部が複数回出現する文字列または静的符号を特定する処理の一例を示す図（１）である。
【図８】図８は、動的符号化部が複数回出現する文字列または静的符号を特定する処理の一例を示す図（２）である。
【図９】図９は、出現頻度表情報のデータ構造の一例を示す図である。
【図１０】図１０は、ハフマン木情報のデータ構造の一例を示す図である。
【図１１】図１１は、本実施例に係る伸長部の構成の一例を示す機能ブロック図である。
【図１２】図１２は、本実施例に係る圧縮部の処理手順の一例を示すフローチャートである。
【図１３】図１３は、本実施例に係る伸長部の処理手順の一例を示すフローチャートである。
【図１４】図１４は、コンピュータのハードウェア構成例を示す図である。
【図１５】図１５は、コンピュータで動作するプログラムの構成例を示す図である。
【図１６】図１６は、実施形態のシステムにおける装置の構成例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本願の開示する符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１２】
図１は、本実施例に係る情報処理装置の符号化処理の流れの一例を示す図である。情報処理装置は、符号化装置の一例である。情報処理装置は、符号化対象のファイルＦ１を読み出し、静的辞書Ｃ２を用いて、静的符号化を行う。静的辞書Ｃ２は、単語と、この単語の出現頻度に応じた符号長の静的符号とを対応付ける辞書である。情報処理装置は、ファイルＦ１の単語と、静的辞書Ｃ２の単語とを比較して、静的辞書Ｃ２にヒットする単語については、静的符号に置き換える処理を実行することで、ファイルＦ１を、静的符号化データｆ１に変換する。例えば、静的符号化データｆ１において、静的符号１−１〜１−２１が含まれる。
【００１３】
続いて、情報処理装置は、静的符号化データｆ１に対して動的符号化を行う。例えば、情報処理装置は、複数回出現する文字列または静的符号を動的符号に符号化することで、静的符号化データｆ１を、動的符号化データｆ２に変換する。例えば、静的符号化データｆ１の文字領域２−１、２−２、２−３に、同じ文字列または静的符号の繰り返しが存在する場合には、係る文字領域２−１、２−２、２−３を動的符号に変換することで、動的符号化データｆ２を生成する。
【００１４】
例えば、情報処理装置は、文字領域２−１に含まれる文字列または静的符号を動的辞書Ｄ２に登録し、登録した文字列または静的辞書に対して登録番号を割り当てる。係る登録番号が、文字領域２−１〜２−３に割り当てられる動的符号となる。
【００１５】
続いて、情報処理装置は、動的符号化データｆ２に含まれる静的符号および動的符号の出現頻度を算出して、出現頻度表を生成する。情報処理装置は、出現頻度表を基にして、ハフマン木１０を生成する。例えば、ハフマン木１０は、最上位に根ノード１１を有し、各節点１２が枝によって接続され、各最下位に葉１０−１〜１０−ｎを有する。例えば、各葉１０−１〜１０−ｎは、静的符号に対応する葉または動的符号に対応する葉となる。
【００１６】
例えば、情報処理装置は、静的符号に対応する葉および動的符号に対応する葉を、静的符号、動的符号の出現頻度順にソートし、２分木の枝をくみ上げて、ハフマン木１０を生成する。静的符号に対応する葉には、静的辞書Ｃ２に存在する静的符号に対応する単語の位置を示すポインタが格納される。動的符号に対応する葉には、動的辞書Ｄ２に存在する動的符号に対応する文字列または静的符号の位置を示すポインタが格納される。
【００１７】
情報処理装置は、ハフマン木１０と、動的符号化データｆ２とを比較して、動的符号化データｆ２に含まれる静的符号および動的符号をハフマン木１０によって、符号化することで、符号化ファイルＦ２を作成する。例えば、静的符号１−１に対応するハフマン木１０の葉が、葉１０−４であるとすると、情報処理装置は、係る静的符号１−１を、ハフマン木１０により、「１１０」に符号化する。例えば、動的符号２−１〜２−３には同一の動的符号が割り当てられており、係る動的符号に対応する葉が、葉１０−３であるとすると、情報処理装置は、かかる動的符号２−１〜２−３を、ハフマン木１０により、「１０１」に符号化する。
【００１８】
各葉１０−１〜１０−ｎは、葉に対応する静的符号または動的符号の出現頻度順に並んでおり、出現頻度の高い文字に対して、短い符号が割り当てられる。また、情報処理装置は、静的符号および動的符号を符号化する場合には、静的辞書で符号化したのか、動的辞書で符号化したのかを示す識別ビットが付与しない。このため、情報処理装置によれば、冗長な識別ビットを削除すると共に、静的符号、動的符号の出現頻度に応じた符号化を行うことができる。
【００１９】
図２は、符号化ファイルＦ２のブロック構成例を示す図である。図２に示すように、符号化ファイルＦ２は、ヘッダ部と、符号化データと、トレーラ部とを有する。ヘッダ部は、例えば、符号化ファイルＦ２の生成に用いられたアルゴリズムを識別する情報や、静的符号および動的符号の出現頻度表等を有する。符号化データは、情報処理装置が生成した各符号化データに対応する。トレーラ部は、動的符号化を行う場合に用いた動的辞書Ｄ２の情報等が含まれる。
【００２０】
図３は、本実施例に係る情報処理装置の構成を示す機能ブロック図である。図３に示すように、この情報処理装置１００は、圧縮部１００ａと、伸長部１００ｂと、記憶部１００ｃとを有する。
【００２１】
圧縮部１００ａは、図１に示した符号化処理を実行する処理部である。伸長部１００ｂは、圧縮部１００ａによって符号化された符号化データを伸長する処理部である。記憶部１００ｃは、符号化対象のファイルＦ１、符号化処理により得られる符号化ファイルＦ２、符号化ファイルＦ２を伸長することにより得られる伸長ファイルＦ３等を格納する。
【００２２】
図４は、本実施例に係る圧縮部の構成の一例を示す機能ブロック図である。図４に示すように、この圧縮部１００ａは、ファイルリード部１０１と、静的辞書情報１０２と、静的符号化部１０３と、動的辞書情報１０４と、動的符号化部１０５とを有する。また、圧縮部１００ａは、頻度情報生成部１０６、出現頻度表情報１０７、ハフマン木生成部１０８、ハフマン木情報１０９、符号化部１１０、ファイルライト部１１１を有する。
【００２３】
ファイルリード部１０１は、符号化対象のファイルＦ１内のコンテンツ部分のデータを読み出す処理部である。ファイルリード部１０１は、読み出したデータを、静的符号化部１０３に出力する。
【００２４】
図５は、静的辞書情報のデータ構造の一例を示す図である。静的辞書情報１０２は、出現頻度が閾値以上となる単語に対する静的符号を定義した静的辞書Ｃ２の情報を含む。図５に示すように、この静的辞書情報１０２は、２グラム、ビットマップ、ポインタ、基礎単語、静的符号、基本単語コードを有する。このうち、２グラム、ビットマップ、ポインタ、基礎単語は、ビットフィルタＣ１に対応する。また、基礎単語、静的符号、基本単語コードは、静的辞書Ｃ２に対応する。
【００２５】
２グラムは、２文字の文字列（あるいは単語）を示す情報である。ビットマップは、２グラムの文字列に対応するビットマップを示す。例えば、「ａａ」に対応するビットマップは「０＿０＿０＿０＿０」となる。ポインタは、ビットマップに対応する基礎単語の位置を示すポインタである。
【００２６】
基礎単語は、例えば、静的辞書Ｃ２に登録された高頻度の単語である。静的符号は、基礎単語に割り当てられた符号化データである。なお、静的辞書Ｃ２には、基礎単語、静的符号に加えて、文字列長、出現頻度等の情報が含まれていても良い。
【００２７】
静的符号化部１０３は、ファイルリード部１０１のファイルＦ１に含まれるコンテンツのデータと、静的辞書情報１０２のビットフィルタＣ１とを比較して、ビットフィルタＣ１にヒットした単語を静的符号に置換する処理部である。静的符号化部１０３は、ファイルＦ１に含まれるコンテンツのデータを静的符号に置換した静的符号化データｆ１を生成し、動的符号化部１０５に出力する。
【００２８】
ここで、単語がビットフィルタＣ１にヒットするか否かを判定する静的符号化部１０３の処理の一例について説明する。例えば、静的符号化部１０３は、単語が「talk」である場合には、２グラム「ta」、「al」、「lk」に対応するビットマップをそれぞれ組み合わせる。静的符号化部１０３は、ビットマップの各桁において、すべてのビットマップの値が０となっている場合には、組み合わせたビットマップの該当する桁を「０」とする。これに対して、静的符号化部１０３は、「１」が一つでも含まれる場合には該当する桁を「１」に設定することで、ビットマップを組み合わせる。
【００２９】
例えば、「ta」のビットマップが「０＿０＿０＿０＿０」、「al」のビットマップが「０＿１＿０＿０＿０」、「lk」のビットマップが「０＿０＿１＿０＿０」とする。この場合には、各ビットマップを組み合わせたビットマップは「０＿１＿１＿０＿０」となる。
【００３０】
静的符号化部１０３は、組み合わせたビットマップと、ビットフィルタＣ１のポインタとを比較して、ビットマップに対応するポインタが示す位置の基礎単語を特定する。静的符号化部１０３は、特定した基礎単語から順に、単語に対応する基礎単語を検索する。静的符号化部１０３は、単語と同一の基礎単語が存在する場合には、単語がビットフィルタＣ１にヒットしたと判定する。
【００３１】
図６は、動的辞書情報のデータ構造の一例を示す図である。動的辞書情報１０４は、上述した動的辞書に関する情報を含む。図６に示すように、この動的辞書情報１０４は、動的ビットフィルタＤ１と、動的辞書Ｄ２と、バッファＤ３とを有する。動的ビットフィルタＤ１は、２グラムと、ビットマップと、第１ポインタとを有する。動的辞書Ｄ２は、登録番号（動的符号）と、第２ポインタと、連鎖領域とを対応付ける。バッファＤ３は、動的符号により符号化される前の文字列や、静的符号を格納する。
【００３２】
動的ビットフィルタＤ１の２グラムは、２文字の文字列（あるいは単語、静的符号に対応する数字）を示す情報である。ビットマップは、２グラムの文字列に対応するビットマップを示す。例えば、「ａａ」に対応するビットマップは「０＿０＿０＿０＿０」となる。第１ポインタは、ビットマップに対応する登録番号（動的符号）の位置を示すポインタである。
【００３３】
動的辞書Ｄ２の登録番号（動的符号）は、バッファＤ３に格納された文字列に割り当てられた符号である。第２ポインタは、登録番号に対応する文字列が格納されたバッファＤ３の位置を示す情報である。例えば、登録番号「Ａ００１ｈ」に対応する第２ポインタは、バッファＤ３に格納された「Ｍｉｃｋｙ」の先頭位置を示す。すなわち、文字列「Ｍｉｃｋｙ」は、動的符号「Ａ００１ｈ」に動的符号化されていることを意味する。例えば、登録番号「Ａ００３ｈ」に対応する第２ポインタは、バッファＤ３に格納された「Ｂａｋｅｒ  ｓｔｒｅｅｔ」の先頭位置を示す。このうち、例えば、「ｓｔｒｅｅｔ（０ＡＥ０１Ｃｈ）」は静的符号である。すなわち、文字列および静的符号を含んだ「Ｂａｋｅｒ  ｓｔｒｅｅｔ」または「Ｂａｋｅｒ  ０ＡＥ０１Ｃｈ」は、動的符号「Ａ００３ｈ」に動的符号化されていることを意味する。
【００３４】
動的辞書Ｄ２の連鎖領域は、該当する文字列等がビットフィルタのポインタから連鎖しているか否かを示す情報である。例えば、登録番号「Ａ００１ｈ」の連鎖領域には「Ａ００２ｈ」が登録されているため、登録番号「Ａ００１ｈ」に対応する「Ｍｉｃｋｙ」と、登録番号「Ａ００２ｈ」に対応する「Ｍｉｎｎｅ」とは、連鎖関係にあることを意味する。なお、該当する文字列等が連鎖していない場合には、連鎖領域に「ＮＵＬＬ」が設定される。
【００３５】
動的符号化部１０５は、静的符号化データｆ１に対して、複数回出現する文字列または静的符号を動的符号に符号化することで、動的符号化データｆ２を生成する処理部である。動的符号化部１０５は、動的符号化データｆ２を、頻度情報生成部１０６および符号化部１１０に出力する。
【００３６】
図７および図８は、動的符号化部が複数回出現する文字列または静的符号を特定する処理の一例を示す図である。動的符号化部１０５は、文字列を静的符号化データｆ１から読み出して、符号化領域Ａ１に格納し、符号化領域Ａ１と参照領域Ａ２とに同一の文字列または静的符号が存在するか否かを照合する。動的符号化部１０５は、照合の結果、同一の文字列または静的符号が存在する場合には、係る文字列または静的符号を、複数回出現する文字列または静的符号として特定する。動的符号化部１０５は、照合終了後、符号化領域Ａ１に格納された文字列を、参照領域Ａ２に追記する更新を行い、所定の長さの文字列を静的符号化データｆ１から読み出し、符号化領域Ａ１に格納する。
【００３７】
図７について説明する。図７に示す例では、静的符号化データｆ１を「（１）Ｍｉｃｋｙ・・・（２）Ｍｉｃｋｙ・・・」とする。静的符号化データｆ１の（１）、（２）は、各文字列「Ｍｉｃｋｙ」を区別するために便宜的に付与するものであり、実際には、静的符号化データｆ１に含まれていなくても良い。また、静的符号化データｆ１の「・・・」は、不特定な文字列、静的符号に対応する。
【００３８】
動的符号化部１０５は、静的符号化データｆ１から所定の長さの文字列「（１）Ｍｉｃｋｙ・・・」を読み出して符号化領域Ａ１に格納する。動的符号化部１０５は、符号化領域Ａ１に格納された文字列と、参照領域Ａ２に格納された文字列とを比較して、同一の文字列（または静的文字列）が存在するか否かを判定する。この場合には、同一の文字列が存在しないため、動的符号化部１０５は、符号化領域Ａ１に格納された「（１）Ｍｉｃｋｙ・・・」を、参照領域Ａ２に格納することで、参照領域Ａ２を更新する。
【００３９】
動的符号化部１０５は、静的符号化データｆ１から所定の長さの文字列「（２）Ｍｉｃｋｙ・・・」を読み出して符号化領域Ａ１に格納する。動的符号化部１０５は、符号化領域Ａ１に格納された文字列と、参照領域Ａ２に格納された文字列とを比較して、同一の文字列（または静的文字列）が存在するか否かを判定する。この場合には、同一の文字列「Ｍｉｃｋｙ」が存在するため、動的符号化部１０５は、「Ｍｉｃｋｙ」が複数回出現する文字列であると特定する。動的符号化部１０５は、符号化領域Ａ１に格納された「（２）Ｍｉｃｋｙ・・・」を、参照領域Ａ２に格納することで、参照領域Ａ２を更新する。
【００４０】
動的符号化部１０５は、複数回出現する「Ｍｉｃｋｙ」を動的辞書情報１０４のバッファＤ３に格納すると共に、動的辞書Ｄ２に登録番号「Ａ００１ｈ」を設定し、登録番号「Ａ００１ｈ」に対応する第２ポインタの示す位置を、バッファＤ３の「Ｍｉｃｋｙ」の先頭位置に設定する。また、動的符号化部１０５は、「Ｍｉｃｋｙ」を「Ａ００１ｈ」に符号化する。
【００４１】
図８について説明する。図８に示す例では、静的符号化データｆ１を「（１）Ｂａｋｅｒ  ｓｔｒｅｅｔ・・・（２）Ｂａｋｅｒ  ｓｔｒｅｅｔ・・・」とする。静的符号化データｆ１の（１）、（２）は、各文字列「Ｂａｋｅｒ  ｓｔｒｅｅｔ」を区別するために便宜的に付与するものであり、実際には、静的符号化データｆ１に含まれていなくても良い。また、静的符号化データｆ１の「・・・」は、不特定な文字列、静的符号に対応する。また、「Ｂａｋｅｒ  ｓｔｒｅｅｔ」のうち「ｓｔｒｅｅｔ」は静的符号であるものとする。
【００４２】
動的符号化部１０５は、静的符号化データｆ１から所定の長さの文字列「（１）Ｂａｋｅｒ  ｓｔｒｅｅｔ・・・」を読み出して符号化領域Ａ１に格納する。動的符号化部１０５は、符号化領域Ａ１に格納された文字列と、参照領域Ａ２に格納された文字列とを比較して、同一の文字列（または静的文字列）が存在するか否かを判定する。この場合には、同一の文字列が存在しないため、動的符号化部１０５は、符号化領域Ａ１に格納された「（１）Ｂａｋｅｒ  ｓｔｒｅｅｔ・・・」を、参照領域Ａ２に格納することで、参照領域Ａ２を更新する。
【００４３】
動的符号化部１０５は、静的符号化データｆ１から所定の長さの文字列「（２）Ｂａｋｅｒ  ｓｔｒｅｅｔ・・・」を読み出して符号化領域Ａ１に格納する。動的符号化部１０５は、符号化領域Ａ１に格納された文字列と、参照領域Ａ２に格納された文字列とを比較して、同一の文字列（または静的文字列）が存在するか否かを判定する。この場合には、同一の文字列および静的符号「Ｂａｋｅｒ  ｓｔｒｅｅｔ・・・」が存在するため、動的符号化部１０５は、「Ｂａｋｅｒ  ｓｔｒｅｅｔ・・・」が複数回出現する文字列であると特定する。動的符号化部１０５は、符号化領域Ａ１に格納された「（２）Ｂａｋｅｒ  ｓｔｒｅｅｔ・・・」を、参照領域Ａ２に格納することで、参照領域Ａ２を更新する。
【００４４】
動的符号化部１０５は、複数回出現する「Ｂａｋｅｒ  ｓｔｒｅｅｔ」または「Ｂａｋｅｒ  ０ＡＥ０１Ｃｈ」を動的辞書情報１０４のバッファＤ３に格納すると共に、動的辞書Ｄ２に登録番号「Ａ００３ｈ」を設定し、登録番号「Ａ００３ｈ」に対応する第２ポインタの示す位置を、バッファＤ３の「Ｂａｋｅｒ  ｓｔｒｅｅｔ」の先頭位置に設定する。また、動的符号化部１０５は、「Ｂａｋｅｒ  ｓｔｒｅｅｔ」を「Ａ００３ｈ」に符号化する。
【００４５】
動的符号化部１０５は、上記のように、静的符号化データｆ１に対して、複数回出現する文字列または静的符号を動的符号に符号化することで、動的符号化データｆ２を生成する。
【００４６】
頻度情報生成部１０６は、動的符号化データｆ２に含まれる静的符号および動的符号の出現頻度を集計し、出現頻度表情報１０７を生成する処理部である。図９は、出現頻度表情報のデータ構造の一例を示す図である。図９に示すように、この出現頻度表情報１０７は、静的符号または動的符号と、出現頻度とを対応付ける。
【００４７】
ハフマン木生成部１０８は、出現頻度表情報１０７を基にして、ハフマン木情報１０９を生成する処理部である。例えば、ハフマン木生成部１０８は、静的符号の情報を有する葉と、動的符号の情報を有する葉とを生成する。ハフマン木生成部１０８は、生成した葉を、静的符号、動的符号の出現頻度順にソートし、２分木の枝をくみ上げることで、ハフマン木情報１０９を生成する。
【００４８】
図１０は、ハフマン木情報のデータ構造の一例を示す図である。例えば、ハフマン木情報１０９は、最上位に根ノード１１を有し、各節点１２が枝によって接続され、各最下位に葉１０−１〜１０−ｎを有する。ここで、根と葉の構造体は、上位の節点（または根）へのポインタ、下位の左（０）の節点へのポインタまたは葉、下位の右（１）の節点へのポインタまたは葉で構成される。例えば、各葉１０−１〜１０−ｎは、静的符号に対応する葉または動的符号に対応する葉となる。各葉の詳細は、１０ａに示すように、葉の識別子、静的辞書または動的辞書の識別ビット、予備情報、静的辞書または動的辞書へのポインタである。例えば、葉が、静的符号に対応する葉である場合には、葉の識別子と、静的辞書の識別ビット（０）、予備情報と、静的辞書へのポインタとを格納する。例えば、静的辞書へのポインタは、静的符号に対応する静的辞書Ｃ２の基礎単語の位置を示すポインタとなる。
【００４９】
葉が、動的符号に対応する葉である場合には、葉の識別子と、静的辞書の識別ビット（１）、予備情報と、動的辞書へのポインタとを格納する。例えば、動的辞書へのポインタは、動的符号に対応するバッファＤ３上の文字列または静的符号の位置を示すポインタとなる。従来、静的辞書か動的辞書を区別するために符号化データに格納されていた識別ビットが、ハフマン木の葉の識別ビットにより削除することができ、エントロピー符号化による圧縮率の向上を図ることができる。なお、静的辞書または、動的辞書へのポインタを活用することで識別ビットの省略も可能である。
【００５０】
符号化部１１０は、動的符号化データｆ２と、ハフマン木情報１０９とを比較し、動的符号化データｆ２に含まれる静的符号および動的符号をハフマン木によって、符号化することで、符号化データを生成する処理部である。符号化部１１０は、符号化データを、ファイルライト部１１１に出力する。
【００５１】
例えば、符号化部１１０は、ある静的符号に対応するハフマン木１０の葉が、図１０の葉１０−４であるとすると、係る静的符号を、ハフマン木１０により、「１１０」に符号化する。符号化部１１０は、ある動的符号に対応するハフマン木１０の葉が、図１０の葉１０−３であるとすると、かかる動的符号を、ハフマン木１０により、「１０１」に符号化する。
【００５２】
ファイルライト部１１１は、符号化部１１０から符号化データを取得し、取得した符号化データを符号化ファイルＦ２に書き込む処理部である。また、ファイルライト部１１１は、符号化ファイルＦ２のヘッダ部に、符号化ファイルＦ２の生成に用いられたアルゴリズムを識別する情報や、静的符号および動的符号の出現頻度表情報を格納する。ファイルライト部１１１は、トレーラ部に、静的辞書Ｃ２および動的辞書Ｄ２の情報を格納する。
【００５３】
図１１は、本実施例に係る伸長部の構成の一例を示す機能ブロック図である。図１１に示すように、伸長部１００ｂは、頻度表リード部２０１と、ハフマン木生成部２０２と、ハフマン木情報２０３を有する。また、伸長部１００ｂは、ファイルリード部２０４と、静的辞書情報２０５と、動的辞書情報２０６と、伸長処理部２０７と、ファイルライト部２０８とを有する。
【００５４】
頻度表リード部２０１は、符号化ファイルＦ２のヘッダ部に格納された静的符号および動的符号の出現頻度表情報を読み出して、ハフマン木生成部２０２に出力する処理部である。例えば、頻度表リード部２０１が読み出す出現頻度表情報は、図４の出現頻度表情報１０７に対応する。
【００５５】
ハフマン木生成部２０２は、出現頻度表情報を基にしてハフマン木情報２０３を生成する処理部である。ハフマン木生成部２０２がハフマン木を生成する処理は、図４のハフマン木生成部１０８の処理と同様である。また、ハフマン木情報２０３のデータ構造は、図１０に示したハフマン木情報１０９のデータ構造と同様である。
【００５６】
ハフマン木情報２０３は、ハフマン木情報１０９と同様にして、最上位に根ノード１１を有し、各節点１２が枝によって接続され、各最下位に葉１０−１〜１０−ｎを有する。例えば、各葉１０−１〜１０−ｎは、静的符号に対応する葉または動的符号に対応する葉となる。例えば、葉が、静的符号に対応する葉である場合には、葉の識別子と、予備情報と、静的辞書へのポインタとを格納する。例えば、静的辞書へのポインタは、静的辞書情報２０５における、静的符号に対応する基礎単語の位置を示すポインタとなる。
【００５７】
葉が、動的符号に対応する葉である場合には、葉の識別子と、予備情報と、動的辞書へのポインタとを格納する。例えば、動的辞書へのポインタは、動的符号に対応する動的辞書情報２０６の、バッファＤ３上の文字列または静的符号の位置を示すポインタとなる。ハフマン木生成部２０２は、動的符号に置き換えられた文字列に静的符号が含まれる場合には、静的符号に対応する基礎単語の位置を示す情報を、動的符号に対応する葉に格納しても良い。
【００５８】
ファイルリード部２０４は、符号化ファイルＦ２の符号化データを読み出す処理部である。ファイルリード部２０４は、符号化データを伸長処理部２０７に出力する。また、ファイルリード部２０４は、符号化ファイルのトレーラ部に格納された静的辞書Ｃ２の情報を読み出し、静的辞書情報２０５として図示しない記憶領域に格納する。ファイルリード部２０４は、符号化ファイルＦ２のトレーラ部に格納された動的辞書Ｄ２等の情報を読み出し、動的辞書情報２０６として図示しない記憶領域に格納する。
【００５９】
静的辞書情報２０５は、基礎単語と静的符号とを対応付ける情報である。例えば、静的辞書情報２０５のデータ構造は、図５に示した静的辞書Ｃ２のデータ構造に対応する。
【００６０】
動的辞書情報２０６は、動的符号と文字列または静的符号とを対応付ける情報である。例えば、動的辞書情報２０６のデータ構造は、図６に示した動的辞書Ｄ２およびバッファＤ３のデータ構造に対応する。
【００６１】
伸長処理部２０７は、ファイルリード部２０４から取得する符号化データと、ハフマン木情報２０３とを比較して、ハフマン木情報２０３を辿り、到達した葉に基づいて、符号化データに対応する伸長データを特定する。例えば、伸長処理部２０７は、到達した葉が、静的符号に対応する葉である場合には、静的辞書情報２０５へのポインタに示される基礎単語を、伸長データとして特定する。
【００６２】
伸長処理部２０７は、到達した葉が、動的符号に対応する葉である場合には、動的辞書情報２０６へのポインタに示されるバッファＤ３の文字列または静的符号を特定し、更に静的符号に対応する基礎単語を特定することで、伸長データを特定する。例えば、静的符号に対応する基礎単語の位置は、動的符号に対応する葉において、ポインタで示されているものとする。
【００６３】
伸長処理部２０７は、符号化データに対して上記の処理を繰り返し実行することで、伸長データを順次特定し、特定した伸長データをファイルライト部２０８に出力する。
【００６４】
ファイルライト部２０８は、伸長処理部２０７から取得する伸長データを、伸長ファイルＦ３に格納する処理部である。
【００６５】
次に、本実施例に係る圧縮部１００ａの処理手順について説明する。図１２は、本実施例に係る圧縮部の処理手順の一例を示すフローチャートである。図１２に示すように、圧縮部１００ａは、前処理を実行する（ステップＳ１０１）。ステップＳ１０１の前処理において、圧縮部１００ａは、記憶領域を記憶部１００ｃに確保する。
【００６６】
圧縮部１００ａのファイルリード部１０１は、ファイルＦ１をロードする（ステップＳ１０２）。圧縮部１００ａの静的符号化部１０３は、ファイルＦ１に対して静的符号化を行い、静的符号化データｆ１を生成する（ステップＳ１０３）。
【００６７】
圧縮部１００ａの動的符号化部１０５は、静的符号化データｆ１に対して動的符号化を行い、動的符号化データｆ２を生成する（ステップＳ１０４）。圧縮部１００ａの頻度情報生成部１０６は、動的符号化データｆ２を基にして、静的符号および動的符号の出現頻度を算出し、出現頻度表情報１０７を生成する（ステップＳ１０５）。
【００６８】
圧縮部１００ａのハフマン木生成部１０８は、出現頻度表情報１０７を基にして、ハフマン木情報１０９を生成する（ステップＳ１０６）。圧縮部１００ａの符号化部１１０は、ハフマン木情報を基にして、動的符号化データをハフマン圧縮し、ファイルライト部１１１は、圧縮データを符号化ファイルＦ２に格納する（ステップＳ１０７）。
【００６９】
ファイルライト部１１１は、符号化ファイルＦ２のヘッダ部に出現頻度表情報を格納し、トレーラ部に静的辞書Ｃ２および動的辞書Ｄ２の情報を格納する（ステップＳ１０８）。ファイルライト部１１１は、符号化ファイルＦ２をクローズする（ステップＳ１０９）。
【００７０】
次に、本実施例に係る伸長部１００ｂの処理手順について説明する。図１３は、本実施例に係る伸長部の処理手順の一例を示すフローチャートである。図１３に示すように、伸長部１００ｂは、前処理を実行する（ステップＳ２０１）。ステップＳ２０１の前処理において、圧縮部１００ａは、記憶領域を記憶部１００ｃに確保する。
【００７１】
伸長部１００ｂのファイルリード部２０４は、符号化ファイルＦ２をロードする（ステップＳ２０２）。伸長部１００ｂの頻度表リード部２０１は、符号化ファイルＦ２のヘッダ部から出現頻度表情報を読み出し（ステップＳ２０３）、ハフマン木生成部２０２は、ハフマン木情報２０３を生成する（ステップＳ２０４）。
【００７２】
ファイルリード部２０４は、符号化ファイルＦ２のトレーラ部から静的辞書および動的辞書の情報を読み出す（ステップＳ２０５）。伸長部１００ｂの伸長処理部２０７は、符号化データとハフマン木情報２０３とを比較して、符号化データに対応する葉を特定する（ステップＳ２０６）。
【００７３】
伸長処理部２０７は、葉を基にして、符号化データを伸長し、ファイルライト部２０８は、伸長データを伸長ファイルＦ３に書き込む（ステップＳ２０７）。伸長処理部２０７は、符号化ファイルＦ２の終点であるか否かを判定する（ステップＳ２０８）。伸長処理部２０７は、符号化ファイルＦ２の終点でない場合には（ステップＳ２０８，Ｎｏ）、ステップＳ２０６に移行する。
【００７４】
一方、伸長処理部２０７は、符号化ファイルＦ２の終点である場合には（ステップＳ２０８，Ｙｅｓ）、符号化ファイルＦ２をクローズする（ステップＳ２０９）。
【００７５】
次に、本実施例に係る情報処理装置１００の効果について説明する。情報処理装置１００の圧縮部１００ａは、静的符号化後のテキストに対して動的符号化を行い、静的符号および動的符号の出現頻度に基づくハフマン木情報１０９を生成し、ハフマン木情報１０９を基にしてテキストを符号化する。ハフマン木情報１０９に基づく符号化では、静的符号、動的符号の出現頻度に対応した符号長の符号が割り当てられる。このため、情報処理装置によれば、静的符号および動的符号の出現頻度に応じた符号化を行うことができる。
【００７６】
また、情報処理装置１００によれば、出現頻度表情報１０７に基づくハフマン木を生成して符号化、伸長を行うため、動的辞書を用いるのか静的辞書を用いるのかを区別するための識別ビットを付与しなくても良いという効果を得ることができる。
【００７７】
下記に、本実施形態に用いられるハードウェア及びソフトウェアについて説明する。図１４は、コンピュータのハードウェア構成例を示す。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【００７８】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【００７９】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【００８０】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていてもよいし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であってもよい。
【００８１】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って圧縮部１００ａの処理または伸張部１００ｂの処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１００ｃの機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（圧縮対象のファイルＦ１、圧縮された符号化ファイルＦ２など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図１５を用いて説明する。
【００８２】
図１５は、コンピュータで動作するプログラムの構成例を示す。コンピュータ１において、図１５に示すハードウェア群２１（３０１〜３１２）の制御を行なうＯＳ（オペレーティング・システム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア群２１の制御・管理が行なわれることにより、アプリケーションプログラム２４やミドルウェア２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェア２３またはアプリケーションプログラム２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【００８３】
プロセッサ３０１が、圧縮機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）圧縮部１００ａの機能が実現される。また、プロセッサ３０１が、伸張機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）伸張部１００ｂの機能が実現される。圧縮機能および伸張機能は、それぞれアプリケーションプログラム２４自体に含まれてもよいし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の一部であってもよい。
【００８４】
図１６は、実施形態のシステムにおける装置の構成例を示す。図１６のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【００８５】
図３に示す圧縮部１００ａと伸張部１００ｂとは、図１６に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれてもよい。コンピュータ１ｂが圧縮部１００ａを含み、コンピュータ１ａが伸張部１００ｂを含んでもよいし、コンピュータ１ｂが圧縮部１００ａを含み、コンピュータ１ａが伸張部１００ｂを含んでもよい。また、コンピュータ１ａとコンピュータ１ｂとの双方が、圧縮部１００ａおよび伸張部１００ｂを備えてもよい。
【００８６】
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。圧縮処理の対象は、ファイル内のデータ以外にも、システムから出力される監視メッセージなどでもよい。例えば、バッファに順次格納される監視メッセージを上述の圧縮処理により圧縮し、ログファイルとして格納するなどの処理が行なわれる。また、例えば、データベース内のページ単位に圧縮が行なわれてもよいし、複数のページをまとめた単位で圧縮が行なわれてもよい。
【００８７】
また、上述の圧縮処理の対象となるデータは、上述の通り、文字情報に限定されるものではない。数値のみの情報であってもよいし、画像・音声などのデータに対して上述の圧縮処理を用いてもよい。例えば、音声合成により得られるデータを多量に含むファイルなどは、データ内に繰り返しを多く含むため動的辞書により圧縮率が向上することが見込まれる。当然その一部のみが利用される場合には、部分伸張により余分な伸張処理が抑制される。また、固定カメラにより撮影された動画像についても各フレームの画像が似たものになることから繰り返しが多く含まれる。そのため、上述の圧縮処理を適用することにより、文書データや音声データと同様の効果を得ることができる。
【００８８】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００８９】
（付記１）コンピュータに、
入力テキストデータに対し、文字列と静的符号とを対応付けた静的辞書を参照して、前記静的辞書に登録された文字列を静的符号に符号化した、静的符号化データを生成し、
前記静的符号化データに対し、複数回出現する文字列または前記静的符号を動的符号に符号化した動的符号化データを生成し、前記動的符号と、前記動的符号に対応する文字列または静的符号とを対応付けた動的辞書を生成し、
前記入力テキストデータにおける、前記動的符号および前記静的符号の出現頻度を基にして、ハフマン木および前記ハフマン木の葉のデータを生成する
処理を実行させることを特徴とする符号化プログラム。
【００９０】
（付記２）前記ハフマン木および前記葉のデータを基にして、前記動的符号化データに含まれる前記動的符号および前記静的符号を符号化する処理を更にコンピュータに実行させることを特徴とする付記１に記載の符号化プログラム。
【００９１】
（付記３）前記ハフマン木および前記ハフマン木の葉のデータを生成する処理は、出現頻度の低い前記動的符号または前記静的符号に対する符号の符号長よりも、出現頻度の高い前記動的符号または前記静的符号に対する符号の符号長の方が短くなるハフマン木を生成することを特徴とする付記１に記載の符号化プログラム。
【００９２】
（付記４）前記動的符号化データに含まれる動的符号の出現頻度および静的符号の出現頻度を特定し、動的符号および該動的符号の出現頻度を対応付けた情報と、静的符号および該静的符号の出現頻度を対応付けた情報を格納する処理を更にコンピュータに実行させることを特徴とする付記１に記載の符号化プログラム。
【００９３】
（付記５）コンピュータが実行する符号化方法であって、
入力テキストデータに対し、文字列と静的符号とを対応付けた静的辞書を参照して、前記静的辞書に登録された文字列を静的符号に符号化した、静的符号化データを生成し、
前記静的符号化データに対し、複数回出現する文字列または前記静的符号を動的符号に符号化した動的符号化データを生成し、前記動的符号と、前記動的符号に対応する文字列または静的符号とを対応付けた動的辞書を生成し、
前記入力テキストデータにおける、前記動的符号および前記静的符号の出現頻度を基にして、ハフマン木および前記ハフマン木の葉のデータを生成する
処理を実行することを特徴とする符号化方法。
【００９４】
（付記６）前記ハフマン木および前記葉のデータを基にして、前記動的符号化データに含まれる前記動的符号および前記静的符号を符号化する処理を更にコンピュータに実行させることを特徴とする付記５に記載の符号化方法。
【００９５】
（付記７）前記ハフマン木および前記ハフマン木の葉のデータを生成する処理は、出現頻度の低い前記動的符号または前記静的符号に対する符号の符号長よりも、出現頻度の高い前記動的符号または前記静的符号に対する符号の符号長の方が短くなるハフマン木を生成することを特徴とする付記５に記載の符号化方法。
【００９６】
（付記８）前記動的符号化データに含まれる動的符号の出現頻度および静的符号の出現頻度を特定し、動的符号および該動的符号の出現頻度を対応付けた情報と、静的符号および該静的符号の出現頻度を対応付けた情報を格納する処理を更に実行することを特徴とする付記５に記載の符号化方法。
【００９７】
（付記９）入力テキストデータに対し、文字列と静的符号とを対応付けた静的辞書を参照して、前記静的辞書に登録された文字列を静的符号に符号化した、静的符号化データを生成する静的符号化部と、
前記静的符号化データに対し、複数回出現する文字列または前記静的符号を動的符号に符号化した動的符号化データを生成し、前記動的符号と、前記動的符号に対応する文字列または静的符号とを対応付けた動的辞書を生成する動的符号化部と、
前記入力テキストデータにおける、前記動的符号および前記静的符号の出現頻度を基にして、ハフマン木および前記ハフマン木の葉のデータを生成するハフマン木生成部と
を有することを特徴とする符号化装置。
【００９８】
（付記１０）前記ハフマン木および前記葉のデータを基にして、前記動的符号化データに含まれる前記動的符号および前記静的符号を符号化する符号化部を更に有することを特徴とする付記９に記載の符号化装置。
【００９９】
（付記１１）前記ハフマン木生成部は、出現頻度の低い前記動的符号または前記静的符号に対する符号の符号長よりも、出現頻度の高い前記動的符号または前記静的符号に対する符号の符号長の方が短くなるハフマン木を生成することを特徴とする付記９に記載の符号化装置。
【０１００】
（付記１２）前記動的符号化データに含まれる動的符号の出現頻度および静的符号の出現頻度を特定し、動的符号および該動的符号の出現頻度を対応付けた情報と、静的符号および該静的符号の出現頻度を対応付けた情報を格納する格納部を更に有することを特徴とする付記９に記載の符号化装置。
【０１０１】
（付記１３）コンピュータに、
入力する符号化ファイルのヘッダ部より、出現頻度表情報を読み出し、
前記出現頻度情報より得られる、動的符号および静的符号の出現頻度に関する情報に基づき、ハフマン木および前記ハフマン木の葉のデータを生成し、
前記ハフマン木および前記ハフマン木の葉のデータと、前記符号化ファイルに含まれる符号化データとを基にして、前記符号化ファイルを復号化する
処理を実行させることを特徴とする復号化プログラム。
【０１０２】
（付記１４）コンピュータが実行する復号化方法であって、
入力する符号化ファイルのヘッダ部より、出現頻度表情報を読み出し、
前記出現頻度情報より得られる、動的符号および静的符号の出現頻度に関する情報に基づき、ハフマン木および前記ハフマン木の葉のデータを生成し、
前記ハフマン木および前記ハフマン木の葉のデータと、前記符号化ファイルに含まれる符号化データとを基にして、前記符号化ファイルを復号化する
処理を実行することを特徴とする復号化方法。
【０１０３】
（付記１５）入力する符号化ファイルのヘッダ部より、出現頻度表情報を読み出し、前記出現頻度情報より得られる、動的符号および静的符号の出現頻度に関する情報に基づき、ハフマン木および前記ハフマン木の葉のデータを生成する生成部と、
前記ハフマン木および前記ハフマン木の葉のデータと、前記符号化ファイルに含まれる符号化データとを基にして、前記符号化ファイルを復号化する復号化部と
を有することを特徴とする復号化装置。
【符号の説明】
【０１０４】
１００    情報処理装置
１００ａ  圧縮部
１００ｂ  伸長部
【図１】
0006641857.tif 000002
【図２】
0006641857.tif 000003
【図３】
0006641857.tif 000004
【図４】
0006641857.tif 000005
【図５】
0006641857.tif 000006
【図６】
0006641857.tif 000007
【図７】
0006641857.tif 000008
【図８】
0006641857.tif 000009
【図９】
0006641857.tif 000010
【図１０】
0006641857.tif 000011
【図１１】
0006641857.tif 000012
【図１２】
0006641857.tif 000013
【図１３】
0006641857.tif 000014
【図１４】
0006641857.tif 000015
【図１５】
0006641857.tif 000016
【図１６】
0006641857.tif 000017