(57)【要約】  一側面において、圧縮符号が割り当てられた文字列群に対して行なわれる検索処理の処理量を抑制する。  一態様によれば、制御プログラムは、コンピュータに、ある文字情報を文字列内のある位置に含む文字列を取得した場合に、圧縮符号が割り当てられた文字列を複数含む文字列群のうちのいずれか少なくとも１つの文字列が、前記ある文字情報を前記ある位置に含むか否かを示す存否情報を参照し、前記存否情報に、前記文字列群に含まれるいずれの文字列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記文字列群に対し、取得した前記文字列の検索を行なう、処理を実行させる。
2014045320.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
ある文字情報を文字列内のある位置に含む文字列を取得した場合に、圧縮符号が割り当てられた文字列を複数含む文字列群のうちのいずれか少なくとも１つの文字列が、前記ある文字情報を前記ある位置に含むか否かを示す存否情報を参照し、
前記存否情報に、前記文字列群に含まれるいずれの文字列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記文字列群に対し、取得した前記文字列の検索を行なう、
処理を実行させることを特徴とする制御プログラム。
【請求項２】
前記コンピュータに、さらに、
取得した前記文字列が、さらに他の文字情報を前記ある位置と異なる他の位置に含む場合に、前記文字列群のうちのいずれか少なくとも１つの文字列が、前記他の文字情報を前記他の位置に含むか否かを示す他の存否情報を参照し、
前記存否情報に、前記文字列群に含まれるいずれの文字列も前記ある文字情報を前記ある位置に含まない場合と、前記文字列群いずれの文字列も前記他の文字情報を前記他の位置に含まないことが示される場合とを除いて、前記検索を行なう、
処理を実行させることを特徴とする請求項１に記載の制御プログラム。
【請求項３】
前記ある文字情報と前記他の文字情報とは、それぞれ複数の文字を含み、
前記ある文字情報に含まれる複数の文字と、前記他の文字情報に含まれる複数の文字とは、一部の文字が重複する、
ことを特徴とする請求項２に記載の制御プログラム。
【請求項４】
前記検索は、前記文字列群内に含まれる文字列であって、取得した前記文字列と、文字数と先頭または末尾の文字とのうち少なくとも一方が一致する文字列と、取得した前記文字列との照合により行なわれる、
ことを特徴とする請求項１〜３のいずれか１項に記載の制御プログラム。
【請求項５】
前記コンピュータに、さらに、
前記検索により得られる文字列に割り当てられた圧縮符号を記憶領域に書き込む、
処理を実行させることを特徴とする請求項１〜４のいずれか１項に記載の制御プログラム。
【請求項６】
前記コンピュータに、さらに、
前記検索により得られる文字列に対応する集計数を更新する、
処理を実行させることを特徴とする請求項１〜４のいずれか１項に記載の制御プログラム。
【請求項７】
コンピュータが、
ある文字情報を文字列内のある位置に含む文字列を取得した場合に、圧縮符号が割り当てられた文字列を複数含む文字列群のうちのいずれか少なくとも１つの文字列が、前記ある文字情報を前記ある位置に含むか否かを示す存否情報を参照し、
前記存否情報に、前記文字列群に含まれるいずれの文字列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記文字列群に対し、取得した前記文字列の検索を行なう、
ことを特徴とする制御方法。
【請求項８】
圧縮符号が割り当てられた文字列を複数含む文字列群のうちのいずれか少なくとも１つの文字列が、ある文字情報を文字列中のある位置に含むか否かを示す存否情報を記憶する記憶部と、
前記ある文字情報を前記ある位置に含む文字列を取得した場合に、前記記憶部に記憶された前記存否情報に、前記文字列群に含まれるいずれの文字列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記文字列群に対し、取得した前記文字列の検索を行なう検索部と、
を含むことを特徴とする制御装置。
【請求項９】
コンピュータに、
ある符号情報を符号列内のある位置に含む符号列を取得した場合に、変換符号が割り当てられた符号列を複数含む符号列群のうちのいずれか少なくとも１つの符号列が、前記ある符号情報を前記ある位置に含むか否かを示す存否情報を参照し、
前記存否情報に、前記符号列群に含まれるいずれの符号列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記符号列群に対し、取得した前記符号列の検索を行なう、
処理を実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの圧縮技術または伸張技術に関する。
【背景技術】
【０００２】
ハフマン符号化やＬＺ７８などの圧縮アルゴリズムを用いて、文字や単語などの文字情報に対して圧縮符号を割り当てて圧縮を行なう方法がある。これらの圧縮アルゴリズムに基づく圧縮処理では、圧縮符号が割り当てられた文字情報のリストを用意し、圧縮対象の文字情報に合致する文字情報でリスト内を検索し、検索の結果得られた文字情報に対応付けられた圧縮符号を用いて圧縮データを生成する処理が行なわれる。【０００３】
上記の圧縮処理で行なわれるリスト内の検索は、リスト内の文字情報と圧縮対象の文字情報との照合により行なわれ、照合の結果として、圧縮対象の文字情報と合致するリスト内の文字情報が特定される。リスト内の文字情報と照合を行なう前に、予め用意したインデックスを用いて、リスト内で照合対象となる範囲を絞り込むことも行なわれる。【０００４】
また、上記の圧縮処理において、圧縮符号が対応付けられた文字情報の検索に木構造のデータを用いることがある。例えば、ハフマン符号化ではハフマン木が用いられ、ＬＺ７８ではトライ木などが用いられる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１２−１４２０２４号公報
【特許文献２】特開平５−２２４８７８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述の方法による圧縮符号が割り当てられた文字情報のリスト内の検索は、リスト内の文字情報と圧縮対象の文字情報との照合により行なわれる。照合の結果、合致しなければ、リスト内の次の文字情報について再度照合が行なわれる。文字情報同士の照合が何度も行なわれることとなれば、検索の処理量が増大する。【０００７】
特に、処理対象の文字情報にそもそも圧縮符号が割り当てられていない場合には、検索処理を行なっても、圧縮対象の文字情報と合致する文字情報は見つからない。それにも関わらず、圧縮符号が割り当てられていない文字情報について検索処理を行なってしまうと、圧縮対象の文字情報に合致する文字情報が見つからないので、何度も照合が行なわれることとなり、検索処理の処理量が増えてしまう。【０００８】
本発明の一側面において、圧縮符号が割り当てられた文字列群に対して行なわれる検索処理の処理量を抑制する。
【課題を解決するための手段】
【０００９】
一態様によれば、判定プログラムは、コンピュータに、ある文字情報を文字列内のある位置に含む文字列を取得した場合に、圧縮符号が割り当てられた文字列を複数含む文字列群のうちのいずれか少なくとも１つの文字列が、前記ある文字情報を前記ある位置に含むか否かを示す存否情報を参照し、前記存否情報に、前記文字列群に含まれるいずれの文字列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記文字列群に対し、取得した前記文字列の検索を行なう、処理を実行させる。【００１０】
一態様によれば、コンピュータが、ある文字情報を文字列内のある位置に含む文字列を取得した場合に、圧縮符号が割り当てられた文字列を複数含む文字列群のうちのいずれか少なくとも１つの文字列が、前記ある文字情報を前記ある位置に含むか否かを示す存否情報を参照し、前記存否情報に、前記文字列群に含まれるいずれの文字列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記文字列群に対し、取得した前記文字列の検索を行なう、制御方法を用いる。【００１１】
一態様によれば、制御装置は、圧縮符号が割り当てられた文字列を複数含む文字列群のうちのいずれか少なくとも１つの文字列が、ある文字情報を文字列中のある位置に含むか否かを示す存否情報を記憶する記憶部と、前記ある文字情報を前記ある位置に含む文字列を取得した場合に、前記記憶部に記憶された前記存否情報に、前記文字列群に含まれるいずれの文字列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記文字列群に対し、取得した前記文字列の検索を行なう検索部と、を含む。【００１２】
一態様によれば、制御プログラムは、コンピュータに、ある符号情報を符号列内のある位置に含む符号列を取得した場合に、変換符号が割り当てられた符号列を複数含む符号列群のうちのいずれか少なくとも１つの符号列が、前記ある符号情報を前記ある位置に含むか否かを示す存否情報を参照し、前記存否情報に、前記符号列群に含まれるいずれの符号列も前記ある文字情報を前記ある位置に含まないことが示される場合を除いて、前記符号列群に対し、取得した前記符号列の検索を行なう、処理を実行させる。
【発明の効果】
【００１３】
一側面において、圧縮符号が割り当てられた文字列群に対して行なわれる検索処理の処理量を抑制することができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、変換処理の一例を示す。
【図２】図２は、集計処理の一例を示す。
【図３】図３は、コンピュータ１の機能ブロックの構成例を示す。
【図４】図４は、コンピュータ１のハードウェアの構成例を示す。
【図５】図５は、コンピュータ１のプログラムの構成例を示す。
【図６】図６は、実施形態のシステムにおける装置の構成例を示す。
【図７】図７は、圧縮処理の手順例を示す。
【図８】図８は、存否情報テーブルの生成処理の手順例を示す。
【図９】図９は、存否情報テーブルの例を示す。
【図１０】図１０は、文字列の集計処理の手順例を示す。
【図１１】図１１は、変換処理の手順例を示す。
【図１２】図１２は、集計テーブルの例および集計テーブルに対応するインデックスの例を示す。
【図１３】図１３は、圧縮辞書テーブルの例および圧縮辞書テーブルに対応するインデックスの例を示す。
【発明を実施するための形態】
【００１５】
以下に、実施の形態について説明する。
【００１６】
図１は、変換処理の一例を示す。圧縮対象のファイルＦ１に含まれるデータが圧縮データに変換され、変換されたデータを用いて圧縮ファイルＦ２が生成される。図１の例において、圧縮対象のファイルＦ１は、文字列ｗ１１〜ｗ１３を含む。
【００１７】
文字列ｗ１１〜ｗ１３は、圧縮対象のファイルＦ１に含まれるデータの一例であり、圧縮対象のファイルＦ１内には他の文字列も含まれうる。文字列ｗ１１〜ｗ１３は、例えば、１または複数の文字を含む単語や文節などの単位を構成する文字情報である。また、文字列ｗ１１〜ｗ１３は、システム内で用いられるコードや、タグなどの情報であってもよい。文字列ｗ１１〜ｗ１３の長さは、固定長として取り扱っても可変長として取り扱ってもよい。
【００１８】
図１の変換処理は、存否情報テーブルＴ１０および圧縮辞書テーブルＴ２０を用いて行なわれる。圧縮辞書テーブルＴ２０は、文字列と圧縮符号との対応関係を示す。圧縮辞書テーブルＴ２０には、１または複数の文字列が格納される。圧縮辞書テーブルＴ２０に格納される文字列も、文字列ｗ１１〜１３と同様に、例えば、１または複数の文字を含む単語や文節などの単位を構成する文字情報、または、システム内で用いられるコードやタグなどの情報である。圧縮辞書テーブルＴ２０に格納される文字列のそれぞれに対して、圧縮符号が割り当てられている。圧縮辞書テーブルＴ２０の文字列フィールドに示されるｃ１〜ｃ６のそれぞれは、文字情報である。文字情報ｃ１〜ｃ６は文字情報の一例であり、圧縮辞書テーブルＴ２０にも、存否情報テーブルＴ１０にも、その他の文字情報が含まれうる。文字情報として、例えば、１または複数の文字（記号も含む）を所定の文字コード系で表現する文字コードが用いられる。もしくは文字コードの一部でもよい。または、文字情報としてシステム内で用いられるコードの一部分を用いてもよい。圧縮辞書テーブルＴ２０に格納される文字列は、文字情報ｃ１〜ｃ６を組み合わせたものである。
【００１９】
文字情報ｃ１〜ｃ６の組み合わせにより構成される文字列を例示する。例えば、ｃ１が「ａ」で、ｃ２が「ｂ」で、ｃ４が「ｌ」で、ｃ６が「ｅ」であるとすると、文字列ｃ１、ｃ２、ｃ４、ｃ６は、「ａｂｌｅ」となる。また、２種類以上の文字情報を一部重複させて組み合わせることにより、文字列が構成されてもよい。例えば、ｃ１が「ａｂ」で、ｃ２が「ｂｏ」で、ｃ４が「ｏｒ」で、ｃ６が「ｒｔ」であるとすると、文字列ｃ１、ｃ２、ｃ４、ｃ６は、「ａｂｏｒｔ」となる。
【００２０】
圧縮辞書テーブルＴ２０に格納された文字列には、圧縮符号が割り当てられる。例えば、圧縮符号は、予め各文字列に対して割り当てられていてもよいし、ハフマン符号化やＬＺ７８の圧縮アルゴリズム等により生成されたものでもよい。
【００２１】
存否情報テーブルＴ１０は、存否情報テーブルＴ１０に格納される各文字情報ｃ１〜ｃ６が、文字列中の各位置ｐ１〜ｐ４で、圧縮辞書テーブルＴ２０に格納された文字列内に出現したか否かの存否情報のマップである。存否情報テーブルＴ１０に格納される文字情報は、圧縮辞書テーブルＴ２０に格納される文字情報と同様に文字コードの組み合わせまたは一部か、もしくはシステム内で用いられるコードの一部である。例えば、文字列中の各位置ｐ１〜ｐ４は、文字列中で何番目の文字かを示す。その場合は、一例として、位置ｐ１が「１文字目」で、位置ｐ２が「２文字目」で、位置ｐ３が「３文字目」で、位置ｐ４が「４文字目」などとなる。また、例えば、各位置ｐ１〜ｐ４が、文字列中の何番目〜何番目という範囲を示してもよい。その場合は、一例として、位置ｐ１が「１〜２文字目」で、位置ｐ２が「２〜３文字目」で、位置ｐ３が「３〜４文字目」で、位置ｐ４が「４〜５文字目」などとなる。他の一例として、位置ｐ１が「１〜３文字目」で、位置ｐ２が「２〜４文字目」で、位置ｐ３が「３〜５文字目」で、位置ｐ４が「４〜６文字目」としてもよい。位置を示すフィールドの数は、図１に示す存否情報テーブルＴ１０では、４種類であるがこれに限定されるものではない。位置を示すフィールドの数は、１または複数設けられる。
【００２２】
存否情報テーブルＴ１０は、圧縮辞書テーブルＴ２０に格納された文字列に基づいて生成される。圧縮テーブルＴ２０に示す各文字列について、文字列内の文字情報と、その文字列内での出現位置とが、存否情報テーブルＴ１０内に反映される。例えば、圧縮辞書テーブルＴ２０に格納された文字列ｃ１、ｃ２、ｃ４、ｃ６が、文字情報ｃ１を位置ｐ１に、文字情報ｃ２を位置ｐ２に、文字情報ｃ４を位置ｐ３に、文字情報ｃ６を位置ｐ４に含むものであるとする。すると、文字列ｃ１、ｃ２、ｃ４、ｃ６により、存否情報テーブルＴ１０の文字情報ｃ１且つ位置ｐ１の存否情報、文字情報ｃ２且つ位置ｐ２の存否情報、文字情報ｃ４且つ位置ｐ３の存否情報、および文字情報ｃ６且つ位置ｐ４の存否情報のいずれも「存在」を示す。また、例えば、図１に示す圧縮辞書テーブルＴ２０には、文字情報ｃ１を位置ｐ３に含む文字列が含まれていないので、存否情報テーブルＴ１０の対応する位置は「不在」を示す。図１の存否情報テーブルＴ１０は、「存在」を「１」で、「不在」を「０」で示している。
【００２３】
図１に示す変換処理は、圧縮対象のファイルＦ１に含まれる文字列ｗ１１〜ｗ１３を、圧縮辞書テーブルＴ２０に示される対応関係に基づいて、圧縮符号に変換する処理の例である。圧縮対象のファイルＦ１から文字列ｗ１１が読み出される（Ｓ１０）と、文字列ｗ１１に基づく存否情報テーブルＴ１０の参照が行なわれる（Ｓ１１）。文字列ｗ１１は、位置ｐ１に文字情報ｃ１、位置ｐ２に文字情報ｃ２、位置ｐ３に文字情報ｃ４、位置ｐ４に文字情報ｃ１を含む文字列である。文字列ｗ１１に含まれる文字情報と位置との組み合わせのいずれも存否情報テーブルＴ１０に「存在」が示されているので、この場合に、文字列ｗ１１は、圧縮辞書テーブルＴ２０に登録されている可能性があると判断される。
【００２４】
読み出した文字列ｗ１１が圧縮辞書テーブルＴ２０に登録されている可能性がある場合には、圧縮辞書テーブルＴ２０は、文字列ｗ１１で検索される（Ｓ１２）。Ｓ１２の検索で文字列ｗ１１と合致する文字列が圧縮テーブルＴ２０内に見つかった場合には、検索により得られた文字列に対応付けられた圧縮符号に、文字列ｗ１１を変換する（Ｓ１３）。例えば、図１に示す圧縮辞書テーブルＴ２０において、文字列ｗ１１に合致する文字列に対応付けられた圧縮符号は、「１００１１」である。Ｓ１３の変換は、例えば、圧縮辞書テーブルＴ２０から圧縮符号を読み出し、メモリ内の圧縮ファイル生成のために設けられた記憶領域に書き込むなどにより行なわれる。
【００２５】
例えば、Ｓ１０の読み出しで文字列ｗ１２が読み出されたとする。すると、Ｓ１１の参照では、位置ｐ１と文字情報ｃ１、位置ｐ２と文字情報ｃ３の組み合わせは、いずれも存否情報テーブルＴ１０により「存在」が示される。一方、位置ｐ３と文字情報ｃ２の組み合わせは、存否情報テーブルＴ１０により「不在」が示される。文字列ｗ１２は、存否情報テーブルＴ１０に「不在」が示される文字情報と位置との組み合わせを、文字列の中に少なくとも１つ以上含むため、圧縮辞書テーブルＴ２０に含まれないと判断される（Ｓ１４）。Ｓ１４の判断が行なわれると、圧縮ファイル生成のために設けられた記憶領域内に、文字列ｗ１２のデータそのものが書き込まれるか、もしくは別の圧縮処理が行なわれて書き込まれる（Ｓ１５）。
【００２６】
例えば、Ｓ１０の読み出しで文字列ｗ１３が読み出されたとする。すると、Ｓ１１の参照では、位置ｐ１と文字情報ｃ１、位置ｐ２と文字情報ｃ２、位置ｐ３と文字情報ｃ１のいずれも存否情報テーブルＴ１０に「存在」が示される。Ｓ１２の検索が行なわれるが、図１に示される圧縮辞書テーブルＴ２０には、文字列ｗ１３と合致する文字列が含まれない（Ｓ１６）。その場合には、文字列ｗ１３に対して、Ｓ１４と判断された場合と同様の処理が行なわれる。
【００２７】
上述の変換処理においては、存否情報テーブルＴ１０の参照結果に基づく判断によって、圧縮辞書テーブルＴ２０を検索する処理が一部抑制される。そのため、圧縮処理に要する処理コスト（処理時間など）が抑制される。その結果、圧縮処理全体の処理速度が向上する。
【００２８】
図２は、集計処理の一例を示す。図２に示す集計処理により、圧縮対象のファイルＦ１内に含まれる文字列毎の出現回数が集計される。集計処理には、例えば、存否情報テーブルＴ１０と、集計テーブルＴ２１とが用いられる。集計テーブルＴ２１は、文字列と、その文字列の圧縮対象のファイルＦ１における出現頻度とを対応付けるテーブルである。図２に示す集計テーブルＴ２１においては、図１に示す圧縮辞書テーブルＴ２０と同じ文字列を含む。
【００２９】
圧縮対象のファイルＦ１から、文字列（例えば、文字列ｗ１１〜ｗ１３のいずれか）が読み出される（Ｓ２０）と、読み出された文字列に基づいて、存否情報テーブルＴ１０の参照が行なわれる（Ｓ２１）。Ｓ２１の参照の結果、文字列ｗ１１と文字列ｗ１３については、それぞれの文字列に含まれる位置と文字情報との組み合わせのいずれについても、存否情報テーブルＴ１０に「存在」が示される。その場合には、集計テーブルＴ２１の検索が行なわれる（Ｓ２２）。文字列ｗ１１について検索した場合には、文字列ｗ１１に合致する文字列が集計テーブルＴ２１に含まれるので、検索により見つけられた文字に対応する出現回数がインクリメントされる（Ｓ２３）。一方、文字列ｗ１３に合致する文字列は集計テーブルＴ２１に含まれないので、集計テーブルＴ２１の更新は行なわれない（Ｓ２４）。また、文字列ｗ１２は、存否情報テーブルＴ１０により「不在」が示されるので、集計テーブルの検索は行なわれない。
【００３０】
上記の集計処理においては、存否情報テーブルＴ１０の参照結果に基づく判断によって、集計テーブルＴ２１を検索する処理が一部抑制される。そのため、集計処理に要する処理コスト（処理時間など）が抑制される。
【００３１】
また、例えば、上記の集計処理により得られる各文字列の圧縮対象のファイルＦ１における出現回数に基づいて、各文字列に対して圧縮符号の割り当てが行なわれる。図１の変換処理に用いられる圧縮辞書テーブルＴ２０は、図２に示す集計処理の結果に基づいて生成されたものでもよいし、他の方法により生成されたものでもよい。さらに、図２の集計処理の結果に基づいて生成された圧縮辞書テーブルＴ２０を、図１の変換処理に用いてもよいし、図１に示す変換処理以外の方法による変換処理に用いてもよい。
【００３２】
図１および２に示す処理は、プロセッサおよびメモリを備えたコンピュータにより実現される。圧縮対象のファイルＦ１、圧縮ファイルＦ２、存否情報テーブルＴ１０、圧縮辞書テーブルＴ２０、集計テーブルＴ２１などがメモリに展開される。プロセッサは、図１または２に示す手順で演算やメモリへのアクセスを行ない、図１に示す変換処理や図２に示す集計処理を実行する。コンピュータの構成、実行手順の詳細は後述する。
【００３３】
図３は、コンピュータ１の機能ブロックの構成例を示す。コンピュータ１は、圧縮部１１、伸張部１２および記憶部１３を含む。記憶部１３は、圧縮対象のファイル（例えば、図１および図２に示すファイルＦ１など）、圧縮ファイル（例えば、図１に示す圧縮ファイルＦ２など）などを記憶する。さらに、記憶部１３は、存否情報テーブル（図１および図２に示す存否情報テーブルＴ１０など）、圧縮辞書テーブル（図１に示す圧縮辞書テーブルＴ２０など）、集計テーブル（図２に示す集計テーブルＴ２１など）を記憶する。存否情報テーブル、圧縮辞書テーブルおよび集計テーブルのいずれについても、図１および図２に関して上述された内容の変形例があり得る。
【００３４】
圧縮部１１は、記憶部１３に記憶された圧縮対象のデータファイルの圧縮処理を行なう。例えば、圧縮部１１は、図１および図２に示す処理を行なう。伸張部１２は、記憶部１３に記憶された圧縮ファイルの伸張処理を行なう。すなわち、伸張部１２は、圧縮ファイルを記憶部１３から読み出し、読み出した圧縮ファイルに含まれる圧縮符号を順次伸張データに変換し、変換して得られる伸張データを記憶部１３に順次格納し、伸張ファイルを生成する。
【００３５】
圧縮部１１は、制御部１１１、参照部１１２および検索部１１３を含む。制御部１１１は、圧縮処理において、参照部１１２および検索部１１３を制御する。制御部１１１は、参照部１１２および検索部１１３の機能を用いて、例えば、存否情報テーブルの生成処理、圧縮対象のファイルに含まれる文字列の集計処理、集計結果に基づく圧縮辞書の生成処理、および圧縮対象のファイルに含まれる文字列の圧縮符号への変換処理などを行なう。それぞれの処理の詳細は、フローチャートに基づいて後述する。
【００３６】
参照部１１２は、記憶部１３に記憶される存否情報テーブルを参照することにより、制御部１１１が読みだした文字列が、圧縮辞書テーブルに登録されている可能性があるか否かを判断する。もしくは、参照部１１２は、制御部１１１が読みだした文字列が、集計テーブルに登録されている可能性があるか否かを判断する。制御部１１１は、参照部１１２の判断結果に応じて、検索部１１３の検索を制御する。制御部１１１は、参照部１１２により、読みだした文字列が圧縮辞書テーブルに登録されている可能性があると判断された場合に、検索部１１３に圧縮辞書テーブルの検索を実行させる。制御部１１１は、参照部１１２により、読みだした文字列が圧縮辞書テーブルに登録されている可能性がないと判断された場合には、検索部１１３による検索処理を実行させない。すなわち、制御部１１１は、読みだした文字列が圧縮辞書テーブルに登録されている可能性がないと判断された場合を除いて、検索部１１３による検索処理を実行させる。検索部１１３は、制御部１１１の制御に応じて、制御部１１１が読みだした文字列で圧縮辞書テーブルを検索する。制御部１１１は、検索部１１３による集計テーブルの検索についても、参照部１１２の判断に応じて同様の制御を行なう。制御部１１１は、参照部１１２や検索部１１３の処理結果に応じて、さらに処理を実行するが、その処理内容はフローチャートを用いて後述する。
【００３７】
図４は、コンピュータ１のハードウェア構成例を示す。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【００３８】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【００３９】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう。
【００４０】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていてもよいし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であってもよい。
【００４１】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って圧縮部１１の処理または伸張部１２の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１３の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（圧縮対象のデータファイル、圧縮ファイル、伸張対象のデータファイル、伸張ファイルなど）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図５を用いて説明する。
【００４２】
図５は、コンピュータ１のプログラムの構成例を示す。コンピュータ１において、図４に示すハードウェア群２１の制御を行なうＯＳ（オペレーションシステム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア群２１の制御・管理が行なわれることにより、アプリケーションプログラム２４やミドルウェア２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェア２３またはアプリケーションプログラム２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【００４３】
プロセッサ３０１が、ミドルウェア２３またはアプリケーションプログラム２４に含まれる圧縮機能に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）圧縮部１１の機能が実現される。また、プロセッサ３０１が、ミドルウェア２３またはアプリケーションプログラム２４に含まれる伸張機能に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）伸張部１２の機能が実現される。圧縮機能および伸張機能は、それぞれアプリケーションプログラム２４自体に定義されてもよいし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の機能であってもよい。
【００４４】
アプリケーションプログラム２４（またはミドルウェア２３）の実行により、実現される圧縮機能において、読みだした文字列が圧縮辞書テーブルに登録されている可能性がないと判断された場合を除いて、圧縮辞書テーブルを検索する処理が行なわれる。すなわち、圧縮処理において、例えばＲＡＭ３０２などのメモリに格納された圧縮辞書テーブルへのアクセスが特定の場合に抑止されるので、メモリへのアクセス回数や、プロセッサ３０１によるメモリから読み出した情報についての照合処理の回数が抑制される。
【００４５】
図６は、実施形態のシステムにおける装置の構成例を示す。図６のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【００４６】
図３に示す圧縮部１１と伸張部１２とは、図６に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれてもよい。コンピュータ１ｂが図３に示す圧縮部１１を含み、コンピュータ１ａが伸張部１２を含んでもよいし、コンピュータ１ｂが図３に示す圧縮部１１を含み、コンピュータ１ａが伸張部１２を含んでもよい。また、コンピュータ１ａとコンピュータ１ｂとの双方が、圧縮部１１および伸張部１２を備えてもよい。
【００４７】
以下に処理手順について説明する。
【００４８】
図７は、圧縮処理の手順例を示す。操作者の入力やアプリケーションプログラム２４による指示により、アプリケーションプログラム２４の圧縮機能が呼び出される（Ｓ１００）と、圧縮機能の前処理が行なわれる（Ｓ１０１）。Ｓ１０１の処理において、圧縮部１１は、記憶部１３から、圧縮符号を割り当られる文字列のリストをワークエリアに読み出す。
【００４９】
文字列のリストは、単語や文節などの文字列を複数含む。文字列のリストが記憶部１３に複数記憶され、そのいずれかが指示により選択されてもよい。その場合、例えば、圧縮対象のファイルの属する分野に特化した文字列リストが用意される。例えば、コンピュータ関連の書籍データに対し、他の文字列リストよりもコンピュータ用語を多く含む文字列リストを用いた圧縮が行なわれる。また、文字列リストに含まれる単語や文節は、例えば辞典に基づき選択される。例えば、コンピュータ用語辞典に掲載された単語を含む文字列リストや、化学用語辞典に掲載された単語を含む文字列リストなどが生成される。
【００５０】
文字列リストをワークエリアに読み出すと、制御部１１１は、存否情報テーブルを生成する（Ｓ１０２）。存否情報テーブルは、図１および図２の存否情報テーブルＴ１０に例示される通り、文字列リスト内の文字列において、各文字情報が文字列内の各特定位置に出現するか否かを示す。文字情報および文字列内の特定位置は、例えば、事前定義に基づき設定される。図８は、存否情報テーブルの生成処理の手順例を示す。
【００５１】
存否情報テーブルの生成処理が呼び出される（Ｓ２００）と、制御部１１１は、文字列中の位置についての定義情報を読み出す（Ｓ２０１）。定義情報は、例えば、文字列中の何文字目（開始位置）から何文字分（文字情報の長さ）を指定する定義を含む。定義の一例によれば、「１文字目」から「１文字分」が指定される。また、定義情報は１または複数の定義を含む。定義情報の一例として、「１文字目」から「２文字」を指定する定義と、「２文字目」から「２文字」を指定する定義と、「３文字目」から「２文字」を指定する定義と、「４文字目」から「２文字」を指定する定義と、を含む定義情報を用いてもよい。また、各定義に含まれる開始位置と文字情報の長さとの指定は、文字列の冒頭からのカウントか、末尾からのカウントか、いずれかのカウント方法により定められる。
【００５２】
次に、制御部１１１は、記憶部１３に存否情報テーブルを格納する記憶領域を確保する（Ｓ２０２）。Ｓ２０２の処理において、制御部１１１は、さらに、存否情報テーブルに含まれる存否情報を「不在」示す情報に初期設定する。
【００５３】
存否情報テーブルは、例えば、Ｓ２０１で取得した定義情報に含まれる各定義に対応するフィールドを備える。そのため、例えば、存否情報テーブルは、少なくとも、定義情報に含まれる定義の数のフィールドを備える。各フィールドは、それぞれ「存在」または「不在」の情報を示すため、１ビット以上のデータが含まれる（例えば、各フィールドが1ビットを含み、「１」で「存在」を示し、「０」で「不在」を示す）。また、例えば、存否情報テーブルは、少なくとも、文字情報の種類の数のレコードを備える。文字情報の種類の数は、例えば、使用される文字コード系に含まれる文字コードの種類の数と、Ｓ２０１で取得する定義情報に定義される文字情報の長さに応じて定められる。文字情報の種類の数は、例えば、文字コード系に含まれる文字コードの種類の数を、定義された文字情報の長さで冪乗した数となる。また、例えば、各文字情報に対応する各レコードは、文字情報そのものによりその開始位置が示される。
【００５４】
存否情報テーブルのサイズと、文字情報に対応するレコードの開始位置とについて、ＡＳＣＩＩコード系を例に用いて説明する。ＡＳＣＩＩコード系の各文字コードは、１バイトで表現される。定義情報において、文字情報の長さが「２文字分」で定義される場合には、文字情報は２バイトで表現される。一例として、各レコードについて１バイトの領域を確保すると、２バイトで表現される文字情報についての存否情報のレコードの開始位置は、存否情報テーブルの開始位置から２バイトの文字情報に対応する数値で特定される。例えば、「ＡＡ」という文字情報に対応するＡＳＣＩＩコードは０ｘ４１４１であり、１０進数では、「１６７０５」である。すなわち、文字情報「ＡＡ」に関する存否情報のレコードの開始位置は、存否情報テーブルの開始位置から１６７０５バイトの位置であることが特定される。上記の例において、各レコードのサイズが１バイトであるとしたが、１バイトであれば、定義情報に８つの定義が含まれても対応できる。また、上記の例における存否情報テーブルのサイズは、２の１６乗バイト（＝６４ＫＢ）の記憶領域に格納されることとなる。しかしながら、ＡＳＣＩＩコード系においては、０ｘ００〜０ｘ７Ｆまでしか使用されておらず、０ｘ８０〜０ｘＦＦに対応する文字コードは使用されていない。実際には、上記の例において、存否情報テーブルで使用される記憶領域は、６４ＫＢの１／４の１６ＫＢで充分である。
【００５５】
例えば、定義情報が、各定義において文字情報の長さが「２文字分」と指定され、各定義でそれぞれ、「１文字目」、「２文字目」、「３文字目」、「４文字目」、「５文字目」と指定されている場合は、存否情報テーブルは図９に示す存否情報テーブルＴ１１となる。但し、図９に示す存否情報テーブルＴ１１においては文字情報を構成する文字は、英字小文字のみに限定して例示している。存否情報テーブルＴ１１は、「１〜２文字目」、「２〜３文字目」、「３〜４文字目」、「４〜５文字目」、「５〜６文字目」などの文字列中の位置に対応するフィールドを備える。また、存否情報テーブルＴ１１は、英字小文字の２文字の組み合わせごとに存否情報を格納するレコードを備える。
【００５６】
Ｓ２０２の処理で存否情報テーブルの記憶領域が確保されると、制御部１１１は、図７のＳ１０２でワークエリアに読み出した文字列リストから、順次文字列を読み出す（Ｓ２０３）。Ｓ２０３の処理を行なうと、制御部１１１は、参照部１１２に存否情報テーブルの参照処理を実行させる。参照部１１２は、Ｓ２０２で取得した定義のうち、未処理の定義を選択し、選択した定義を用いて存否情報テーブルを参照し、存否情報を取得する（Ｓ２０４）。参照部１１２は、Ｓ２０３で読み出された文字列内で、選択した定義に示される位置にある文字情報について存否情報を取得する。参照部１１２は、取得された存否情報が「存在」を示すか判断する（Ｓ２０５）。取得した存否情報が「不在」を示す場合（Ｓ２０５：ＮＯ）には、参照部１１２は、存否情報テーブルの該当箇所の存否情報を「存在」に更新する（Ｓ２０６）。Ｓ２０４で取得した存否情報が「存在」を示す（Ｓ２０５：ＹＥＳ）か、Ｓ２０６の処理が行なわれた場合には、未処理の定義がないかどうか判断する（Ｓ２０７）。Ｓ２０７の判断で未処理の定義がある場合（Ｓ２０７：ＮＯ）には、未処理の定義に基づいてＳ２０４の処理を再度行なう。
【００５７】
存否情報テーブルＴ１１用いて例を挙げる。例えば、Ｓ２０３で「ａｂｌｅ」という文字列を読み出したとすると、Ｓ２０４において、定義情報に基づく選択により、「ａｂ」、「ｂｌ」、「ｌｅ」のいずれかの文字情報に基づく存否情報の取得が行なわれる。例えば文字情報「ａｂ」についての存否情報を図９の存否情報テーブルから取得する場合には、文字情報「ａｂ」のレコードの「１〜２」文字目のフィールドから、「１」の情報が読み出される。この場合、Ｓ２０５の判断では、「存在」を示すと判断される。
【００５８】
Ｓ２０３で読みだした文字列に対して、定義情報に含まれる各定義での参照処理を行なった場合（Ｓ２０７：ＹＥＳ）は、制御部１１１は、文字列リスト内に未処理の文字列がないか判断する（Ｓ２０８）。Ｓ２０８の判断において、未処理の文字列が存在する場合（Ｓ２０８：ＮＯ）は、Ｓ２０３に戻り、制御部１１１は、未処理の文字列の読み出しを再度行なう。Ｓ２０８の判断において、未処理の文字列が存在しない場合（Ｓ２０８：ＹＥＳ）には、図７のフローに処理を戻す（Ｓ２０９）。
【００５９】
図７の処理に戻ると、制御部１１１は、圧縮対象のファイルをワークエリアに読み出す（Ｓ１０３）。圧縮対象のファイルのサイズが大きくワークエリアに読み出せない場合には、制御部１１１は、圧縮対象のファイルをブロック分割して得られるブロック単位で、Ｓ１０３〜Ｓ１０７の処理を行なう。次に制御部１１１は、Ｓ１０３の処理で読み出されたデータに含まれる文字列の集計処理を行なう（Ｓ１０４）。
【００６０】
図１０は、文字列の集計処理の手順例を示す。集計処理が開始される（Ｓ３００）と、制御部１１１により前処理が行なわれる（Ｓ３０１）。Ｓ３０１の処理では、制御部１１１が、記憶部１３に集計テーブルの格納領域を確保する。集計テーブルは、例えば、図２に示す集計テーブルＴ２１のとおり、複数の文字列と、各文字列に対応付けられた出現回数の情報とを含む。Ｓ３０１の処理において、制御部１１１は、文字列リストに含まれる文字列を集計テーブルに格納する。
【００６１】
次に制御部１１１は、ワークエリアに読み出された圧縮対象のファイルから、順次文字列を読み出す（Ｓ３０２）。Ｓ３０２における読み出しの単位は、設定に応じて定められる。例えば、英語などの文章が含まれるファイルに対しては、スペースが出現した位置において文字列を分割して読みだす。また、例えば、日本語などの文章が含まれるファイルに対しては、テキスト解析により文節または単語で分割して読みだす。テキスト解析においては、言語特有の言語単位の切れ目を用いる。例えば、テキスト解析により「〜は」、「〜に」、「〜ない」、「〜より」などの文節の切れ目を示唆する記述の検知し、検知に応じて分割した単位で文字列として読みだす。
【００６２】
Ｓ３０２の処理で文字列を読み出すと、制御部１１１は、読みだした文字列の長さに応じてＳ３０２で用いる文字列の読み出し位置を更新する（Ｓ３０３）。次に、参照部１１２は、Ｓ３０２で読みだした文字列に基づいて存否情報テーブルを参照し（Ｓ３０４）、Ｓ３０２で読みだした文字列が集計テーブルに格納されている可能性があるか否かを判断する（Ｓ３０５）。存否情報テーブルの参照は、定義情報に定義された文字列中の位置に基づいて行なわれる。参照部１２２は、Ｓ３０２で読みだした文字列のうち、定義情報に定義された位置にある文字情報を取り出し、存否情報テーブルのうち、取り出した文字情報と、定義された位置に対応する存否情報を読み出す。存否情報の読み出しは、文字列から取得された文字情報のそれぞれに対して行なわれる。Ｓ３０５の判断においては、参照部１１２は、Ｓ３０４の参照により得られた存否情報のいずれもが、「存在」を示す場合に、Ｓ３０２で読みだした文字列が集計テーブルに格納されている可能性があると判断する。また、Ｓ３０４の参照により得られた存否情報のうち、いずれか少なくとも１つが「不在」を示す場合に、Ｓ３０２で読みだした文字列は、集計テーブルに格納されている可能性がないと判断する。
【００６３】
Ｓ３０４およびＳ３０５の処理を、図９に示す存否情報テーブルＴ１１に基づいて例示する。例えば、Ｓ３０２で読みだした文字列が「ａｂｏｕｔ」であるとする。文字列「ａｂｏｕｔ」は、存否情報テーブルＴ１１の定義情報によれば、文字情報と文字列中の位置の組が４つ含まれている。第１の組は文字情報「ａｂ」と位置「１〜２文字目」とを含む。第２の組は文字情報「ｂｏ」と位置「２〜３文字目」とを含む。第３の組は文字情報「ｏｕ」と位置「３〜４文字目」とを含む。第４の組は文字情報「ｕｔ」と位置「４〜５文字目」とを含む。Ｓ３０４の処理で、参照部１１２は、第１〜４の組のそれぞれについて、存否情報テーブルＴ１１を参照し、存否情報を取得する。第１〜４の組のいずれについても取得される存否情報は、「１」であり、「存在」を示す。参照により得られた存否情報のいずれもが「存在」を示すので、参照部１１２は、文字列「ａｂｏｕｔ」が集計テーブルに格納されている可能性があると判断する。
【００６４】
さらに、Ｓ３０４およびＳ３０５の処理について、他の例を示す。例えば、Ｓ３０２で読みだした文字列が「ａｂｏｒｔ」であるとする。文字列「ａｂｏｒｔ」は、存否情報テーブルＴ１１の定義情報によれば、文字情報と文字列中の位置の組が４つ含まれている。第１の組は文字情報「ａｂ」と位置「１〜２文字目」とを含む。第２の組は文字情報「ｂｏ」と位置「２〜３文字目」とを含む。第３の組は文字情報「ｏｒ」と位置「３〜４文字目」とを含む。第４の組は文字情報「ｒｔ」と位置「４〜５文字目」とを含む。Ｓ３０４の処理で、参照部１１２は、第１〜４の組のそれぞれについて、存否情報テーブルＴ１１を参照し、存否情報を取得する。第１の組および第２の組に対応する存否情報は、「１」であるが、第３の組および第４の組に対応する存否情報は、「０」であり、「不在」を示す。１つ以上の組に対応する存否情報が「不在」を示すので、参照部１１２は、文字列「ａｂｏｒｔ」は集計テーブルに格納されている可能性がないと判断する。
【００６５】
Ｓ３０５の判断で、Ｓ３０２で読みだした文字列が集計テーブルに格納されている可能性があると判断されると（Ｓ３０５：ＹＥＳ）、検索部１１３は、Ｓ３０２で読みだした文字列を用いて集計テーブルを検索する（Ｓ３０６）。Ｓ３０６の検索処理は、例えば、集計テーブルに格納された文字列と、Ｓ３０２で読みだした文字列との比較照合を、集計テーブル内で順次行なうことにより行なわれる。また、例えば、インデックスを用いて検索する方法もあるが、それについては、図１２を用いて後述する。
【００６６】
Ｓ３０６の検索処理の結果、検索部１１３は、集計テーブル内に該当する文字列（Ｓ３０２で読みだした文字列に合致する文字列）を見つけることができたか否かを判断する（Ｓ３０７）。検索部１１３は、例えば、文字列の比較照合により、Ｓ３０２で読みだした文字列に合致する文字列を見つけた場合に、該当する文字列を見つけることができたと判断する（Ｓ３０７：ＹＥＳ）。その場合に、制御部１１１は、集計テーブルにおいて、該当する文字列に対応づけられた出現回数を更新する（Ｓ３０８）。出現回数の更新は、例えば、出現回数を示す数値をインクリメントすることで行なわれる。
【００６７】
Ｓ３０８の処理が終了した場合、Ｓ３０５の判断条件を満たさなかった場合（Ｓ３０５：ＮＯ）、およびＳ３０７の判断条件を満たさなかった場合（Ｓ３０７：ＮＯ）に、制御部１１１は、Ｓ３０３で更新した読み出し位置が圧縮対象のファイルＦ１の終点であるか否かを判断する（Ｓ３０９）。読み出し位置がまだ終点でない場合（Ｓ３０９：ＮＯ）には、制御部１１１は、Ｓ３０２のフローに戻り、再度文字列の読み出しを行なう。読み出し位置が圧縮対象のファイルＦ１の終点である場合（Ｓ３０９：ＹＥＳ）には、制御部１１１は、図７のフローに戻る（Ｓ３１０）。
【００６８】
Ｓ１０４の処理が実行されると、集計テーブルには圧縮対象のファイルにおける各文字列の出現回数がカウントされている。Ｓ１０４の処理後、制御部１１１は、文字列ごとの出現回数に応じて、各文字列に圧縮符号を割り当てて、圧縮辞書テーブルを生成する（Ｓ１０５）。圧縮辞書テーブルは、図１に示す圧縮辞書テーブルＴ２０と同様に、文字列と圧縮符号とを対応づけたテーブルである。文字列ごとの出現回数に応じた圧縮符号の割り当ては、ハフマン符号化のハフマン木生成アルゴリズムや、算術圧縮の圧縮符号生成アルゴリズムに従って割り当てられる。ハフマン符号化のハフマン木生成アルゴリズムでは、集計テーブルに含まれる文字列の出現回数の順序に応じて符号の割り当てを行なう。出現回数が多い文字列ほど短い圧縮符号が割り当てられる。また、算術圧縮では、各文字列の出現確率に応じた長さの圧縮符号が割り当てられる。算術圧縮においても出現確率が大きいほど（出現回数が多いほど）短い圧縮符号が割り当てられる。制御部１１１は、生成された圧縮符号を各文字列に対応付けて、圧縮辞書テーブルに格納する。
【００６９】
Ｓ１０４の処理が終了すると、制御部１１１は、Ｓ１０４で生成された圧縮辞書テーブルに基づいて、圧縮対象のファイルに含まれるデータを圧縮符号に変換する処理を行なう（Ｓ１０６）。
【００７０】
図１１は、変換処理の手順例を示す。変換処理が開始される（Ｓ４００）と、制御部１１１により前処理が行なわれる（Ｓ４０１）。Ｓ４０１の処理では、制御部１１１が、記憶部１３に圧縮ファイルの格納領域を確保する。
【００７１】
次に、制御部１１１は、ワークエリアに読み出された圧縮対象のファイルから、順次文字列を読み出す（Ｓ４０２）。Ｓ４０２における読み出しの単位は、Ｓ３０２における読みだしと同様の単位で行なわれる。Ｓ４０２の処理で文字列を読み出すと、制御部１１１は、読みだした文字列の長さに応じてＳ４０２で用いる文字列の読み出し位置を更新する（Ｓ４０３）。次に、参照部１１２は、Ｓ４０２で読みだした文字列に基づいて存否情報テーブルを参照し（Ｓ４０４）、Ｓ４０２で読みだした文字列が、Ｓ１０４で生成された圧縮辞書テーブルに格納されている可能性があるか否かを判断する（Ｓ４０５）。Ｓ４０４の存否情報テーブルの参照は、Ｓ３０４処理と同様に、定義情報に定義された文字列中の位置に基づいて行なわれる。存否情報の参照は、文字列から取得された文字情報のそれぞれに対して行なわれる。Ｓ４０５の判断においては、参照部１１２は、Ｓ４０４の参照により得られた存否情報のいずれもが、「存在」を示す場合に、Ｓ４０２で読みだした文字列が圧縮辞書テーブルに格納されている可能性があると判断する。また、Ｓ４０４の参照により得られた存在情報のうち、いずれか少なくとも１つが「不在」を示す場合に、Ｓ４０２で読みだした文字列は、圧縮辞書テーブルに格納されている可能性がないと判断する。
【００７２】
Ｓ４０５の判断で、Ｓ４０２で読みだした文字列が圧縮辞書テーブルに格納されている可能性があると判断されると（Ｓ４０５：ＹＥＳ）、検索部１１３は、Ｓ４０２で読みだした文字列を用いて圧縮辞書テーブルを検索する（Ｓ４０６）。Ｓ４０６の検索処理は、例えば、圧縮辞書テーブルに格納された文字列と、Ｓ４０２で読みだした文字列との比較照合を、圧縮辞書テーブル内で順次行なうことにより行なわれる。また、例えば、インデックスを用いて検索する方法もあるが、それについては、図１３を用いて後述する。
【００７３】
Ｓ４０６の検索処理の結果、検索部１１３は、圧縮辞書テーブル内に該当する文字列（Ｓ４０２で読みだした文字列に合致する文字列）を見つけることができたか否かを判断する（Ｓ４０７）。検索部１１３は、例えば、文字列の比較照合により、Ｓ４０２で読みだした文字列に合致する文字列を見つけた場合に、該当する文字列を見つけることができたと判断する（Ｓ４０７：ＹＥＳ）。その場合に、制御部１１１は、圧縮辞書テーブルにおいて、該当する文字列に対応づけられた圧縮符号をＳ４０１で確保された記憶領域内に書き込む（Ｓ４０８）。
【００７４】
Ｓ４０５の判断条件を満たさなかった場合（Ｓ４０５：ＮＯ）、およびＳ４０７の判断条件を満たさなかった場合（Ｓ４０７：ＮＯ）に、制御部１１１は、Ｓ４０２で読みだした文字列を、他の圧縮アルゴリズムで圧縮して、圧縮されたデータをＳ４０１で確保した記憶領域に書き込む（Ｓ４０９）。他の圧縮アルゴリズムは、例えば、１文字単位で圧縮符号を割り当てたハフマン符号化などの圧縮アルゴリズムである。また、Ｓ４０９において、制御部１１１は、Ｓ４０２で読みだした文字列を、そのままＳ４０１で確保した記憶領域に書き込むこととしてもよい。
【００７５】
Ｓ４０８の処理またはＳ４０９の処理が終わると、制御部１１１は、Ｓ４０３で更新した読み出し位置が圧縮対象のファイルＦ１の終点であるか否かを判断する（Ｓ４１０）。読み出し位置がまだ終点でない場合（Ｓ４１０：ＮＯ）には、制御部１１１は、Ｓ４０２のフローに戻り、再度文字列の読み出しを行なう。読み出し位置が圧縮対象のファイルＦ１の終点である場合（Ｓ４１０：ＹＥＳ）には、制御部１１１は、図７のフローに戻る（Ｓ４１１）。
【００７６】
Ｓ１０６の処理が実行されると、制御部１１１は、記憶部１３に記憶された圧縮符号群を圧縮ファイルとして保存する（Ｓ１０７）。Ｓ１０７の処理において、例えば、制御部１１１は、ファイル名、ファイルの格納場所を指定される画面を表示させ、表示された画面に応じた入力に指定されたファイル格納場所に、指定されたファイル名で圧縮ファイルを格納する。圧縮ファイルが保存されると、呼び出された圧縮機能はクローズされる（Ｓ１０８）。
【００７７】
次に、集計テーブルの検索処理および圧縮辞書テーブルの一例について説明する。
【００７８】
図１２は、集計テーブルの例および集計テーブルに対応するインデックスの例を示す。集計テーブルＴ２２は、図２に示す集計テーブルＴ２１と同様に、文字列とその文字列の出現回数との対応関係を示す。集計テーブルＴ２２に格納される文字列は、文字数が少ない順に格納されており、文字数が同じ文字列同士ではアルファベット順に格納されている。
【００７９】
インデックスＴ３０は、文字数と、文字列内の所定位置の文字情報と、ポインタを格納するフィールドを備える。ポインタは、文字数と、所定位置の文字情報という２つの条件に対応する集計テーブルＴ２２での格納位置を示す。インデックスＴ３０において、所定位置は、文字列中の先頭から１〜２文字目である。例えば、文字列の文字数が２であり、１〜２文字目の文字情報が「ａｂ」であるレコードのポインタｐｔ１は、集計テーブルＴ２２の文字列「ａｂ」の格納位置を示す。また、例えば、文字列の文字数が４であり、１〜２文字目の文字情報が「ｓａ」であるレコードのポインタｐｔ２は、集計テーブルＴ２２の文字列「ｓａｆｅ」の格納位置を示す。ｐｔ３〜ｐｔ５も同様に集計テーブルＴ２２内の文字列の格納位置を示す。インデックスＴ３０に含まれる各レコードも、文字数が少ない順に格納されており、さらに、文字数が同じもの同士では、アルファベット順に格納されている。
【００８０】
図１０のＳ３０６の検索処理は、例えば、インデックスＴ３０を用いて行なわれる。検索部１１３は、インデックスＴ３０のうち、Ｓ３０２で読み出された文字列の文字数と、Ｓ３０２で読み出された文字列の１〜２文字目の文字情報とが当てはまるレコードに格納されたポインタを参照する。例えば、Ｓ３０２で読みだした文字列が「ｓａｉｄ」であれば、検索部１１３は、文字数が「４」で、１〜２文字目が「ｓａ」であるレコードに格納されたポインタｐｔ２に基づいて、集計テーブルＴ２２を検索する。この検索手順をより詳細に述べると、検索部１１３は、ポインタｐｔ２に基づき集計テーブルＴ２２から、文字列「ｓａｆｅ」をよみだし、Ｓ３０２で読みだした文字列「ｓａｉｄ」と比較する。文字列「ｓａｆｅ」が文字列「ｓａｉｄ」と合致しないため、検索部１１３は、集計テーブルＴ２２内の次の文字列と比較照合する。すると、次の文字列が「ｓａｉｄ」であるため、検索部１１３は、文字列同士の比較照合により、集計テーブルＴ２２内に、Ｓ３０２で読み出した文字列に合致する文字列を見つけることができる。
【００８１】
ちなみに、インデックスＴ３０からポインタを取得する場合に、Ｓ３０２で読みだした文字列の１〜２文字列文字情報は完全一致でなくても構わない。例えば、インデックスＴ３０において、文字数の指定が「４文字」で１〜２文字目が「ｓａ」と指定されたレコードの次のレコードでは、１〜２文字目が「ｔａ」と指定されている。この場合に、例えば、Ｓ３０２で読みだした文字列が「ｓｏｒｔ」などのアルファベット順で「ｓａ」と「ｔａ」の間である文字列であれば、ポインタｐｔ２を用いることとしてもよい。
【００８２】
図１２に示すインデックスＴ３０を用いることにより、検索部１１３により文字列同士の比較照合を行なう集計インデックスＴ２２の範囲を絞り込むことができる。
【００８３】
図１３は、圧縮辞書テーブルの例および圧縮辞書テーブルに対応するインデックスの例を示す。圧縮辞書テーブルＴ２３は、図１に示す圧縮辞書テーブルＴ２０と同様に、文字列と圧縮符号との対応関係を示す。圧縮辞書テーブルＴ２３に格納される文字列は、文字数が少ない順に格納されており、文字数が同じ文字列同士ではアルファベット順に格納されている。
【００８４】
インデックスＴ３１は、インデックスＴ３０と同様に、文字数と、文字列内の所定位置の文字情報と、ポインタを格納するフィールドを備える。ポインタは、文字数と、所定位置の文字情報という２つの条件に対応する圧縮辞書テーブルＴ２３での格納位置を示す。インデックスＴ３１において、所定位置は、文字列中の先頭から１〜２文字目である。例えば、文字列の文字数が２であり、１〜２文字目の文字情報が「ａｂ」であるレコードのポインタｐｔ６は、圧縮辞書テーブルＴ２３の文字列「ａｂ」の格納位置を示す。また、例えば、文字列の文字数が４であり、１〜２文字目の文字情報が「ｓａ」であるレコードのポインタｐｔ７は、圧縮辞書テーブルＴ２３の文字列「ｓａｆｅ」の格納位置を示す。ｐｔ３〜ｐｔ５も同様に圧縮辞書テーブルＴ２３内の文字列の格納位置を示す。インデックスＴ３１に含まれる各レコードも、文字数が少ない順に格納されており、さらに、文字数が同じもの同士では、アルファベット順に格納されている。
【００８５】
図１１のＳ４０６の検索処理は、例えば、インデックスＴ３１を用いて行なわれる。検索部１１３は、インデックスＴ３１のうち、Ｓ４０２で読み出された文字列の文字数と、Ｓ４０２で読み出された文字列の１〜２文字目の文字情報とが当てはまるレコードに格納されたポインタを参照する。具体的な手順は、インデックスＴ３０を用いて行なう検索処理と同様である。図１３に示すインデックスＴ３１を用いることにより、検索部１１３による文字列同士の比較照合を行なう圧縮辞書インデックスＴ２３の範囲が絞り込まれる。
【００８６】
インデックスＴ３０およびインデックスＴ３１において、文字列の所定位置は、文字列の冒頭から１〜２文字目としているが、所定位置の変形例もあり得る。例えば、１つの変形例においては、所定位置を文字列の末尾から１文字目とする。その変形例においては、集計テーブルもしくは圧縮辞書テーブルに格納される文字列は文字数順で格納され、且つ同じ文字数の文字列同士は末尾文字のアルファベット順で格納される。
【００８７】
さらには、インデックスＴ３０およびインデックスＴ３１では、文字数と、文字列内で所定位置の文字情報との双方に基づく絞り込みが可能であるが、どちらか一方だけでも絞込みの効果を得られる。例えば、圧縮辞書テーブルまたは集計テーブルに文字列が文字数順に格納し、圧縮辞書テーブルまたは集計テーブル内の所定文字数の文字列の格納位置を示すポインタを、所定文字数と関連付けたインデックスを用いることにより、絞込みが実現される。所定文字数の文字列を圧縮対象のファイルから読み出した場合に、インデックス内で所定文字数に関連付けられたポインタを用いることにより、圧縮辞書テーブルまたは集計テーブルの検索範囲が絞り込まれる。同様に、例えば、圧縮辞書テーブルまたは集計テーブルにアルファベット順に文字列を格納し、アルファベットに対応したポインタを用いた場合にも、検索範囲の絞り込みの効果が得られる。
【００８８】
圧縮辞書内の検索速度を維持するために、例えば、ハフマン木やトライ木などの木構造のデータを用いる方法がある。それらの方法においては、圧縮辞書そのものに匹敵する（もしくはそれ以上の）データサイズが必要となる。上述のとおり、インデックスＴ３０やインデックスＴ３１を用いることにより、圧縮辞書の検索範囲が絞り込まれるので、木構造データなどを用いずに圧縮辞書を検索しても検索速度が維持される。そのため、圧縮辞書の検索に必要となる記憶領域が抑制される。
【００８９】
以下、上述の実施形態における変形例の一例を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行なわれうる。
【００９０】
例えば、圧縮辞書テーブルと集計テーブルは、１つのテーブルに合成されても構わない。合成されたテーブルにおいては、圧縮辞書テーブルと集計テーブルとに共通で含まれる文字列について、その文字列に対応する圧縮符号と出現回数とが対応付けて格納される。さらに、例えば、合成されたテーブルに、文字列に対応する圧縮符号の符号長を示す情報が対応付けて格納される。
【００９１】
圧縮処理は、ファイル内のデータ以外にも、システムから出力される監視メッセージなどでもよい。例えば、バッファに順次格納される監視メッセージを上述の圧縮処理により圧縮し、ログファイルとして格納するなどの処理が行なわれる。
【００９２】
文字列を圧縮符号に変換する処理に限らず、第１の符号系の情報を第２の符号系の情報に変換する処理であれば、上述の存否情報による検索処理の抑制を行なうことができる。例えば、第１の符号系の符号列のリストが予め記憶部１３に記憶され、記憶部１３に記憶された定義情報により存否情報テーブルが生成される。存否情報テーブルは、図８の処理手順をコンピュータ１が実行することにより生成できる。例えば、コンピュータ１が符号列リストに基づく集計テーブルを用意し、第１の符号系の符号によるファイルに含まれる符号列の集計を行なう（図１０の手順により行なわれる）。その場合に、存否情報テーブルが用いられることにより、符号列の検索範囲が絞り込まれる。また、例えば、コンピュータ１が、符号列リストに基づき第２の符号系の符号列との対応テーブルを用意し、第１の符号系の符号列の第２の符号系の符号列への変換を行なう（図１１の手順により行なわれる）。その場合にも、存否情報テーブルが用いられることにより、符号列の検索範囲が絞り込まれる。
【符号の説明】
【００９３】
１        コンピュータ
２        基地局
３        ネットワーク
１ａ      コンピュータ
１ｂ      コンピュータ
１１      圧縮部
１２      伸張部
１３      記憶部
１１１    制御部
１１２    参照部
１１３    検索部
【図１】
2014045320.tif 000003
【図２】
2014045320.tif 000004
【図３】
2014045320.tif 000005
【図４】
2014045320.tif 000006
【図５】
2014045320.tif 000007
【図６】
2014045320.tif 000008
【図７】
2014045320.tif 000009
【図８】
2014045320.tif 000010
【図９】
2014045320.tif 000011
【図１０】
2014045320.tif 000012
【図１１】
2014045320.tif 000013
【図１２】
2014045320.tif 000014
【図１３】
2014045320.tif 000015
【手続補正書】
【提出日】平成28年5月2日(2016.5.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
頻度集計対象の複数の文字列に対応して生成された、前記複数の文字列それぞれを構成する複数の部分文字列と前記複数の部分文字列それぞれの前記複数の文字列における位置を示す存否情報、符合化対象データから取得した判定対象文字列に含まれる複数の第１部分文字列、および、前記複数の第１部分文字列の位置を参照し、前記判定対象文字列が、圧縮符号が割り当てられた複数の文字列に含まれるかを判定する、
処理を実行させる制御プログラム。
【請求項２】
請求項１記載の制御プログラムであって、
前記存否情報は、前記複数の部分文字列の前記複数の文字列それぞれにおける位置として、開始位置および文字数を規定した定義情報と対応づけられている
ことを特徴とする制御プログラム。
【請求項３】
請求項２記載の制御プログラムであって、
前記開始位置は、先頭からの開始位置である
ことを特徴とする制御プログラム。
【請求項４】
請求項２記載の制御プログラムであって、
前記開始位置は、末尾からの開始位置である
ことを特徴とする制御プログラム。
【請求項５】
請求項１記載の制御プログラムであって、
前記判定する処理の結果に基づき、頻度集計の情報を更新する
ことを特徴とする制御プログラム。
【請求項６】
頻度集計対象の複数の文字列に対応して生成された、前記複数の文字列それぞれを構成する複数の部分文字列と前記複数の部分文字列それぞれの前記複数の文字列における位置を示す存否情報を記憶部より読み出し、
前記存否情報、符合化対象データから取得した判定対象文字列に含まれる複数の第１部分文字列、および、前記複数の第１部分文字列の位置を参照し、前記判定対象文字列が、圧縮符号が割り当てられた複数の文字列に含まれるかを判定する、
ことを特徴とする制御方法。
【請求項７】
頻度集計対象の複数の文字列に対応して生成された、前記複数の文字列それぞれを構成する複数の部分文字列と前記複数の部分文字列それぞれの前記複数の文字列における位置を示す存否情報を記憶する記憶部と、
前記存否情報、符合化対象データから取得した判定対象文字列に含まれる複数の第１部分文字列、および、前記複数の第１部分文字列の位置を参照し、前記判定対象文字列が、圧縮符号が割り当てられた複数の文字列に含まれるかを判定する参照部と、
を備えた制御装置。
【国際調査報告】
2014045320.tif 000016
2014045320.tif 000017