(57)【特許請求の範囲】
【請求項１】
入力データを構成する複数の要素のうちの１つである第１の要素と、前記複数の要素それぞれを区切る区切り記号であって、前記第１の要素と前記入力データにおいて連続する第１の区切り記号と、の組み合わせに対応する第１の圧縮符号を、前記第１の要素と前記第１の区切り記号との組み合わせに対応付けて記憶する記憶部と、
前記入力データからの連続する前記第１の要素および前記第１の区切り記号の読み出しに応じ、前記記憶部から前記第１の圧縮符号を取得する取得部と、
前記第１の圧縮符号を、前記入力データの圧縮データを格納する格納領域に書き込む書込部と、
を含むことを特徴とする圧縮装置。
【請求項２】
前記記憶部は、前記第１の区切り記号を取り消す指示を示す制御記号と、前記複数の要素それぞれを区切る区切り記号であって、前記第１の区切り記号と異なる第２の区切り記号と、の組み合わせに対応する第２の制御符号を、前記第２の区切り記号と対応付けて記憶し、
前記取得部は、前記入力データからの連続する前記第１の要素および前記第２の区切り記号の読み出しに応じ、前記記憶部から前記第１の圧縮符号および前記第２の制御符号を取得し、
前記書込部は、前記第２の制御符号を、前記格納領域の前記第１の圧縮符号に連続する位置に書き込む、
ことを特徴とする請求項１に記載の圧縮装置。
【請求項３】
コンピュータに、
入力データを構成する複数の要素のうちの１つである第１の要素と、前記複数の要素それぞれを区切る区切り記号であって、前記第１の要素と前記入力データにおいて連続する第１の区切り記号と、の組み合わせに対応する第１の圧縮符号を、前記第１の要素と前記第１の区切り記号との組み合わせに対応付けて記憶する記憶装置から、前記入力データからの連続する前記第１の要素および前記第１の区切り記号の読み出しに応じ、前記第１の圧縮符号を取得し、
前記第１の圧縮符号を、前記入力データの圧縮データを格納する格納領域に書き込む、
ことを実行させることを特徴とする圧縮方法。
【請求項４】
コンピュータに、
入力データを構成する複数の要素のうちの１つである第１の要素と、前記複数の要素それぞれを区切る区切り記号であって、前記第１の要素と前記入力データにおいて連続する第１の区切り記号と、の組み合わせに対応する第１の圧縮符号を、前記第１の要素と前記第１の区切り記号との組み合わせに対応付けて記憶する記憶装置から、前記入力データからの連続する前記第１の要素および前記第１の区切り記号の読み出しに応じ、前記第１の圧縮符号を取得し、
前記第１の圧縮符号を、前記入力データの圧縮データを格納する格納領域に書き込む、
処理を実行させることを特徴とする圧縮プログラムを格納する記録媒体。
【請求項５】
データを構成する要素のうちの１つである第１の要素と、前記データにおいて前記要素間の区切りを示す第１の区切り記号との組み合わせを、１つの圧縮符号と対応付けて記憶する記憶部と、
前記データを圧縮して得られる圧縮データから読み出された前記圧縮符号に対応する前記組み合わせを、前記記憶部から取得する取得部と、
取得した前記組み合わせに含まれる前記第１の要素及び前記第１の区切り記号の双方を、前記圧縮データを伸張して得られる伸張データの格納領域に書き込む書込部と、
を含み、
前記記憶部は、さらに、前記第１の区切り記号を取り消す指示を示す制御記号と、前記データにおいて前記要素間の区切りを示す区切り記号であって前記第１の区切り記号と種類が異なる第２の区切り記号との組み合わせを、前記圧縮符号と異なる他の圧縮符号と対応付けて記憶し、
前記取得部は、前記圧縮データから前記圧縮符号に後続する前記他の圧縮符号を読み出した場合に、前記第１の要素および前記第１の区切り記号に続いて、さらに前記制御記号および前記第２の区切り記号を前記記憶部から取得し、
前記書込部は、さらに、前記制御記号および前記第２の区切り記号を取得すると、取得した前記第２の区切り記号を、前記格納領域内の前記第１の区切り記号の格納位置に書き込むことを特徴とする伸張装置。
【請求項６】
前記他の圧縮符号に対応づけられる組み合わせに、前記制御記号および前記第２の区切り記号に加えて、前記第１の区切り記号が含まれる、
ことを特徴とする請求項５に記載の伸張装置。
【発明の詳細な説明】
【技術分野】
【０００１】
データの圧縮技術または伸張技術の少なくとも一方に関する。
【背景技術】
【０００２】
ハフマン符号化や算術圧縮などの可変長圧縮符号を用いた圧縮アルゴリズムによれば、圧縮対象データ内の文字コードに対応する圧縮符号を用いて圧縮データが生成される。また、ハフマン符号化などの圧縮アルゴリズムを利用して、文字コードの組み合わせである単語に対応づけられた圧縮符号を割り当てて圧縮データの生成を行なう圧縮技術がある（例えば、特許文献１など参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−９３４１４号公報
【発明の概要】
【解決しようとする課題】
【０００４】
特定の言語（例えば、英語やドイツ語など）においては、文書を構成する文字列の中に含まれるスペース記号により、文書を構成する単位である単語の区切りが示される。上述の圧縮アルゴリズムでは、複数の文字を含む単語に対して１つの圧縮符号が割り当てられる一方、スペース記号に対しても圧縮符号が割り当てられる。単語と同等にスペース記号にも圧縮符号が割り当てられるため、圧縮に用いられる圧縮符号数が多くなり、圧縮率が低下する要因となる。
【０００５】
本発明の一側面によれば、データを構成する単位間の区切りが記号により示されるデータの圧縮において圧縮率を向上させることを目的とする。
【課題を解決するための手段】
【０００６】
一態様によれば、圧縮装置は、入力データを構成する複数の要素のうちの１つである第１の要素と、前記複数の要素それぞれを区切る区切り記号であって、前記第１の要素と前記入力データにおいて連続する第１の区切り記号と、の組み合わせに対応する第１の圧縮符号を、前記第１の要素と前記第１の区切り記号との組み合わせに対応付けて記憶する記憶部と、前記入力データからの連続する前記第１の要素および前記第１の区切り記号の読み出しに応じ、前記記憶部から前記第１の圧縮符号を取得する取得部と、前記第１の圧縮符号を、前記入力データの圧縮データを格納する格納領域に書き込む書込部と、を含む。
【０００７】
一態様によれば、伸張装置は、データを構成する要素のうちの１つである第１の要素と、前記データにおいて前記要素間の区切りを示す第１の区切り記号との組み合わせを、１つの圧縮符号と対応付けて記憶する記憶部と、前記データを圧縮して得られる圧縮データから読み出された前記圧縮符号に対応する前記組み合わせを、前記記憶部から取得する取得部と、取得した前記組み合わせに含まれる前記第１の要素及び前記第１の区切り記号の双方を、前記圧縮データを伸張して得られる伸張データの格納領域に書き込む書込部と、を含む。【０００８】
一態様によれば、情報処理システムは、記憶装置と情報処理装置を含み、情報処理装置は、データを構成する要素のうちの１つである第１の要素と前記データにおいて前記要素間の区切りを示す区切り記号の組み合わせと、１つの圧縮符号とが対応付けられた変換辞書を記憶する記憶部と、前記記憶装置から、データを圧縮して得られる圧縮データを受ける受信部と、前記圧縮データから読み出された前記圧縮符号に対応する前記組み合わせを、前記変換辞書から取得する第１の取得部と、取得した前記組み合わせに含まれる前記第１の要素及び前記区切り記号の双方を、前記圧縮データを伸張して得られる伸張データの第１の格納領域に書き込む第１の書込部と、前記第１の格納領域に書き込まれた前記伸長データに対して情報処理を行なう処理部と、前記情報処理が行なわれた前記伸長データから読み出された前記第１の要素に対応付けて記憶された前記圧縮符号を、前記変換辞書から取得する第２の取得部と、取得した前記圧縮符号を、前記データの圧縮データを格納する第２の格納領域に書き込む第１の書込部と、前記第２の格納領域に書き込まれた圧縮データを、前記記憶部に送信する送信部と、を含む。【０００９】
一態様によれば、コンピュータ読み取り可能な記憶媒体は、データにおいて要素間の区切りを示す区切り記号と、前記区切り記号によって区切られる１つのデータ要素との組み合わせに対応する１つの圧縮符号を前記データ要素に対応づけた圧縮処理用情報を、前記データ要素の種類ごとに含む構造を有する圧縮辞書データであって、コンピュータによる圧縮処理において、前記１つのデータ要素に基づいて前記１つの圧縮符号が参照される前記圧縮辞書データ、を記憶する。【００１０】
一態様によれば、コンピュータ読み取り可能な記憶媒体は、データにおいて要素間の区切りを示す区切り記号と、前記区切り記号によって区切られる１つのデータ要素との組み合わせを、前記組み合わせに対応する１つの圧縮符号と対応づけた伸長処理用情報を、前記データ要素の種類ごとに含む構造を有する伸長辞書データであって、コンピュータによる伸張処理において、前記１つの圧縮符号に基づいて前記組み合わせが参照される前記伸張辞書データ、を記憶する。
【発明の効果】
【００１１】
一側面によれば、スペース記号が用いられる文書データの圧縮効率を向上できる。
【図面の簡単な説明】
【００１２】
【図１】図１は、圧縮辞書の例を示す。
【図２】図２は、圧縮符号への変換例を示す。
【図３】図３は、伸張データへの変換例を示す。
【図４】図４は、機能ブロックの構成例を示す。
【図５】図５は、圧縮機能の処理手順例を示す。
【図６】図６は、圧縮辞書生成の処理手順例を示す。
【図７】図７は、統計処理の処理手順例を示す。
【図８】図８は、統計テーブルＴ１のデータ構造の例を示す。
【図９】図９は、圧縮データ生成処理の処理手順例を示す。
【図１０】図１０は、圧縮データ生成処理の処理手順例を示す。
【図１１】図１１は、圧縮辞書のデータ構造例を示す。
【図１２】図１２は、伸張機能の処理手順例を示す。
【図１３】図１３は、伸張辞書生成の処理手順例を示す。
【図１４】図１４は、伸張データ生成処理の処理手順例を示す。
【図１５】図１５は、伸張辞書のデータ構造例を示す。
【図１６】図１６は、コンピュータ１のハードウェア構成例を示す。
【図１７】図１７は、コンピュータ１で動作するプログラム構成例を示す。
【図１８】図１８は、コンピュータ１を用いたシステム構成例を示す。
【図１９】図１９は、コンピュータ１を用いたシステム構成例を示す。
【図２０】図２０は、圧縮辞書のデータ構造例を示す。
【図２１】図２１は、伸張辞書のデータ構造例を示す。
【図２２】図２２は、ｃｓｖ形式のデータ構造の例を示す。
【図２３】図２３は、圧縮辞書のデータ構造例を示す。
【図２４】図２４は、伸張辞書のデータ構造例を示す。
【発明を実施するための形態】
【００１３】
以下に実施の形態が示される。
【００１４】
［圧縮符号の例］
図１は、圧縮辞書の例を示す。圧縮辞書Ｄ０は、記号圧縮辞書Ｄ０１および記号列圧縮辞書Ｄ０２を含む。記号圧縮辞書Ｄ０１は、文字や数字などの記号を示す文字コードと圧縮符号との対応関係を示す。記号列圧縮辞書Ｄ０２は、単語やタグなどの記号列を示す文字コード列と圧縮符号との対応関係を示す。圧縮辞書Ｄ１は、記号圧縮辞書Ｄ１１、記号列圧縮辞書Ｄ１２および制御記号圧縮辞書Ｄ１３を含む。記号圧縮辞書Ｄ１１は、文字や数字などの記号を示す文字コードと、圧縮符号との対応関係を示す。記号列圧縮辞書Ｄ１２は、単語やタグなどの記号列およびスペース記号の組み合わせを示す文字コード列と圧縮符号との対応関係を示す。制御記号圧縮辞書Ｄ１３は、直前のスペース記号を削除する旨の制御記号および区切り記号の組み合わせを示す文字コード列と、圧縮符号との対応関係を示す。
【００１５】
図１に例示される圧縮辞書Ｄ０および圧縮辞書Ｄ１には、圧縮符号と、圧縮符号と対応付けられた記号または記号列とが対応付けて登録されている。圧縮辞書Ｄ０や圧縮辞書Ｄ１に登録された記号または記号列のうち、圧縮対象のデータから読み出された記号または記号列と一致する記号または記号列に対応する圧縮符号が読み出される。
【００１６】
本実施の形態において、圧縮辞書Ｄ０に含まれる圧縮符号は「ｃ´（）」で示される。圧縮符号を「ｃ´（）」と示す場合には、丸括弧内に圧縮符号に対応する記号または記号列が示される。また、圧縮辞書Ｄ１に含まれる圧縮符号は「ｃ（）」で示される。圧縮符号ｃ（）においても、丸括弧内に圧縮符号に対応する記号または記号列が示される。例えば、「ａ」に対応する圧縮符号は「圧縮符号ｃ（ａ）」などと示され、「ａｂｏｕｔ△」に対応する圧縮符号は「圧縮符号ｃ（ａｂｏｕｔ△）」などと示される。スペース記号は、ＡＳＣＩＩコード系において０ｘ２０で示される記号であり、本実施の形態の説明においては「△」と示される。
【００１７】
また、詳細は後述されるが、直前に伸張されたスペース記号を削除する旨の制御記号は、「［−△］」と示される。例えば、制御記号［−△］および区切り記号「；」の組み合わせには、圧縮符号ｃ（［−△］；）が対応する。
【００１８】
圧縮辞書Ｄ０内の記号列圧縮辞書Ｄ０２は、記号列とスペース記号のそれぞれに対して圧縮符号を対応付けるのに対し、圧縮辞書Ｄ１内の記号列圧縮辞書Ｄ１２は、記号列単体ではなく、記号列とスペース記号との組み合わせに対して１つの圧縮符号を対応付ける。圧縮辞書Ｄ１を用いて圧縮が行なわれる場合には、圧縮対象のデータ内に存在する記号列とスペース記号との組み合わせは、記号列圧縮辞書Ｄ１２に登録された組み合わせに対応する圧縮符号により符号化される。
【００１９】
一方で、記号列と、スペース記号以外の区切り記号（カンマやコロンなど）との組み合わせは、記号列圧縮辞書Ｄ１１内に登録されていない。圧縮対象のデータ内には、スペース記号が後続する記号列だけでなく、スペース記号以外の区切りが後続する記号列も存在しうる。カンマやコロンなどのスペース記号と異なる区切り記号それぞれについて記号列圧縮辞書Ｄ１２が設けられると、圧縮符号の種類が増大し、その結果、圧縮辞書のデータサイズが増大する。そこで、スペース記号を削除する旨を示す制御記号が各単語に対して共通で用いられる。圧縮辞書Ｄ１内の制御記号圧縮辞書Ｄ１３において、制御記号と区切り記号との組み合わせが、１つの圧縮符号と対応づけられる。圧縮対象のデータ内の記号列とスペース記号以外の区切り記号との組み合わせに対しては、記号列圧縮辞書Ｄ１２内の圧縮符号と、制御記号圧縮辞書Ｄ１３内の圧縮符号とが組み合わされて符号化される。制御記号圧縮辞書Ｄ１３に登録される圧縮符号が、記号列圧縮辞書Ｄ１２に登録される各単語に対して共通して用いられており、各区切り記号に対して個別に記号列圧縮辞書Ｄ１２を設けるよりも圧縮辞書のデータサイズが増大しにくい。
【００２０】
図２は、圧縮符号への変換例を示す。図２には、英語例文Ｅ１「Ｈｅ△ｓｐｅｎｔ△ｍｕｃｈ△ｔｉｍｅ△ｆｏｒ△ｔａｌｋｉｎｇ△ａｂｏｕｔ△ｈｉｓ△ｉｎｖｅｎｔｉｏｎ．」が示される。図２の例において、英語例文Ｅ１は、記憶領域Ａ１に格納された状態である。英語例文Ｅ１中の「ａｂｏｕｔ△」および「ｉｎｖｅｎｔｉｏｎ．」のそれぞれの部分について、圧縮符号の例（１）〜（４）が示される。圧縮符号の例（１）および例（３）は、圧縮辞書Ｄ０に含まれる圧縮符号が用いられた例であり、圧縮符号の例（２）および例（４）は、圧縮辞書Ｄ１に含まれる圧縮符号が用いられた例である。
【００２１】
図２の例（１）は、英語例文Ｅ１中の「ａｂｏｕｔ△」の部分が圧縮辞書Ｄ０に基づいて圧縮された場合の例を示す。「ａｂｏｕｔ△」に含まれる単語「ａｂｏｕｔ」および記号「△」のそれぞれに対応する圧縮符号ｃ´（ａｂｏｕｔ）および圧縮符号ｃ´（△）が圧縮データに用いられる。すなわち、例（１）において、英語例文Ｅ１中の「ａｂｏｕｔ△」の部分に対応する圧縮データは、「ｃ´（ａｂｏｕｔ）ｃ´（△）」となる。
【００２２】
図２の例（２）は、英語例文Ｅ１中の「ａｂｏｕｔ△」の部分が圧縮辞書Ｄ１に基づいて圧縮された場合の例を示す。記号列圧縮辞書Ｄ１２に単語「ａｂｏｕｔ△」が登録されているので、英語例文Ｅ１中の「ａｂｏｕｔ△」の部分に対応する圧縮データは、「ｃ（ａｂｏｕｔ△）」となる。例（１）においては「ａｂｏｕｔ△」の部分の圧縮データが２つの圧縮符号で構成されるのに対し、例（２）においては「ａｂｏｕｔ△」の部分の圧縮データを構成する圧縮符号は１つである。
【００２３】
図２の例（３）は、英語例文Ｅ１中の「ｉｎｖｅｎｔｉｏｎ．」の部分が圧縮辞書Ｄ０に基づいて圧縮された場合の例を示す。「ｉｎｖｅｎｔｉｏｎ．」に含まれる単語「ｉｎｖｅｎｔｉｏｎ」および記号「．」のそれぞれに対応する圧縮符号ｃ´（ｉｎｖｅｎｔｉｏｎ）および圧縮符号ｃ´（．）が圧縮データに用いられる。すなわち、例（３）においては英語例文Ｅ１中の「ｉｎｖｅｎｔｉｏｎ．」の部分に対応する圧縮データは、「ｃ´（ｉｎｖｅｎｔｉｏｎ）ｃ´（．）」となる。
【００２４】
図２の例（４）は、英語例文Ｅ１中の「ｉｎｖｅｎｔｉｏｎ．」の部分が圧縮辞書Ｄ１に基づいて圧縮された場合の例を示す。記号列圧縮辞書Ｄ１２に、単語「ｉｎｖｅｎｔｉｏｎ△」が登録されている。記号列圧縮辞書Ｄ１２に登録された記号列の最後のスペース記号「△」が「．」、「，」、「；」および「：」などのスペース記号以外の区切り記号である場合には、スペース記号「△」を含む圧縮符号（「ｉｎｖｅｎｔｉｏｎ△」）が圧縮データに用いられる。すなわち、圧縮対象の部分が「ｉｎｖｅｎｔｉｏｎ．」であっても、圧縮符号ｃ（ｉｎｖｅｎｔｉｏｎ△）が用いられる。この場合には、さらに、制御記号圧縮辞書Ｄ１３に登録された圧縮符号ｃ（［−△］．）が用いられる。圧縮符号ｃ（［−△］．）は、制御記号［−△］と記号「．」との組み合わせに対応する圧縮符号である。制御記号［−△］は、直前のスペースを打ち消す旨を示す制御記号である。制御記号を示すコードには、圧縮対象のデータが使用する文字コード系における空きコードが割り当てられる。
【００２５】
例（４）においては英語例文Ｅ１中の「ｉｎｖｅｎｔｉｏｎ．」の部分に対応する圧縮データは、「ｃ（ｉｎｖｅｎｔｉｏｎ△）ｃ（［−△］．）」となる。例（３）においても例（４）においても「ｉｎｖｅｎｔｉｏｎ．」に対応する圧縮データを構成する圧縮符号の数は２つである。
【００２６】
圧縮対象のデータ内でスペース記号が使用される場合には圧縮辞書Ｄ１を用いた方が圧縮辞書Ｄ０を用いるよりも圧縮データに含まれる圧縮符号の数は少ない。その一方で、スペース記号以外の区切り記号が存在する場合には、圧縮辞書Ｄ０を用いても圧縮辞書Ｄ１を用いても圧縮データに含まれる圧縮符号の数は同じである。そのため、記号列圧縮辞書Ｄ１２に登録された記号列およびスペース記号の組み合わせが圧縮対象のデータ内に存在すれば、圧縮辞書Ｄ０よりも圧縮辞書Ｄ１を用いた方が圧縮データに使用される圧縮符号の数が少なくなる。
【００２７】
さらに、スペース記号は圧縮対象のデータ内の単語とほぼ同数含まれる。英語などの言語で記述された文書データにおいては、単語と単語との境目がスペース記号で表現されるためである。一方、スペース記号以外の区切り記号は、一文の中に１回か２回程度用いられる。文書データにおいて、スペース記号以外の区切り記号よりもスペース記号の方が用いられる頻度が高い。
【００２８】
一方、圧縮辞書Ｄ０と比較して、制御記号圧縮辞書Ｄ１３内の登録される圧縮符号の数だけ、圧縮辞書Ｄ１内の圧縮符号の数が多い。しかしながら、制御記号圧縮辞書Ｄ１３内の圧縮符号の数は、文字の種類と比較して圧倒的に少ない。例えば、エクスクラメーション、カンマ、ピリオド、コロン、セミコロンおよびクエスチョンに関する圧縮符号の制御記号圧縮辞書Ｄ１３への登録が行なわれたとしても、取り扱われる圧縮符号の種類の数が６種類増大するだけである。
【００２９】
圧縮符号の種類が６種類増えたとしても、圧縮辞書全体として、圧縮符号長はほぼ変わらない。たとえ、圧縮辞書内に含まれる圧縮符号の種類の数が倍になったとしても、各圧縮符号について圧縮符号長が１ビット増加する程度である。
【００３０】
そのため、単語数と同程度の頻度で存在するスペース記号を単語と組み合わせて圧縮辞書に登録した方が、制御記号圧縮辞書Ｄ１３が加わることによる圧縮符号長の増大よりも影響が大きい。そのため、圧縮辞書Ｄ１を用いた圧縮により圧縮率の向上が見込まれる。
【００３１】
［伸張手順の例］
図３は、伸張データへの変換例を示す。図３には、図２で圧縮辞書Ｄ１を用いて生成された圧縮データの例である圧縮符号「ｃ（ｉｎｖｅｎｔｉｏｎ）ｃ（［−△］．）」に対応する伸張データの生成過程（１）〜（５）が例示されている。記憶領域Ａ３は圧縮データが格納される記憶領域である。記憶領域Ａ５は記憶領域Ａ３に格納された圧縮符号に対応する伸張コードが格納されるバッファ領域である。また、記憶領域Ａ４は、記憶領域Ａ５に格納される伸張コードに基づき生成される伸張データが格納される記憶領域である。
【００３２】
図３の過程（１）は、記憶領域Ａ３に圧縮データが格納されている状態を示す。まず、圧縮符号ｃ（ｉｎｖｅｎｔｉｏｎ△）に対応する伸張コードの生成が行なわれる。図３の過程（２）は、過程（１）で生成された伸張コードが記憶領域Ａ４に書き込まれた状態である。次に、圧縮符号ｃ（［−△］．）に対応する伸張コードの生成が行なわれる。図３の過程（３）は、過程（２）で生成された伸張コード「［−△］」と「．」とが書き込まれた状態を示す。記憶領域Ａ５に格納されている制御記号［−△］に基づく制御が記憶領域Ａ４に対して行なわれる。図３の過程（４）は、制御記号［−△］に基づく制御が行なわれた状態を示す。過程（３）の状態で「ｉｎｖｅｎｔｉｏｎ」に続いて存在していたスペース記号△が、過程（４）の状態では削除されている。さらに、記憶領域Ａ５に格納されている「．」に基づいて記憶領域Ａ４への書込みが行なわれる。図３の過程（５）は、「ｉｎｖｅｎｔｉｏｎ」に続いて「．」が書き込まれた状態を示す。
【００３３】
図３の過程（３）において、記憶領域Ａ４内のスペース記号△を削除せずに、記憶領域Ａ４への書込み位置をずらすだけでもよい。その場合には、制御記号に後続する記号（この場合には「．」）は、スペース記号が書き込まれていた位置に上書きされる。
【００３４】
上述の過程で制御記号［−△］に応じた変換処理が行なわれる。制御記号［−△］を用いることにより、末尾のスペース記号が一致しない記号列に対しても圧縮辞書Ｄ１に登録された記号列に対応する圧縮符号を用いて圧縮データを生成することによる不整合が解消される。
【００３５】
上述の圧縮処理によれば、圧縮符号の種類の増大を少量に抑えつつ、圧縮データに用いられる圧縮符号の数を低減させることができるので、圧縮率が向上する。さらに、上述の圧縮処理で圧縮された圧縮データを伸張する場合には、処理対象となる圧縮符号の数が少なくなるので、伸張速度の向上が見込まれる。
【００３６】
スペース記号に対応する圧縮符号が圧縮データ内に頻出することを抑制するために、例えば、圧縮処理においてそもそもスペース記号に対応する圧縮符号が生成されずに、伸張処理において単語を生成するたびにスペース記号を自動生成することが考えられる。
【００３７】
しかしながら、圧縮辞書に登録されていない単語については文字単位で圧縮符号の生成処理が行なわれる。圧縮データ内には単語を示す圧縮符号と文字などの記号を示す圧縮符号とが含まれるので、圧縮符号に対応する伸張コードが単語であるか記号であるの判定が、伸張コードを生成するたびに行なわれる。また、圧縮符号が単語に対応する圧縮符号であるか文字に対応する圧縮符号であるかを識別するための仕組みが必要となる。
【００３８】
さらに、単語に続いてスペース記号以外の区切り記号が存在することもありうるので、伸張コードが単語と判定された後に、単語の次の伸張コードがスペース記号以外の区切り記号であるか否かの判定が行なわれることとなる。この判定が行なわれると、複数の伸張コードにまたがってスペース記号を配置するかの判定が行なわれるため、判定のアルゴリズムが煩雑になる。その結果、伸張速度が劣化するとともに、すでに存在する伸張プログラムのソースコードに対して大幅な変更が必要となる。
【００３９】
本実施例の伸張処理においては、伸張コードが制御記号であるか否かの判定が行なわれるのみである。例えば、レジスタに書き込まれた制御記号と、伸張辞書から読み出された伸張コードが書き込まれるレジスタとの判定処理を行なうことで実現される。１つの伸張コードに対して多重に判定処理を行なうことや、複雑なアルゴリズムで伸張プログラムを作成することが回避される。また、複数の伸張コードにまたがって処理を行なうことが抑制されるので、使用するレジスタの数も抑制することができる。
【００４０】
［機能・処理手順の説明］
図４は、機能ブロックの構成例を示す。コンピュータ１は、圧縮部１１、伸張部１２、生成部１３、生成部１４および記憶部１５を含む。記憶部１５は、例えば、圧縮対象のファイルＦ１、圧縮ファイルＦ２、伸張ファイルＦ３、圧縮辞書Ｄ２や伸張辞書Ｄ３などを記憶する。また、記憶部１５は、例えば圧縮辞書Ｄ２や伸張辞書Ｄ３の生成に用いられる単語リストＬ１を記憶する。単語リストＬ１は、圧縮符号を割り当てる対象の単語群のリストである。また、記憶部１５は、記憶領域Ａ１、Ａ２、Ａ３、Ａ４およびＡ５などの記憶領域を設け、圧縮部１１、伸張部１２、生成部１３および生成部１４の処理のワークエリアとして用いられる。圧縮部１１は、記憶部１５に記憶されたファイルＦ１の圧縮処理を実行し、圧縮ファイルＦ２を生成する。伸張部１２は、記憶部１５に記憶された圧縮ファイルＦ２の伸張処理を実行し、伸張ファイルＦ３を生成する。生成部１３は、圧縮部１１の圧縮処理で用いられる圧縮辞書Ｄ２を生成する。生成部１４は、伸張部１２の伸張処理で用いられる伸張辞書Ｄ３を生成する。
【００４１】
圧縮部１１は、制御部１１１、検索部１１２、読出部１１３および書込部１１４を含む。制御部１１１は、検索部１１２、読出部１１３および書込部１１４を制御し、ファイルＦ１の圧縮処理を実行する。制御部１１１は、ファイルＦ１を記憶領域Ａ１にロードする。読出部１１３は、ファイルＦ１からデータを読み出す。検索部１１２は、読出部１１３が読み出したデータについて、圧縮辞書Ｄ２の検索を行なう。書込部１１４は、検索部１１２の検索結果に応じた圧縮符号を記憶領域Ａ２に書き込む。制御部１１１は、読出部１１３の読出し位置や、書込部１１４の書込み位置などの管理を行ない、例えば、読出部１１３や書込部１１４に、ファイルＦ１に含まれる記号または記号列に対して順次処理を実行させる。また、制御部１１１は、記憶領域Ａ２に格納された圧縮データに基づいて圧縮ファイルＦ２を生成し、記憶部１５に圧縮ファイルＦ２を格納する。
【００４２】
伸張部１２は、制御部１２１、検索部１２２、読出部１２３および書込部１２４を含む。制御部１２１は、検索部１２２、読出部１２３および書込部１２４を制御し、圧縮ファイルＦ２の伸張処理を実行する。制御部１２１は、圧縮ファイルＦ２を記憶領域Ａ３にロードする。読出部１２３は、圧縮ファイルＦ２から圧縮符号を読み出す。検索部１２２は、読出部１２３が読み出した圧縮符号について、伸張辞書Ｄ３の検索を行なう。書込部１２４は、検索部１２２の検索結果に応じた伸張コードを記憶領域Ａ４に書き込む。制御部１２１は、検索部１２２の検索結果により得られた伸張コードが制御記号を示す場合には、書込部１２４による書込みが行なわれる書込み位置をスペース記号１つ分（例えば１バイト）戻す調整を行なう。制御部１２１は、読出部１２３の読出し位置や、書込部１２４の書込み位置などの管理を行ない、例えば、読出部１２３や書込部１２４に、圧縮ファイルＦ２に含まれる圧縮符号に対して順次処理を実行させる。また、制御部１２１は、記憶領域Ａ４に格納された伸張データに基づいて伸張ファイルＦ３を生成し、記憶部１５に伸張ファイルＦ３を格納する。
【００４３】
生成部１３は、制御部１３１、統計部１３２、割当部１３３およびソート部１３４を含む。生成部１３は、圧縮部１１からの指示に応じて、圧縮辞書Ｄ２を生成する。制御部１３１は、統計部１３２、割当部１３３およびソート部１３４を制御し、ファイルＦ１の圧縮に用いられる圧縮辞書Ｄ２を生成する。統計部１３２は、ファイルＦ１内に含まれる文字や単語の出現回数をカウントするなどにより、各文字や単語の統計情報を生成する。ソート部１３４は、統計部１３２が生成した統計情報に基づいて、統計情報を生成された各文字や単語をソートする。割当部１３３は、統計部１３２が生成した統計情報に基づいて、各文字や単語に対応する圧縮符号を生成し、生成した圧縮符号を各文字や単語に割り当てる。ソート部１３４は、さらに、圧縮符号を割り当てられた文字や単語を、文字や単語に対応する文字コードの順序（例えば文字コードの値が小さい順）でソートする。制御部１３１は、統計部１３２、割当部１３３およびソート部１３４による処理結果に基づいて圧縮辞書Ｄ２を生成し、記憶部１５に圧縮辞書Ｄ２を格納する。また、制御部１３１は、統計部１３２が生成した統計情報を記憶部１５に格納する。
【００４４】
生成部１４は、制御部１４１、割当部１４２、複製部１４３およびソート部１４４を含む。生成部１４は、伸張部１２からの指示に応じて、伸張辞書Ｄ３を生成する。制御部１４１は、割当部１４２、複製部１４３およびソート部１４４を制御し、圧縮ファイルＦ２の伸張に用いられる伸張辞書Ｄ３を生成する。割当部１４２は、記憶部１５に格納された統計情報を用いて、各文字や単語に対応する圧縮符号を生成する。ソート部１４４は、圧縮符号が割り当てられた文字情報を、圧縮符号の値に応じてソートする。複製部１４３は、ソートされた各圧縮符号の符号長に応じて、圧縮符号に対応する文字や単語を示す文字コードを複製する。制御部１４１は、複製部１４３により複製された文字コードを、割当部１４２により生成された圧縮符号に対応したオフセット位置に配置することにより、伸張辞書Ｄ３を生成する。制御部１４１は、さらに記憶部１５に伸張辞書Ｄ３を格納する。
【００４５】
圧縮部１１および生成部１３によりファイルＦ１の圧縮処理が行なわれる。圧縮処理の処理手順は、図５、図６、図７、図９および図１０に示される。また、伸張部１２および生成部１４により圧縮ファイルＦ２の伸張処理が行なわれる。伸張処理の処理手順は、図１２、図１３および図１４に示される。
【００４６】
図５は、圧縮機能の処理手順例を示す。圧縮機能が呼び出されると、制御部１１１は、圧縮処理の前処理を実行する（Ｓ１０１）。圧縮機能の呼出しは、圧縮対象のファイルＦ１の指定を含む。Ｓ１０１の前処理においては、制御部１１１は、記憶領域Ａ１および記憶領域Ａ２を確保し、単語リストＬ１を記憶部１５からロードし、統計テーブルＴ１および圧縮辞書Ｄ２の格納領域を確保する。
【００４７】
Ｓ１０１の処理が終了すると、制御部１１１は、記憶領域Ａ１にファイルＦ１をロードする（Ｓ１０２）。ファイルＦ１のサイズが所定のサイズよりも大きい場合には、制御部１１１は、ファイルＦ１をブロック分割し、分割して得られたブロックごとに以下の圧縮処理を行なう。続いて、制御部１１１は、生成部１３に圧縮辞書Ｄ２の生成指示を行なう（Ｓ１０３）。
【００４８】
図６は、圧縮辞書生成の処理手順例を示す。制御部１１１から圧縮辞書の生成指示を受けると、制御部１３１は、統計部１３２にファイルＦ１の統計処理を実行させる（Ｓ２０１）。
【００４９】
図７は、統計処理の処理手順例を示す。制御部１３１により統計処理の指示を受けると、統計部１３２は、記憶領域Ａ１にロードされたファイルＦ１について統計処理を開始する。統計処理の開始時において、読出し位置は記憶領域Ａ１にロードされたファイルＦ１の先頭を示す。統計部１３２は、記憶領域Ａ１の読出し位置から文字コードを取得する（Ｓ３０１）。Ｓ３０１の処理において、読出し位置はＳ３０１で取得された文字コード分進められる。
【００５０】
次に、統計部１３２は、Ｓ３０１で取得した文字コードが区切り記号であるか否かを判定する（Ｓ３０２）。Ｓ３０２の判定は、区切り記号として処理する文字コードを予め設定しておき、Ｓ３０１で取得した文字コードが予め設定した文字コードのいずれかに該当するか否かに応じって判断される。区切り記号は、例えば、スペース記号（ＡＳＣＩＩコード系で０ｘ２０）、エクスクラメーション（ＡＳＣＩＩコード系で０ｘ２１）、カンマ（ＡＳＣＩＩコード系で０ｘ２Ｃ）、ピリオド（ＡＳＣＩＩコード系で０ｘ２Ｅ）、コロン（ＡＳＣＩＩコード系で０ｘ３Ａ）、セミコロン（ＡＳＣＩＩコード系で０ｘ３Ｂ）およびクエスチョン（ＡＳＣＩＩコード系で０ｘ３Ｆ）などである。もしくは、Ｓ３０２の判定は、Ｓ３０１で取得した文字コードが、予め定めた数値範囲（例えば、０ｘ２０〜０ｘ３Ｆ）であるか否かに応じて判断されてもよい。
【００５１】
Ｓ３０１で取得した文字コードが区切り記号でない場合（Ｓ３０２：ＮＯ）には、統計部１３２は、Ｓ３０１で取得した文字コードをバッファに格納する（Ｓ３０３）。Ｓ３０３の処理が終了すると、Ｓ３０９の手順に移行する。
【００５２】
Ｓ３０１で取得した文字コードが区切り記号である場合（Ｓ３０２：ＹＥＳ）には、統計部１３２は、Ｓ３０１で取得した文字コードがスペース記号であるか否かを判定する（Ｓ３０４）。一例として、Ｓ３０４の判定がＳ３０２の判定よりも先に行なわれてもよい。その場合には、統計部１３２は、Ｓ３０４の条件を満たさない場合にＳ３０２の判定を行ない、Ｓ３０２の判定条件を満たせばＳ３０５の手順に移行し、Ｓ３０２の判定条件を満たさなければ、Ｓ３０３の手順に移行する。
【００５３】
Ｓ３０１で取得した文字コードがスペース記号でない場合（Ｓ３０４：ＮＯ）には、統計部１３２は、単語のカウント処理を行なう（Ｓ３０５）。すなわち、統計部１３２は、バッファに格納されている文字コード（または文字コード列）とＳ３０１で直近に取得した文字コードとをつなげた文字列について、統計テーブルＴ１に格納された出現回数をインクリメントする。Ｓ３０５の処理において、統計テーブルＴ１内に対応する文字列が存在しない場合には、バッファ内の文字コードおよびＳ３０１で直近に取得した文字コードのそれぞれについて、統計テーブルＴ１内の出現回数をインクリメントする。
【００５４】
図８は、統計テーブルＴ１の例を示す。統計テーブルＴ１には、文字や数字などの各記号、単語リストＬ１に含まれる各単語、および制御記号と各区切り記号との組み合わせのそれぞれについて、出現回数が格納される。
【００５５】
統計テーブルＴ１を用いた統計処理の他の一例として、統計部１３２が、Ｓ３０２の判定条件を満たすことで区切られる文字列を単語として統計テーブルＴ１に登録してもよい。この他の一例においては、統計テーブルＴ１内に対応する文字列が存在しない場合に、統計部１３２は、文字列を単語として統計テーブルＴ１に新規登録する。これにより単語リストＬ１内に含まれ、ファイルＦ１内に含まれない単語に対して圧縮符号を割り当てることが抑制される。また、単語リストＬ１に含まれず、ファイルＦ１内に含まれる単語に対しても圧縮符号が割り当てられる。また、単語リストＬ１に含まれ、ファイルＦ１内に含まれない単語についても、統計テーブルＴ１に登録されることで記憶領域を占有してしまうことが抑制される。
【００５６】
Ｓ３０５の処理を終えると、統計部１３２は、制御記号および区切り記号の組み合わせのカウントを行なう（Ｓ３０６）。Ｓ３０６においては、スペース記号を取り消す旨の制御記号と、Ｓ３０１で取得した区切り記号との組み合わせについての出現回数がインクリメントされる。Ｓ３０６の処理が終了すると、統計部１３２は、Ｓ３０９の手順に移行する。
【００５７】
Ｓ３０１で取得した文字コードがスペース記号である場合（Ｓ３０４：ＹＥＳ）には、Ｓ３０５と同様に単語のカウントを行なう（Ｓ３０７）。また、Ｓ３０５と同様、統計部１３２は、統計テーブルＴ１に対応する単語が存在しない場合には、バッファに格納された文字コードも含めて文字コードごとにカウントを行なう。Ｓ３０７の処理が終了すると、統計部１３２は、バッファをクリアする（Ｓ３０８）。
【００５８】
Ｓ３０３、Ｓ３０６およびＳ３０８のいずれかが行なわれると、統計部１３２は、読出し位置が、記憶領域Ａ１にロードしたファイルＦ１の終端であるか否かを判定する（Ｓ３０９）。Ｓ３０９の判定において終端でなければ（Ｓ３０９：ＮＯ）、統計部１３２は、Ｓ３０１の手順に移行する。またＳ３０９の判定において終端であれば（Ｓ３０９：ＹＥＳ）、統計部１３２は統計処理を終了する。
【００５９】
統計部１３２による統計処理が終了すると、制御部１３１は、図６の手順に戻り、ソート部１３４にソート処理を実行させる（Ｓ２０２）。ソート部１３４は、統計テーブルＴ１に登録された文字情報（文字などの記号、単語などの記号列、制御記号と区切り記号との組み合わせなど）を、統計部１３２により生成された統計情報（各文字情報についての出現回数）に基づいて並べ替える。例えば、統計部１３２は出現回数が多い順か少ない順のいずれか一方で、統計テーブルＴ１に登録された文字情報を並べ替える。
【００６０】
Ｓ２０２の処理が終了すると、制御部１３１は、割当部１３３に圧縮符号の割り当てを実行させる（Ｓ２０３）。割当部１３３は、Ｓ２０２で頻度順に並べ替えられた文字情報群に対して、ハフマン符号化や算術符号化など、高頻度の文字情報ほど短い圧縮符号を割り当てるアルゴリズムに基づいて圧縮符号を割り当てる。各文字情報に圧縮符号が割り当てられると、制御部１３１は、ソート部１３４に、文字情報と、文字情報に割り当てられた圧縮符号との組を、文字情報に基づいてソート処理させる（Ｓ２０４）。ソート部１３４は、例えば、文字情報の文字コードが小さい順に並べ替える。例えば、ソート部１３４は、文字情報の１文字目の文字コードの値が小さい順に並べ、１文字目の文字コードが同じ文字情報同士は、２文字目の文字コードの値が小さい順に並べる。Ｓ２０４の処理により並べ替えられた状態が、図１１に示す圧縮辞書Ｄ２である。
【００６１】
Ｓ２０４の処理が終了すると、制御部１３１は、インデックスの生成処理を行なう（Ｓ２０５）。制御部１３１は、文字情報と、その文字情報がＳ２０４でソートされた文字情報群内で存在する位置（オフセット）を示す情報とを対応付けてインデックスを生成する。図１１に示す圧縮辞書Ｄ２に対して、例えば、文字「ｉ」にオフセット「０ｘ１２６」などが対応付けられる。圧縮符号の生成においてこのインデックスが利用されると、「ｉ」から始まる単語に対応する圧縮符号の検索が「０ｘ１２６」から開始される。Ｓ２０５の処理が終了すると、生成部１３は、圧縮辞書Ｄ２の生成処理を終了する。
【００６２】
図１１は、圧縮辞書のデータ構造例を示す。図１１に示される圧縮辞書Ｄ２には、文字情報と圧縮符号とが対応付けられて格納される。文字情報と圧縮符号との組の格納位置は、圧縮辞書Ｄ２の格納位置を始点とするオフセットで示される。例えば、文字情報「ｉｎｖｅｎｔ△」の情報は、オフセット０ｘ０１４０に格納される。Ｓ２０５で生成されるインデックスは、このオフセットを利用して検索範囲の絞り込みを実現する。また、前述の通り、「ｃ（）」は、括弧内の文字情報に対応する圧縮符号であることを示す。
【００６３】
圧縮辞書Ｄ２は、生成部１３により生成されたが、他の一例として、圧縮辞書Ｄ２が予め記憶部１５に記憶されていることとしてもよい。この場合には、圧縮辞書Ｄ２は、複数のファイルにおいて共通で用いられる。例えば、予め記憶部１５に記憶される圧縮辞書Ｄ２では、例えば、過去に圧縮されたファイルやデータベース内に存在する複数のファイルにおける文字情報の統計情報に基づいて圧縮符号が割り当てられる。
【００６４】
生成部１３が圧縮辞書Ｄ２の生成処理を終了すると、制御部１１１は図５の手順に戻り、圧縮データ生成処理を実行する（Ｓ１０４）。
【００６５】
図９は、圧縮データ生成処理の処理手順例を示す。圧縮データ生成処理の開始時点において、読出し位置は記憶領域Ａ１にロードされたファイルＦ１の始点にセットされ、書込み位置は記憶領域Ａ２の所定の位置にセットされ、バッファはクリアされる。読出部１１３は、読出し位置から文字コードを取得する（Ｓ４０１）。制御部１１１は、Ｓ４０１の文字コード取得後、読出し位置を更新する。さらに、制御部１１１は、読出部１１３がＳ４０１で取得した文字コードをバッファに格納する（Ｓ４０２）。制御部１１１は、Ｓ４０１で取得した文字コードがスペース記号であるか否かを判定する（Ｓ４０３）。
【００６６】
Ｓ４０１で取得した文字コードがスペース記号でない場合（Ｓ４０３：ＮＯ）には、Ｓ４０１の手順に戻り、読出部１１３は、読出し位置から文字コードを取得する。すなわち、Ｓ４０１およびＳ４０２の手順が、スペース記号が読み出されるまで繰り返される。
【００６７】
Ｓ４０１で取得した文字コードがスペース記号である場合（Ｓ４０３：ＹＥＳ）には、検索部１１２は、圧縮辞書Ｄ２をバッファ内に格納された文字コード（または文字コード列）で検索する（Ｓ４０４）。制御部１１１は、バッファ内に格納された文字コード（または文字コード列）と一致する一致文字情報が圧縮辞書Ｄ２内に存在するか否かを判定する（Ｓ４０５）。圧縮辞書Ｄ２内に一致文字情報が存在しない場合（Ｓ４０５：ＮＯ）の処理は、図１０に基づいて後述される。一致文字情報が存在する場合（Ｓ４０５：ＹＥＳ）には、書込部１１４は、記憶領域Ａ２の書込み位置に、圧縮辞書Ｄ２内で一致文字情報に対応付けられた圧縮符号を書き込む（Ｓ４０６）。続いて、制御部１１１は、書込み位置を更新し、バッファに格納された文字コード（または文字コード列）を削除（クリア）する（Ｓ４０７）。さらに、制御部１１１は、読出し位置が記憶領域Ａ１にロードされたファイルＦ１の終端であるか否かを判定する（Ｓ４０８）。
【００６８】
読出し位置がファイルＦ１の終端でない場合（Ｓ４０８：ＮＯ）には、Ｓ４０１の手順に戻り、読出部１１３は、読出し位置から文字コードを取得する。読出し位置がファイルＦ１の終端である場合（Ｓ４０８：ＹＥＳ）には、制御部１１１は、圧縮データ生成処理を終了する。
【００６９】
図１０は、圧縮データ生成処理の処理手順例を示す。Ｓ４０５の処理で、圧縮辞書Ｄ２内に一致文字情報が存在しない場合（Ｓ４０５：ＮＯ）には、制御部１１１は、スペース記号で区切られた文字コード（または文字コード列）の末尾の文字コードが区切り記号であるか否かを判定する（Ｓ４０９）。すなわち、バッファに格納された文字コード列において、スペース記号の直前の文字コードが区切り記号を示すか否かが判定される。区切り記号であるか否かについて、図７のＳ３０２と同様の判定条件が用いられる。
【００７０】
Ｓ４０９の判定で、末尾が区切り記号である場合（Ｓ４０９：ＹＥＳ）には、制御部１１１は、バッファ内の末尾の区切り記号までの文字コード列のうち、末尾の区切り符号をスペース記号に置換した文字コード列を生成する（Ｓ４１０）。検索部１１２は、Ｓ４１０で生成した文字コード列について、圧縮辞書Ｄ２を検索する（Ｓ４１１）。制御部１１１は、Ｓ４１１の検索結果に基づいて、圧縮辞書Ｄ２に、Ｓ４１０で生成した文字コード列と一致する一致文字情報が存在するか否かを判定する（Ｓ４１２）。
【００７１】
一致文字情報が存在する場合（Ｓ４１２：ＹＥＳ）には、書込部１１４は、圧縮辞書Ｄ２内で一致文字情報と対応付けられた圧縮符号を記憶領域Ａ２の書込み位置に書込む（Ｓ４１３）。制御部１１１は、書込部１１４の書込みに応じて、書込み位置を更新する。さらに、書込部１１４は、圧縮辞書Ｄ２において、制御記号と区切り記号の組み合わせに対応付けられた圧縮符号（制御符号）およびスペース記号と対応づけられた圧縮符号を、記憶領域Ａ２の書込み位置に書き込む（Ｓ４１４）。制御部１１１は、書込部１１４の書込みに応じて、書込み位置を更新する。
【００７２】
一致文字情報が存在しない場合（Ｓ４１２：ＮＯ）または末尾の文字コードが区切り記号ではない場合（Ｓ４０９：ＮＯ）には、制御部１１１は、バッファ内の各文字コードに対して処理を行なう（Ｓ４１５〜Ｓ４１８）。制御部１１１は、各文字コードについて、検索部１１２に圧縮辞書Ｄ２を検索させ（Ｓ４１６）、検索の結果得られた圧縮符号を書込部１１４に書込み位置に書き込ませる（Ｓ４１７）。Ｓ４１６およびＳ４１７の処理が、バッファに格納された各文字コードに対して行なわれると、手順がＳ４０７に戻り、制御部１１１は、バッファに格納された文字コード列をクリアする。
【００７３】
上述の圧縮データ生成処理が終了すると、図５に示すＳ１０５に手順が戻る。制御部１１１は、記憶領域Ａ２内に格納された圧縮データを用いて圧縮ファイルＦ２を生成し、記憶部１５に格納する（Ｓ１０５）。圧縮ファイルＦ２は、例えば、ヘッダ、記憶領域Ａ２内の圧縮データおよびトレーラ情報で構成される。ヘッダには、例えば、圧縮アルゴリズムを識別する識別情報や、ヘッダ、圧縮データおよびトレーラ情報それぞれのデータサイズなどの情報が含まれる。また、トレーラ情報には、例えば、統計テーブルＴ１または圧縮辞書Ｄ２に対応する伸張辞書Ｄ３が含まれる。伸張辞書Ｄ３は、図１５に基づいて後述される。
【００７４】
Ｓ１０５の処理が終了すると、制御部１１１は、圧縮機能の呼出し先に圧縮処理が終了した旨の通知を行なう（Ｓ１０６）。Ｓ１０６の通知には、例えば、圧縮ファイルＦ２の格納先を示す情報が含まれる。Ｓ１０６の処理が終了すると、圧縮部１１による圧縮処理が終了する。
【００７５】
図１２は、伸張機能の処理手順例を示す。伸張機能が呼び出されると、制御部１２１は、伸張処理の前処理を実行する（Ｓ５０１）。伸張機能の呼出しは、伸張対象の圧縮ファイルＦ２の指定を含む。Ｓ５０１の前処理においては、制御部１２１は、記憶領域Ａ３および記憶領域Ａ４を確保し、統計テーブルＴ１を圧縮ファイルＦ２からロードし、さらに、伸張辞書Ｄ３の格納領域を確保する。
【００７６】
Ｓ５０１の処理が終了すると、制御部１２１は、圧縮ファイルＦ２を記憶領域Ａ３にロードする（Ｓ５０２）。次に、制御部１２１は生成部１４に伸張辞書を生成させる（Ｓ５０３）。
【００７７】
図１３は、伸張辞書生成の処理手順例を示す。制御部１４１は、記憶領域Ａ３にロードされた圧縮ファイルＦ２のトレーラ情報から統計テーブルＴ１を取得する（Ｓ６０１）。統計テーブルＴ１が取得されると、割当部１４２は、統計テーブルＴ１内の各文字情報に対して圧縮符号を割り当てる（Ｓ６０２）。Ｓ６０２の処理においては、Ｓ２０３と同様のアルゴリズムにより圧縮符号が割り当てられる。ソート部１４４は、圧縮符号が割り当てられた文字情報を、圧縮符号の値に応じてソートする（Ｓ６０３）。さらに、制御部１４１は、圧縮符号が割り当てられた各文字情報に対し、割り当てられた圧縮符号の符号長を関連付ける（Ｓ６０４）。
【００７８】
次に、複製部１４３は、文字情報に関連付けられた符号長に応じた数に、文字情報および符号長の情報を複製する（Ｓ６０５）。さらに、制御部１４１は、複製された情報を記憶部１５に確保された伸張辞書Ｄ３の格納領域内の位置であって、圧縮符号に基づいたオフセット位置に格納する（Ｓ６０６）。Ｓ６０６の結果、伸張辞書Ｄ３が生成され、手順は図１２のＳ５０４に移行する。
【００７９】
図１５は、伸張辞書のデータ構造例を示す。伸張辞書Ｄ３は、伸張コード（文字情報）と符号長とを示す情報が、対応する圧縮符号に基づくオフセット位置に格納されるデータ構造を有している。図１５の伸張辞書Ｄ３は、圧縮符号の最大の符号長が１２ビットである場合を例示するものである。
【００８０】
伸張辞書Ｄ３は、可変長の符号化が行なわれた圧縮データから固定長のデータを読み出して、読み出した固定長のデータに対応する伸張コードを取り出す処理に用いられる。固定長のデータを読み出すことで、1ビットずつ符号の境目を判定するよりも伸張速度の高速化が図られる。１２ビットよりも短い圧縮符号については余分に圧縮データからデータを読み出してしまうので、符号長に基づいて圧縮データからの読出し位置の調整が行なわれる。伸張辞書Ｄ３はこのような伸張処理に用いられる伸張辞書であるため、伸張コードおよび符号長が同じ情報が重複して登録される。
【００８１】
例えば、伸張辞書Ｄ３における制御記号［−△］．に対応する圧縮符号ｃ（［−△］．）は、「０００１０１１」という７ビットのデータであるのに対し、圧縮データから１２ビットのデータでまとめて読み出される。読み出した１２ビットのうち前半の７ビットが「０００１０１１」であれば、後半の５ビットがどのようなデータであっても制御記号［−△］．という伸張コードが取得可能とする必要がある。そのため、後半の５ビットが取り得る値の全通りについて伸張コードおよび符号長を格納しておくことで、１２ビットの固定長データのうちの後半５ビットがどのようなデータであっても、７ビットの可変長符号に対応する伸張コードなどの情報が取得される。制御記号［−△］．の情報は、後半５ビットの全通り（「０００００」〜「１１１１１」）の数（３２）に複製されて、圧縮符号が「０００１０１１」に応じたオフセット位置（０００１０１１０００００（０ｘ１６０））に格納される。
【００８２】
記号列ａｂｏｕｔ△も、制御記号［−△］．と同様に、圧縮符号の符号長に応じた数に複製され、圧縮符号に応じたオフセット位置に格納される。伸張辞書Ｄ３において、ｃ（ａｂｏｕｔ△）は「０１１０１０１００１」という１０ビットのデータである。このため、記号列ａｂｏｕｔ△に対応する伸張コードおよび符号長の情報は、２の２乗（１２−１０＝２であるため）通りに複製され、「０１１０１０１００１００（０ｘ６Ａ４）」というオフセット位置に格納される。
【００８３】
図１４は、伸張データ生成処理の処理手順例を示す（Ｓ５０４）。伸張辞書Ｄ３が生成されると、制御部１２１は、圧縮ファイルＦ２に含まれる圧縮データに対応する伸張データを生成する処理を開始する。記憶領域Ａ３からの読出し位置は圧縮ファイルＦ２の圧縮データの始点にセットされ、記憶領域Ａ４への書込み位置は記憶領域Ａ４内の所定の位置にセットされ、記憶領域Ａ５（バッファ）はクリアされている。
【００８４】
読出部１２３は記憶領域Ａ３の読出し位置から圧縮データを読み出す（Ｓ７０１）。圧縮データの読出しは、前述の通り固定長で行なわれる。検索部１２２は、読み出した固定長データに基づいて伸張辞書Ｄ３を参照する（Ｓ７０２）。Ｓ７０２の参照により得られた伸張コードは、記憶領域Ａ５（バッファ）に格納される。続いて、記憶領域Ａ５内の伸張コードが、制御記号および区切り記号の組み合わせであるか否か判定する（Ｓ７０３）。Ｓ７０３の処理は、例えば、伸張コードの先頭の文字コードが制御記号であるか否かに応じて判断されてもよい。
【００８５】
記憶領域Ａ５内の伸張コードが制御記号および区切り記号の組み合わせでない場合（Ｓ７０３：ＮＯ）には、書込み部１２４は、Ｓ７０２で得られた伸張コードを記憶領域Ａ４の書込み位置に書き込む（Ｓ７０４）。
【００８６】
記憶領域Ａ５内の伸張コードが制御記号および区切り記号の組み合わせである場合（Ｓ７０３：ＹＥＳ）には、制御部１２１は、書込み位置の調整を行なう（Ｓ７０５）。Ｓ７０５において、制御部１２１は、記憶領域Ａ４の書込み位置を文字コード１つ分戻す。Ｓ７０５に続いて、書込み部は、記憶領域Ａ５に格納された区切り記号を記憶領域Ａ４の書込み位置に書き込む（Ｓ７０６）。
【００８７】
Ｓ７０４またはＳ７０６の処理が行なわれると、制御部１２１は、記憶領域Ａ３からの読出し位置を更新する（Ｓ７０７）。記憶領域Ａ３からの読出し位置は、Ｓ７０２の参照により得られた符号長に基づいて更新される。読出し位置は、符号長の情報示されるビット数だけ進められる。さらに、制御部１２１は、記憶領域Ａ４への書込み位置を更新する（Ｓ７０８）。記憶領域Ａ４への書込み位置は、Ｓ７０２で読みだした伸張コードの長さ（伸張コード長）に基づいて更新される。Ｓ７０７およびＳ７０８の処理順序を入れ替えても構わない。  
【００８８】
続いて、制御部１２１は、記憶領域Ａ３からの読出し位置が、圧縮ファイルＦ２の圧縮データの終端であるか否かを判断する（Ｓ７０９）。記憶領域Ａ３からの読出し位置が圧縮データの終端でない場合（Ｓ７０９：ＮＯ）には手順がＳ７０１に戻り、再度読出部１２３が圧縮データの読出しを行なう。記憶領域Ａ３からの読出し位置が圧縮データの終端である場合（Ｓ７０９：ＹＥＳ）には、制御部１２１は伸張データ生成処理を終了し、手順がＳ５０５に移行する。
【００８９】
他の一例として、伸張辞書Ｄ３は、伸張コードおよび符号長に加えて、さらに伸張コード長を示す情報を含んでもよい。その場合は、例えば、制御部１２１は、Ｓ７０８の処理において、それぞれの伸張コードに対応付けられた伸張コード長に基づいて書込み位置を更新する。
【００９０】
さらに、他の一例として、伸張辞書Ｄ３は、伸張辞書の一例であり、同じ情報が重複して登録されていない伸張辞書が用いられてもよい。例えば、一般的なハフマン符号化の伸張辞書が用いられてもよい。その場合であっても、伸張辞書から伸張コードが取得された場合には、制御部１２１は、Ｓ７０３の判定を行ない、その判定結果に応じてＳ７０４か、Ｓ７０５およびＳ７０６かのいずれかの処理を行なう。
【００９１】
伸張データ生成処理が終了すると、制御部１２１は、記憶領域Ａ４に格納された伸張データに基づいて伸張ファイルＦ３を生成し、生成した伸張ファイルＦ３を記憶部１５に格納する（Ｓ５０５）。さらに、制御部１２１は、伸張機能の呼出し先に伸張処理が終了した旨の通知を行なう（Ｓ５０６）。Ｓ５０６の通知には、例えば、伸張ファイルＦ３の格納先を示す情報が含まれる。Ｓ５０６の処理が終了すると、伸張部１２による伸張処理が終了する。
【００９２】
［構成の説明］
以下に、上述の圧縮処理や伸張処理を実施する構成について説明する。
【００９３】
図１６は、コンピュータ１のハードウェア構成例を示す。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【００９４】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭ以外にもフラッシュメモリなどが用いられてもよい。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）などでもよい。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【００９５】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワーク４によりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【００９６】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力デバイスは、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていてもよいし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から有線または無線で接続する装置であってもよい。
【００９７】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って圧縮部１１、伸張部１２、生成部１３および生成部１４の少なくとも１つの処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１５の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（ファイルＦ１、圧縮ファイルＦ２および伸張ファイルＦ３など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図１７を用いて説明する。
【００９８】
図１７は、コンピュータ１で動作するプログラム構成例を示す。アプリケーションプログラム２４またはミドルウェア２３は、本実施形態の圧縮機能または伸張機能の処理手順が定められたプログラムである。もしくは、アプリケーションプログラム２４またはミドルウェア２３は、本実施形態の圧縮辞書生成または伸張辞書生成の処理手順が定められたプログラムである。
【００９９】
圧縮機能の処理手順が定められた圧縮プログラムと、伸張機能の処理手順が定められた伸張プログラムとが一体のプログラムでもよいし、別体のプログラムでもよい。さらに、圧縮辞書生成の手順が定められた圧縮辞書生成プログラムは、圧縮プログラムに含まれてもよいし、圧縮プログラムにより呼び出される別体のプログラムでもよい。また、伸張辞書生成の手順が定められた伸張辞書生成プログラムは、伸張プログラムに含まれてもよいし、伸張プログラムにより読み出される別体のプログラムでもよい。もしくはＯＳ（オペレーティング・システム）２２の一機能として、本実施形態の圧縮機能および伸張機能の少なくとも一方が提供されてもよい。
【０１００】
例えば、上述の圧縮機能および伸張機能の少なくとも一方、圧縮プログラム、伸張プログラム、圧縮辞書生成プログラムならびに伸張辞書生成プログラムの少なくとも１つは、記憶媒体に記憶される。例えば、その記憶媒体がドライブ装置３０４により読み取られ、インストールされることにより記憶媒体に記憶されたプログラムが実行可能な状態になる。インストールされたプログラムに定められた処理手順の各々は、ＯＳ２２に基づいてハードウェア群２１（３０１〜３１２）が制御されることにより実行される。
【０１０１】
図４に示すコンピュータ１に含まれる各機能ブロックの機能は、プロセッサ３０１が、圧縮プログラムまたは伸張プログラムを実行することにより提供される。図５、図６、図７、図９および図１０に示される処理手順がプロセッサ３０１に実行されることにより圧縮部１１および生成部１３内に含まれる各機能ブロックの機能が提供される。また、図１２、図１３および図１４に示される処理手順がプロセッサ３０１に実行されることにより伸張部１２および生成部１４内に含まれる各機能ブロックの機能が提供される。
【０１０２】
例えば、圧縮部１１内の機能ブロックは、以下のようにハードウェア群２１を用いて実行される。制御部１１１の機能は、プロセッサ３０１が、ＲＡＭ３０２内へのアクセス（記憶領域の確保、ファイルのロードなど）を行ない、また、レジスタ内で処理ステータス（読出し位置や書込み位置など）を管理し、レジスタ内に保持された情報との合致判定を行なうことにより提供される。読出部１１３の機能は、プロセッサ３０１がレジスタ内の処理ステータスに応じてＲＡＭ３０２にアクセスすることにより提供される。検索部１１２の機能は、プロセッサ３０１がＲＡＭ３０２にアクセスし、アクセス結果に基づく照合判定を行なうことにより提供される。書込部１１４の機能は、プロセッサ３０１がレジスタ内の処理ステータスに応じてＲＡＭ３０２にアクセスすることにより提供される。
【０１０３】
例えば、伸張部１２内の機能ブロックは、以下のようにハードウェア群２１を用いて実行される。制御部１２１の機能は、プロセッサ３０１が、ＲＡＭ３０２内へのアクセス（記憶領域の確保、ファイルのロードなど）を行ない、レジスタ内で処理ステータス（読出し位置や書込み位置など）を管理し、レジスタ内に保持された情報との合致判定を行なうことにより提供される。また、読出部１２３の機能は、プロセッサ３０１がレジスタ内の処理ステータスに応じてＲＡＭ３０２にアクセスすることにより提供される。検索部１２２の機能は、プロセッサ３０１がＲＡＭ３０２にアクセスし、アクセス結果に基づく照合判定を行なうことにより提供される。書込部１２４の機能は、プロセッサ３０１がレジスタ内の処理ステータスに応じてＲＡＭ３０２にアクセスすることにより提供される。
【０１０４】
例えば、生成部１３内の機能ブロックは、以下のようにハードウェア群２１を用いて実行される。制御部１３１の機能は、プロセッサ３０１がＲＡＭ３０２の領域管理およびＲＡＭ３０２へのアクセスを行ない、さらに、プロセッサ３０１がルーチンの処理結果に応じたルーチンの呼出しを行なうことにより提供される。統計部１３２の機能は、プロセッサ３０１によるＲＡＭ３０２へのアクセス処理およびアクセス処理の結果に応じた演算処理により提供される。ソート部１３４の機能は、プロセッサ３０１によるＲＡＭ３０２へのアクセスとアクセス結果に応じた演算処理により提供される。割当部１３３の機能は、プロセッサ３０１がＲＡＭ３０２へのアクセスに基づく演算処理を行なうことにより提供される。
【０１０５】
例えば、生成部１４内の機能ブロックは、以下のようにハードウェア群２１を用いて実行される。制御部１４１の機能は、プロセッサ３０１がＲＡＭ３０２の領域管理およびＲＡＭ３０２へのアクセスを行ない、さらに、プロセッサ３０１がルーチンの処理結果に応じたルーチンの呼出しを行なうことにより提供される。複製部１４３の機能は、プロセッサ３０１によるＲＡＭ３０２へのアクセス処理により提供される。ソート部１４４の機能は、プロセッサ３０１によるＲＡＭ３０２へのアクセスとアクセス結果に応じた演算処理により提供される。割当部１４２の機能は、プロセッサ３０１がＲＡＭ３０２へのアクセスに基づく演算処理を行なうことにより提供される。
【０１０６】
本実施形態によれば、記号列とスペース記号とに対し、１つの圧縮符号を割り当てるため、圧縮符号数が抑制される。そのため、圧縮符号の書込みに要するメモリアクセス回数が抑制される。また、圧縮率が向上するため、圧縮ファイルを格納する際のＩ／Ｏの回数も抑制される。
【０１０７】
図１８は、コンピュータ１を用いたシステム構成例を示す。図１８に例示する情報処理システムは、基地局２、ネットワーク３、コンピュータ１ａおよびコンピュータ１ｂを含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。図４に示す圧縮部１１、伸張部１２、生成部１３および生成部１４が、コンピュータ１ａのみに含まれてもよいし、コンピュータ１ａおよびコンピュータ１ｂの双方に含まれてもよい。コンピュータ１ａが圧縮部１１および生成部１３を含み、コンピュータ１ｂが伸張部１２および生成部１４を含んでもよいし、それとは逆に、コンピュータ１ｂが圧縮部１１および生成部１３を含み、コンピュータ１ａが伸張部１２および生成部１４を含んでもよい。
【０１０８】
例えば、コンピュータ１ａで生成された圧縮ファイルＦ２がネットワーク３を介した通信によりコンピュータ１ｂに送信され、コンピュータ１ｂにより圧縮ファイルＦ２が伸張されて伸張ファイルＦ３が生成される。圧縮ファイルＦ２は無線で基地局２に送信され、基地局２からコンピュータ１ｂに送信されてもよい。
【０１０９】
本実施形態の圧縮機能や伸張機能によれば圧縮率が向上するので、通信される圧縮データの量が削減される。それにより通信処理に対する図１８に例示されるシステムのハードウェアリソースの使用が抑制される。
【０１１０】
図１９は、コンピュータ１を用いたシステム構成例を示す。図１９に例示する情報処理システムは、コンピュータ１、ネットワーク３、クライアント装置６、ストレージエリアネットワーク（ＳＡＮ）４およびストレージ装置５を含む。例えば、コンピュータ１は、クライアント装置６からの要求に応じた情報処理を行なう。情報処理対象のデータは、例えばストレージ装置５に圧縮されて記憶されている。コンピュータ１は、クライアント装置６から要求を受けた場合に、圧縮されてストレージ装置５に記憶された情報処理対象のデータを取得して伸張する。コンピュータ１は、伸張したデータに対してクライアント装置６から要求された情報処理を実行し、さらに、情報処理後のデータを圧縮し、ストレージ装置５に格納する。情報処理は、例えば、ストレージ装置５に記憶されたデータの更新処理や、ストレージ装置５に記憶されたデータの分析・解析処理などである。
【０１１１】
図１９に例示されるシステムにおいては、圧縮処理や伸張処理の度に圧縮辞書や伸張辞書を生成しなくても、一度作成した圧縮辞書や伸張辞書を保持しておき、その圧縮辞書や伸張辞書に基づいて圧縮処理または伸張処理が実行されてもよい。その場合、図５のＳ１０３の処理や図１２のＳ５０３の処理は、単に保持されている圧縮辞書や伸張辞書をロードするのみでもよい。
【０１１２】
図１９に例示するシステムでは、情報処理の要求を受けるたびにデータの伸張が行なわれる。伸張処理に時間がかかると要求に対する応答までの時間も増大してしまう。本実施形態の圧縮機能により圧縮率が向上すると、圧縮データをストレージ装置５から読み出すＩ／Ｏ回数が削減される。また、圧縮符号数が少ないので伸張処理にかかるメモリアクセスの回数が抑制される。また、圧縮ファイルＦ２のロードに確保される記憶領域も少なく抑えられる。
【０１１３】
［変形例の説明］
以下、上述の実施形態における変形例の一部を説明する。
【０１１４】
圧縮処理の対象は、ファイル以外にも、システムから出力される監視メッセージなどでもよい。例えば、バッファに順次格納される監視メッセージを上述の圧縮処理により圧縮し、ログファイルとして格納するなどの処理が行なわれる。また、例えば、データベース内のページ単位に圧縮が行なわれてもよいし、複数のページをまとめた単位で圧縮が行なわれてもよい。また、圧縮辞書は複数の監視メッセージに対して共通の圧縮辞書が用いられてもよいし、複数のページに対して共通の圧縮辞書が用いられてもよい。
【０１１５】
文書データにおいて、スペース記号が多く用いられるが、その他の区切り記号も用いられる。圧縮辞書Ｄ２を用いた場合、区切り記号が付された記号列、区切り記号およびスペース記号を、記号列とスペース記号の組み合わせに対応する圧縮符号と、制御記号および区切り記号に対応する圧縮符号と、スペース記号に対応する圧縮符号の３つの圧縮符号が用いられる。しかし、スペース記号以外の区切り記号が用いられる際には、その区切り記号に後続してスペース記号が用いられることが多い。制御記号、区切り記号（スペース記号以外）およびスペース記号の組み合わせに対して圧縮符号を割り当てた圧縮辞書Ｄ４が圧縮辞書Ｄ２の代わりに用いられてもよい。
【０１１６】
図２０は、圧縮辞書のデータ構造例を示す。圧縮辞書Ｄ４には、制御記号と区切り記号（スペース記号以外）との組み合わせが登録されている。一方、図２０に示す圧縮辞書Ｄ４には、制御記号、区切り記号（スペース記号以外）およびスペース記号の組み合わせが登録されている。図７のＳ３０６の制御記号カウント処理において、スペース記号以外の区切り記号にスペース記号が後続するかを確認し、スペース記号が後続する場合には制御記号、区切り記号（スペース記号以外）およびスペース記号の組み合わせが登録されれば、図２０の圧縮辞書Ｄ４が生成される。
【０１１７】
図２１は、伸張辞書のデータ構造例を示す。図２１においても、制御記号、区切り記号（スペース記号以外）およびスペース記号の組み合わせが登録されている。図２０で説明した手順に則って統計テーブルＴ１が生成されると、その統計テーブルに従って伸張辞書Ｄ５が生成される。伸張辞書Ｄ５は伸張辞書Ｄ３の代わりに用いられる。
【０１１８】
文書データにおいては、文書データを構成する要素である単語などの言語単位の境目がスペース記号で示される。一方、ｃｓｖ（ｃｏｍｍａ−ｓｅｐａｒａｔｅｄ  ｖａｌｕｅｓ）形式のデータにおいては、データ列に含まれるカンマにより、ｃｓｖ形式のデータを構成する要素であるフィールドの区切りが示される。上述の圧縮アルゴリズムがｃｓｖ形式のファイルに用いられた場合にも、カンマに対応する圧縮符号がデータ間に繰り返し用いられるため、圧縮率が向上しにくい。
【０１１９】
図２２は、ｃｓｖ形式のデータ構造の例を示す。図２２に例示されるｃｓｖ形式のデータＥ１は、各行に６つのフィールドを含むデータであり、それぞれのフィールドのタイトルがヘッダ行（出願番号,出願日,発明者,国名,ルート,発明の名称）に示される。各行の区切りは改行コードにより示される。また、データＥ１内の発明者フィールドのデータは、発明者の姓および名が示され、姓と名との間がスペース記号で区切られている。
【０１２０】
図２３は、圧縮辞書のデータ構造例を示す。図２３に示される圧縮辞書Ｄ６には、記号列およびカンマの組み合わせが登録される。例えば、「ＩＮＤＥＸ，」や「ＩＮＦＯＲＭＡＴＩＯＮ，」などのように単語にカンマが付された文字情報が登録される。文字情報の末尾にカンマが含まれる文字情報を登録する圧縮辞書Ｄ６を用いる一方で、データＥ１内に単語の後にカンマ以外の区切り記号が存在するため、直前のカンマ記号を削除する制御記号［−，］が用いられる。例えば、圧縮辞書Ｄ６には、制御記号［−，］とスペース記号△との組み合わせが登録される。また、例えば、圧縮辞書Ｄ６には、制御記号［−，］と改行コード（改行コードは［改行］と図示される）との組み合わせが登録される。圧縮辞書Ｄ６には、登録された文字情報のそれぞれに対応する圧縮符号が、文字情報と対応付けられて格納される。
【０１２１】
図２４は、伸張辞書のデータ構造例を示す。図２４に示される伸張辞書Ｄ７に、圧縮辞書Ｄ６に登録された各文字情報が、対応する圧縮符号に応じたオフセット位置に、対応する圧縮符号の符号長に応じた数に複製されて格納されている。圧縮符号の符号長を示す情報も各文字情報に対応付けて伸張辞書Ｄ７に格納されている。
【０１２２】
ｃｓｖ形式のデータにおいては、カンマでデータの各要素が区切られるが、行の境目においては改行コードが用いられる。そのため、例えば、制御記号［−，］と改行コードとの組み合わせは、出現回数が多くなり、圧縮符号の符号長が短くなる傾向にある。
【０１２３】
また、フィールド内に複数の単語が含まれる場合に、スペース記号が含まれる場合がある。例えば、図２２に示すデータＥ１の発明者フィールドのデータは「ＫＡＴＡＯＫＡ△ＭＡＳＡＨＩＲＯ，」であるが、このデータに対応する圧縮符号は、ｃ（ＫＡＴＡＯＫＡ，）ｃ（［−，］△）ｃ（ＭＡＳＡＨＩＲＯ，）となる。
【０１２４】
ｃｓｖ形式のデータを扱う場合には、図７のＳ３０４の判定において、区切り記号がカンマであるか否かが判定される。さらに、図９のＳ４０３の判定において、Ｓ４０１で読みだした文字コードがカンマであるか否かが判定される。また、図１０のＳ４１０の処理では、末尾の区切り記号をカンマに置換した文字情報が生成される。
【０１２５】
一方、伸張処理においては、制御記号がカンマ以外の区切り記号の箇所に存在するように圧縮データが生成されているので、図１４の処理手順で処理可能である。
【０１２６】
また、上述の実施形態において、直前のスペース記号の削除を示す制御記号［−△］や直前のカンマの削除を示す制御記号［−，］と説明したが、単に読出し位置を文字コード分（１ｂｙｔｅ）戻すことを示す制御記号が用いられてもよい。その場合、記号列圧縮辞書Ｄ１２と同様の記号列に対応する圧縮辞書が、複数種類の区切り記号に対して設けられてもよい。例えば、単語およびスペース記号の組み合わせに対応する記号列圧縮辞書と、カ単語およびカンマの組み合わせに対応する記号列圧縮辞書との双方が用いられる。あ
また、上述の実施形態において、単語などの記号列と、その直前に存在するスペース記号などの区切り記号の組み合わせを圧縮辞書に登録することとしてもよい。その場合には、例えば、後続するスペース記号を削除する旨の制御記号が用いられる。
【０１２７】
上述の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【符号の説明】
【０１２８】
１        コンピュータ
１ａ      コンピュータ
１ｂ      コンピュータ
２        基地局
３        ネットワーク
４        ストレージエリアネットワーク
５        ストレージ装置
６        クライアント装置
１１      圧縮部
１２      伸張部
１３      生成部
１４      生成部
１５      記憶部
【図１】
0006527462.tif 000002
【図２】
0006527462.tif 000003
【図３】
0006527462.tif 000004
【図４】
0006527462.tif 000005
【図５】
0006527462.tif 000006
【図６】
0006527462.tif 000007
【図７】
0006527462.tif 000008
【図８】
0006527462.tif 000009
【図９】
0006527462.tif 000010
【図１０】
0006527462.tif 000011
【図１１】
0006527462.tif 000012
【図１２】
0006527462.tif 000013
【図１３】
0006527462.tif 000014
【図１４】
0006527462.tif 000015
【図１５】
0006527462.tif 000016
【図１６】
0006527462.tif 000017
【図１７】
0006527462.tif 000018
【図１８】
0006527462.tif 000019
【図１９】
0006527462.tif 000020
【図２０】
0006527462.tif 000021
【図２１】
0006527462.tif 000022
【図２２】
0006527462.tif 000023
【図２３】
0006527462.tif 000024
【図２４】
0006527462.tif 000025