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