(57)【特許請求の範囲】
【請求項１】
テキストを圧縮する際に参照される辞書を作成するためのテキスト圧縮用辞書作成装置であって、
目標圧縮率に対して、２以上の文字列長の各々について前記目標圧縮率を満足するためにテキスト中で出現が要求される頻度のガイドラインを算出する頻度ガイドライン算出手段と、
テキストから、文字列長２以上の文字列であって、対応する文字列長の頻度ガイドラインを満たす頻度で出現するものを、その実頻度とともに文字列長の降順に切出して第１の静的辞書を生成するとともに、前記頻度ガイドラインを満たさない切残しのテキストの集合を生成する長文字列切出手段と、
前記切残しのテキストの集合から文字列長１の文字ごとにその頻度をカウントして第２の静的辞書を生成する１文字シンボル抽出手段と、
前記第１の静的辞書に前記第２の静的辞書を追加して最終的静的辞書を生成する最終的静的辞書構築手段とを含むテキスト圧縮用辞書作成装置。
【請求項２】
テキストを圧縮する際に参照される辞書を作成するためのテキスト圧縮用辞書作成装置であって、
目標圧縮率に対して、２以上の文字列長の各々について前記目標圧縮率を満足するためにテキスト中で出現が要求される頻度のガイドラインを算出する頻度ガイドライン算出手段と、
テキストから、文字列長２以上の文字列であって、対応する文字列長の頻度ガイドラインを満たす頻度で出現するものを、その実頻度とともに文字列長と実頻度との積の降順に切出して第１の静的辞書を生成するとともに、前記頻度ガイドラインを満たさない切残しのテキストの集合を生成する効率指標関数値順文字列切出手段と、
前記切残しのテキストの集合から文字列長１の文字ごとにその頻度をカウントして第２の静的辞書を生成する１文字シンボル抽出手段と、
前記第１の静的辞書に前記第２の静的辞書を追加して最終的静的辞書を生成する最終的静的辞書構築手段とを含むテキスト圧縮用辞書作成装置。
【請求項３】
前記最終的静的辞書中の文字列であって、前記最終的静的辞書中の他の文字列の組合せであるものを、最も長い文字列が含まれる複数個の他の文字列に分解し削除するとともに、当該他の文字列の実頻度を前記削除された文字列の頻度だけそれぞれ増加させるための文字列切出手段をさらに含む請求項１または請求項２に記載のテキスト圧縮用辞書作成装置。
【請求項４】
前記最終的静的辞書中の文字列であって、前記最終的静的辞書中の他の文字列の組合せであるものを、圧縮率への寄与が最も大きくなるような複数個の他の文字列に分解し削除するとともに、当該他の文字列の実頻度を前記削除された文字列の頻度だけそれぞれ増加させるための文字列切出手段をさらに含む請求項１または請求項２に記載のテキスト圧縮用辞書作成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ワードプロセッサ（以下「ワープロ」と省略する。）や電子手帳といったジャンルの情報機器に関する固定のテキストデータを扱うテキスト圧縮用辞書作成装置に関する。
【０００２】
【従来の技術】
電子辞書機能が搭載されたワープロ、パーソナルコンピュータ（以下、「パソコン」と省略する。）、電子手帳などの情報機器では、機器の内部に辞書の意味が記述された大容量の固定テキストデータを記憶しておかなければならない。
【０００３】
こういったジャンルの商品で取り扱うテキストデータは、大抵の場合、数メガバイトオーダの容量のデータになる場合が多い。これらデータはＲＯＭ化、ハードディスク化されることになるが、テキスト圧縮によって、ＲＯＭの点数を減らすなり、ハードディスクの空き領域を確保するなりの工夫を施さないと、コストパフォーマンスを向上させることはできない。
【０００４】
従来のテキスト圧縮法は主として次のように分類される。
（１）  コードの空き領域に、頻出するコード列のコードを割り当てるタイプのもの（特開平２−２７１７２３）
（２）  別途用意された単語辞書の辞書番号でソーステキスト中の文字列を置換するタイプのもの（特開平５−４６３５７他）
（３）  頻出する文字列コードを別のコードで置換するタイプのもの（特開平３−２０６５３３）
（４）  汎用の圧縮方法（ハフマン、算術、ＬＺなど）を適用するタイプのもの（ＰＲＥＮＴＩＣＥ  ＨＡＬＬ  Ａｄｖａｎｃｅｄ  Ｒｅｆｅｒｅｎｃｅ  Ｓｅｒｉｅｓ，“Ｔｅｘｔ  Ｃｏｍｐｒｅｓｓｉｏｎ”，  １９９１  ）
これらの手法は、どの方法も一長一短で、限られたメモリとＣＰＵパワーの下で大容量の固定テキストを高能率に圧縮するにはいずれも決め手に欠けるものである。
【０００５】
（１）は、特定コードのみで圧縮対象のテキストが記述されている場合はよいが、コードの空き領域自体に限られたスペースしかないため短いコードに置換できる文字列の数が限られ、圧縮率はよくない。複数のコードや外字などの特殊コードが混在する場合はほとんど圧縮できないといってよい。
【０００６】
（２）は、たとえば仮名漢字変換モジュールなどの別のアプリケーションが存在する場合、仮名漢字変換用の辞書の見出し語と一致するソーステキスト中の文字列を辞書の見出し番号で置換することにより圧縮する手法である。
【０００７】
この方法では、辞書見出しに存在しない文字列は圧縮できないし、辞書見出しと一致する場合でもその文字列長が辞書番号を表現するためのビット数（通常１６ビット前後）より大きくないと圧縮できないため、符号化表こそ不要なものの概して圧縮率はよくない。
【０００８】
（３）は、固定テキストに依存する方法であり、頻度に偏りがあるような長い文字列が多く含まれるテキストの圧縮に向いた方法である。
【０００９】
ただ、単に高頻度語を他のコードで置換するだけでは、（１）の手法に対して指摘したように、複数のコードが混在する場合には置換される文字列の数が限定され圧縮率はよくない。
【００１０】
また、高頻度語と置換コードの置換表（符号化表）が必要であるため、置換表のサイズを調整するための工夫がないと、置換表が大きくなり圧縮率の低下を招く。さらに、何らかの方法で切出された静的辞書に対してハフマン等の統計手法を用いる考え方を示したものはあるが、具体的にどのような手段で固定テキストから静的辞書を構築すればよいか明示しているものはない。
【００１１】
（４）にはＣＰＵ性能とＲＡＭ容量に制限がなければ、高圧縮率を達成できる手法もある。たとえば、高次の統計モデルなどがこれに相当する。
【００１２】
しかし、小型の情報機器にそのような機能を搭載することはコスト的に無理であること、処理速度が遅いことなどから現実的ではない。
【００１３】
また、統計情報に基づく汎用手法（単なるハフマン法、算術圧縮法など）はいずれも圧縮対象のコードが１バイト（１文字）であるため、高い圧縮率は望めない。動的辞書ベースの圧縮法（ＬＺ系統の圧縮法）は、圧縮対象が可変長であるが、繰返し出現する文字列パターンが少ない場合や作業領域を超えて分散しているような場合には、圧縮率またはＲＡＭ容量が犠牲となる。
【００１４】
最近、辞書ベースの手法と統計手法を融合させた汎用手法もいくつか提案されている（ＬＨＡなど）。
【００１５】
これらにしても「どんなデータが入力されても処理可能」なユニバーサル圧縮であるという立場をとっているため、予め頻度情報を計算しておくことはできない。したがって融合手法も、予め頻度情報を付与する本発明の手法に比べて、大容量の固定データに関しては圧縮率が悪くなる。
【００１６】
以上の従来技術は、一般的な「テキスト」を圧縮対象とする場合に提唱されているものであるが、圧縮対象を「電子辞書に搭載される辞典の意味テキスト（見出し語以外の部分）」に絞ってテキスト圧縮を工夫改良したものは見受けられない。
【００１７】
【発明が解決しようとする課題】
本発明が解決しようとする課題は、大容量の固定テキストの圧縮率を飛躍的に向上させることである。具体的には以下のとおりである。
【００１８】
第１の課題は、大容量の固定テキストに対して高い圧縮率が得られるような「圧縮用の静的辞書」を構築するための具体的な手段を提供することである。
【００１９】
第２の課題は、大容量の固定テキストに対して、高い圧縮率が得られるような「圧縮用の静的辞書」を構築するための具体的な手段を提供することである。第１の課題とはアプローチが異なる。
【００２０】
第３の課題は、大容量の固定テキストに対して、構築された「圧縮用の静的辞書」自体の容量を、圧縮率の低下を抑えながら削減し、圧縮データおよび回答用テーブルデータのトータル容量を小さくするための具体的な手順を提供することである。
【００２１】
第４の課題は、大容量の固定テキストに対して、構築された「圧縮用の静的辞書」自体の容量を、圧縮率の低下を抑えながら削減し、圧縮データおよび伸長用テーブルデータのトータル容量を小さくするための具体的な手順を提供することである。第３の課題とはアプローチが異なる。
【００２２】
本発明が解決しようとする今一つの課題は、大容量の辞典の意味テキストの圧縮率を飛躍的に向上させることである。
【００２３】
すなわち、従来技術で示した手法はいずれも「大容量の固定テキスト」という制限をうまく利用したものではないため、「大容量の固定テキスト」を最も効果的に圧縮する手法と考えられる「可変長シンボルの静的辞書による統計ベースの圧縮」と比べて圧縮率が低い。「可変長シンボルの静的辞書による統計ベースの圧縮」では、圧縮効率のよい静的辞書をうまく切出す方法、静的辞書自体のサイズを抑える方法が重要なファクタとなるが、本発明ではこれらの手法は既知であるとして扱い、主として「可変長シンボルの静的辞書による統計ベースの圧縮」手法だけでは限界となる部分を「辞典の意味テキスト固有の性質」を利用することによって補い、さらなる圧縮率の向上を目指す。
【００２４】
具体的には、圧縮対象テキストに対して単一の静的辞書を構築するだけでは、必ずしも効率的な圧縮結果が得られるとは限らない以下のような場合に対して静的辞書のアプローチを前提としながら、さらなる圧縮率向上を図ることを課題とする。
【００２５】
（１）  圧縮対象テキストが記述内容の異なる複数の部分から構成される場合。たとえば、「発音」「訳」「例文」「変化形」といった異なる記述部分から構成される「英和辞典の意味テキスト」。
【００２６】
（２）  圧縮対象テキストが複数個ある場合。たとえば、「英和辞典」「和英辞典」「国語辞典」などをまとめて圧縮対象とする場合。
【００２７】
（３）  静的辞書に登録されなかったシンボルが、テキストのある箇所にだけ集中して出現する場合。たとえば、英和辞典の“ｃｉｔｒｏｎ”という項目付近には“ｃｉｔｒｕｓ”、“ｃｉｔｒｉｃ  ａｃｉｄ  ”などの関連項目が配置されており、それらの意味テキスト中には、全体としては頻度の低い“柑橘類”という文字列が頻繁に出現するという場合。
【００２８】
具体的な課題は以下のとおりである。
すなわち、第５の課題は、テキストが記述内容の異なる複数の部分から構成されている場合でも、高い圧縮率が得られるような「圧縮用の静的辞書」を構築し、これに基づいて圧縮伸長を行なうための具体的な手順を提供することである。
【００２９】
第６の課題は、種類の異なる複数個の辞典の意味テキストに対して、高い圧縮率が得られるような「圧縮用の静的辞書」を構築し、これに基づいて圧縮伸長を行なうための具体的な手順を提供することである。
【００３０】
第７の課題は、大容量の辞典の大容量の辞典の意味テキストを予め構築された「圧縮用の静的辞書」を用いて圧縮する場合、静的辞書のシンボルとしては登録されなかった文字列で、ある辞書項目の周辺でのみ出現頻度が高くなる文字列を、その局所的な高頻度性を利用した圧縮法により圧縮し、単に圧縮用静的辞書のみを使う場合よりも圧縮効率を高め、圧縮データの容量を小さくするための具体的な手順を提供することである。
【００３１】
第８の課題は、大容量の辞典の意味テキストを予め構築された「圧縮用の静的辞書」を用いて圧縮する場合、静的辞書のシンボルとしては登録されなかった文字列で、ある辞書項目の周辺でのみ出現頻度が高くなる文字列を、その局所的な高頻度性を利用した圧縮法により圧縮し、単に圧縮用静的辞書のみを使う場合よりも圧縮効率を高め、圧縮データの容量を小さくするための具体的な手順を提供することである。第７の課題とはアプローチが異なる。
【００３２】
【課題を解決するための手段】
請求項１に記載の発明は、テキストを圧縮する際に参照される辞書を作成するためのテキスト圧縮用辞書作成装置であって、目標圧縮率に対して、２以上の文字列長の各々について前記目標圧縮率を満足するためにテキスト中で出現が要求される頻度のガイドラインを算出する頻度ガイドライン算出手段と、テキストから、文字列長２以上の文字列であって、対応する文字列長の頻度ガイドラインを満たす頻度で出現するものを、その実頻度とともに文字列長の降順に切出して第１の静的辞書を生成するとともに、前記頻度ガイドラインを満たさない切残しのテキストの集合を生成する長文字列切出手段と、前記切残しのテキストの集合から文字列長１の文字ごとにその頻度をカウントして第２の静的辞書を生成する１文字シンボル抽出手段と、前記第１の静的辞書に前記第２の静的辞書を追加して最終的静的辞書を生成する最終的静的辞書構築手段とを含むことを特徴とする。
【００３３】
請求項２に記載の発明は、テキストを圧縮する際に参照される辞書を作成するためのテキスト圧縮用辞書作成装置であって、目標圧縮率に対して、２以上の文字列長の各々について前記目標圧縮率を満足するためにテキスト中で出現が要求される頻度のガイドラインを算出する頻度ガイドライン算出手段と、テキストから、文字列長２以上の文字列であって、対応する文字列長の頻度ガイドラインを満たす頻度で出現するものを、その実頻度とともに文字列長と実頻度との積の降順に切出して第１の静的辞書を生成するとともに、前記頻度ガイドラインを満たさない切残しのテキストの集合を生成する効率指標関数値順文字列切出手段と、前記切残しのテキストの集合から文字列長１の文字ごとにその頻度をカウントして第２の静的辞書を生成する１文字シンボル抽出手段と、前記第１の静的辞書に前記第２の静的辞書を追加して最終的静的辞書を生成する最終的静的辞書構築手段とを含むことを特徴とする。
【００３４】
請求項３に記載の発明は、請求項１または請求項２に記載のテキスト圧縮用辞書作成装置であって、前記最終的静的辞書中の文字列であって、前記最終的静的辞書中の他の文字列の組合せであるものを、最も長い文字列が含まれる複数個の他の文字列に分解し削除するとともに、当該他の文字列の実頻度を前記削除された文字列の頻度だけそれぞれ増加させるための文字列切出手段をさらに含むことを特徴とする。
【００３５】
請求項４に記載の発明は、請求項１または請求項２に記載のテキスト圧縮用辞書作成装置であって、前記最終的静的辞書中の文字列であって、前記最終的静的辞書中の他の文字列の組合せであるものを、圧縮率への寄与が最も大きくなるような複数個の他の文字列に分解し削除するとともに、当該他の文字列の実頻度を前記削除された文字列の頻度だけそれぞれ増加させるための文字列切出手段をさらに含むことを特徴とする。
【００３６】
本発明の他の局面に従うと、テキスト圧縮装置は、それぞれ属性の異なる複数種類の構成要素から構成されるテキストに対して、各構成要素種類ごとに前記テキストを分割し、分割された各々の構成要素種類のテキストに対して、構成要素種類の境界に含まれる構成要素種類の切換えを指示するシンボルを含む圧縮辞書を作成する辞書作成手段と、前記辞書作成手段により作成された辞書を、前記シンボルに遭遇するたびに前記シンボルに応じて切換えながら、圧縮対象のテキストの圧縮伸長を行なう辞書切換圧縮伸長手段とを含むことを特徴とする。
【００３７】
本発明のさらに他の局面に従うと、テキスト圧縮装置は、各々がそれぞれ属性の異なる複数種類の構成要素から構成される複数のテキストであって、少なくとも一部の構成要素種類を共有する複数のテキストに対して、各構成要素種類ごとに前記複数のテキストを分割し、分割された各々の構成要素種類のテキストに対して、構成要素種類の境界に含まれる構成要素種類の切換えを指示するシンボルを含む共有辞書を作成する共有辞書作成手段と、前記共有辞書作成手段により作成された共有辞書を、前記シンボルに遭遇するたびに前記シンボルに応じて切換えながら、圧縮対象のテキストの圧縮伸長を行なう共有辞書切換圧縮伸長手段とを含むことを特徴とする。
【００３８】
本発明のさらに他の局面に従うと、テキスト圧縮装置は、テキスト中の局所的な高頻度語を、２回目の出現以降において、前記テキスト中には存在しない文字列である導入シンボルと当該高頻度語の１回目の出現位置と当該高頻度語の当該出現位置からの文字列長とで置換して符号化するオフセット置換圧縮手段と、前記オフセット置換圧縮手段により圧縮されたデータを、前記導入シンボル後の前記１回目の出現位置と前記出現位置からの前記文字列長とにより指定される語に置換することにより伸長して元のテキストに復元するオフセット置換伸長手段とを含むことを特徴とする。
【００３９】
本発明のさらに他の局面に従うと、テキスト圧縮装置は、テキスト中の局所的な高頻度語について、初回出現時に番号を付与し、２回目の出現以降において、前記テキスト中には存在しない文字列である導入シンボルと付与された前記番号とで置換して符号化する番号置換圧縮手段と、前記番号置換圧縮手段により圧縮されたデータを、前記導入シンボルと前記番号とにより指定される語に置換することにより伸長して元のテキストに復元する番号置換伸長手段とを含むことを特徴とする。
【００４０】
【発明の実施の形態】
以下、本願の発明を実施の形態１と実施の形態２とにより、図面を参照して説明する。
【００４１】
［実施の形態１］
図１は、実施の形態１にかかるテキスト圧縮用辞書作成装置の全体構成説明図である。本発明を実施するためのブロック構成の一例が装置の構成と対応付けて記述されている。
【００４２】
図１を参照して、入力手段１４はキーボード、ＯＣＲ（光学的文字読取装置）、ペン等周知の入力装置および本体側とデータのやり取りを行なう入力インタフェース１２から構成される。本発明の入力である、圧縮対象の固定の「ソーステキスト」は入力手段を用いて入力される。
【００４３】
表示手段１５は、液晶ディスプレイ、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）  など周知の出力装置および本体側とデータのやり取りを行なう出力インタフェース１３から構成される。本発明の出力である「ソーステキストに対する圧縮用静的辞書」の内容や各種の処理結果は表示手段を用いて表示される。
【００４４】
記憶手段１６は、ＲＯＭ（Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）で構成される記憶装置１１への記憶、アクセスを司るための周知の手段である。ＲＯＭ、ＲＡＭへは入出力データ、処理途中の一時的なデータ、および処理のロジックを表わすデータなどが格納される。
【００４５】
頻度ガイドライン算出手段１１１は、入力されたソーステキストおよび圧縮仕様に対して、出力すべき圧縮用静的辞書の各シンボルが文字列長ごとにどれくらいの頻度で切出されれば、与えられた圧縮仕様を満足できるかを算出するためのロジックである。これは記憶装置１１のＲＯＭの一部にＣＰＵ（中央処理装置）１０に処理可能な形式で格納されている。
【００４６】
長文字列切出手段１１２は、入力されたソーステキストおよび文字列長ごとの指定頻度に対して、出力すべき圧縮用静的辞書の文字列長２以上のシンボルをその実頻度とともにソーステキストから文字列長降順に切出し、同時に指定頻度を満たさない切残しのテキストの集合を生成するためのロジックである。長文字列切出手段１１２は記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【００４７】
１文字シンボル抽出手段１１３は、入力されたテキストに対して文字列長１の文字の頻度をカウントするためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【００４８】
効率指標関数値順文字列切出手段１１４は、入力されたソーステキストおよび文字列長ごとの指定頻度に対して、出力すべき圧縮用静的辞書の文字列長２以上のシンボルをその実頻度とともにソーステキストから文字列長×出現頻度の降順に切出すためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【００４９】
シンボル削除のための文字列切出手段１１５は、一旦生成した圧縮用静的辞書の中の特定のシンボルを、なるべく長い他のシンボルが含まれるように複数個の他のシンボルに分解し削除することにより、ソーステキストの圧縮容量の増大を極力抑えながら、元の圧縮用静的辞書の容量を削減するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【００５０】
シンボル分解手段１１６は、一旦生成した圧縮用静的辞書中の特定のシンボルを圧縮率への寄与が最も大きくなるような静的辞書中の他の複数のシンボルに分解削除することにより、ソーステキストの圧縮容量の増大を極力抑えながら、元の圧縮用静的辞書の容量を削減するためのロジックである。記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【００５１】
計算・制御手段１７は他の手段を制御しながら、記憶装置中のデータを読出してそのロジックを解釈実行するための手段である。ＣＰＵ１０が対応する機器となる。
【００５２】
以下本発明に固有な１１１〜１１６の各手段を実施するための方法を述べる。
図２は、実施の形態１に係るテキスト圧縮用辞書作成装置の頻度ガイドライン算出手段の説明図である。
【００５３】
図２を参照して、頻度ガイドライン算出手段の入力は、「静的辞書の予定語数（シンボル数）ＳＮ」、「目標圧縮率ＲＴ（０＜ＲＴ＜１）」、「符号化係数（β、γ）」、「シンボルの最大文字列長Ｎ」であり、出力は「目標圧縮率を満たすために必要となる、文字列長Ｌｉ（ｉ＝Ｎ、Ｎ−１、．．．、２）のシンボルに対する頻度の最小値Ｇｉ」である。
【００５４】
この出力結果を目安とすれば、「長文字列切出手段」あるいは「効率指標関数値順文字列切出手段」の入力である「各シンボル長に対する指定頻度値（＝頻度の最小値）」を与えることができる。
【００５５】
文字列長Ｌｉのシンボルに対する頻度の最小値Ｇｉを算出するための具体的な方法の一例として、図２に示す「評価条件式（１）」を用い、この条件式を満たすＧｉを図２の「算出方法」に従って計算する方法がある。
【００５６】
評価式（１）の左辺の分母は、長さＬｉの特定のシンボルＳがＧｉ回ソーステキスト中に出現する場合、Ｓがソーステキスト中で占めるバイト数であり、分子はＳが圧縮されて長さＬ′（＜Ｌｉ）の場合符号Ｓ′に符号化された場合、圧縮データ中に占めるＳ′のバイト数を示す。したがって、左辺の値はＳに関する圧縮率を表しているので、これは入力された「目標圧縮率」ＲＴ（＝式右辺）以下でなければならない。
【００５７】
左辺分子が圧縮データ中のバイト数を示す理由は以下のとおりである。
まず、統計的な圧縮を行なう場合、シャノンの情報量の定義により、データの出現確率がｐであればそのデータを識別するためのビット数は、−ｌｏｇ（ｐ）ビットとなる。ここで、静的辞書におけるＳの出現確率は、静的辞書のすべてのシンボルの頻度の総和Ｆｓｕｍに対するＳの頻度Ｇｉの割合で表わされる。静的辞書の規模、対象となるソーステキストの種類に依存するが、静的辞書の規模に応じておおよそのＦｓｕｍを与えることができれば、Ｓを識別するためのビット数、すなわち、統計圧縮手法適用後の理論的なＳ′の符号長は、−ｌｏｇ（Ｇｉ／Ｆｓｕｍ）ビットで与えられることになる。
【００５８】
本手法考案時の種々の実験結果から、３００Ｋ〜３Ｍバイトの規模の通常のテキストデータに対して、シンボル数が１０Ｋ程度である圧縮用静的辞書の頻度の総和Ｆｓｕｍは、Ｆｓｕｍ＝α＊ＳＮ、（α＝２０〜６０程度）であることがわかっている。ここでは、αの値を「頻度総和係数」と呼ぶ。αの値（すなわちＦｓｕｍの値）をソーステキストから、静的辞書を構成する前に精度よく推定する方法は困難であるため、ここでは経験値として特定の値をセットする方式にしている。
【００５９】
以上のことから、式（１）の左辺分子第２項は圧縮テキスト中に占めるＳ′の総バイト数を表わしていることがわかる。
【００６０】
圧縮テキストを伸長して元のソーステキストに戻すためには、静的辞書を用いて圧縮する場合、静的辞書に対応する伸長用のテーブルが別途必要となる。伸長用テーブルのサイズは符号化方式に依存するため、「圧縮伸長モジュール」により異なる。したがって、圧縮用静的辞書を利用する「伸長モジュール」のデータ構造から、シンボル１個当りのサーチ用テーブルサイズとシンボルの文字列を格納する場合サイズとをそれぞれ見積もっておけば、伸長用データに占めるＳのバイト数が算出できる。
【００６１】
シンボル数１個当りのサーチ用テーブルの大きさを表わす係数をβ、シンボルの文字列を格納するための、文字列長に対するバッファサイズの算出係数をγとする（β、γは圧縮伸長モジュールが決まれば算出可能である）と、伸長用データに占めるＳのバイト数は、左辺分子第１項に示すようにγ＊Ｌｉ＋βとなる。
【００６２】
図２の算出方法は、式（１）左辺がＧｉの単調減少関数であることを利用した単純なアルゴリズムで、α、β、γをセットした後（２１）、Ｇｉ＝１から始めて（２２）、式（１）のＧｉに値をセットして実際に（１）を満たすどうかを計算し（２３）、満たしていなければ、Ｇｉを１ずつインクリメントしてＧｉの値が式（１）を満たすようになるまで処理を繰返す（２４）。初めて式（１）が満たされるＧｉの値が、Ｌｉに対する「指定頻度ガイドライン値」である（２５）。
【００６３】
この処理を、ｉ＝Ｎからｉ＝２になるまで繰返して、各シンボル長ごとにＧｉを求め（２６）、これを出力結果とする。
【００６４】
このアルゴリズムに従った算出例を図２の「算出例」に示す。
次に、図３を参照して、長文字列切出手段の実施方法の一例とその処理例を示す。
【００６５】
長文字列切出手段の入力は、圧縮対象である固定の「ソーステキスト」、「静的辞書のシンボルの文字列長最大値ｎ（＞１）」、および「シンボル長ごとの頻度値Ｇｉ（ｉ＝Ｎ、．．．、２）」である。Ｇｉに関しては、「頻度ガイドライン算出手段」の結果を目安の値とすることができるが、Ｇｉ、Ｎの与え方に関しては基本的に制限はない。
【００６６】
長文字列切出手段の出力は、ソーステキストを高効率に圧縮するための「圧縮用静的辞書」の一部である。圧縮用静的辞書のデータ構造は、「シンボルとその頻度の対」の集合である。このうち長文字列切出手段によって求められるのは「シンボル長が２以上のシンボルとその頻度の対」の集合である。
【００６７】
長文字列切出処理においては、静的辞書への登録シンボルのもととなる「文字列長ｉの文字列（以下ｉ−文字列と表記する）の集合」を求め、頻度を満たすｉ−文字列の集合をソーステキストから実際に切出して、文字列長ｉのシンボルの頻度表ＦＲＱｉを構成する。ソーステキストから頻度を満たすｉ−文字列を切取った残りのテキストの集合ＳＴｉに対して、同様の操作を繰返しＦＲＱｉ−１、．．．、ＦＲＱ２を順次構成していく。
【００６８】
図４を参照して、処理例３Ｃに入力テキスト、処理例３Ｄに入力されたシンボルの最大文字列長ｎ、処理例３Ｅに入力された指定頻度値Ｇ８、．．．、Ｇ２の例を示す。
【００６９】
入力ソーステキストは複数個あっても構わない（すなわち、テキストの集合が処理対象であってもよい）。ただし、処理対象がテキストの集合で構成される場合は、テキストにまたがってのシンボル切出は行なわない。
【００７０】
さて、ｉ＝Ｎから始めて、入力テキストに対してまずｉ−文字列カウント処理を適用する。ｉ−文字列カウント処理は、テキストの集合に対して、各テキストごとに行なわれる処理であり、テキストの先頭から文字列長テキストの末尾（正確にはテキスト長−ｉの位置）まで１文字ずつ位置をずらしながらｉ−文字列をカウントする処理である。
【００７１】
具体的には、図３の右側のフローチャートに示すように、ｉ−文字列とそのカウント値の対の集合をＯＣｉ＝｛（ｓｔｒｉｎｇ、ｏｃｃｕｒｒｅｎｃｅ）｝とし、ＯＣｉ＝φ、ｐｏｓ＝０（テキスト先頭位置）の状態から始めて、ｐｏｓ１を先頭とする長さｉの文字列ｓｔｒ（ｐｏｓ、ｉ）がＯＣｉに既に登録されていればその要素の出現回数値を＋１インクリメントし、まだ登録されていなければ（ｓｔｒ（ｐｏｓ、ｉ）、１）を新たにＯＣｉの要素として登録する（３８、３９、３Ａ）という処理をｐｏｓをカウントアップしながら、テキスト長−ｉの位置にくるまで繰返す（３Ｂ）。テキストが複数個あれば各テキストに対して同様の処理を行なう（３６）が、テキスト長がｉより短いテキストは処理の対象外である（３７）。
【００７２】
この処理により、静的辞書に登録すべき文字列長ｉのシンボルの候補の集合が求められることになる。
【００７３】
図４を参照して、処理例で説明すれば、最初、ソーステキストＳＴに対して、８−文字列カウント処理により、“  辞書の本体デー”、“辞書の本体データ”、“書の本体データや”、．．．という、１文字ずつずらした８−文字列が次々とカウントされながら抽出される。
【００７４】
その結果、ＳＴの他の部分にたとえば、“辞書の本体データと．．．”、“辞書の本体データの．．．”、“辞書の本体データに．．．”のような表現が出てくれば、“辞書の本体データ”という８−文字列の出現回数は相当カウントアップされることになり、“．．．書の本体データや．．．”という表現が処理例３Ｃに示した“辞書の本体データや．．．”という一箇所だけにしか出現しなければ“書の本体データや”という８−文字列の出現回数は１のままであることになる。
【００７５】
処理例３Ｆは、ＳＴに対して８−文字列カウント処理を行なった出力のＯＣ８である。このようなカウントの仕方で、Ｉ−文字列の集合がもれなく網羅的に、かつ重複カウントがなく正しく行なわれる。
【００７６】
８−文字列カウント処理後、再び長文字列切出処理に戻る。
８−文字列カウント処理の結果生成されたＯＣ８の要素は処理例３Ｆに示すように頻度がＧ８以上のものでもあれば、Ｇ８未満のものもある。ＯＣｉの要素をもとに指定頻度Ｇｉの条件を守りながらＳＴの頻度表を切出す場合、処理効率の点から、出現回数がＧｉ未満の要素（処理例ｉ＝８の場合（３Ｆ）でいえば、×印を打った要素に対応する）は予め「切出」処理の対象から外しておく（３１）。
【００７７】
再び図３を参照して、圧縮効率という点から、「なるべく高頻度の（長い）文字列を切出す」というヒューリスティックスに従うため、ＯＣｉを予め出現回数の大きなもの順にソートしておく（３２）。
【００７８】
ＯＣｉの内容を以上のように更新した上で、対象テキストの集合ＳＴｉ＋１からＯＣｉに登録されている文字列を実際にカウントしながら切出していく（３３）。
【００７９】
ＯＣｉの各要素（ｓ、ｆ）に対するＳＴｉ＋１「切出し」の処理は以下に従う。
【００８０】
各処理対象の文字列Ｔ（ｉ＋１、ｊ）∈ＳＴｉ＋１（ｊ＝１、．．．、Ｍｉ＋１）に対して、
（１）  Ｔ（ｉ＋１、ｊ）の各処理対象文字列の先頭位置から順にｓに一致する部分文字列を操作する。
【００８１】
（２）  Ｔ（ｉ＋１、ｊ）の処理対象文字列＝“…、ｓ、…”。
最初のｓが見つかった場合、ｓより前のＴ（ｉ＋１、ｊ）の部分文字列をＴＴ（ｉ＋１、ｋ）（ｋは見つかるごとにカウントアップする）とし、ｓの頻度を１だけカウントアップする（初期値０）。
【００８２】
ｓが見つからなかった場合ＴＴ（ｉ＋１、ｋ）＝Ｔ（ｉ＋１、ｊ）と置く。
（３）  Ｓより後にある部分文字列Ｔ（ｉ＋１、ｊ）を処理対象の文字列として、（１）（２）の処理を処理対象文字列がなくなるまで繰返す。
【００８３】
（４）  Ｔ（ｉ＋１、ｊ）←｛ＴＴ（ｉ＋１、ｋ）｝として、Ｔ（ｉ＋１、ｊ）を更新する。処理対象の文字列がｓによって分割された形で登録されることになる。
【００８４】
（５）  すべてのＴ（ｉ＋１、ｊ）に対して処理した結果、ｓの頻度ｆ′がＧｉ以上であれば、（ｓ、ｆ′）をＦＲＱｉに登録する。
【００８５】
ｆ′＜Ｇｉであれば、ＦＲＱｉには登録せずに、Ｔ（ｉ＋１、ｊ）を切出し前の状態に戻す。
【００８６】
ＯＣｉのすべての要素に対して、上記の（１）〜（５）を行なった後、Ｔ（ｉ、ｋ）＝ＴＴ（ｉ＋１、ｋ）としてＳＴｉを生成する。
【００８７】
図４を参照して、処理例３ＨはＴ（９、１）＝ＳＴに対して、指定頻度値を満たすＣＯ８を出現回数順にソートしたもので切出した出力（８−文字列の頻度表ＦＲＱ８）を表している。
【００８８】
ＳＴ（＝ＳＴ９）の先頭部分である“  辞書の本体データや検索用のインデックスを記憶…”は、ＯＣ８の要素“辞書の本体データ”の切出しにより、“  ”と“検索用のインデックスを記憶…”という部分に分けられ、これらの分けられた新たな処理対象テキストは、さらに、ＯＣ８の要素“のインデックスを”の切出しによって、“  ”、“検索用”、“のインデックスを”、“記憶…”に分けられる。
【００８９】
ＯＣ８のすべての要素に対する切出処理後の「切残しテキスト」が次回ＯＣ７（３Ｉ）の切出し対象の処理対象テキストＳＴ８＝｛Ｔ（８、ｊ）｝になる（３Ｇ）。
【００９０】
切残しテキストに対するｉ−文字列カウント処理と切出処理をｉ＝ｎ、…、２まで繰返し（３４）、その後、ＦＲＱｉの集合を結合して２文字列長以上の頻度表と、切残しテキストの集合ＳＴ２が生成される（３５）。図５で、処理例を（３Ｊ、３Ｋ）に示す。
【００９１】
次に、図８を参照して、１文字シンボル抽出手段の実施方法の一例を説明する。
【００９２】
１文字シンボル抽出手段の入力は、文字列切出し操作により切残されたテキストの集合、出力は、入力テキストに対してその中に含まれる文字単位の頻度表である。
【００９３】
この処理は、処理対象のテキストの集合Ｔに対して、１−文字カウント処理を適用し（５１）、その結果生成される（１−文字シンボル、出現回数）の対の集合をそのまま処理結果の頻度表ＦＲＱ１とすればよい。
【００９４】
長文字列切出手段により生成した頻度表ＦＲＱと、切残しテキストに対して１文字シンボル抽出手段により抽出した頻度表ＦＲＱ１とを結合すれば、最終結果である圧縮用静的辞書ＳＤが求められる。
【００９５】
ＳＤ＝ＦＲＱ＋ＦＲＱ１
次に、図６を参照して、「効率指標関数値順文字列切出手段」の実施方法の一例とその処理例を示す。
【００９６】
効率指標関数値順文字列切出手段の入出力は、「長文字列切出手段」と同じで、入力は、圧縮対象である固定の「ソーステキスト」と、「静的辞書のシンボルの文字列最大長ｎ（＞１）」と、「シンボル長ごとの指定頻度値Ｇｉ（ｉ＝ｎ、…２）」とであり、出力は、ソーステキストを高効率に圧縮するための「シンボル長が２以上の圧縮用静的辞書」である。
【００９７】
「長文字列切出手段」が、ソーステキストからなるべく長い文字列を順に切出すための手法であるのに対して、「効率指標関数値順文字列切出手段」は、単に文字列長だけを指標とするのではなく、出現回数も考慮に入れた何らかの圧縮効率指標を表わす関数を予め用意して、この関数値の大きいもの順に静的辞書のシンボルを切出していくための方式である。
【００９８】
この方式では、たとえば文字列長が長く頻度の低いものを切出すより、文字列長が短く頻度の高いものを切出した方が圧縮効率がよくなるといった場合を想定している。
【００９９】
効率指標を正確に与える関数を見い出すことは困難な問題である。これは、静的辞書の切出処理が終わらないとすべてのシンボルに対する出現回数の総和がわからない（すなわち正確な出現確率がわからない）ので、切出処理の途中で算出されるシンボル候補の文字列の「文字列長Ｘ」とその「出現回数Ｙ」だけから、その文字列の正確な圧縮効率を予想するのが難しいことによる。
【０１００】
しかしながら、圧縮効率のおおよその指標を与えることはできる。おおよその圧縮効率を与える関数の例を以下に示す。
【０１０１】
１つのシンボル候補の文字列長Ｘ、出現回数Ｙの文字列の、圧縮後の符号長の総和Ｓは、切出後の出現頻度の総和をＦＳｕｍとすると、Ｓ＝−Ｘｌｏｇ２（Ｙ／ＦＳｕｍ）で表わすことができる。
【０１０２】
１シンボルの圧縮効率を、「元の文字列長の総和と圧縮後の符号長の総和の差が大きいもの」とみなすと、Ｆ（Ｘ、Ｙ、ＦＳｕｍ）＝Ｘ＊Ｙ−Ｓ＝Ｘ＊Ｙ＋Ｘ＊ｌｏｇ２（Ｙ）−Ｘ＊ｌｏｇ２（ＦＳｕｍ）と記述できる。
【０１０３】
ここで、ＦＳｕｍを、理論的には正しくないが、「どのように切出してもほぼ一定」として現実の計算において丸めこめば、αを定数として、
Ｆ（Ｘ、Ｙ、ＦＳｕｍ）＝Ｘ＊（Ｙ＋ｌｏｇ２（Ｙ）−α）≒Ｘ＊（Ｙ＋ｌｏｇ２（Ｙ））とみなされるから、
Ｆ（Ｘ、Ｙ）＝Ｘ＊（Ｙ＋ｌｏｇ２（Ｙ））
を、おおよその圧縮効率指標を与える関数とすることができる。
その他、もっと精度の高い観点から作成した関数を圧縮効率指標関数であるとしてもよいし、あるいは、場合によっては、Ｆ（Ｘ、Ｙ）＝Ｘ＊Ｙとして、ソーステキストに占める文字数の多いもの順に切出しても効率のよい切出しができる場合がないとは限らない。
【０１０４】
処理手順では、圧縮効率指標関数を特に定めずに説明を進める。ソーステキストＳＴ、ｉ−文字列の指定頻度をＧｉ、シンボルの最長文字列長をｎ、ｎから２までのｉ−文字列カウント処理の結果をＯＣ、ＯＣを効率指標関数値順にソートしたものをＯＣＣ、ＳＴをＯＣＣで切出して生成される頻度表をＦＲＱ、切残されたテキストの集合をＳＴｒと置く。
【０１０５】
ｉ＝ｎから始めて、ＳＴに対するｉ−文字列カウント処理をｉ＝２まで繰返し（４１、４２）、求めたＯＣｎ、ＯＣｎ−１、．．．、ＯＣ２を結合して（単純な集合の和）、ＯＣを用意する（４３）。
【０１０６】
次に処理効率の観点から、ＯＣの要素（ｓ、ｏ）で指定頻度の条件ｏ≧Ｇ｜ｓ｜を満たさない要素は除去する（４４）。
【０１０７】
さて、ＯＣの要素（ｓ、ｏ）に対して、文字列ｓの圧縮効率指標はＦ（ｓ、ｏ、．．．）で表わされる。各（ｓ、ｏ）の出現回数ｏをＦ（ｏ、ｓ、．．．）に置き換えたものをＯＣＣとし（４５）、ＯＣＣをＦ（ｏ、ｓ、．．．）の降順、ｓの効率指標関数値順にソート（４６）した上で、図３の（３４）の処理と同様の方法で、ＳＴからＯＣＣの要素を順に切出しＦＲＱとＳＴｒを求める（４７）。
【０１０８】
次に、図７を参照して、処理例に沿って「効率指標関数値順文字列切出手段」の流れを説明する。ここでは、説明をわかりやすくするためにＦ（Ｘ，Ｙ）＝Ｘ＊Ｙという単純な効率指標関数を例にとる。
【０１０９】
図７の処理例のソーステキストＳＴ、シンボル最大長ｎ、指定頻度Ｇｉはそれぞれ図３と同じである。ＳＴの先頭から｜ＳＴ｜−８の位置まで１文字ずつずらしながら８−文字列をカウントしたものがＯＣ８で、ここまでは「長文字列切出処理」と同じ結果である。
【０１１０】
「長文字列切出処理」ではこの後、ＳＴをＯＣ８で切出し、８−文字列の頻度表と切残しテキストＳＴ８を生成し、その後も切残しテキストに対して切出し−切残しの処理を繰返す。これに対して、「効率指標関数値順文字列切出手段」では、「文字列長によらず、効率指標関数値の大きいシンボルを見い出す」という戦略をとるため、ＯＣ８でソーステキストを切出すプロセスは行なわず、最初にソーステキストからすべてのＯＣｉ（ｉ＝ｎ、．．．、２）を作成、結合した上で、効率指標関数値順にソートする。
【０１１１】
したがって、ＯＣ７以降のカウント処理ではＯＣ８の場合と同様に、ＳＴの先頭から末尾までｉ−文字列のカウントが行なわれる（４８）。ＯＣｉを結合し、指定頻度を満たさないものを削除し、効率指標関数値順にソートしたＯＣＣの一部を処理例４９に示す。
【０１１２】
ＯＣＣの中の、８−文字列“のインデックスを”という文字列は、効率指標関数値が６４（＝８＊８）である。これに対して、６−文字列“インデックス”という文字列は他の部分でも頻出するため、効率指標関数値が２３９４（＝３９９＊６）になる。
【０１１３】
このように、「効率指標関数値順文字列切出手段」では「長文字列切出処理」で切出された“のインデックスを”より先に“インデックス”が切出されるという場合が起こり得る。その結果、“のインデックスを”を切出すときは既に処理対象テキストから“のインデックスを”を含むテキストは残っておらず、ＦＲＱにはシンボルとしては登録されず（４Ａ）、最初の文字“の”と最後の文字“を”はそれぞれ切残しテキストＳＴｒに残る（４Ｂ）。この場合、「長文字列切出処理」よりも“インデックス”に対する頻度が大きくなり“インデックス”に対する符号長は短くなる。
【０１１４】
「効率指標関数値順文字列切出手段」により生成されたＳＴｒは、「長文字列切出手段の場合と同様に、「１文字シンボル抽出手段」により１文字頻度表化され、これと２文字以上のシンボルの頻度表ＦＲＱの和により最終的な静的辞書を得る。
【０１１５】
さて、これまではテキストから静的辞書を切出す方法についての具体化手順を与えた。それには２種類の方法があり、請求項１を実施するための手段は「長文字列切出手段」と「１文字シンボル抽出手段」を組合せることにより、また、請求項２を実施するための手段は「効率指標関数値順文字列切出手段」と「１文字シンボル抽出手段」を組合せることにより実現できることを示した。
【０１１６】
しかしながら、これらの手段で構成した静的辞書のサイズはソーステキストの内容により異なり、基本的には「切出処理」を実行して実際に静的辞書を構築してみないとそのサイズを正確に求めることはできない。
【０１１７】
もし、圧縮伸長モジュールを実現する側で伸長用テーブル（静的辞書をもとにして構成する、静的辞書サイズに比例したサイズのテーブル）のサイズに制限があって、１回の「切出処理」で求めた静的辞書のサイズがこの制限を満たさない場合は、サイズのより小さな静的辞書を構成する必要がある。
【０１１８】
またそのような制限がなくても、「静的辞書法」を用いる場合は必ず伸長側で「静的辞書」に対応する固定の伸長テーブルを持たなければならないので、圧縮率に大きく影響するようなサイズの静的辞書を生成することは避けなければならない。
【０１１９】
このような観点から、請求項３、請求項４はソーステキストの圧縮率をあまり損ねることなく、静的辞書のシンボル数を減らすための適切な手段を提供するものとなっている。
【０１２０】
静的辞書のシンボル数を削減する単純な方法には、２文字以上の長文字シンボルで頻度の低いものを１文字シンボルに分解して、元からある１文字シンボルとマージする方法がある。
【０１２１】
たとえば、（“辞書本体”、４）、（“辞”、１６）、（“書”、１６）、（“本”、３２）、（“体”、８）という静的辞書の要素に対して、（“辞書本体”、４）というエントリを削除したい場合、“辞書本体”というシンボルを１文字ずつに分解して（“辞”、４）、（“書”、４）、（“本”、４）、（“体”、４）を元からあった静的辞書の要素とマージ（シンボルの頻度の和をとって静的辞書の要素を更新すること）して、（“辞”、２０）、（“書”、２０）、（“本”、３６）、（“体”、１２）を得る。この方法は、１文字シンボルの頻度数が増加するので１文字シンボルの符号化コードはもとより短くなる場合があるが、通常１文字シンボルは頻度数が大きく、頻度が多少増えても符号長が変化するに至らない場合も多い。
【０１２２】
これに対してたとえば“辞書の本体データ”というシンボルが“辞書の”という他のシンボルと“本体データ”という他のシンボルに分解することができれば、それぞれの“辞書の”、“本体データ”というもともとのシンボルの頻度数があまり大きくない場合、分解によって頻度を増やした分、それぞれのシンボルの符号長が短くなる確率が高い。
【０１２３】
削減対象となったシンボルＳの符号化長をＬ、シンボルＳを分解しシンボルＳ１、Ｓ２の和により分解・削除し、静的辞書を上述の方法で更新したときのＳ１、Ｓ２の符号化長をＬ１、Ｌ２とする。このとき大抵はＬ１＋Ｌ２＞Ｌであり、分解した符号長の和の方が元の符号長より小さくなる場合は稀である。
【０１２４】
したがって、通常シンボル数を削減すると伸長用テーブルの容量は確実に減少するが、圧縮データの容量は少し増加する。
【０１２５】
しかしながら、分解シンボルの個数が少ないほど、また分解個数は同じでも、何通りかの分解の仕方が存在するときはより効率的な分解の仕方を選ぶことにより、ソーステキストの圧縮率の増加を極力抑え込むことができる。
【０１２６】
図９および図１０を参照して、「シンボル削除のための文字列切出手段」の実施の方法の一例とその処理例を説明する。これにより請求項３の要件を実現することができる。
【０１２７】
「シンボル削除のための文字列切出手段」の入力は既に求められた、ソーステキストに対する「圧縮用静的辞書」と「静的辞書内の削除したい要素」であり、出力は「ソーステキストの圧縮効率の低下を極力抑え込んだ形で、削除対象要素を削除した新しい圧縮用静的辞書」である。
【０１２８】
以下では説明の便宜上、１文字シンボルがソーステキストのすべての文字種をカバーしている場合について述べる。
【０１２９】
「シンボル削除のための文字列切出手段」では、シンボル長の降順にソートされた、削除対象要素よりも短いシンボルの集合により、削除対象要素のシンボルに「文字列切出処理」を適用する。すなわちここでは、分解方法として分解シンボルの集合になるべく長いシンボルを含ませるという戦略を用いる。
【０１３０】
処理方法は削除要素１個に対する処理手順が記述されている。複数個一度に削除したい場合は、この処理手順を個数分繰り返せばよい。
【０１３１】
まず、静的辞書ＳＤから削除対象要素（ｓｉ、ｆｉ）を取り除き（６１）、削除対象のシンボル長ｐよりシンボル長が短い要素からなる静的辞書の部分集合ＬｏｗＰをシンボル長の降順にソートしておく（６２）。
【０１３２】
ｓｉからＬｏｗＰの各要素を順に切出して、ｓｉの分解文字列の集合ＦＲＱを生成する（６３）。このとき、一般にｓｉの切残しテキストが生じる可能性があるが、静的辞書に登録されている１文字シンボルは、ここではソーステキストのすべての文字種をカバーしていると仮定しているので、すべて、元の静的辞書のシンボルにより分解されることになる。
【０１３３】
この仮定を外すと、切残しテキストが生じるので、切残しテキストが生じるような削除対象に関してはこの手法は適用できない。なお、実際は、数メガというサイズの大きなソーステキストでは１文字シンボルがソーステキストのほとんどの文字種をカバーするので、ほとんどのシンボルがこの手法によって削除できる。
【０１３４】
ＦＲＱはＳＤ１の部分集合により切出されたものであるから、ＦＲＱの各要素のシンボルと同一のシンボルを持つ要素は必ずＳＤ１に存在する。このようなＳＤ１の要素に対して、削除シンボル（ｓｉ、ｆｉ）の頻度ｆｉ分だけその頻度を増やせば、ソーステキストはＳＤ１により切出されたのと同じことになる。
【０１３５】
これが、ＦＲＱの各要素（ｓ′、ｆ′）とシンボルが共通するＳＤ１の要素（ｓ′、ｆ）の頻度をｆ′＊ｆｉ増やす（６４）ことの意味である。
【０１３６】
すべての分解シンボルの頻度を削除シンボルの分だけ増やして更新したＳＤ１が本処理の最終結果ＳＤｒｅｄｕｃｅとなる（６５）。
【０１３７】
静的辞書ＳＤ（６６）からＳＤの要素（“のインデックスを”、８）を削除する場合を処理例に示す。
【０１３８】
ＳＤ１は最初はＳＤから（“のインデックスを”、８）を単純に除去したもの（６７）であり、ＬｏｗＰは文字列長７以下のシンボルを持つ要素のみからなるＳＤ１の部分集合（６８）である。切出しの対象テキストが削除対象要素のシンボルの“のインデックスを”（６９）である。
【０１３９】
対象テキストＬｏｗＰで切出した結果をＦＲＱ処理例６Ａに示す。“のインデックスを”から、まず“インデックス”が次いで切残しテキストから“の”と“を”がそれぞれ頻度１で切出される。
【０１４０】
最終結果ＳＤｒｅｄｕｃｅ（６Ｂ）は、ＳＤ１の対応要素（“の”、２４６８）、（“インデックス”、３８８）、（“を”、１２３４）の頻度をそれぞれ１＊８ずつ増やしたものである。
【０１４１】
図１１、図１２、および図１３を参照して、より高度なシンボル削除手段である「シンボル分解手段」の実施方法の一例とその処理例を説明する。
【０１４２】
「シンボル分解手段」の入出力は「シンボル削減のための文字列切出手段」と同じである。すなわち、入力は「圧縮用静的辞書」と「静的辞書内の削除したい要素」、出力は「削除更新後の静的辞書」である。
【０１４３】
「シンボル分解手段」では文字列切出しの手法は使わず、任意の位置で削除対象文字列を分解したとき、分解されたそれぞれの文字列が静的辞書のシンボルとして登録されているどうかを調べるというアプローチをとる。
【０１４４】
このようなアプローチをとることにより、「シンボル削減のための文字列切出手段」では処理後にしかわからなかった分解個数を予め指定できるとともに、複数通りの分解候補からソーステキストの圧縮率に最も貢献するものを選択することができるので、圧縮率の低下防止の観点からはより効率的な削除処理が可能となる。
【０１４５】
しかしながら、一方で、「シンボル削減のための文字列切出手段」では分解できていたシンボルが、分解個数制限のために分解できなくなる場合が増えるため、削除個数のコントロールが難しくなるのも事実である。
【０１４６】
図１１を参照して、処理方法をフローチャートに沿って説明する。
圧縮効率を考慮して、この処理例では分解個数を２とする。３以上の分解個数に対するアルゴリズムも多少の拡張で実施可能であるが、２の場合よりも圧縮効率が低下すること、処理時間が指数関数的に増加することを考え合せれば分解個数２の場合が実用的であると考えられる。
【０１４７】
まず、静的辞書ＳＤから削除対象要素（ｓ、ｆ）を取り除く（７０）。次に、削除対象シンボルｓ（シンボル長をＮとする）に対してｓの分解方法の候補の集合Ｃを求める。
【０１４８】
ｓの文字と文字の境界位置を先頭から順に１、…ｉ、…、Ｎ−１とし、ｓを、ｓの先頭からｉまでの部分文字列ｓ１ｉと、ｉから末尾までの部分文字列ｓ２ｉに分解する（７２）。
【０１４９】
ここで、ｓ１ｉ、ｓ２ｉをシンボルとするＳＤの要素（ｓ１ｉ、ｆ１ｉ）と（ｓ２ｉ、ｆ２ｉ）があれば（７３）、ｓは静的辞書の他のシンボルで分解できることになるので、（（ｓ１ｉ、ｆ１ｉ）、（ｓ２ｉ、ｆ２ｉ））をｓの分解方法の１つ（１ｉでの分解）としてＣに登録する（７４）。
【０１５０】
ｉ＝１〜Ｎ−１までこの操作を繰返し（７１）、分解候補集合Ｃを生成する。ここでＣ＝空集合の場合（７７）は、ｓは２個のシンボルには分解できないのでこの処理は失敗する（７８）。Ｃ≠空集合ならば（７７）、Ｃの要素中から圧縮効率のよい分解シンボルの候補を選択する処理Ｂ（７５）に入る。
【０１５１】
図１３を参照して、選択処理では、Ｃの各要素に対して圧縮効率のおおよその指標を与える計算式によりその効率指標Ｅを計算し（７５０）、その中から最も効率指標の値の大きい要素を取出す（７５１）。
【０１５２】
ここで（７５０）の計算式は、
効率指標＝Σ（削除対象シンボルの頻度）／（分解シンボルの頻度）…（２）
である。
【０１５３】
削除後に、削除対象シンボルの頻度数Ｄだけ、元の静的辞書の分解シンボルの各頻度Ｆｉを増加させるので、頻度の総和Ｓｕｍは削除の前後で変化しない。削除前後における各分解シンボルのビット数は、分解前が−ｌｏｇ（Ｆｉ／Ｓｕｍ）ビット、分解後が−ｌｏｇ（（Ｆｉ＋Ｄ）／Ｓｕｍ）ビットであるから、ビット数の減少分は、
−ｌｏｇ（Ｆｉ／Ｓｕｍ）−（−ｌｏｇ（（Ｆｉ＋Ｄ）／Ｓｕｍ））＝ｌｏｇ（１＋Ｄ／Ｆｉ）
となる。
【０１５４】
ｌｏｇ（１＋Ｄ／Ｆｉ）はＤ／Ｆｉに比例するから、結局Ｄ／Ｆｉの和の大きいものが全体のビット減少幅の大きい、すなわち圧縮効率が高いものとなる。これが式（２）の意味である。
【０１５５】
再び図１１を参照して、こうして選択された最も効率指標の大きいＣの要素に対して、実際にＳＤの中でその頻度を削除要素の頻度数分増加させ、最終的な削除後の静的辞書を得る（７６）。
【０１５６】
図１２を参照して、処理例７９に静的辞書ＳＤを、処理例７Ａに削除対象文字列とその分解位置を、また、処理例７Ｂに分解候補集合Ｃの例を示す。
【０１５７】
ＳＤの内容を見ると、分解位置３で分解した場合と分解位置５で分解した場合に、それぞれの分解シンボルと同一のシンボルを持つ要素がＳＤ内に存在するので、Ｃには分解シンボルのペアが２つ登録される。
【０１５８】
処理例７Ｃに、Ｃの２つの要素についてそれぞれ効率指標を計算した結果を示す。効率指標は最初の要素の方が大きいので分解シンボルとしては、最初の要素が選ばれ、削除対象文字列“辞書の本体データ”は“辞書の”と“本体データ”に分解されることになる。
【０１５９】
ＳＤから（“辞書の本体データ”、１０）を削除する代わりに、（“辞書の”、８）、（“本体データ”、８）の頻度をそれぞれ１０だけ増加させて、削除後の静的辞書ＳＤｒｅｄｕｃｅ（７Ｄ）を得る。
【０１６０】
以上のように、実施の形態１に係るテキスト圧縮用辞書作成装置によれば、大容量の固定のテキストデータが必要となる装置（電子辞書や電子ブックなど）において、テキストデータに対する優れた圧縮用静的辞書を提供することができる。
【０１６１】
本装置により構築した圧縮用静的辞書をもとにテキストデータを圧縮・伸長するモジュールを作成すれば、メモリ容量を大幅に削減して製品のコストダウンを図ることができる。
【０１６２】
また本装置により提供される圧縮用静的辞書自体のサイズ（エントリ数）を、ソーステキストの圧縮率をあまり落とさずに、細かく調整できる。この結果、実際に製品に圧縮伸長モジュールを搭載する場合のメモリ容量のコントロールが柔軟に行なえ、より迅速な製品開発が可能となる。
【０１６３】
［実施の形態２］
図１４は、実施の形態２に係るテキスト圧縮装置の全体構成説明図である。基本的構成は、実施の形態１に係るテキスト圧縮用辞書作成装置の構成と共通しており、同一の要素には同一の符号を付している。以下、共通する要素については説明を省略し、固有の要素について説明する。
【０１６４】
構成要素ごとの辞書作成手段２１１は、入力されたソーステキストに対して、ソーステキストの各構成要素ごとに静的辞書、符号化表、および切換対応表を生成するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【０１６５】
辞書切換圧縮・伸長手段２１２は、「構成要素ごとの辞書作成手段」により作成した構成要素ごとの符号化表を切換えながらソーステキスト圧縮・伸長するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵに処理可能な形式で格納されている。
【０１６６】
共有辞書作成手段２１３は、入力された複数の辞典テキストに対して、各辞典に共通なテキストの構成要素を集め、各構成要素ごとに各辞典が共有する静的辞書、符号化表、辞書ごとの切換対応表を作成するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【０１６７】
共有辞書切換圧縮・伸長手段２１４は、「共有辞書作成手段」により作成した構成要素ごとの静的辞書を各辞典ごとに用意された切換対応表に従って切換ながら、ソーステキストを圧縮・伸長するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【０１６８】
オフセット置換圧縮手段２１５は、静的辞書には登録されなかった局所的な高頻度語を導入シンボル、出現位置、文字列長で置換することにより辞典ソーステキストを圧縮するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【０１６９】
オフセット置換伸長手段２１６は、「オフセット置換圧縮手段」により圧縮されたデータを伸長して、元のソーステキストに復元するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【０１７０】
番号置換圧縮手段２１７は、静的辞書には登録されなかった局所的な高頻度語を導入シンボルと番号とで置換することにより辞典ソーステキストを圧縮するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【０１７１】
番号置換伸長手段２１８は、「番号置換圧縮手段」により圧縮されたデータを伸長して、元のソーステキストに復元するためのロジックであり、記憶装置１１のＲＯＭの一部にＣＰＵ１０に処理可能な形式で格納されている。
【０１７２】
以下、本発明に固有な各手段を実施するための方法を述べる。
図１５は、構成要素ごとの辞書作成手段の説明図である。「構成要素ごとの辞書作成手段」の入力は、複数個の記述部分から構成されるテキストであり、辞典では英和辞典の意味テキスト（見出し以外の部分）が代表的な例である。
【０１７３】
「構成要素ごとの辞書作成手段の出力は、構成要素ごとに作成された静的辞書と符号化表、および切換対応表（切換シンボルと切換シンボルの出現直後にセットされる符号化表の対）である。ここで、切換シンボルとは、静的辞書中に登録されている、テキスト中の構成要素と構成要素を区切るための文字列（シンボル）を示す。
【０１７４】
処理の第１段階において、まず、入力テキストの構成要素間を区切る文字列が特定できる場合は、その文字列を区切り記号として、どの構成要素とどの構成要素を区切るかという情報とともにＲＡＭ上に記憶する。構成要素間を区切る明確な文字列が特定できない場合は、入力テキスト中には決して出現しない適当な文字列を区切り記号としてテキスト中に挿入し、その区切り記号と区切られる構成要素をＲＡＭ上に記憶する（２２０）。
【０１７５】
区切り記号によって区切られたソーステキスト、区切り記号が前方の構成要素に含まれるように分割し、複数個のサブテキストを生成する（２２１）。
【０１７６】
分割されたサブテキストごとに独立に静的辞書（可変長シンボルとその出現頻度の対）を切出す。テキストから１つの静的辞書を切出すための方式については、前述したとおりここでは、前提となる方式であるものとして、詳述はしない。
【０１７７】
実現方法の１つとしては、テキストの先頭から末尾まで１文字ずつ先頭位置をずらしながらｉ文字列長の文字列の出現回数をカウントし、これをソートして圧縮率に貢献する頻度を持つ文字列のみをテキストから切出し実際の頻度に計算し、これを静的辞書に登録するとともに、切残されたテキストに対して同様に（ｉ−１）文字列長の文字列に対して処理を行ない、これをｉ＝Ｎ〜１まで繰返すという手順がある。ここでは、静的辞書に登録されるシンボルに必ず区切り記号を含めておく必要があるため、静的辞書を切出す前に、対象となるサブテキストから、まず区切り記号だけを静的辞書のシンボルとして切出した後、切残されたサブテキストから上述のような方法を使って他のシンボルを切出すことによって各構成要素ごとの静的辞書を構築する（２２２）。
【０１７８】
静的辞書をもとに、対象テキスト圧縮伸長する方法には既知なものがいくつか存在する。ここでは、静的辞書から各シンボルに割り当てられる符号（圧縮データのビット列）を求め、シンボルと符号の対からなる符号化表を作成し、符号化表を参照しながら圧縮・伸長を行なう手法を例にとって以降の説明を行なう。
【０１７９】
ただし、本発明に関しては符号化手法はそれが統計ベースのものであれば何でもよく、本質的な問題ではない。ＰＲＥＮＴＩＣＥ  ＨＡＬＬ  Ａｄｖａｎｃｅｄ  Ｒｅｆｅｒｅｎｃｅ  Ｓｅｒｉｅｓ，“Ｔｅｘｔ  Ｖｏｍｐｒｅｓｓｉｏｎ”，  １９９１  などに記述された方法で、各静的辞書から構成要素ごとに符号化表を作成し、これをＲＯＭに記憶しておく（２２３）。
【０１８０】
静的辞書中には、区切り記号がシンボルとして登録されているが、この区切り記号のシンボルをここでは「切換シンボル」と呼び、予めＲＡＭに記憶しておいた「区切り記号とそれにより区切られる構成要素の対」の情報をもとに、「切換シンボルとその直後の構成要素の符号化表の対」すなわち、「切換対応表」を作成しこれをＲＯＭに記憶しておく（２２４）。
【０１８１】
次に、図１６〜図２１を参照して、構成要素ごとの辞書作成手段による処理例を処理例２２５以下に示す。処理例２２５は、英和辞典の意味テキストの一部で、“ｐａｃｅ”という項目に対応する付近の内容を示している。テキストは、各項目の先頭から、「発音記号（“［ｐｅｉｓ］”）」、「訳（“［な］、…、あるく”）」、「例文（“ａｔ  ａ、…、歩調で”）」、「変化形（“［な］［ふく、…、ｐａｃｉｎｇ”）」の各記述部分が順に出現する。
【０１８２】
このうち、発音記号、変化形は文字を構成するコード種が他とは異なっているので、別々の静的辞書を用意しておく方が効率的に圧縮できる。また、訳の文と例文内の日本語訳の部分は「日本語テキスト」として、例文内の英語部分は「英語テキスト」として別個に圧縮した方が、やはりそれぞれのコード種が大きく異なるため、圧縮効率は良くなる。これに従って、たとえば、「日本語」「英語」「発音記号」「変化形」の各構成要素にテキストを分割する。
【０１８３】
処理例２２６に、処理例２２５のテキストを「日本語」「英語」「発音記号」「変化形」の各構成要素に区切るために区切り記号を特性あるいは挿入した状態を示している。
【０１８４】
「発音記号」に関しては、“］”が出現した時点で「日本語」テキストに切換わる。これは始めからテキスト内に区切り記号が存在する例である。「訳」に関しては、すべて「日本語」テキストとして処理し、区切記号として挿入した文字列“●”が出現した時点で「英語」テキストに切換わる。「例文」に関しては、例文内で「日本語」テキストに切換わる部分と「変化形」テキストに切換わる部分にそれぞれ“＼”、“＾”の区切り記号を表わす文字列が挿入されている。
【０１８５】
処理例２２７に、処理例２２６のテキストを実際の「日本語」「英語」「発音記号」「変化形」の各構成要素ごとに分割して構成要素ごとにまとめたサブテキストの例を示す。このようにして同種のコードが多く含まれるように圧縮対象テキストを分割しておいた上で、各テキストに対して静的辞書を作成する。処理例２２８に「日本語」「英語」「発音記号」「変化形」の各テキストごとに作成された「静的辞書」の例を示す。ここで、各静的辞書には、それぞれのソーステキストに含まれていた区切り記号がそのままの形で「切換えシンボル」として含まれている必要がある。発音記号用静的辞書中のシンボル“］”、日本語テキスト用静的辞書中のシンボル“●”、“＾”、英語テキスト用静的辞書中のシンボル“＼”が切換えシンボルとして扱われるものである。
【０１８６】
処理例２２Ａに、これらの切換えシンボルと、切換えシンボルが出現した直後から次のどの符号化表を使って圧縮伸長を行なわねばならないかを示す「切換え対応表」の作成例を示す。
【０１８７】
処理例２２９は処理例２２８で作成した構成要素ごとの静的辞書をもとに、周知の方法で符号化ビット列を求めることにより作成した、「構成要素ごとの符号化表」の例である。統計情報に基づく符号化表では、出現確率の高いシンボルには短いビット列が、また出現確率が低いシンボルには長いビット列が割り振られることになる。たとえば「日本語テキスト用静的辞書」中で頻度の高い“（１）”、“●”には短いビット列が、また頻度が低い“ゆっくり”には長いビット列が割り振られている。
【０１８８】
構成要素ごとにテキストを分割した上で静的辞書を用意する場合と、テキスト全体を対象とした１つの静的辞書のみを用意する場合の圧縮効率の違いを処理例２２Ｂ、処理例２２Ｃに示す。
【０１８９】
たとえば、変化用静的辞書中のシンボル“［３単］−ｓ”は、変化形テキストに対する場合でも、テキスト全体に対する場合でもその出現頻度は変わらないが、変化形テキスト内での出現確率は、テキスト全体における出現確率よりはるかに大きいため、出現確率から求められる“［３単］−ｓ”の理論上の符号長には大きな差ができる。
【０１９０】
このように、テキストをうまく分割すれば各々のシンボルの符号長が短くなり、圧縮テキストデータ自体はかなり小さくなる。反面、分割テキストごとに複数個の静的辞書（符号化表）を用意しなければならないので、静的辞書のサイズが増大することになる。一般的には、テキストが巨大な場合（１Ｍバイト前後以上）は、たとえ静的辞書のサイズが増えてもテキスト自体の圧縮効率がそれを補うため、全体としての圧縮率が改善される場合が多い。図２２に辞書切換圧縮伸長手段の実現例を示す。
【０１９１】
辞書切換圧縮伸長手段の入力は、区切り記号によって明確に区切られた複数の構成要素からなるソーステキスト（または圧縮されたデータ）、構成要素ごとの辞書を作成手段により作成された構成要素ごとの符号化表および切換対応表である。辞書切換圧縮伸長手段の出力は符号化表と切換対応表に基づいて符号化表を切換えながら圧縮伸長した結果の圧縮データまたは復元されたソーステキストである。
【０１９２】
符号化表に基づく具体的な圧縮伸長方法については、符号化方式自体は既知なものであるので説明を省略し、「複数の符号化表をいかにして切換えながら圧縮伸長を進めるか」という本発明に固有の部分について処理手順を説明する。
【０１９３】
まず圧縮（伸長）開始時にセットされる符号化表を定める（３３０）。どこからどんな部分を伸長するかにより、開始時にセットされる符号化表が異なる。たとえば処理例２２６の項目“ｐａｃｅ”に対応する意味テキストの先頭からの末尾までを圧縮する場合には、最初に“発音記号の符号化表”をセットしておく。
【０１９４】
次に、現在セットされている符号化表をもとに、１シンボル分の圧縮（伸長）処理を行ない（３３１）、処理されたシンボルば圧縮（伸長）終了を示すシンボルであれば圧縮（伸長）を終え、そうでなければそのシンボルが切換シンボルとして切換対応表に登録されているか否かを調べる（３３２、３３３）。切換シンボルであれば切換対応表に従って次からの圧縮（伸長）に用いる符号化表をセットした上で次のシンボルの圧縮（伸長）に移り、切換シンボルでなければそのまま現在セットされている符号化表を使って次のシンボルの圧縮（伸長）を行なう（３３４）。伸長処理において切換シンボルがソーステキストに挿入されたものである場合（処理例２２６の“●”や“＾”）は、伸長バッファには伸長結果を書込まずにそのまま処理を進める。
【０１９５】
図２３に共有辞書作成手段の実現例を示す。
共有辞書作成手段は、「構成要素ごとの辞書作成手段」と基本的な処理タスクが変わらない。ここでは、入力された複数の辞典テキストに同じような記述部分が存在する場合に、各辞典ごとに静的辞書を用意するよりも、同じ記述部分を縦割りにして圧縮対象テキストをまとめた上で構成要素ごとの静的辞書を用意した方が圧縮効率がよくなることを利用する。したがって、処理タスクは「構成要素ごとの辞書作成手段」とほとんど同じ、「構成要素ごとの辞書作成手段」では処理対象が１つのテキストであったが、「共有辞書作成手段」では処理対象が２つ以上の異なるテキストになる部分にのみ違いがでる。
【０１９６】
「共有辞書作成手段」の入力は、少なくとも１つの構成要素が一致する複数個の辞典ソーステキストであり、「共有辞書作成手段」の出力は、構成要素ごとに作成された静的辞書と符号化表、および辞典ごとに作成された切換対応表（切換シンボルと切換シンボルの出現直後にセットされる符号化表の対）である。
【０１９７】
各辞典のソーステキストごとに、まず、「構成要素ごとの辞書作成手段」と同様の方法で、区切り記号の特定、挿入を行ない、区切り記号と区切り記号により区切られる構成要素をＲＡＭ上に記憶する（４４０）。
【０１９８】
次に、区切り記号によって区切られた各辞典ごとのソーステキストを、区切り記号が前方の構成要素に含まれるように分割し、複数個のサブテキストを生成する（４４１）。
【０１９９】
分割されたサブテキストを構成要素ごとに、複数の辞典に跨がった形で集める（４４２）。構成要素ごとに再編成された各テキストから、「構成要素ごとの辞書作成手段」の場合と同様の手段を用いて静的辞書、符号化表を作成してＲＯＭに記憶しておく（４４３）。ただし、「切換対応表」は「構成要素ごとの辞書作成手段」とは異なり、同じ構成要素内のシンボルでもそれがある辞典内では切換シンボルとして扱われ、また別の辞典内では単なるシンボルとして扱われる場合もあることを考慮し、「辞典ごと」の「切換対応表」を用意しておかねばならない。ここの「切換対応表」の具体的な作成方法は、構成要素ごとの辞書作成手段」と同様である。
【０２００】
図２４〜図２８を参照して、ここまでの処理例を示す。
ここでは、「英和辞典」「和英辞典」「英熟語辞典」「国語辞典」の４つの辞典テキストが圧縮対象として入力された場合を例に説明する。「英和辞典」「和英辞典」「英熟語辞典」「国語辞典」のソーステキストの一部を処理例４４４〜処理例４４７に示す。
【０２０１】
各ソーステキストに対して区切り記号を特定、あるいは挿入した後のテキストを処理例４４８、４４９、４４Ａおよび４４Ｂに示す。「英和辞典」の区切記号は発音記号と日本語テキストの各構成要素を区切る“］”、日本語テキストと英語テキストを区切る“●”（挿入）、英語テキストと日本語テキストを区切る“＼”（挿入）、日本語テキストと変化形テキストを区切る“＾”（挿入）である。「和英辞典」の区切記号は、日本語テキストと英語テキストを区切る“］”、英語テキストと日本語テキストを区切る“＼”である。
【０２０２】
「英熟語辞典」の区切り記号は、英語テキストと日本語テキストを区切る“＼”である。「国語辞典」の区切り記号はなしで、テキストすべてにわたって日本語テキストから構成されるものと見なしている。
【０２０３】
構成要素ごとに分割した各辞典のサブテキストを、辞典間に跨がる形で、各構成要素ごとに集め、再編成したテキストを処理例４４Ｃに示す。各構成要素ごとに再編成されたテキストから切出した、構成要素ごとの静的辞書を処理４４Ｄに示す。各辞典ごとに作成された、切換シンボルと、その直後からセットされる符号化表の対を示す「切換対応表」を処理例４４Ｅに示す。
【０２０４】
各辞典のソーステキストの圧縮データ容量を小さくする、という観点からは、共有辞書を作成するより個々の辞典ごとに別個の静的辞書を構築した方が、各シンボルの出現確率が少しでも大きくなるため有利であるが、「構成要素ごとの辞書作成手段」の場合とは逆に、シンボルの出現確率を稼ぐ効果よりも、静的辞書を共有することによって圧縮データの容量を抑える方が、複数個の大容量の辞典を圧縮対象とする場合は効果が大きい。これは、各辞典ごとに各構成要素ごとの静的辞書を作成した場合、重複するシンボルが数多く切出されるため、静的辞書自体が冗長になってしまうことによる。
【０２０５】
たとえば、日本語テキストの“ゆっくり”、英語テキストの“ａｔ”など（４Ｃ）は図に示すようなわずかな範囲でも異なる辞典にともに出現する。これらを別個の静的辞書で定義すると、全体としては、同じシンボルが多数定義された冗長な静的辞書がいくつも構成されてしまうことになる。
【０２０６】
図２９を参照して、共有辞書切換圧縮・伸長手段の実現例を示す。
共有辞書切換圧縮・伸長手段の入力は、区切り記号によって明確に区切られた構成要素からなる複数の辞典ソーステキスト（または圧縮されたデータ）と、構成要素ごとの辞書作成手段により作成された構成要素ごとの符号化表および各辞典ごとに作成された切換対応表である。辞書切換圧縮・伸長手段の出力は、符号化表と切換対応表に基づいて符号化表を切換えながら圧縮（伸長）した結果の圧縮データ（または復元されたソーステキスト）である。
【０２０７】
共有辞書切換伸長・圧縮手段においても、符号化表に基づく具体的な圧縮伸長方法については、周知の方法であるため説明を省略し、「複数の符号化表をいかにして切換えながら各辞典ごとに圧縮伸長を進めるか」という本発明に固有の部分のみについて処理手順を説明する。
【０２０８】
まず、どの辞典のテキストを圧縮（伸長）するのかを表わす辞典ＩＤをＲＡＭにセットし、処理対象の辞典テキストが変わるごとにＩＤも変えるものとする（５５０）。
【０２０９】
次に、圧縮（伸長）開始時にセットされる符号化表を定める（５５１）。
次に、現在セットされている符号化表をもとに、１シンボル分の圧縮（伸長）処理を行ない（５５２）、処理されたシンボルが圧縮（伸長）終了を示すシンボルであれば圧縮（伸長）を終え、そうでなければそのシンボルが切換シンボルとして辞典ＩＤに対する切換対応表に登録されているか否かを調べる（５５３、５５４）。切換シンボルであれば辞典ＩＤごとの切換対応表に従って次からの圧縮（伸長）に用いる符号化表をセットした上で次のシンボルの圧縮（伸長）に移り、切換シンボルでなければそのまま現在セットされている符号化表を使って次のシンボルの圧縮（伸長）を行なう（５５４、５５５）。伸長処理において切換シンボルがソーステキストに挿入されたものである場合（４４８）の“●”や“＾”は、伸長バッファには伸長結果を書込まずにそのまま処理を進める。
【０２１０】
図３０、図３１および図３２を参照して、オフセット置換圧縮手段の実現例を説明する。
【０２１１】
オフセット置換圧縮手段の入力は、局所的な高頻度が存在するような辞典テキストおよび、その辞典テキストに対して予め構築された静的辞書と符号化表である。また、オフセット置換圧縮手段の出力は、局所的な高頻度語の部分が高効率に圧縮された辞典テキストの圧縮データである。また、処理の途中で、高頻度語を特定し、それを取込んだ形で置換修正された辞典テキストと、修正テキストに対して更新された静的辞書および符号化表が生成される。
【０２１２】
ここでは、説明の便宜上、図３４、図３５および図３６を参照して、処理例から先に説明を行なう。処理例６６３は英和辞典のソーステキストの一部である。上から順に、“ｃｉｔｒｉｃ  ａｃｉｄ”、“ｃｉｔｒｏｎ”、“ｃｉｔｒｕｓ”という項目のそれぞれの意味が記述されているようすが示されている。
【０２１３】
処理例６６３の中に出現する局所的な高頻度語が“柑橘（かんきつ）類”および“シトロン”であるとすると、オフセット置換圧縮手段によって処理例６６３のテキストは処理例６６４のように書替えられる。すなわち、“柑橘（かんきつ）類”および“シトロン”はどちらも初回の出現時には何も置換されないが、２回目以降の出現時には導入シンボル“＊”と“：”で区切られた２つの数字に置換される。たとえば、処理例６６３の２行目の“シトロンの木…”の部分の“シトロン”は、処理例６６４では“＊２９：，８”で置き換えられているがこれは、この位置にはソーステキストで２９バイト手前の位置から８バイト分の文字列（＝同じ行の“シトロン（レモン）に…”の部分の“シトロン”）と同じ文字列が出現することを表わしている。
【０２１４】
導入シンボルは入力されたソーステキスト中に存在しない文字列であれば何であっても構わない。また、出現位置と文字列長を表わす２つの数字は、圧縮効率を考えてその値の範囲を制限する必要がある。この例では、出現位置を１Ｋバイト手前まで（１０ｂｉｔ）、文字列量を３２バイトまでとしている。
【０２１５】
以上の置換操作によって、ソーステキストが書替えられてしまったので、それに併せて静的辞書６６５、符号化表６６６にも変更が必要になる。すなわち、１回置換を行なうごとに導入シンボル“＊”の静的辞書への登録（カウントアップ）、置換された各シンボルの静的辞書内でのカウントダウンにより、静的辞書とテキストの整合性を維持しておく。テキスト全体にわたって置換および静的辞書６６７の変更を行なった後、静的辞書から周知の手段で符号化表を作成し直す。
【０２１６】
このようにして更新されたテキスト６６４を、更新した符号化表６６８により符号化（圧縮）する。
【０２１７】
ただし、“＊”の直後の数字の対に対しては、符号化表による符号化は行なわずに、それらを１０ｂｉｔ、５ｂｉｔのバイナリの数値に変換する処理が通常の場合とは異なる。
以上のような圧縮法により、オフセット置換された文字列（２回目以降の出現文字列）は一様に導入シンボルの符号長＋１５ｂｉｔで符号化されることになる。導入シンボルの出現回数によりその符号長は異なるが、英和辞典のような局所的な高頻度語がよく出てくるテキストに対してはその符号長を短く抑えることができる。
【０２１８】
処理例６６９にオフセット置換圧縮を採用せずに、元の静的辞書６６５および符号化表６６６を元に圧縮した場合の符号長と、オフセット置換圧縮を併用して圧縮した場合の符号長の比較を示す。
【０２１９】
このように、置換対象のシンボルが局所的な高頻度語であれば、元の静的辞書中では符号長の長いいくつかのシンボルに分解せざるを得ない文字列も、オフセット置換を用いることにより、２回目以降の出現以降で一定長の、元より短いビットで符号化できることがわかる。
【０２２０】
オフセット置換圧縮を併用する場合に最も重要なことは、局所的な高頻度語をうまく検出することである。すなわち、元の静的辞書を圧縮する場合より少なくとも置換後の符号長が短くなるような置換対象の文字列を見つけ出さなければならない。
【０２２１】
幸い、元の符号化表から任意の文字列の符号長が算出でき、かつ、置換後の符号長も出現位置と文字列長が固定であるから導入シンボルの符号化長をうまく想定できれば静的辞書を更新する前に概算できる。置換対象文字列は、任意の文字列に対してこの２つの値を常に比較し、置換後の符号長の短くなると予想できるものを選択すればよい。
【０２２２】
以上処理例に基づいてオフセット置換圧縮方式の概要を述べた。
図３０〜図３３を参照して、より詳細な処理手順を説明する。処理は２つの段階に大別される。すなわち、元の静的辞書Ｓでに導入シンボル（“＊”，０）を追加（６６０）しておいた上で、処理の第１段階でテキスト中の置換対象文字列を検出しながら、テキストと静的辞書の更新を行ない（６６１）、第２段階で、更新されたテキストを、更新された静的辞書から作成した符号化表に基づいてエンコードする（６６２）。
【０２２３】
元の静的辞書ＳＤおよびソーステキストＳＴを更新する作業の準備として、項目ごとの圧縮データへのアクセスを想定して、ＳＴを辞典の各項目ごとに分けたもの（Ｓ０，…Ｓｅ）を処理単位として考える（６１１）。項目ごとのテキストＳｎをｎ＝０からｅまで順次処理する（６１２）。まず、Ｓｎを（更新されていない元の）ＳＤの符号化表でエンコードし（６１３）、Ｓｎのエンコードシンボル列ＳＳ（０）＝“ｓ０，ｓ１，…，ｓｐ”を抽出する（６１４）。エンコードシンボルとは実際にエンコードされる際にエンコード対象となる静的辞書（符号化表）中のシンボルを指す。図３４の処理例６６３の“ｃｉｔｒｏｎ”に対応するテキストを例に取れば、ｓ０＝“［名］（１）”，ｓ１＝“シ”、ｓ２＝“ト”、ｓ３＝“ロン”、ｓ４＝“（“，…，ｓｐ＝”）”となる。
【０２２４】
ＳＳ（０）に関する置換・更新処理（６１５）は（６１５１）以下で示される。ＳＳ（ｊ）は現在の処理対象範囲を示している。処理が進むにつれて、ｊの値は増やされ、処理対象範囲は１エンコードシンボルずつ後方に縮められる。ＳＳ（ｐ−１）の処理が終わった時点で、辞典１項目（ＳＳ（０））に関する置換・更新処理が終了する（６１５１）。
【０２２５】
処理範囲ＳＳ（ｊ）＝“ｓｊ，…，ｓｉ，…，ｓｐ”に対して、ＳＳ（ｊ）内に局所的な高頻度語となる文字列ｓｔｒ（ｉ）が存在するかどうかを検査し、存在すれば、特定したｓｔｒ（ｉ）を更新するとともに、静的辞書の修正を行なう。この仮定ではまず、ｉ＝ｐとおいて（６１５２）、ＳＳ（ｊ）内の最長文字列から順に局所的な高頻度語がないかどうか検査し、見つかればｊの位置をｉ＋１に更新して、残りの処理範囲ＳＳ（ｊ）の処理を行なう。ｉ＝ｊ＋２、すなわちＳＳ（ｊ）の最初の２シンボルになるまでｓｔｒ（ｉ）を縮めても見つからない場合は、処理範囲を１シンボル分縮めて、引続きＳＳ（ｊ＋１）に対する処理を行なう（６１５３）。
【０２２６】
処理例６６３の“ｃｉｔｒｏｎ”に対応するテキストを例に取れば、ＳＳ（１１）＝‘シ’‘ト’‘ロン’‘の’‘木’，…，‘ケーキ’‘用’に対しては、ｓｔｒ（１３）＝‘シ’‘ト’‘ロン’で、元のＳＴ中の２９バイト手前に同一の文字列が出現（最初の“シトロン”）し、これが局所的な高頻度語として処理される。
【０２２７】
ｓｔｒ（ｉ）が局所的な高頻度語になるかどうかの検査は、まず、処理の無駄を省くために符号化表からｓｔｒ（ｉ）の符号長を計算し、これが置換符号長よりも短くならない場合は、たとえ前方に一致する文字列があっても圧縮効率が改善されないので、置換・更新処理は行なわず、処理対象範囲を次に進める（６１５４）。置換符号長は処理例の場合は２２ｂｉｔ（想定導入シンボル長７ｂｉｔ、出現位置１０ｂｉｔ、文字列長５ｂｉｔ）に設定しているが、テキストによりこれらの値は最適な値が異なる。
【０２２８】
ｓｔｒ（ｉ）の符号長が置換符号長より短い場合は、これを局所的な高頻度語の候補と見なして、（更新されていない元の）ＳＤ上の現在位置から出現位置の制限幅（ここでは１０２４バイトとしている）分だけ手前にある文字列に対して、ｓｔｒ（ｉ）と同一の文字列が存在するか否かサーチする。元のソーステキスト上で（ｐｏｓ（＜１０２４）バイト手前に同一文字列が見つかり、かつその文字列がこれまでの処理で、更新テキストにおいて置換されていない場合（６１５５）、ｓｔｒ（ｉ）を“＊”で置換し（６１５６）、その直後に、ＰＯＳおよびｓｔｒ（ｉ）を文字列長の値を“，”で区切って、アスキー数字で出力する（６１５７）。さらにテキストの修正に伴い、ｓｔｒ（ｉ）中のシンボルｓｊ、…、ｓｉがテキストから１つずつ削除されるので、静的辞書ＳＤ中のｓｊ、…、ｓｉの各頻度も１減らす（６１５８）とともに、“＊”が１増えるので、ＳＤ中の“＊”の頻度も１増やす（６１５９）。
【０２２９】
今一度、処理例６６３の“ｃｉｔｒｏｎ”に対応するテキストを例にとって説明しておく。３回目に出現するｓｔｒ（４）＝‘シ’‘ト’‘ロン’‘の’を局所的な高頻度語の候補として検査する場合、元のＳＴ中の３１バイト手前に同一の文字列が出現（２回目の“シトロン”以下）するが、これはこれまでの処理で既に更新テキスト中で置換されている。したがって、「同一文字列が見つかり、かつその文字列がこれまでの処理で、更新テキストにおいて置換されていない場合」という条件の後半部に抵触するため、これを局所的な高頻度語としては処理せず、ｓｔｒをもう１シンボル分減らした上で、最初に出てくる（置換処理されていない）“シトロン”とマッチングするｓｔｒ（３）＝‘シ’‘ト’‘ロン’を局所的な高頻度語として置換する。
【０２３０】
制限幅内に同一の文字列が見つからなかった場合は、検査対象文字列を１シンボル分末尾方向から短くして（−−ｉ）、ｓｔｒ（ｉ−１）に対する処理を行なう。
【０２３１】
以上が「静的辞書とソーステキストの更新」処理の内容である。
次に、更新したソーステキストを更新した静的辞書でエンコードする手段について説明する。圧縮は、静的辞書から符号化表を作成し、符号化表を参照しながら文字列をビット列で置き換える周知の方法を用いればよいが、オフセット置換に依存する部分だけ別個の処理を行なう必要がある。
【０２３２】
１シンボルずつ、終了シンボルが出現するまで（６２２）、周知の方法によってエンコードする（６２１）。ただし、エンコードシンボルが導入“＊”である場合（６２３）は、それに続く、“，”で区切られたアスキー数字ｄ１、ｄ２を読込み（６２４）、ｄ１、ｄ２の各値を定められた出現位置のビット幅および文字列長のビット幅（この場合はそれぞれ１０ｂｉｔ、５ｂｉｔ）にバイナリパックする（６２５）。
【０２３３】
以上がエンコード処理の内容である。
次に図４３を参照して、「オフセット置換圧縮手段により圧縮されたデータの伸長手段」の実現例について説明する。オフセット置換伸長処理も、前述のエンコード処理同様、基本的には周知の方法を用いて伸長を行なう。オフセット置換圧縮に依存して変更した部分だけがオフセット置換伸長処理においても異なることになる。
【０２３４】
説明の便宜上、フローチャートでは圧縮データの先頭から伸長を行なうものとする。伸長したシンボルがデータの終了コードになるまで（８２）、符号化表に基づいて、周知の方法により１シンボルずつ伸長する（８１）。
【０２３５】
デコードシンボルが“＊”でない場合は、デコード結果の文字列を出力（８４）して次のデータをデコードする。デコードシンボルが“＊”であれば、次の１５ｂｉｔの圧縮データを読込み、出現位置ｄ１、文字列長ｄ２をセットし、既に復元されたテキストの中から、現在位置よりｄ１バイト手前の位置からｄ２バイト分の文字列を置換コードの伸長結果として出力し（８６、８７）、次の圧縮データの処理に移る。
【０２３６】
以上の伸長アルゴリズムでは、もし、特定の辞書項目だけを伸長しようとする場合でも、基本的には圧縮データの先頭から伸長しなければならないことになるが、圧縮時の制限から実は、伸長対象項目の（ソーステキスト上で）その手前１０２４バイト分の情報さえ事前に処理されていればよい。すなわち、特定の辞書項目だけを伸長する場合は、ソーステキスト上で所定の辞書項目の１０２４バイト分以上手前の項目に相当する圧縮データ区切りから伸長を始める。
【０２３７】
手前部分の伸長処理において、置換圧縮された部分は、さらにその手前のデータを伸長しないとテキストに復元できない場合はテキストへの復元は行なわずに置換コードの文字列長の情報からそれが復元テキスト上では何バイトの文字列になるかという情報だけを得ておく。その他のテキストに復元できる部分はすべて復元しておく。
【０２３８】
このような準備をしておけば、手前の１０２４バイト内にある、テキストに復元された任意の文字列に対して、それが現在の位置から何バイト手前に出現するかを算出することができる。一方、「オフセット置換圧縮手段」の実現方法から、置換のもとになる文字列が別途置換されていることはないので（図３２の処理６１５５の処理要件に違反するため）、出現位置まで遡った位置には、文字列長分の復元テキストが必ず存在する。
【０２３９】
このように、辞典の任意の項目からの伸長には多少複雑なロジックと、処理時間のオーバヘッドが生じるが、辞典のソース的を圧縮データの先頭から伸長しなくてもすむので、「オフセット置換伸長手段」は辞典モジュールの検索性能を損ねない利点を併せ持っているといえる。
【０２４０】
次に、図３７〜図３９を参照して、番号置換圧縮手段の実現例を説明する。
番号置換圧縮手段の入力は、「オフセット置換圧縮手段」と同様、局所的な高頻度語が存在するような辞典テキストおよび、その辞典テキストに対して予め構築された静的辞書と符号化表である。また、番号置換圧縮手段の出力は、局所的な高頻度語の部分も高効率に圧縮した辞典テキストの圧縮データである。また、処理の途中で、高頻度語を特定し、それを取込んだ形で置換修正された辞典テキストと、修正テキストに対して更新された静的辞書および符号化表が生成される。
【０２４１】
ここでも、説明の便宜上、図４０〜図４２を参照して、処理例から先に説明を行なう。
【０２４２】
処理例７７４は「オフセット置換圧縮手段」の処理例６６３と同一の、英和辞典のソーステキストの一部である。処理例７７４の中に出現する局所的な高頻度語が“柑橘（かんきつ）類”および“シトロン”であるとすると、番号置換圧縮手段によって処理例７７４のテキストは処理例７７５のように書替えられる。すなわち、“柑橘（かんきつ）類”および“シトロン”はどちらも初回出現時には導入シンボル△、番号、および文字列長を表わす数字がその前に挿入され、２回目以降の出現時には導入シンボル★と初回出現時に番号付けされたものと同じ番号で文字列自体が置換される。
【０２４３】
たとえば、処理例７７３の２行目の最初の“（１）シトロン（…”の部分の“シトロン”の前には△１，８が挿入されているが、これは以下の８バイトを置換対象文字列として番号を１で登録することを表わしている。また、同じ行の次の“シトンの木…”の“シトロン”は★１で置換されているが、これは最も近い△１を自分自身の前に持つ文字列が★１で置換されていることを表わしている。
【０２４４】
導入シンボルは「オフセット置換圧縮手段」同様、入力されたソーステキスト中に存在しない文字列であれば何であっても構わない。また、番号と文字列長を表わす数字は、圧縮効率を考えてその値の範囲を制限する必要がある。この例では、番号を０〜７の８個（３ｂｉｔ）、文字列長３２バイト（５ｂｉｔ）までとしている。
【０２４５】
ここで、番号はテキスト全体で８個しか使えないのではなく、ｍｏｄ−８（７の次はまた０に戻る）で個数制限なしに使用することができる。ただし、一意に伸長するために、★ｄがその前方の最も近くの△ｄ，１以下の１バイトの文字列を指すという制限が必ず守られるようにテキスト置換操作を行なう。
【０２４６】
テキストの置換操作に伴う静的辞書７７６、符号化表７７７の変更も「オフセット置換圧縮手段」と同様である。すなわち、１回目の置換を行なう際は、“△”、“★”のカウントアップ、および置換された各シンボルの静的辞書内でのカウントダウンを行ない、２回目以降の置換では、“★”のカウントアップと置換された各シンボルの静的辞書内でのカウントダウンを行なう。テキスト全体にわたって置換および静的辞書７７８の変更を行なった後静的辞書から周知の手段で符号化表７７９を作成し直す。
【０２４７】
このようにして更新したテキストの処理例７７５を、更新した符号化表７７９により符号化（圧縮）する。ただし、“△”の直後の処理と“★”の直後の処理が通常の場合とは異なる。すなわち、△直後の数字の対に対しては、符号化表による符号化は行なわずに、それぞれを３ｂｉｔ、５ｂｉｔのバイナリの数値に変換し、★の直後の数字に対しては、符号化表による符号化は行なわずに、３ｂｉｔのバイナリ数値にこれを変換する。
【０２４８】
以上のような圧縮法により、番号置換された文字列（２回目以降の出現文字列）は一様に導入シンボルの符号長＋３ｂｉｔで符号化されることになる。導入シンボルの出現回数によりその符号長が異なるが、英和辞典のような局所的な高頻度語がよく出てくるテキストに対してはその符号長を短く抑えることができる。
【０２４９】
また、「オフセット置換圧縮手段」に比べて、何回も同一の置換対象文字列が出現する場合は、置換文字列に対する符号長が「オフセット置換圧縮手段」よりも短いため圧縮効率の点では有利になる。処理例７７Ａに番号置換圧縮を採用せずに、元の静的辞書７７６および符号化表７７７を使って圧縮した場合の符号長と、番号置換圧縮を併用して圧縮した場合の符号長との比較を示す。
【０２５０】
番号置換圧縮を併用する場合に最も重要なことは、「オフセット置換圧縮手段」の場合と同様、局所的な高頻度語をうまく検出することである。すなわち、元の静的辞書で圧縮する場合より少なくとも置換後の符号長が短くなるような置換対象の文字列を見つけ出さなければならない。「番号置換圧縮」においても、元の符号化表から算出される符号長と、置換後の符号長との比較を行ない、置換後の符号長が短くなると予想できるものを選択する。
【０２５１】
以上、処理例に基づいて番号置換圧縮方式の概要を述べた。再び、図３７〜図３９を参照して、より詳細な処理手順を記述する。
【０２５２】
処理は「オフセット置換圧縮手段」の場合と同様、２つの段階に大別される。すなわち、番号カウンタＣを０クリアし（７７０）、元の静的辞書ＳＤに導入シンボル（“△”，０）および（“★”，０）を追加（７７１）しておいた上で、処理の第１段階でテキスト中の置換対象文字列を検出しながら、テキストと静的辞書の更新を行ない（７７２）、第２段階で、更新されたテキストを、更新された静的辞書から作成した符号化表に基づいてエンコードする（７７３）。
【０２５３】
元の静的辞書ＳＤおよびソーステキストＳＴを更新する作業の準備として、項目ごとの圧縮データへのアクセスを想定して、ＳＴを辞典の各項目ごとに分けたもの（Ｓ０、…Ｓｅ）を処理単位として考える（７２１）。項目ごとのテキストＳｎをｎ＝０からｅまで順次処理する（７２２）。まず、Ｓｎを（更新されていない元の）ＳＤの符号化表でエンコードし（７２３）、Ｓｎのエンコードシンボル列ＳＳ（０）＝“ｓ０、ｓ１、…、ｓｐ”を抽出する（７２４）。
【０２５４】
ＳＳ（０）に関する置換・更新処理７２５は図３８で示す処理７２５１以下で示される。ＳＳ（ｊ）は現在の処理対象範囲を示している。処理が進むにつれて、ｊの値は増やされ、処理対象範囲は１エンコードシンボルずつ後方に縮められる。ＳＳ（ｐ−１）の処理が終わった時点で、辞典１項目（ＳＳ（０））に関する置換・更新処理が終了する（７２５１）。
【０２５５】
処理範囲ＳＳ（ｊ）＝“ｓｊ、…、ｓｉ、…、ｓｐ”に対して、ＳＳ（ｊ）内に局所的な高頻度語となる文字列ｓｔｒ（ｉ）が存在するかどうかを検査し、存在すれば、特定したｓｔｒ（ｉ）を更新するとともに、静的辞書の修正を行なう。この過程では、まず、ｉ＝ｐとおいて（７１５２）、ＳＳ（ｊ）内の最長文字列から順に局所的な高頻度語がないかどうか検査し、見つかればｊの位置をｉ＋１に更新して、残りの処理範囲ＳＳ（ｊ）の処理を行なう。ｉ＝ｊ＋１、すなわちＳＳ（ｊ）の最初の２シンボルになるまでｓｔｒ（ｉ）を縮めても見つからない場合は、処理範囲を１シンボル分縮めて、再度ＳＳ（ｊ＋１）に対する処理を行なう（７２５３）。
【０２５６】
ここまでは、「オフセット置換圧縮手段」と同様である。
ｓｔｒ（ｉ）が局所的な高頻度語になるかどうかの検査は、まず、処理の無駄を省くために符号化表からｓｔｒ（ｉ）の符号長を計算し、これが置換符号長よりも短くならない場合は、たとえ前方に一致する文字列があっても圧縮効率が改善されないので、置換・圧縮更新処理は行なわず、処理対象範囲を次に進める（７２５４）。置換符号長は処理例の場合は２６ｂｉｔ（想定導入シンボル長（７７＋８）ｂｉｔ、番号（３＊２）ｂｉｔ、文字列長５ｂｉｔ）に設定しているが、テキストによりこれらの値は最適な値が異なる。
【０２５７】
ｓｔｒ（ｉ）の符号長が置換符号長より短い場合は、これを局所的な高頻度語の候補と見なして、（更新されていない元の）ＳＤ上の現在位置から前方にある適当な範囲内の文字列に対して、ｓｔｒ（ｉ）と同一の文字列が存在するか否かサーチする。元のソーステキスト上でＰＯＳバイト手前に同一文字列が見つかった場合は置換処理を次のステップに進め、見つからなければ、１エンコードシンボル分短くしたｓｔｒ（ｉ−１）に対して再度サーチを行なう（７２５５）。
【０２５８】
処理７２５５で、ｓｔｒ（ｉ）と同一の文字列が元のソーステキスト上でＰＯＳバイト手前に見つかった場合は、さらに、更新テキストでＰＯＳ位置に対応する位置の直前に△Ｃ′，１または★Ｃ′が配置されておらず（すなわち置換されていない文字列であり）、かつ更新テキスト上でＰＯＳ位置に対応する位置以降に△Ｃが存在しなければ（７２５６、７２５７）、これから番号付けしようとする文字列が、置換対象文字列の位置から前方の最も近い位置にあることを保証できるので、ＰＯＳ位置の直前に△Ｃ，１（１＝｜ｓｔｒ（ｉ）｜）を挿入して、ＰＯＳ位置以下の１バイトの文字列をＣ番に番号登録するとともに、ｓｔｒ（ｉ）を★Ｃに置換する（７２５９）。
【０２５９】
一方△Ｃが存在すれば、前回Ｃ番で番号付けしたより前の部分に遡ってサーチしてしまったことになり、ここで、Ｃの番号付けを行なうと、以降の★Ｃがどちらの△Ｃに対応するものかわからなくなってしまう。すなわち、これから番号付けしようとする文字列が、置換対象文字列の位置から前方の最も近い位置にあることが保証できなくなるため、この場合はｓｔｒ（ｉ）に対する処理を止めて、ｓｔｒ（ｉ−１）に対する処理を行なう（７２５７）。
【０２６０】
処理７２５９でテキストが修正された場合は、テキストの変更に伴う静的辞書の修正を行ない（７２５Ａ）、Ｃ番の登録が済んだので、番号カウンタをｍｏｄ（８，（Ｃ＋１））として次に進め（７２５Ｂ）、処理対象範囲ｊをｉ＋１に更新して、未処理部分に対する処理を継続する。
【０２６１】
処理７２５６でＰＯＳ位置に対応する更新テキストの位置の直前に△Ｃ′，１または★Ｃ′が配置されている（すなわち既に置換または番号登録された文字列である）場合は、△の最近の位置の制約を守るために、△Ｃ′がＰＯＳ対応位置以降に出現しないことを確認した上で（７２５８）、ｓｔｒ（ｉ）を★Ｃ′で置換し（７２５Ｃ）、静的辞書の対応する箇所を修正する（７２５Ｄ）。
【０２６２】
この処理過程では置換処理されるものが以前番号付けされたＣ′であるため、Ｃは更新せずに、処理対象範囲だけをｉ＋１に進めて残りの部分ＳＳ（ｉ＋１）に対する処理を行なう。
【０２６３】
以上の処理を、図４０で示された処理例７７４の“ｃｉｔｒｏｎ”に代用するテキストを例にとって今一度説明しておく。
【０２６４】
今Ｃ＝１で、２回目に出現するＳＳ（１１）のｓｔｒ（１３）＝‘シ’‘ト’‘ロン’まで処理が進んだとする。処理７２５５により、ＰＯＳ＝２９バイト手前の同一の文字列を特定する。処理７２５６、処理７２５７の制限をクリアして、処理７２５９に進み、このタイミングで、最初の“シトロン”の手前に△１，８が置かれ、２番目の“シトロン”（＝ｓｔｒ（１３））が★１に置換される。静的辞書がアップデートされ、Ｃ＝２として、“の木（３）…”以降に処理対象範囲が移る。Ｃ＝２のまま、３回目に出現する“シトロン”がｓｔｒにセットされたとき、処理７２５５により、ＰＯＳ＝３１バイト手前に同一の文字列が特定されるが、これは更新テキストにおいては既に★１で置換されている（処理７２５６のＹｅｓの場合に相当）ので、３回目に現れる“シトロン”の★１に置換される。
【０２６５】
以上が「静的辞書とソーステキストの更新」処理の内容である。
次に、図３９を参照して、更新したソーステキストを更新した静的辞書でエンコードする手段について説明する。圧縮は、静的辞書から符号化表を作成し、符号化表を参照しながら文字列をビット列で置き換える周知の方法を用いればよいが、番号置換に依存する部分だけ別個の処理を行なう必要がある。
【０２６６】
１シンボルずつ、終了シンボルが出現するまで（７３２）、周知の方法によってエンコードする（７３１）。ただし、エンコードシンボルが導入シンボル“★”である場合（７３３）は、それに続く、アスキー数字ｄ１を読込みこれを３ｂｉｔでバイナリパックして、次の部分のエンコードに移る（７３５）。“★”でなく、“△”である場合は、それに続くアスキー数字ｄ１、ｄ２の各値をそれぞれ３ｂｉｔ、５ｂｉｔにバイナリパックして、次の部分のエンコードに移る（７３６）。
【０２６７】
以上がエンコード処理の内容である。
次に図４４を参照して、「番号置換圧縮手段」により圧縮されたデータの伸長手段の実現例を説明する。番号置換伸長手段も、前述のエンコード処理と同様、基本的には周知の方法を用いて伸長を行なう。番号置換圧縮に依存して変更した部分だけが、番号置換伸長処理においても異なることになる。
【０２６８】
伸長したシンボルがデータの終了コードになるまで（９１）、符号化表に基づいて、周知の方法により１シンボルずつ伸長する（９０）。
【０２６９】
デコードシンボルが“★”でも“△”でもない場合は、デコードの結果の文字列を出力（９９）して次のデータの伸長に移る。デコードシンボルが“△”であれば、次の８ｂｉｔの圧縮データを読み飛ばし、次のデータの伸長に移る。
【０２７０】
デコードシンボルが“★”であれば、圧縮データの次の３ｂｉｔを読込み、番号ｄ１を得る（９３）。ここで、これまでの処理において既に手前方向で最初に出現する“△ｄ１，ｌｅｎ”以下のｌｅｎバイトを伸長済みならば（９４）、そのｌｅｎバイト分の文字列をデコード結果として出力し（９６）、次のデータの伸長に移る。
【０２７１】
“△ｄ１，ｌｅｎ”以下のｌｅｎバイトが未伸長ならばさらに手前の部分をデコードして、現在位置から手前方向で最初に“△ｄ１，ｌｅｎ”が出現する箇所とそれ以下のｌｅｎバイトの文字列を確定させた上で（９５）、そのｌｅｎバイト分の文字列をデコード結果として出力し（９６）、次のデータの伸長に移る。
【０２７２】
以上の伸長アルゴリズムでは、置換データ（★ｄ）が出現したとき、対応する△が未伸長であれば、その都度遡って伸長を行なわねばならないオーバヘッドはあるものの、基本的には特定の辞典項目だけを伸長できるようになっており、「番号置換伸長手段」も辞典モジュールの検索性能を損ねない利点を持ち合わせているといえる。
【０２７３】
以上のように、実施の形態２に係るテキスト圧縮装置によれば、大容量の固定の辞典テキストデータを必要とする装置（電子辞書など）において、辞典テキストデータを効率よく圧縮・伸長をする具体的な手段を提供することができる。特に、対象となる辞典テキストが複数の異なる記述部分から構成されている場合（英和辞典など）、共通の構成要素を持つ複数個の辞典テキストを圧縮対象とする場合（英和、和英辞典など）には、それぞれ、請求項５、６の手法により圧縮率を高めることができる。
【０２７４】
また本装置により、辞典テキストの圧縮メモリ容量を大幅に削減して製品のコストダウンを図ることができる。
【０２７５】
さらに本装置によれば、大容量の固定の辞典のテキストデータを必要とする装置（電子辞書など）において、特にその装置が、全体としての出現頻度は低いが、局所的には集中的に出現する文字列が多数存在するような辞典テキスト（英和辞典など）を扱う場合に、辞典テキストの検索性能をあまり落とすことなく、圧縮メモリ容量を大幅に削減して製品のコストダウンを図ることができる。
【図面の簡単な説明】
【図１】実施の形態１に係るテキスト圧縮用辞書作成装置の全体構成説明図である。
【図２】実施の形態１に係るテキスト圧縮用辞書作成装置の頻度ガイドライン算出手段の説明図である。
【図３】実施の形態１に係るテキスト圧縮用辞書作成装置の長文字列切出手段の説明図である。
【図４】実施の形態１に係るテキスト圧縮用辞書作成装置の長文字列切出手段による処理例の説明図である。
【図５】実施の形態１に係るテキスト圧縮用辞書作成装置の長文字列切出手段による処理例の説明図である。
【図６】実施の形態１に係るテキスト圧縮用辞書作成装置の効率指標関数値順文字列切出手段の説明図である。
【図７】実施の形態１に係るテキスト圧縮用辞書作成装置の効率指標関数値順文字列切出手段による処理例の説明図である。
【図８】実施の形態１に係るテキスト圧縮用辞書作成装置の１文字シンボル抽出手段の説明図である。
【図９】実施の形態１に係るテキスト圧縮用辞書作成装置のシンボル削除のための文字列切出手段の説明図である。
【図１０】実施の形態１に係るテキスト圧縮用辞書作成装置のシンボル削除のための文字列切出手段による処理例の説明図である。
【図１１】実施の形態１に係るテキスト圧縮用辞書作成装置のシンボル分解手段の説明図である。
【図１２】実施の形態１に係るテキスト圧縮用辞書作成装置のシンボル分解手段による処理例の説明図である。
【図１３】実施の形態１に係るテキスト圧縮用辞書作成装置のシンボル分解手段の説明図である。
【図１４】実施の形態２に係るテキスト圧縮装置の全体構成説明図である。
【図１５】実施の形態２に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の説明図である。
【図１６】実施の形態２に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図１７】実施の形態２に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図１８】実施の形態２に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図１９】実施の形態２に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図２０】実施の形態２に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図２１】実施の形態２に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図２２】実施の形態２に係るテキスト圧縮装置の辞書切換圧縮伸長手段の説明図である。
【図２３】実施の形態２に係るテキスト圧縮装置の共有辞書作成手段の説明図である。
【図２４】実施の形態２に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図２５】実施の形態２に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図２６】実施の形態２に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図２７】実施の形態２に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図２８】実施の形態２に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図２９】実施の形態２に係るテキスト圧縮装置の共有辞書切換圧縮伸長手段の説明図である。
【図３０】実施の形態２に係るテキスト圧縮装置のオフセット置換圧縮手段の説明図である。
【図３１】実施の形態２に係るテキスト圧縮装置のオフセット置換圧縮手段の説明図である。
【図３２】実施の形態２に係るテキスト圧縮装置のオフセット置換圧縮手段の説明図である。
【図３３】実施の形態２に係るテキスト圧縮装置のオフセット置換圧縮手段の説明図である。
【図３４】実施の形態２に係るテキスト圧縮装置のオフセット置換圧縮手段の処理例の説明図である。
【図３５】実施の形態２に係るテキスト圧縮装置のオフセット置換圧縮手段の処理例の説明図である。
【図３６】実施の形態２に係るテキスト圧縮装置のオフセット置換圧縮手段の処理例の説明図である。
【図３７】実施の形態２に係るテキスト圧縮装置の番号置換圧縮手段の説明図である。
【図３８】実施の形態２に係るテキスト圧縮装置の番号置換圧縮手段の説明図である。
【図３９】実施の形態２に係るテキスト圧縮装置の番号置換圧縮手段の説明図である。
【図４０】実施の形態２に係るテキスト圧縮装置の番号置換圧縮手段の処理例の説明図である。
【図４１】実施の形態２に係るテキスト圧縮装置の番号置換圧縮手段の処理例の説明図である。
【図４２】実施の形態２に係るテキスト圧縮装置の番号置換圧縮手段の処理例の説明図である。
【図４３】実施の形態２に係るテキスト圧縮装置のオフセット置換伸長手段の説明図である。
【図４４】実施の形態２に係るテキスト圧縮装置の番号置換伸長手段の説明図である。
【符号の説明】
１１１  頻度ガイドライン算出手段
１１２  長文字列切出手段
１１３  １文字シンボル抽出手段
１１４  効率指標関数値順文字列切出手段
１１５  シンボル削除のための文字列切出手段
１１６  シンボル分解手段
２１１  構成要素種類ごとの辞書作成手段
２１２  辞書切換圧縮・伸長手段
２１３  共有辞書作成手段
２１４  共有辞書切換圧縮・伸長手段
２１５  オフセット置換圧縮手段
２１６  オフセット置換伸長手段
２１７  番号置換圧縮手段
２１８  番号置換伸長手段
【図１】
0003566441.tif 000002
【図２】
0003566441.tif 000003
【図３】
0003566441.tif 000004
【図４】
0003566441.tif 000005
【図５】
0003566441.tif 000006
【図６】
0003566441.tif 000007
【図７】
0003566441.tif 000008
【図８】
0003566441.tif 000009
【図９】
0003566441.tif 000010
【図１０】
0003566441.tif 000011
【図１１】
0003566441.tif 000012
【図１２】
0003566441.tif 000013
【図１３】
0003566441.tif 000014
【図１４】
0003566441.tif 000015
【図１５】
0003566441.tif 000016
【図１６】
0003566441.tif 000017
【図１７】
0003566441.tif 000018
【図１８】
0003566441.tif 000019
【図１９】
0003566441.tif 000020
【図２０】
0003566441.tif 000021
【図２１】
0003566441.tif 000022
【図２２】
0003566441.tif 000023
【図２３】
0003566441.tif 000024
【図２４】
0003566441.tif 000025
【図２５】
0003566441.tif 000026
【図２６】
0003566441.tif 000027
【図２７】
0003566441.tif 000028
【図２８】
0003566441.tif 000029
【図２９】
0003566441.tif 000030
【図３０】
0003566441.tif 000031
【図３１】
0003566441.tif 000032
【図３２】
0003566441.tif 000033
【図３３】
0003566441.tif 000034
【図３４】
0003566441.tif 000035
【図３５】
0003566441.tif 000036
【図３６】
0003566441.tif 000037
【図３７】
0003566441.tif 000038
【図３８】
0003566441.tif 000039
【図３９】
0003566441.tif 000040
【図４０】
0003566441.tif 000041
【図４１】
0003566441.tif 000042
【図４２】
0003566441.tif 000043
【図４３】
0003566441.tif 000044
【図４４】
0003566441.tif 000045