以下に、実施の形態について説明する。
図1は、変換処理の一例を示す。圧縮対象のファイルF1に含まれるデータが圧縮データに変換され、変換されたデータを用いて圧縮ファイルF2が生成される。図1の例において、圧縮対象のファイルF1は、文字列w11〜w13を含む。
文字列w11〜w13は、圧縮対象のファイルF1に含まれるデータの一例であり、圧縮対象のファイルF1内には他の文字列も含まれうる。文字列w11〜w13は、例えば、1または複数の文字を含む単語や文節などの単位を構成する文字情報である。また、文字列w11〜w13は、システム内で用いられるコードや、タグなどの情報であってもよい。文字列w11〜w13の長さは、固定長として取り扱っても可変長として取り扱ってもよい。
図1の変換処理は、存否情報テーブルT10および圧縮辞書テーブルT20を用いて行なわれる。圧縮辞書テーブルT20は、文字列と圧縮符号との対応関係を示す。圧縮辞書テーブルT20には、1または複数の文字列が格納される。圧縮辞書テーブルT20に格納される文字列も、文字列w11〜13と同様に、例えば、1または複数の文字を含む単語や文節などの単位を構成する文字情報、または、システム内で用いられるコードやタグなどの情報である。圧縮辞書テーブルT20に格納される文字列のそれぞれに対して、圧縮符号が割り当てられている。圧縮辞書テーブルT20の文字列フィールドに示されるc1〜c6のそれぞれは、文字情報である。文字情報c1〜c6は文字情報の一例であり、圧縮辞書テーブルT20にも、存否情報テーブルT10にも、その他の文字情報が含まれうる。文字情報として、例えば、1または複数の文字(記号も含む)を所定の文字コード系で表現する文字コードが用いられる。もしくは文字コードの一部でもよい。または、文字情報としてシステム内で用いられるコードの一部分を用いてもよい。圧縮辞書テーブルT20に格納される文字列は、文字情報c1〜c6を組み合わせたものである。
文字情報c1〜c6の組み合わせにより構成される文字列を例示する。例えば、c1が「a」で、c2が「b」で、c4が「l」で、c6が「e」であるとすると、文字列c1、c2、c4、c6は、「able」となる。また、2種類以上の文字情報を一部重複させて組み合わせることにより、文字列が構成されてもよい。例えば、c1が「ab」で、c2が「bo」で、c4が「or」で、c6が「rt」であるとすると、文字列c1、c2、c4、c6は、「abort」となる。
圧縮辞書テーブルT20に格納された文字列には、圧縮符号が割り当てられる。例えば、圧縮符号は、予め各文字列に対して割り当てられていてもよいし、ハフマン符号化やLZ78の圧縮アルゴリズム等により生成されたものでもよい。
存否情報テーブルT10は、存否情報テーブルT10に格納される各文字情報c1〜c6が、文字列中の各位置p1〜p4で、圧縮辞書テーブルT20に格納された文字列内に出現したか否かの存否情報のマップである。存否情報テーブルT10に格納される文字情報は、圧縮辞書テーブルT20に格納される文字情報と同様に文字コードの組み合わせまたは一部か、もしくはシステム内で用いられるコードの一部である。例えば、文字列中の各位置p1〜p4は、文字列中で何番目の文字かを示す。その場合は、一例として、位置p1が「1文字目」で、位置p2が「2文字目」で、位置p3が「3文字目」で、位置p4が「4文字目」などとなる。また、例えば、各位置p1〜p4が、文字列中の何番目〜何番目という範囲を示してもよい。その場合は、一例として、位置p1が「1〜2文字目」で、位置p2が「2〜3文字目」で、位置p3が「3〜4文字目」で、位置p4が「4〜5文字目」などとなる。他の一例として、位置p1が「1〜3文字目」で、位置p2が「2〜4文字目」で、位置p3が「3〜5文字目」で、位置p4が「4〜6文字目」としてもよい。位置を示すフィールドの数は、図1に示す存否情報テーブルT10では、4種類であるがこれに限定されるものではない。位置を示すフィールドの数は、1または複数設けられる。
存否情報テーブルT10は、圧縮辞書テーブルT20に格納された文字列に基づいて生成される。圧縮テーブルT20に示す各文字列について、文字列内の文字情報と、その文字列内での出現位置とが、存否情報テーブルT10内に反映される。例えば、圧縮辞書テーブルT20に格納された文字列c1、c2、c4、c6が、文字情報c1を位置p1に、文字情報c2を位置p2に、文字情報c4を位置p3に、文字情報c6を位置p4に含むものであるとする。すると、文字列c1、c2、c4、c6により、存否情報テーブルT10の文字情報c1且つ位置p1の存否情報、文字情報c2且つ位置p2の存否情報、文字情報c4且つ位置p3の存否情報、および文字情報c6且つ位置p4の存否情報のいずれも「存在」を示す。また、例えば、図1に示す圧縮辞書テーブルT20には、文字情報c1を位置p3に含む文字列が含まれていないので、存否情報テーブルT10の対応する位置は「不在」を示す。図1の存否情報テーブルT10は、「存在」を「1」で、「不在」を「0」で示している。
図1に示す変換処理は、圧縮対象のファイルF1に含まれる文字列w11〜w13を、圧縮辞書テーブルT20に示される対応関係に基づいて、圧縮符号に変換する処理の例である。圧縮対象のファイルF1から文字列w11が読み出される(S10)と、文字列w11に基づく存否情報テーブルT10の参照が行なわれる(S11)。文字列w11は、位置p1に文字情報c1、位置p2に文字情報c2、位置p3に文字情報c4、位置p4に文字情報c1を含む文字列である。文字列w11に含まれる文字情報と位置との組み合わせのいずれも存否情報テーブルT10に「存在」が示されているので、この場合に、文字列w11は、圧縮辞書テーブルT20に登録されている可能性があると判断される。
読み出した文字列w11が圧縮辞書テーブルT20に登録されている可能性がある場合には、圧縮辞書テーブルT20は、文字列w11で検索される(S12)。S12の検索で文字列w11と合致する文字列が圧縮テーブルT20内に見つかった場合には、検索により得られた文字列に対応付けられた圧縮符号に、文字列w11を変換する(S13)。例えば、図1に示す圧縮辞書テーブルT20において、文字列w11に合致する文字列に対応付けられた圧縮符号は、「10011」である。S13の変換は、例えば、圧縮辞書テーブルT20から圧縮符号を読み出し、メモリ内の圧縮ファイル生成のために設けられた記憶領域に書き込むなどにより行なわれる。
例えば、S10の読み出しで文字列w12が読み出されたとする。すると、S11の参照では、位置p1と文字情報c1、位置p2と文字情報c3の組み合わせは、いずれも存否情報テーブルT10により「存在」が示される。一方、位置p3と文字情報c2の組み合わせは、存否情報テーブルT10により「不在」が示される。文字列w12は、存否情報テーブルT10に「不在」が示される文字情報と位置との組み合わせを、文字列の中に少なくとも1つ以上含むため、圧縮辞書テーブルT20に含まれないと判断される(S14)。S14の判断が行なわれると、圧縮ファイル生成のために設けられた記憶領域内に、文字列w12のデータそのものが書き込まれるか、もしくは別の圧縮処理が行なわれて書き込まれる(S15)。
例えば、S10の読み出しで文字列w13が読み出されたとする。すると、S11の参照では、位置p1と文字情報c1、位置p2と文字情報c2、位置p3と文字情報c1のいずれも存否情報テーブルT10に「存在」が示される。S12の検索が行なわれるが、図1に示される圧縮辞書テーブルT20には、文字列w13と合致する文字列が含まれない(S16)。その場合には、文字列w13に対して、S14と判断された場合と同様の処理が行なわれる。
上述の変換処理においては、存否情報テーブルT10の参照結果に基づく判断によって、圧縮辞書テーブルT20を検索する処理が一部抑制される。そのため、圧縮処理に要する処理コスト(処理時間など)が抑制される。その結果、圧縮処理全体の処理速度が向上する。
図2は、集計処理の一例を示す。図2に示す集計処理により、圧縮対象のファイルF1内に含まれる文字列毎の出現回数が集計される。集計処理には、例えば、存否情報テーブルT10と、集計テーブルT21とが用いられる。集計テーブルT21は、文字列と、その文字列の圧縮対象のファイルF1における出現頻度とを対応付けるテーブルである。図2に示す集計テーブルT21においては、図1に示す圧縮辞書テーブルT20と同じ文字列を含む。
圧縮対象のファイルF1から、文字列(例えば、文字列w11〜w13のいずれか)が読み出される(S20)と、読み出された文字列に基づいて、存否情報テーブルT10の参照が行なわれる(S21)。S21の参照の結果、文字列w11と文字列w13については、それぞれの文字列に含まれる位置と文字情報との組み合わせのいずれについても、存否情報テーブルT10に「存在」が示される。その場合には、集計テーブルT21の検索が行なわれる(S22)。文字列w11について検索した場合には、文字列w11に合致する文字列が集計テーブルT21に含まれるので、検索により見つけられた文字に対応する出現回数がインクリメントされる(S23)。一方、文字列w13に合致する文字列は集計テーブルT21に含まれないので、集計テーブルT21の更新は行なわれない(S24)。また、文字列w12は、存否情報テーブルT10により「不在」が示されるので、集計テーブルの検索は行なわれない。
上記の集計処理においては、存否情報テーブルT10の参照結果に基づく判断によって、集計テーブルT21を検索する処理が一部抑制される。そのため、集計処理に要する処理コスト(処理時間など)が抑制される。
また、例えば、上記の集計処理により得られる各文字列の圧縮対象のファイルF1における出現回数に基づいて、各文字列に対して圧縮符号の割り当てが行なわれる。図1の変換処理に用いられる圧縮辞書テーブルT20は、図2に示す集計処理の結果に基づいて生成されたものでもよいし、他の方法により生成されたものでもよい。さらに、図2の集計処理の結果に基づいて生成された圧縮辞書テーブルT20を、図1の変換処理に用いてもよいし、図1に示す変換処理以外の方法による変換処理に用いてもよい。
図1および2に示す処理は、プロセッサおよびメモリを備えたコンピュータにより実現される。圧縮対象のファイルF1、圧縮ファイルF2、存否情報テーブルT10、圧縮辞書テーブルT20、集計テーブルT21などがメモリに展開される。プロセッサは、図1または2に示す手順で演算やメモリへのアクセスを行ない、図1に示す変換処理や図2に示す集計処理を実行する。コンピュータの構成、実行手順の詳細は後述する。
図3は、コンピュータ1の機能ブロックの構成例を示す。コンピュータ1は、圧縮部11、伸張部12および記憶部13を含む。記憶部13は、圧縮対象のファイル(例えば、図1および図2に示すファイルF1など)、圧縮ファイル(例えば、図1に示す圧縮ファイルF2など)などを記憶する。さらに、記憶部13は、存否情報テーブル(図1および図2に示す存否情報テーブルT10など)、圧縮辞書テーブル(図1に示す圧縮辞書テーブルT20など)、集計テーブル(図2に示す集計テーブルT21など)を記憶する。存否情報テーブル、圧縮辞書テーブルおよび集計テーブルのいずれについても、図1および図2に関して上述された内容の変形例があり得る。
圧縮部11は、記憶部13に記憶された圧縮対象のデータファイルの圧縮処理を行なう。例えば、圧縮部11は、図1および図2に示す処理を行なう。伸張部12は、記憶部13に記憶された圧縮ファイルの伸張処理を行なう。すなわち、伸張部12は、圧縮ファイルを記憶部13から読み出し、読み出した圧縮ファイルに含まれる圧縮符号を順次伸張データに変換し、変換して得られる伸張データを記憶部13に順次格納し、伸張ファイルを生成する。
圧縮部11は、制御部111、参照部112および検索部113を含む。制御部111は、圧縮処理において、参照部112および検索部113を制御する。制御部111は、参照部112および検索部113の機能を用いて、例えば、存否情報テーブルの生成処理、圧縮対象のファイルに含まれる文字列の集計処理、集計結果に基づく圧縮辞書の生成処理、および圧縮対象のファイルに含まれる文字列の圧縮符号への変換処理などを行なう。それぞれの処理の詳細は、フローチャートに基づいて後述する。
参照部112は、記憶部13に記憶される存否情報テーブルを参照することにより、制御部111が読みだした文字列が、圧縮辞書テーブルに登録されている可能性があるか否かを判断する。もしくは、参照部112は、制御部111が読みだした文字列が、集計テーブルに登録されている可能性があるか否かを判断する。制御部111は、参照部112の判断結果に応じて、検索部113の検索を制御する。制御部111は、参照部112により、読みだした文字列が圧縮辞書テーブルに登録されている可能性があると判断された場合に、検索部113に圧縮辞書テーブルの検索を実行させる。制御部111は、参照部112により、読みだした文字列が圧縮辞書テーブルに登録されている可能性がないと判断された場合には、検索部113による検索処理を実行させない。すなわち、制御部111は、読みだした文字列が圧縮辞書テーブルに登録されている可能性がないと判断された場合を除いて、検索部113による検索処理を実行させる。検索部113は、制御部111の制御に応じて、制御部111が読みだした文字列で圧縮辞書テーブルを検索する。制御部111は、検索部113による集計テーブルの検索についても、参照部112の判断に応じて同様の制御を行なう。制御部111は、参照部112や検索部113の処理結果に応じて、さらに処理を実行するが、その処理内容はフローチャートを用いて後述する。
図4は、コンピュータ1のハードウェア構成例を示す。コンピュータ1は、例えば、プロセッサ301、RAM(Random Access Memory)302、ROM(Read Only Memory)303、ドライブ装置304、記憶媒体305、入力インターフェース(I/F)306、入力デバイス307、出力インターフェース(I/F)308、出力デバイス309、通信インターフェース(I/F)310、SAN(Storage Area Network)インターフェース(I/F)311およびバス312などを含む。それぞれのハードウェアはバス312を介して接続されている。
RAM302は読み書き可能なメモリ装置であって、例えば、SRAM(Static RAM)やDRAM(Dynamic RAM)などの半導体メモリ、またはRAMでなくてもフラッシュメモリなどが用いられる。ROM303は、PROM(Programmable ROM)なども含む。ドライブ装置304は、記憶媒体305に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体305は、ドライブ装置304によって書き込まれた情報を記憶する。記憶媒体305は、例えば、ハードディスク、SSD(Solid State Drive)などのフラッシュメモリ、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ1は、複数種類の記憶媒体それぞれについて、ドライブ装置304及び記憶媒体305を設ける。
入力インターフェース306は、入力デバイス307と接続されており、入力デバイス307から受信した入力信号をプロセッサ301に伝達する。出力インターフェース308は、出力デバイス309と接続されており、出力デバイス309に、プロセッサ301の指示に応じた出力を実行させる。通信インターフェース310はネットワーク3を介した通信の制御を行なう。SANインターフェース311は、ストレージエリアネットワークによりコンピュータ1と接続された記憶装置との通信の制御を行なう。
入力デバイス307は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ1の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス309は、コンピュータ1の制御に応じて情報を出力する装置である。出力デバイス309は、例えば、ディスプレイなどの画像出力装置(表示デバイス)や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス307及び出力デバイス309として用いられる。また、入力デバイス307及び出力デバイス309は、コンピュータ1と一体になっていてもよいし、コンピュータ1に含まれず、例えば、コンピュータ1に外部から接続する装置であってもよい。
例えば、プロセッサ301は、ROM303や記憶媒体305に記憶されたプログラムをRAM302に読み出し、読み出されたプログラムの手順に従って圧縮部11の処理または伸張部12の処理を行なう。その際にRAM302はプロセッサ301のワークエリアとして用いられる。記憶部13の機能は、ROM303および記憶媒体305がプログラムファイル(後述のアプリケーションプログラム24、ミドルウェア23およびOS22など)やデータファイル(圧縮対象のデータファイル、圧縮ファイル、伸張対象のデータファイル、伸張ファイルなど)を記憶し、RAM302がプロセッサ301のワークエリアとして用いられることによって実現される。プロセッサ301が読み出すプログラムについては、図5を用いて説明する。
図5は、コンピュータ1のプログラムの構成例を示す。コンピュータ1において、図4に示すハードウェア群21の制御を行なうOS(オペレーションシステム)22が動作する。OS22に従った手順でプロセッサ301が動作して、ハードウェア群21の制御・管理が行なわれることにより、アプリケーションプログラム24やミドルウェア23に従った処理がハードウェア群21で実行される。さらに、コンピュータ1において、ミドルウェア23またはアプリケーションプログラム24が、RAM302に読み出されてプロセッサ301により実行される。
プロセッサ301が、ミドルウェア23またはアプリケーションプログラム24に含まれる圧縮機能に基づく処理を行なうことにより、(それらの処理をOS22に基づいてハードウェア群21を制御して)圧縮部11の機能が実現される。また、プロセッサ301が、ミドルウェア23またはアプリケーションプログラム24に含まれる伸張機能に基づく処理を行なうことにより、(それらの処理をOS22に基づいてハードウェア群21を制御して)伸張部12の機能が実現される。圧縮機能および伸張機能は、それぞれアプリケーションプログラム24自体に定義されてもよいし、アプリケーションプログラム24に従って呼び出されることで実行されるミドルウェア23の機能であってもよい。
アプリケーションプログラム24(またはミドルウェア23)の実行により、実現される圧縮機能において、読みだした文字列が圧縮辞書テーブルに登録されている可能性がないと判断された場合を除いて、圧縮辞書テーブルを検索する処理が行なわれる。すなわち、圧縮処理において、例えばRAM302などのメモリに格納された圧縮辞書テーブルへのアクセスが特定の場合に抑止されるので、メモリへのアクセス回数や、プロセッサ301によるメモリから読み出した情報についての照合処理の回数が抑制される。
図6は、実施形態のシステムにおける装置の構成例を示す。図6のシステムは、コンピュータ1a、コンピュータ1b、基地局2およびネットワーク3を含む。コンピュータ1aは、無線または有線の少なくとも一方により、コンピュータ1bと接続されたネットワーク3に接続している。
図3に示す圧縮部11と伸張部12とは、図6に示すコンピュータ1aとコンピュータ1bとのいずれに含まれてもよい。コンピュータ1bが図3に示す圧縮部11を含み、コンピュータ1aが伸張部12を含んでもよいし、コンピュータ1bが図3に示す圧縮部11を含み、コンピュータ1aが伸張部12を含んでもよい。また、コンピュータ1aとコンピュータ1bとの双方が、圧縮部11および伸張部12を備えてもよい。
以下に処理手順について説明する。
図7は、圧縮処理の手順例を示す。操作者の入力やアプリケーションプログラム24による指示により、アプリケーションプログラム24の圧縮機能が呼び出される(S100)と、圧縮機能の前処理が行なわれる(S101)。S101の処理において、圧縮部11は、記憶部13から、圧縮符号を割り当られる文字列のリストをワークエリアに読み出す。
文字列のリストは、単語や文節などの文字列を複数含む。文字列のリストが記憶部13に複数記憶され、そのいずれかが指示により選択されてもよい。その場合、例えば、圧縮対象のファイルの属する分野に特化した文字列リストが用意される。例えば、コンピュータ関連の書籍データに対し、他の文字列リストよりもコンピュータ用語を多く含む文字列リストを用いた圧縮が行なわれる。また、文字列リストに含まれる単語や文節は、例えば辞典に基づき選択される。例えば、コンピュータ用語辞典に掲載された単語を含む文字列リストや、化学用語辞典に掲載された単語を含む文字列リストなどが生成される。
文字列リストをワークエリアに読み出すと、制御部111は、存否情報テーブルを生成する(S102)。存否情報テーブルは、図1および図2の存否情報テーブルT10に例示される通り、文字列リスト内の文字列において、各文字情報が文字列内の各特定位置に出現するか否かを示す。文字情報および文字列内の特定位置は、例えば、事前定義に基づき設定される。図8は、存否情報テーブルの生成処理の手順例を示す。
存否情報テーブルの生成処理が呼び出される(S200)と、制御部111は、文字列中の位置についての定義情報を読み出す(S201)。定義情報は、例えば、文字列中の何文字目(開始位置)から何文字分(文字情報の長さ)を指定する定義を含む。定義の一例によれば、「1文字目」から「1文字分」が指定される。また、定義情報は1または複数の定義を含む。定義情報の一例として、「1文字目」から「2文字」を指定する定義と、「2文字目」から「2文字」を指定する定義と、「3文字目」から「2文字」を指定する定義と、「4文字目」から「2文字」を指定する定義と、を含む定義情報を用いてもよい。また、各定義に含まれる開始位置と文字情報の長さとの指定は、文字列の冒頭からのカウントか、末尾からのカウントか、いずれかのカウント方法により定められる。
次に、制御部111は、記憶部13に存否情報テーブルを格納する記憶領域を確保する(S202)。S202の処理において、制御部111は、さらに、存否情報テーブルに含まれる存否情報を「不在」示す情報に初期設定する。
存否情報テーブルは、例えば、S201で取得した定義情報に含まれる各定義に対応するフィールドを備える。そのため、例えば、存否情報テーブルは、少なくとも、定義情報に含まれる定義の数のフィールドを備える。各フィールドは、それぞれ「存在」または「不在」の情報を示すため、1ビット以上のデータが含まれる(例えば、各フィールドが1ビットを含み、「1」で「存在」を示し、「0」で「不在」を示す)。また、例えば、存否情報テーブルは、少なくとも、文字情報の種類の数のレコードを備える。文字情報の種類の数は、例えば、使用される文字コード系に含まれる文字コードの種類の数と、S201で取得する定義情報に定義される文字情報の長さに応じて定められる。文字情報の種類の数は、例えば、文字コード系に含まれる文字コードの種類の数を、定義された文字情報の長さで冪乗した数となる。また、例えば、各文字情報に対応する各レコードは、文字情報そのものによりその開始位置が示される。
存否情報テーブルのサイズと、文字情報に対応するレコードの開始位置とについて、ASCIIコード系を例に用いて説明する。ASCIIコード系の各文字コードは、1バイトで表現される。定義情報において、文字情報の長さが「2文字分」で定義される場合には、文字情報は2バイトで表現される。一例として、各レコードについて1バイトの領域を確保すると、2バイトで表現される文字情報についての存否情報のレコードの開始位置は、存否情報テーブルの開始位置から2バイトの文字情報に対応する数値で特定される。例えば、「AA」という文字情報に対応するASCIIコードは0x4141であり、10進数では、「16705」である。すなわち、文字情報「AA」に関する存否情報のレコードの開始位置は、存否情報テーブルの開始位置から16705バイトの位置であることが特定される。上記の例において、各レコードのサイズが1バイトであるとしたが、1バイトであれば、定義情報に8つの定義が含まれても対応できる。また、上記の例における存否情報テーブルのサイズは、2の16乗バイト(=64KB)の記憶領域に格納されることとなる。しかしながら、ASCIIコード系においては、0x00〜0x7Fまでしか使用されておらず、0x80〜0xFFに対応する文字コードは使用されていない。実際には、上記の例において、存否情報テーブルで使用される記憶領域は、64KBの1/4の16KBで充分である。
例えば、定義情報が、各定義において文字情報の長さが「2文字分」と指定され、各定義でそれぞれ、「1文字目」、「2文字目」、「3文字目」、「4文字目」、「5文字目」と指定されている場合は、存否情報テーブルは図9に示す存否情報テーブルT11となる。但し、図9に示す存否情報テーブルT11においては文字情報を構成する文字は、英字小文字のみに限定して例示している。存否情報テーブルT11は、「1〜2文字目」、「2〜3文字目」、「3〜4文字目」、「4〜5文字目」、「5〜6文字目」などの文字列中の位置に対応するフィールドを備える。また、存否情報テーブルT11は、英字小文字の2文字の組み合わせごとに存否情報を格納するレコードを備える。
S202の処理で存否情報テーブルの記憶領域が確保されると、制御部111は、図7のS102でワークエリアに読み出した文字列リストから、順次文字列を読み出す(S203)。S203の処理を行なうと、制御部111は、参照部112に存否情報テーブルの参照処理を実行させる。参照部112は、S202で取得した定義のうち、未処理の定義を選択し、選択した定義を用いて存否情報テーブルを参照し、存否情報を取得する(S204)。参照部112は、S203で読み出された文字列内で、選択した定義に示される位置にある文字情報について存否情報を取得する。参照部112は、取得された存否情報が「存在」を示すか判断する(S205)。取得した存否情報が「不在」を示す場合(S205:NO)には、参照部112は、存否情報テーブルの該当箇所の存否情報を「存在」に更新する(S206)。S204で取得した存否情報が「存在」を示す(S205:YES)か、S206の処理が行なわれた場合には、未処理の定義がないかどうか判断する(S207)。S207の判断で未処理の定義がある場合(S207:NO)には、未処理の定義に基づいてS204の処理を再度行なう。
存否情報テーブルT11用いて例を挙げる。例えば、S203で「able」という文字列を読み出したとすると、S204において、定義情報に基づく選択により、「ab」、「bl」、「le」のいずれかの文字情報に基づく存否情報の取得が行なわれる。例えば文字情報「ab」についての存否情報を図9の存否情報テーブルから取得する場合には、文字情報「ab」のレコードの「1〜2」文字目のフィールドから、「1」の情報が読み出される。この場合、S205の判断では、「存在」を示すと判断される。
S203で読みだした文字列に対して、定義情報に含まれる各定義での参照処理を行なった場合(S207:YES)は、制御部111は、文字列リスト内に未処理の文字列がないか判断する(S208)。S208の判断において、未処理の文字列が存在する場合(S208:NO)は、S203に戻り、制御部111は、未処理の文字列の読み出しを再度行なう。S208の判断において、未処理の文字列が存在しない場合(S208:YES)には、図7のフローに処理を戻す(S209)。
図7の処理に戻ると、制御部111は、圧縮対象のファイルをワークエリアに読み出す(S103)。圧縮対象のファイルのサイズが大きくワークエリアに読み出せない場合には、制御部111は、圧縮対象のファイルをブロック分割して得られるブロック単位で、S103〜S107の処理を行なう。次に制御部111は、S103の処理で読み出されたデータに含まれる文字列の集計処理を行なう(S104)。
図10は、文字列の集計処理の手順例を示す。集計処理が開始される(S300)と、制御部111により前処理が行なわれる(S301)。S301の処理では、制御部111が、記憶部13に集計テーブルの格納領域を確保する。集計テーブルは、例えば、図2に示す集計テーブルT21のとおり、複数の文字列と、各文字列に対応付けられた出現回数の情報とを含む。S301の処理において、制御部111は、文字列リストに含まれる文字列を集計テーブルに格納する。
次に制御部111は、ワークエリアに読み出された圧縮対象のファイルから、順次文字列を読み出す(S302)。S302における読み出しの単位は、設定に応じて定められる。例えば、英語などの文章が含まれるファイルに対しては、スペースが出現した位置において文字列を分割して読みだす。また、例えば、日本語などの文章が含まれるファイルに対しては、テキスト解析により文節または単語で分割して読みだす。テキスト解析においては、言語特有の言語単位の切れ目を用いる。例えば、テキスト解析により「〜は」、「〜に」、「〜ない」、「〜より」などの文節の切れ目を示唆する記述の検知し、検知に応じて分割した単位で文字列として読みだす。
S302の処理で文字列を読み出すと、制御部111は、読みだした文字列の長さに応じてS302で用いる文字列の読み出し位置を更新する(S303)。次に、参照部112は、S302で読みだした文字列に基づいて存否情報テーブルを参照し(S304)、S302で読みだした文字列が集計テーブルに格納されている可能性があるか否かを判断する(S305)。存否情報テーブルの参照は、定義情報に定義された文字列中の位置に基づいて行なわれる。参照部122は、S302で読みだした文字列のうち、定義情報に定義された位置にある文字情報を取り出し、存否情報テーブルのうち、取り出した文字情報と、定義された位置に対応する存否情報を読み出す。存否情報の読み出しは、文字列から取得された文字情報のそれぞれに対して行なわれる。S305の判断においては、参照部112は、S304の参照により得られた存否情報のいずれもが、「存在」を示す場合に、S302で読みだした文字列が集計テーブルに格納されている可能性があると判断する。また、S304の参照により得られた存否情報のうち、いずれか少なくとも1つが「不在」を示す場合に、S302で読みだした文字列は、集計テーブルに格納されている可能性がないと判断する。
S304およびS305の処理を、図9に示す存否情報テーブルT11に基づいて例示する。例えば、S302で読みだした文字列が「about」であるとする。文字列「about」は、存否情報テーブルT11の定義情報によれば、文字情報と文字列中の位置の組が4つ含まれている。第1の組は文字情報「ab」と位置「1〜2文字目」とを含む。第2の組は文字情報「bo」と位置「2〜3文字目」とを含む。第3の組は文字情報「ou」と位置「3〜4文字目」とを含む。第4の組は文字情報「ut」と位置「4〜5文字目」とを含む。S304の処理で、参照部112は、第1〜4の組のそれぞれについて、存否情報テーブルT11を参照し、存否情報を取得する。第1〜4の組のいずれについても取得される存否情報は、「1」であり、「存在」を示す。参照により得られた存否情報のいずれもが「存在」を示すので、参照部112は、文字列「about」が集計テーブルに格納されている可能性があると判断する。
さらに、S304およびS305の処理について、他の例を示す。例えば、S302で読みだした文字列が「abort」であるとする。文字列「abort」は、存否情報テーブルT11の定義情報によれば、文字情報と文字列中の位置の組が4つ含まれている。第1の組は文字情報「ab」と位置「1〜2文字目」とを含む。第2の組は文字情報「bo」と位置「2〜3文字目」とを含む。第3の組は文字情報「or」と位置「3〜4文字目」とを含む。第4の組は文字情報「rt」と位置「4〜5文字目」とを含む。S304の処理で、参照部112は、第1〜4の組のそれぞれについて、存否情報テーブルT11を参照し、存否情報を取得する。第1の組および第2の組に対応する存否情報は、「1」であるが、第3の組および第4の組に対応する存否情報は、「0」であり、「不在」を示す。1つ以上の組に対応する存否情報が「不在」を示すので、参照部112は、文字列「abort」は集計テーブルに格納されている可能性がないと判断する。
S305の判断で、S302で読みだした文字列が集計テーブルに格納されている可能性があると判断されると(S305:YES)、検索部113は、S302で読みだした文字列を用いて集計テーブルを検索する(S306)。S306の検索処理は、例えば、集計テーブルに格納された文字列と、S302で読みだした文字列との比較照合を、集計テーブル内で順次行なうことにより行なわれる。また、例えば、インデックスを用いて検索する方法もあるが、それについては、図12を用いて後述する。
S306の検索処理の結果、検索部113は、集計テーブル内に該当する文字列(S302で読みだした文字列に合致する文字列)を見つけることができたか否かを判断する(S307)。検索部113は、例えば、文字列の比較照合により、S302で読みだした文字列に合致する文字列を見つけた場合に、該当する文字列を見つけることができたと判断する(S307:YES)。その場合に、制御部111は、集計テーブルにおいて、該当する文字列に対応づけられた出現回数を更新する(S308)。出現回数の更新は、例えば、出現回数を示す数値をインクリメントすることで行なわれる。
S308の処理が終了した場合、S305の判断条件を満たさなかった場合(S305:NO)、およびS307の判断条件を満たさなかった場合(S307:NO)に、制御部111は、S303で更新した読み出し位置が圧縮対象のファイルF1の終点であるか否かを判断する(S309)。読み出し位置がまだ終点でない場合(S309:NO)には、制御部111は、S302のフローに戻り、再度文字列の読み出しを行なう。読み出し位置が圧縮対象のファイルF1の終点である場合(S309:YES)には、制御部111は、図7のフローに戻る(S310)。
S104の処理が実行されると、集計テーブルには圧縮対象のファイルにおける各文字列の出現回数がカウントされている。S104の処理後、制御部111は、文字列ごとの出現回数に応じて、各文字列に圧縮符号を割り当てて、圧縮辞書テーブルを生成する(S105)。圧縮辞書テーブルは、図1に示す圧縮辞書テーブルT20と同様に、文字列と圧縮符号とを対応づけたテーブルである。文字列ごとの出現回数に応じた圧縮符号の割り当ては、ハフマン符号化のハフマン木生成アルゴリズムや、算術圧縮の圧縮符号生成アルゴリズムに従って割り当てられる。ハフマン符号化のハフマン木生成アルゴリズムでは、集計テーブルに含まれる文字列の出現回数の順序に応じて符号の割り当てを行なう。出現回数が多い文字列ほど短い圧縮符号が割り当てられる。また、算術圧縮では、各文字列の出現確率に応じた長さの圧縮符号が割り当てられる。算術圧縮においても出現確率が大きいほど(出現回数が多いほど)短い圧縮符号が割り当てられる。制御部111は、生成された圧縮符号を各文字列に対応付けて、圧縮辞書テーブルに格納する。
S104の処理が終了すると、制御部111は、S104で生成された圧縮辞書テーブルに基づいて、圧縮対象のファイルに含まれるデータを圧縮符号に変換する処理を行なう(S106)。
図11は、変換処理の手順例を示す。変換処理が開始される(S400)と、制御部111により前処理が行なわれる(S401)。S401の処理では、制御部111が、記憶部13に圧縮ファイルの格納領域を確保する。
次に、制御部111は、ワークエリアに読み出された圧縮対象のファイルから、順次文字列を読み出す(S402)。S402における読み出しの単位は、S302における読みだしと同様の単位で行なわれる。S402の処理で文字列を読み出すと、制御部111は、読みだした文字列の長さに応じてS402で用いる文字列の読み出し位置を更新する(S403)。次に、参照部112は、S402で読みだした文字列に基づいて存否情報テーブルを参照し(S404)、S402で読みだした文字列が、S104で生成された圧縮辞書テーブルに格納されている可能性があるか否かを判断する(S405)。S404の存否情報テーブルの参照は、S304処理と同様に、定義情報に定義された文字列中の位置に基づいて行なわれる。存否情報の参照は、文字列から取得された文字情報のそれぞれに対して行なわれる。S405の判断においては、参照部112は、S404の参照により得られた存否情報のいずれもが、「存在」を示す場合に、S402で読みだした文字列が圧縮辞書テーブルに格納されている可能性があると判断する。また、S404の参照により得られた存在情報のうち、いずれか少なくとも1つが「不在」を示す場合に、S402で読みだした文字列は、圧縮辞書テーブルに格納されている可能性がないと判断する。
S405の判断で、S402で読みだした文字列が圧縮辞書テーブルに格納されている可能性があると判断されると(S405:YES)、検索部113は、S402で読みだした文字列を用いて圧縮辞書テーブルを検索する(S406)。S406の検索処理は、例えば、圧縮辞書テーブルに格納された文字列と、S402で読みだした文字列との比較照合を、圧縮辞書テーブル内で順次行なうことにより行なわれる。また、例えば、インデックスを用いて検索する方法もあるが、それについては、図13を用いて後述する。
S406の検索処理の結果、検索部113は、圧縮辞書テーブル内に該当する文字列(S402で読みだした文字列に合致する文字列)を見つけることができたか否かを判断する(S407)。検索部113は、例えば、文字列の比較照合により、S402で読みだした文字列に合致する文字列を見つけた場合に、該当する文字列を見つけることができたと判断する(S407:YES)。その場合に、制御部111は、圧縮辞書テーブルにおいて、該当する文字列に対応づけられた圧縮符号をS401で確保された記憶領域内に書き込む(S408)。
S405の判断条件を満たさなかった場合(S405:NO)、およびS407の判断条件を満たさなかった場合(S407:NO)に、制御部111は、S402で読みだした文字列を、他の圧縮アルゴリズムで圧縮して、圧縮されたデータをS401で確保した記憶領域に書き込む(S409)。他の圧縮アルゴリズムは、例えば、1文字単位で圧縮符号を割り当てたハフマン符号化などの圧縮アルゴリズムである。また、S409において、制御部111は、S402で読みだした文字列を、そのままS401で確保した記憶領域に書き込むこととしてもよい。
S408の処理またはS409の処理が終わると、制御部111は、S403で更新した読み出し位置が圧縮対象のファイルF1の終点であるか否かを判断する(S410)。読み出し位置がまだ終点でない場合(S410:NO)には、制御部111は、S402のフローに戻り、再度文字列の読み出しを行なう。読み出し位置が圧縮対象のファイルF1の終点である場合(S410:YES)には、制御部111は、図7のフローに戻る(S411)。
S106の処理が実行されると、制御部111は、記憶部13に記憶された圧縮符号群を圧縮ファイルとして保存する(S107)。S107の処理において、例えば、制御部111は、ファイル名、ファイルの格納場所を指定される画面を表示させ、表示された画面に応じた入力に指定されたファイル格納場所に、指定されたファイル名で圧縮ファイルを格納する。圧縮ファイルが保存されると、呼び出された圧縮機能はクローズされる(S108)。
次に、集計テーブルの検索処理および圧縮辞書テーブルの一例について説明する。
図12は、集計テーブルの例および集計テーブルに対応するインデックスの例を示す。集計テーブルT22は、図2に示す集計テーブルT21と同様に、文字列とその文字列の出現回数との対応関係を示す。集計テーブルT22に格納される文字列は、文字数が少ない順に格納されており、文字数が同じ文字列同士ではアルファベット順に格納されている。
インデックスT30は、文字数と、文字列内の所定位置の文字情報と、ポインタを格納するフィールドを備える。ポインタは、文字数と、所定位置の文字情報という2つの条件に対応する集計テーブルT22での格納位置を示す。インデックスT30において、所定位置は、文字列中の先頭から1〜2文字目である。例えば、文字列の文字数が2であり、1〜2文字目の文字情報が「ab」であるレコードのポインタpt1は、集計テーブルT22の文字列「ab」の格納位置を示す。また、例えば、文字列の文字数が4であり、1〜2文字目の文字情報が「sa」であるレコードのポインタpt2は、集計テーブルT22の文字列「safe」の格納位置を示す。pt3〜pt5も同様に集計テーブルT22内の文字列の格納位置を示す。インデックスT30に含まれる各レコードも、文字数が少ない順に格納されており、さらに、文字数が同じもの同士では、アルファベット順に格納されている。
図10のS306の検索処理は、例えば、インデックスT30を用いて行なわれる。検索部113は、インデックスT30のうち、S302で読み出された文字列の文字数と、S302で読み出された文字列の1〜2文字目の文字情報とが当てはまるレコードに格納されたポインタを参照する。例えば、S302で読みだした文字列が「said」であれば、検索部113は、文字数が「4」で、1〜2文字目が「sa」であるレコードに格納されたポインタpt2に基づいて、集計テーブルT22を検索する。この検索手順をより詳細に述べると、検索部113は、ポインタpt2に基づき集計テーブルT22から、文字列「safe」をよみだし、S302で読みだした文字列「said」と比較する。文字列「safe」が文字列「said」と合致しないため、検索部113は、集計テーブルT22内の次の文字列と比較照合する。すると、次の文字列が「said」であるため、検索部113は、文字列同士の比較照合により、集計テーブルT22内に、S302で読み出した文字列に合致する文字列を見つけることができる。
ちなみに、インデックスT30からポインタを取得する場合に、S302で読みだした文字列の1〜2文字列文字情報は完全一致でなくても構わない。例えば、インデックスT30において、文字数の指定が「4文字」で1〜2文字目が「sa」と指定されたレコードの次のレコードでは、1〜2文字目が「ta」と指定されている。この場合に、例えば、S302で読みだした文字列が「sort」などのアルファベット順で「sa」と「ta」の間である文字列であれば、ポインタpt2を用いることとしてもよい。
図12に示すインデックスT30を用いることにより、検索部113により文字列同士の比較照合を行なう集計インデックスT22の範囲を絞り込むことができる。
図13は、圧縮辞書テーブルの例および圧縮辞書テーブルに対応するインデックスの例を示す。圧縮辞書テーブルT23は、図1に示す圧縮辞書テーブルT20と同様に、文字列と圧縮符号との対応関係を示す。圧縮辞書テーブルT23に格納される文字列は、文字数が少ない順に格納されており、文字数が同じ文字列同士ではアルファベット順に格納されている。
インデックスT31は、インデックスT30と同様に、文字数と、文字列内の所定位置の文字情報と、ポインタを格納するフィールドを備える。ポインタは、文字数と、所定位置の文字情報という2つの条件に対応する圧縮辞書テーブルT23での格納位置を示す。インデックスT31において、所定位置は、文字列中の先頭から1〜2文字目である。例えば、文字列の文字数が2であり、1〜2文字目の文字情報が「ab」であるレコードのポインタpt6は、圧縮辞書テーブルT23の文字列「ab」の格納位置を示す。また、例えば、文字列の文字数が4であり、1〜2文字目の文字情報が「sa」であるレコードのポインタpt7は、圧縮辞書テーブルT23の文字列「safe」の格納位置を示す。pt3〜pt5も同様に圧縮辞書テーブルT23内の文字列の格納位置を示す。インデックスT31に含まれる各レコードも、文字数が少ない順に格納されており、さらに、文字数が同じもの同士では、アルファベット順に格納されている。
図11のS406の検索処理は、例えば、インデックスT31を用いて行なわれる。検索部113は、インデックスT31のうち、S402で読み出された文字列の文字数と、S402で読み出された文字列の1〜2文字目の文字情報とが当てはまるレコードに格納されたポインタを参照する。具体的な手順は、インデックスT30を用いて行なう検索処理と同様である。図13に示すインデックスT31を用いることにより、検索部113による文字列同士の比較照合を行なう圧縮辞書インデックスT23の範囲が絞り込まれる。
インデックスT30およびインデックスT31において、文字列の所定位置は、文字列の冒頭から1〜2文字目としているが、所定位置の変形例もあり得る。例えば、1つの変形例においては、所定位置を文字列の末尾から1文字目とする。その変形例においては、集計テーブルもしくは圧縮辞書テーブルに格納される文字列は文字数順で格納され、且つ同じ文字数の文字列同士は末尾文字のアルファベット順で格納される。
さらには、インデックスT30およびインデックスT31では、文字数と、文字列内で所定位置の文字情報との双方に基づく絞り込みが可能であるが、どちらか一方だけでも絞込みの効果を得られる。例えば、圧縮辞書テーブルまたは集計テーブルに文字列が文字数順に格納し、圧縮辞書テーブルまたは集計テーブル内の所定文字数の文字列の格納位置を示すポインタを、所定文字数と関連付けたインデックスを用いることにより、絞込みが実現される。所定文字数の文字列を圧縮対象のファイルから読み出した場合に、インデックス内で所定文字数に関連付けられたポインタを用いることにより、圧縮辞書テーブルまたは集計テーブルの検索範囲が絞り込まれる。同様に、例えば、圧縮辞書テーブルまたは集計テーブルにアルファベット順に文字列を格納し、アルファベットに対応したポインタを用いた場合にも、検索範囲の絞り込みの効果が得られる。
圧縮辞書内の検索速度を維持するために、例えば、ハフマン木やトライ木などの木構造のデータを用いる方法がある。それらの方法においては、圧縮辞書そのものに匹敵する(もしくはそれ以上の)データサイズが必要となる。上述のとおり、インデックスT30やインデックスT31を用いることにより、圧縮辞書の検索範囲が絞り込まれるので、木構造データなどを用いずに圧縮辞書を検索しても検索速度が維持される。そのため、圧縮辞書の検索に必要となる記憶領域が抑制される。
以下、上述の実施形態における変形例の一例を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行なわれうる。
例えば、圧縮辞書テーブルと集計テーブルは、1つのテーブルに合成されても構わない。合成されたテーブルにおいては、圧縮辞書テーブルと集計テーブルとに共通で含まれる文字列について、その文字列に対応する圧縮符号と出現回数とが対応付けて格納される。さらに、例えば、合成されたテーブルに、文字列に対応する圧縮符号の符号長を示す情報が対応付けて格納される。
圧縮処理は、ファイル内のデータ以外にも、システムから出力される監視メッセージなどでもよい。例えば、バッファに順次格納される監視メッセージを上述の圧縮処理により圧縮し、ログファイルとして格納するなどの処理が行なわれる。
文字列を圧縮符号に変換する処理に限らず、第1の符号系の情報を第2の符号系の情報に変換する処理であれば、上述の存否情報による検索処理の抑制を行なうことができる。例えば、第1の符号系の符号列のリストが予め記憶部13に記憶され、記憶部13に記憶された定義情報により存否情報テーブルが生成される。存否情報テーブルは、図8の処理手順をコンピュータ1が実行することにより生成できる。例えば、コンピュータ1が符号列リストに基づく集計テーブルを用意し、第1の符号系の符号によるファイルに含まれる符号列の集計を行なう(図10の手順により行なわれる)。その場合に、存否情報テーブルが用いられることにより、符号列の検索範囲が絞り込まれる。また、例えば、コンピュータ1が、符号列リストに基づき第2の符号系の符号列との対応テーブルを用意し、第1の符号系の符号列の第2の符号系の符号列への変換を行なう(図11の手順により行なわれる)。その場合にも、存否情報テーブルが用いられることにより、符号列の検索範囲が絞り込まれる。