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