JP3566441B2 - テキスト圧縮用辞書作成装置 - Google Patents
テキスト圧縮用辞書作成装置 Download PDFInfo
- Publication number
- JP3566441B2 JP3566441B2 JP01389296A JP1389296A JP3566441B2 JP 3566441 B2 JP3566441 B2 JP 3566441B2 JP 01389296 A JP01389296 A JP 01389296A JP 1389296 A JP1389296 A JP 1389296A JP 3566441 B2 JP3566441 B2 JP 3566441B2
- Authority
- JP
- Japan
- Prior art keywords
- text
- dictionary
- character string
- compression
- frequency
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99942—Manipulating data structure, e.g. compression, compaction, compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Document Processing Apparatus (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Description
【発明の属する技術分野】
本発明は、ワードプロセッサ(以下「ワープロ」と省略する。)や電子手帳といったジャンルの情報機器に関する固定のテキストデータを扱うテキスト圧縮用辞書作成装置に関する。
【0002】
【従来の技術】
電子辞書機能が搭載されたワープロ、パーソナルコンピュータ(以下、「パソコン」と省略する。)、電子手帳などの情報機器では、機器の内部に辞書の意味が記述された大容量の固定テキストデータを記憶しておかなければならない。
【0003】
こういったジャンルの商品で取り扱うテキストデータは、大抵の場合、数メガバイトオーダの容量のデータになる場合が多い。これらデータはROM化、ハードディスク化されることになるが、テキスト圧縮によって、ROMの点数を減らすなり、ハードディスクの空き領域を確保するなりの工夫を施さないと、コストパフォーマンスを向上させることはできない。
【0004】
従来のテキスト圧縮法は主として次のように分類される。
(1) コードの空き領域に、頻出するコード列のコードを割り当てるタイプのもの(特開平2−271723)
(2) 別途用意された単語辞書の辞書番号でソーステキスト中の文字列を置換するタイプのもの(特開平5−46357他)
(3) 頻出する文字列コードを別のコードで置換するタイプのもの(特開平3−206533)
(4) 汎用の圧縮方法(ハフマン、算術、LZなど)を適用するタイプのもの(PRENTICE HALL Advanced Reference Series,“Text Compression”, 1991 )
これらの手法は、どの方法も一長一短で、限られたメモリとCPUパワーの下で大容量の固定テキストを高能率に圧縮するにはいずれも決め手に欠けるものである。
【0005】
(1)は、特定コードのみで圧縮対象のテキストが記述されている場合はよいが、コードの空き領域自体に限られたスペースしかないため短いコードに置換できる文字列の数が限られ、圧縮率はよくない。複数のコードや外字などの特殊コードが混在する場合はほとんど圧縮できないといってよい。
【0006】
(2)は、たとえば仮名漢字変換モジュールなどの別のアプリケーションが存在する場合、仮名漢字変換用の辞書の見出し語と一致するソーステキスト中の文字列を辞書の見出し番号で置換することにより圧縮する手法である。
【0007】
この方法では、辞書見出しに存在しない文字列は圧縮できないし、辞書見出しと一致する場合でもその文字列長が辞書番号を表現するためのビット数(通常16ビット前後)より大きくないと圧縮できないため、符号化表こそ不要なものの概して圧縮率はよくない。
【0008】
(3)は、固定テキストに依存する方法であり、頻度に偏りがあるような長い文字列が多く含まれるテキストの圧縮に向いた方法である。
【0009】
ただ、単に高頻度語を他のコードで置換するだけでは、(1)の手法に対して指摘したように、複数のコードが混在する場合には置換される文字列の数が限定され圧縮率はよくない。
【0010】
また、高頻度語と置換コードの置換表(符号化表)が必要であるため、置換表のサイズを調整するための工夫がないと、置換表が大きくなり圧縮率の低下を招く。さらに、何らかの方法で切出された静的辞書に対してハフマン等の統計手法を用いる考え方を示したものはあるが、具体的にどのような手段で固定テキストから静的辞書を構築すればよいか明示しているものはない。
【0011】
(4)にはCPU性能とRAM容量に制限がなければ、高圧縮率を達成できる手法もある。たとえば、高次の統計モデルなどがこれに相当する。
【0012】
しかし、小型の情報機器にそのような機能を搭載することはコスト的に無理であること、処理速度が遅いことなどから現実的ではない。
【0013】
また、統計情報に基づく汎用手法(単なるハフマン法、算術圧縮法など)はいずれも圧縮対象のコードが1バイト(1文字)であるため、高い圧縮率は望めない。動的辞書ベースの圧縮法(LZ系統の圧縮法)は、圧縮対象が可変長であるが、繰返し出現する文字列パターンが少ない場合や作業領域を超えて分散しているような場合には、圧縮率またはRAM容量が犠牲となる。
【0014】
最近、辞書ベースの手法と統計手法を融合させた汎用手法もいくつか提案されている(LHAなど)。
【0015】
これらにしても「どんなデータが入力されても処理可能」なユニバーサル圧縮であるという立場をとっているため、予め頻度情報を計算しておくことはできない。したがって融合手法も、予め頻度情報を付与する本発明の手法に比べて、大容量の固定データに関しては圧縮率が悪くなる。
【0016】
以上の従来技術は、一般的な「テキスト」を圧縮対象とする場合に提唱されているものであるが、圧縮対象を「電子辞書に搭載される辞典の意味テキスト(見出し語以外の部分)」に絞ってテキスト圧縮を工夫改良したものは見受けられない。
【0017】
【発明が解決しようとする課題】
本発明が解決しようとする課題は、大容量の固定テキストの圧縮率を飛躍的に向上させることである。具体的には以下のとおりである。
【0018】
第1の課題は、大容量の固定テキストに対して高い圧縮率が得られるような「圧縮用の静的辞書」を構築するための具体的な手段を提供することである。
【0019】
第2の課題は、大容量の固定テキストに対して、高い圧縮率が得られるような「圧縮用の静的辞書」を構築するための具体的な手段を提供することである。第1の課題とはアプローチが異なる。
【0020】
第3の課題は、大容量の固定テキストに対して、構築された「圧縮用の静的辞書」自体の容量を、圧縮率の低下を抑えながら削減し、圧縮データおよび回答用テーブルデータのトータル容量を小さくするための具体的な手順を提供することである。
【0021】
第4の課題は、大容量の固定テキストに対して、構築された「圧縮用の静的辞書」自体の容量を、圧縮率の低下を抑えながら削減し、圧縮データおよび伸長用テーブルデータのトータル容量を小さくするための具体的な手順を提供することである。第3の課題とはアプローチが異なる。
【0022】
本発明が解決しようとする今一つの課題は、大容量の辞典の意味テキストの圧縮率を飛躍的に向上させることである。
【0023】
すなわち、従来技術で示した手法はいずれも「大容量の固定テキスト」という制限をうまく利用したものではないため、「大容量の固定テキスト」を最も効果的に圧縮する手法と考えられる「可変長シンボルの静的辞書による統計ベースの圧縮」と比べて圧縮率が低い。「可変長シンボルの静的辞書による統計ベースの圧縮」では、圧縮効率のよい静的辞書をうまく切出す方法、静的辞書自体のサイズを抑える方法が重要なファクタとなるが、本発明ではこれらの手法は既知であるとして扱い、主として「可変長シンボルの静的辞書による統計ベースの圧縮」手法だけでは限界となる部分を「辞典の意味テキスト固有の性質」を利用することによって補い、さらなる圧縮率の向上を目指す。
【0024】
具体的には、圧縮対象テキストに対して単一の静的辞書を構築するだけでは、必ずしも効率的な圧縮結果が得られるとは限らない以下のような場合に対して静的辞書のアプローチを前提としながら、さらなる圧縮率向上を図ることを課題とする。
【0025】
(1) 圧縮対象テキストが記述内容の異なる複数の部分から構成される場合。たとえば、「発音」「訳」「例文」「変化形」といった異なる記述部分から構成される「英和辞典の意味テキスト」。
【0026】
(2) 圧縮対象テキストが複数個ある場合。たとえば、「英和辞典」「和英辞典」「国語辞典」などをまとめて圧縮対象とする場合。
【0027】
(3) 静的辞書に登録されなかったシンボルが、テキストのある箇所にだけ集中して出現する場合。たとえば、英和辞典の“citron”という項目付近には“citrus”、“citric acid ”などの関連項目が配置されており、それらの意味テキスト中には、全体としては頻度の低い“柑橘類”という文字列が頻繁に出現するという場合。
【0028】
具体的な課題は以下のとおりである。
すなわち、第5の課題は、テキストが記述内容の異なる複数の部分から構成されている場合でも、高い圧縮率が得られるような「圧縮用の静的辞書」を構築し、これに基づいて圧縮伸長を行なうための具体的な手順を提供することである。
【0029】
第6の課題は、種類の異なる複数個の辞典の意味テキストに対して、高い圧縮率が得られるような「圧縮用の静的辞書」を構築し、これに基づいて圧縮伸長を行なうための具体的な手順を提供することである。
【0030】
第7の課題は、大容量の辞典の大容量の辞典の意味テキストを予め構築された「圧縮用の静的辞書」を用いて圧縮する場合、静的辞書のシンボルとしては登録されなかった文字列で、ある辞書項目の周辺でのみ出現頻度が高くなる文字列を、その局所的な高頻度性を利用した圧縮法により圧縮し、単に圧縮用静的辞書のみを使う場合よりも圧縮効率を高め、圧縮データの容量を小さくするための具体的な手順を提供することである。
【0031】
第8の課題は、大容量の辞典の意味テキストを予め構築された「圧縮用の静的辞書」を用いて圧縮する場合、静的辞書のシンボルとしては登録されなかった文字列で、ある辞書項目の周辺でのみ出現頻度が高くなる文字列を、その局所的な高頻度性を利用した圧縮法により圧縮し、単に圧縮用静的辞書のみを使う場合よりも圧縮効率を高め、圧縮データの容量を小さくするための具体的な手順を提供することである。第7の課題とはアプローチが異なる。
【0032】
【課題を解決するための手段】
請求項1に記載の発明は、テキストを圧縮する際に参照される辞書を作成するためのテキスト圧縮用辞書作成装置であって、目標圧縮率に対して、2以上の文字列長の各々について前記目標圧縮率を満足するためにテキスト中で出現が要求される頻度のガイドラインを算出する頻度ガイドライン算出手段と、テキストから、文字列長2以上の文字列であって、対応する文字列長の頻度ガイドラインを満たす頻度で出現するものを、その実頻度とともに文字列長の降順に切出して第1の静的辞書を生成するとともに、前記頻度ガイドラインを満たさない切残しのテキストの集合を生成する長文字列切出手段と、前記切残しのテキストの集合から文字列長1の文字ごとにその頻度をカウントして第2の静的辞書を生成する1文字シンボル抽出手段と、前記第1の静的辞書に前記第2の静的辞書を追加して最終的静的辞書を生成する最終的静的辞書構築手段とを含むことを特徴とする。
【0033】
請求項2に記載の発明は、テキストを圧縮する際に参照される辞書を作成するためのテキスト圧縮用辞書作成装置であって、目標圧縮率に対して、2以上の文字列長の各々について前記目標圧縮率を満足するためにテキスト中で出現が要求される頻度のガイドラインを算出する頻度ガイドライン算出手段と、テキストから、文字列長2以上の文字列であって、対応する文字列長の頻度ガイドラインを満たす頻度で出現するものを、その実頻度とともに文字列長と実頻度との積の降順に切出して第1の静的辞書を生成するとともに、前記頻度ガイドラインを満たさない切残しのテキストの集合を生成する効率指標関数値順文字列切出手段と、前記切残しのテキストの集合から文字列長1の文字ごとにその頻度をカウントして第2の静的辞書を生成する1文字シンボル抽出手段と、前記第1の静的辞書に前記第2の静的辞書を追加して最終的静的辞書を生成する最終的静的辞書構築手段とを含むことを特徴とする。
【0034】
請求項3に記載の発明は、請求項1または請求項2に記載のテキスト圧縮用辞書作成装置であって、前記最終的静的辞書中の文字列であって、前記最終的静的辞書中の他の文字列の組合せであるものを、最も長い文字列が含まれる複数個の他の文字列に分解し削除するとともに、当該他の文字列の実頻度を前記削除された文字列の頻度だけそれぞれ増加させるための文字列切出手段をさらに含むことを特徴とする。
【0035】
請求項4に記載の発明は、請求項1または請求項2に記載のテキスト圧縮用辞書作成装置であって、前記最終的静的辞書中の文字列であって、前記最終的静的辞書中の他の文字列の組合せであるものを、圧縮率への寄与が最も大きくなるような複数個の他の文字列に分解し削除するとともに、当該他の文字列の実頻度を前記削除された文字列の頻度だけそれぞれ増加させるための文字列切出手段をさらに含むことを特徴とする。
【0036】
本発明の他の局面に従うと、テキスト圧縮装置は、それぞれ属性の異なる複数種類の構成要素から構成されるテキストに対して、各構成要素種類ごとに前記テキストを分割し、分割された各々の構成要素種類のテキストに対して、構成要素種類の境界に含まれる構成要素種類の切換えを指示するシンボルを含む圧縮辞書を作成する辞書作成手段と、前記辞書作成手段により作成された辞書を、前記シンボルに遭遇するたびに前記シンボルに応じて切換えながら、圧縮対象のテキストの圧縮伸長を行なう辞書切換圧縮伸長手段とを含むことを特徴とする。
【0037】
本発明のさらに他の局面に従うと、テキスト圧縮装置は、各々がそれぞれ属性の異なる複数種類の構成要素から構成される複数のテキストであって、少なくとも一部の構成要素種類を共有する複数のテキストに対して、各構成要素種類ごとに前記複数のテキストを分割し、分割された各々の構成要素種類のテキストに対して、構成要素種類の境界に含まれる構成要素種類の切換えを指示するシンボルを含む共有辞書を作成する共有辞書作成手段と、前記共有辞書作成手段により作成された共有辞書を、前記シンボルに遭遇するたびに前記シンボルに応じて切換えながら、圧縮対象のテキストの圧縮伸長を行なう共有辞書切換圧縮伸長手段とを含むことを特徴とする。
【0038】
本発明のさらに他の局面に従うと、テキスト圧縮装置は、テキスト中の局所的な高頻度語を、2回目の出現以降において、前記テキスト中には存在しない文字列である導入シンボルと当該高頻度語の1回目の出現位置と当該高頻度語の当該出現位置からの文字列長とで置換して符号化するオフセット置換圧縮手段と、前記オフセット置換圧縮手段により圧縮されたデータを、前記導入シンボル後の前記1回目の出現位置と前記出現位置からの前記文字列長とにより指定される語に置換することにより伸長して元のテキストに復元するオフセット置換伸長手段とを含むことを特徴とする。
【0039】
本発明のさらに他の局面に従うと、テキスト圧縮装置は、テキスト中の局所的な高頻度語について、初回出現時に番号を付与し、2回目の出現以降において、前記テキスト中には存在しない文字列である導入シンボルと付与された前記番号とで置換して符号化する番号置換圧縮手段と、前記番号置換圧縮手段により圧縮されたデータを、前記導入シンボルと前記番号とにより指定される語に置換することにより伸長して元のテキストに復元する番号置換伸長手段とを含むことを特徴とする。
【0040】
【発明の実施の形態】
以下、本願の発明を実施の形態1と実施の形態2とにより、図面を参照して説明する。
【0041】
[実施の形態1]
図1は、実施の形態1にかかるテキスト圧縮用辞書作成装置の全体構成説明図である。本発明を実施するためのブロック構成の一例が装置の構成と対応付けて記述されている。
【0042】
図1を参照して、入力手段14はキーボード、OCR(光学的文字読取装置)、ペン等周知の入力装置および本体側とデータのやり取りを行なう入力インタフェース12から構成される。本発明の入力である、圧縮対象の固定の「ソーステキスト」は入力手段を用いて入力される。
【0043】
表示手段15は、液晶ディスプレイ、CRT(Cathode Ray Tube) など周知の出力装置および本体側とデータのやり取りを行なう出力インタフェース13から構成される。本発明の出力である「ソーステキストに対する圧縮用静的辞書」の内容や各種の処理結果は表示手段を用いて表示される。
【0044】
記憶手段16は、ROM(Read−Only Memory)、RAM(Random Access Memory)で構成される記憶装置11への記憶、アクセスを司るための周知の手段である。ROM、RAMへは入出力データ、処理途中の一時的なデータ、および処理のロジックを表わすデータなどが格納される。
【0045】
頻度ガイドライン算出手段111は、入力されたソーステキストおよび圧縮仕様に対して、出力すべき圧縮用静的辞書の各シンボルが文字列長ごとにどれくらいの頻度で切出されれば、与えられた圧縮仕様を満足できるかを算出するためのロジックである。これは記憶装置11のROMの一部にCPU(中央処理装置)10に処理可能な形式で格納されている。
【0046】
長文字列切出手段112は、入力されたソーステキストおよび文字列長ごとの指定頻度に対して、出力すべき圧縮用静的辞書の文字列長2以上のシンボルをその実頻度とともにソーステキストから文字列長降順に切出し、同時に指定頻度を満たさない切残しのテキストの集合を生成するためのロジックである。長文字列切出手段112は記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0047】
1文字シンボル抽出手段113は、入力されたテキストに対して文字列長1の文字の頻度をカウントするためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0048】
効率指標関数値順文字列切出手段114は、入力されたソーステキストおよび文字列長ごとの指定頻度に対して、出力すべき圧縮用静的辞書の文字列長2以上のシンボルをその実頻度とともにソーステキストから文字列長×出現頻度の降順に切出すためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0049】
シンボル削除のための文字列切出手段115は、一旦生成した圧縮用静的辞書の中の特定のシンボルを、なるべく長い他のシンボルが含まれるように複数個の他のシンボルに分解し削除することにより、ソーステキストの圧縮容量の増大を極力抑えながら、元の圧縮用静的辞書の容量を削減するためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0050】
シンボル分解手段116は、一旦生成した圧縮用静的辞書中の特定のシンボルを圧縮率への寄与が最も大きくなるような静的辞書中の他の複数のシンボルに分解削除することにより、ソーステキストの圧縮容量の増大を極力抑えながら、元の圧縮用静的辞書の容量を削減するためのロジックである。記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0051】
計算・制御手段17は他の手段を制御しながら、記憶装置中のデータを読出してそのロジックを解釈実行するための手段である。CPU10が対応する機器となる。
【0052】
以下本発明に固有な111〜116の各手段を実施するための方法を述べる。
図2は、実施の形態1に係るテキスト圧縮用辞書作成装置の頻度ガイドライン算出手段の説明図である。
【0053】
図2を参照して、頻度ガイドライン算出手段の入力は、「静的辞書の予定語数(シンボル数)SN」、「目標圧縮率RT(0<RT<1)」、「符号化係数(β、γ)」、「シンボルの最大文字列長N」であり、出力は「目標圧縮率を満たすために必要となる、文字列長Li(i=N、N−1、...、2)のシンボルに対する頻度の最小値Gi」である。
【0054】
この出力結果を目安とすれば、「長文字列切出手段」あるいは「効率指標関数値順文字列切出手段」の入力である「各シンボル長に対する指定頻度値(=頻度の最小値)」を与えることができる。
【0055】
文字列長Liのシンボルに対する頻度の最小値Giを算出するための具体的な方法の一例として、図2に示す「評価条件式(1)」を用い、この条件式を満たすGiを図2の「算出方法」に従って計算する方法がある。
【0056】
評価式(1)の左辺の分母は、長さLiの特定のシンボルSがGi回ソーステキスト中に出現する場合、Sがソーステキスト中で占めるバイト数であり、分子はSが圧縮されて長さL′(<Li)の場合符号S′に符号化された場合、圧縮データ中に占めるS′のバイト数を示す。したがって、左辺の値はSに関する圧縮率を表しているので、これは入力された「目標圧縮率」RT(=式右辺)以下でなければならない。
【0057】
左辺分子が圧縮データ中のバイト数を示す理由は以下のとおりである。
まず、統計的な圧縮を行なう場合、シャノンの情報量の定義により、データの出現確率がpであればそのデータを識別するためのビット数は、−log(p)ビットとなる。ここで、静的辞書におけるSの出現確率は、静的辞書のすべてのシンボルの頻度の総和Fsumに対するSの頻度Giの割合で表わされる。静的辞書の規模、対象となるソーステキストの種類に依存するが、静的辞書の規模に応じておおよそのFsumを与えることができれば、Sを識別するためのビット数、すなわち、統計圧縮手法適用後の理論的なS′の符号長は、−log(Gi/Fsum)ビットで与えられることになる。
【0058】
本手法考案時の種々の実験結果から、300K〜3Mバイトの規模の通常のテキストデータに対して、シンボル数が10K程度である圧縮用静的辞書の頻度の総和Fsumは、Fsum=α*SN、(α=20〜60程度)であることがわかっている。ここでは、αの値を「頻度総和係数」と呼ぶ。αの値(すなわちFsumの値)をソーステキストから、静的辞書を構成する前に精度よく推定する方法は困難であるため、ここでは経験値として特定の値をセットする方式にしている。
【0059】
以上のことから、式(1)の左辺分子第2項は圧縮テキスト中に占めるS′の総バイト数を表わしていることがわかる。
【0060】
圧縮テキストを伸長して元のソーステキストに戻すためには、静的辞書を用いて圧縮する場合、静的辞書に対応する伸長用のテーブルが別途必要となる。伸長用テーブルのサイズは符号化方式に依存するため、「圧縮伸長モジュール」により異なる。したがって、圧縮用静的辞書を利用する「伸長モジュール」のデータ構造から、シンボル1個当りのサーチ用テーブルサイズとシンボルの文字列を格納する場合サイズとをそれぞれ見積もっておけば、伸長用データに占めるSのバイト数が算出できる。
【0061】
シンボル数1個当りのサーチ用テーブルの大きさを表わす係数をβ、シンボルの文字列を格納するための、文字列長に対するバッファサイズの算出係数をγとする(β、γは圧縮伸長モジュールが決まれば算出可能である)と、伸長用データに占めるSのバイト数は、左辺分子第1項に示すようにγ*Li+βとなる。
【0062】
図2の算出方法は、式(1)左辺がGiの単調減少関数であることを利用した単純なアルゴリズムで、α、β、γをセットした後(21)、Gi=1から始めて(22)、式(1)のGiに値をセットして実際に(1)を満たすどうかを計算し(23)、満たしていなければ、Giを1ずつインクリメントしてGiの値が式(1)を満たすようになるまで処理を繰返す(24)。初めて式(1)が満たされるGiの値が、Liに対する「指定頻度ガイドライン値」である(25)。
【0063】
この処理を、i=Nからi=2になるまで繰返して、各シンボル長ごとにGiを求め(26)、これを出力結果とする。
【0064】
このアルゴリズムに従った算出例を図2の「算出例」に示す。
次に、図3を参照して、長文字列切出手段の実施方法の一例とその処理例を示す。
【0065】
長文字列切出手段の入力は、圧縮対象である固定の「ソーステキスト」、「静的辞書のシンボルの文字列長最大値n(>1)」、および「シンボル長ごとの頻度値Gi(i=N、...、2)」である。Giに関しては、「頻度ガイドライン算出手段」の結果を目安の値とすることができるが、Gi、Nの与え方に関しては基本的に制限はない。
【0066】
長文字列切出手段の出力は、ソーステキストを高効率に圧縮するための「圧縮用静的辞書」の一部である。圧縮用静的辞書のデータ構造は、「シンボルとその頻度の対」の集合である。このうち長文字列切出手段によって求められるのは「シンボル長が2以上のシンボルとその頻度の対」の集合である。
【0067】
長文字列切出処理においては、静的辞書への登録シンボルのもととなる「文字列長iの文字列(以下i−文字列と表記する)の集合」を求め、頻度を満たすi−文字列の集合をソーステキストから実際に切出して、文字列長iのシンボルの頻度表FRQiを構成する。ソーステキストから頻度を満たすi−文字列を切取った残りのテキストの集合STiに対して、同様の操作を繰返しFRQi−1、...、FRQ2を順次構成していく。
【0068】
図4を参照して、処理例3Cに入力テキスト、処理例3Dに入力されたシンボルの最大文字列長n、処理例3Eに入力された指定頻度値G8、...、G2の例を示す。
【0069】
入力ソーステキストは複数個あっても構わない(すなわち、テキストの集合が処理対象であってもよい)。ただし、処理対象がテキストの集合で構成される場合は、テキストにまたがってのシンボル切出は行なわない。
【0070】
さて、i=Nから始めて、入力テキストに対してまずi−文字列カウント処理を適用する。i−文字列カウント処理は、テキストの集合に対して、各テキストごとに行なわれる処理であり、テキストの先頭から文字列長テキストの末尾(正確にはテキスト長−iの位置)まで1文字ずつ位置をずらしながらi−文字列をカウントする処理である。
【0071】
具体的には、図3の右側のフローチャートに示すように、i−文字列とそのカウント値の対の集合をOCi={(string、occurrence)}とし、OCi=φ、pos=0(テキスト先頭位置)の状態から始めて、pos1を先頭とする長さiの文字列str(pos、i)がOCiに既に登録されていればその要素の出現回数値を+1インクリメントし、まだ登録されていなければ(str(pos、i)、1)を新たにOCiの要素として登録する(38、39、3A)という処理をposをカウントアップしながら、テキスト長−iの位置にくるまで繰返す(3B)。テキストが複数個あれば各テキストに対して同様の処理を行なう(36)が、テキスト長がiより短いテキストは処理の対象外である(37)。
【0072】
この処理により、静的辞書に登録すべき文字列長iのシンボルの候補の集合が求められることになる。
【0073】
図4を参照して、処理例で説明すれば、最初、ソーステキストSTに対して、8−文字列カウント処理により、“ 辞書の本体デー”、“辞書の本体データ”、“書の本体データや”、...という、1文字ずつずらした8−文字列が次々とカウントされながら抽出される。
【0074】
その結果、STの他の部分にたとえば、“辞書の本体データと...”、“辞書の本体データの...”、“辞書の本体データに...”のような表現が出てくれば、“辞書の本体データ”という8−文字列の出現回数は相当カウントアップされることになり、“...書の本体データや...”という表現が処理例3Cに示した“辞書の本体データや...”という一箇所だけにしか出現しなければ“書の本体データや”という8−文字列の出現回数は1のままであることになる。
【0075】
処理例3Fは、STに対して8−文字列カウント処理を行なった出力のOC8である。このようなカウントの仕方で、I−文字列の集合がもれなく網羅的に、かつ重複カウントがなく正しく行なわれる。
【0076】
8−文字列カウント処理後、再び長文字列切出処理に戻る。
8−文字列カウント処理の結果生成されたOC8の要素は処理例3Fに示すように頻度がG8以上のものでもあれば、G8未満のものもある。OCiの要素をもとに指定頻度Giの条件を守りながらSTの頻度表を切出す場合、処理効率の点から、出現回数がGi未満の要素(処理例i=8の場合(3F)でいえば、×印を打った要素に対応する)は予め「切出」処理の対象から外しておく(31)。
【0077】
再び図3を参照して、圧縮効率という点から、「なるべく高頻度の(長い)文字列を切出す」というヒューリスティックスに従うため、OCiを予め出現回数の大きなもの順にソートしておく(32)。
【0078】
OCiの内容を以上のように更新した上で、対象テキストの集合STi+1からOCiに登録されている文字列を実際にカウントしながら切出していく(33)。
【0079】
OCiの各要素(s、f)に対するSTi+1「切出し」の処理は以下に従う。
【0080】
各処理対象の文字列T(i+1、j)∈STi+1(j=1、...、Mi+1)に対して、
(1) T(i+1、j)の各処理対象文字列の先頭位置から順にsに一致する部分文字列を操作する。
【0081】
(2) T(i+1、j)の処理対象文字列=“…、s、…”。
最初のsが見つかった場合、sより前のT(i+1、j)の部分文字列をTT(i+1、k)(kは見つかるごとにカウントアップする)とし、sの頻度を1だけカウントアップする(初期値0)。
【0082】
sが見つからなかった場合TT(i+1、k)=T(i+1、j)と置く。
(3) Sより後にある部分文字列T(i+1、j)を処理対象の文字列として、(1)(2)の処理を処理対象文字列がなくなるまで繰返す。
【0083】
(4) T(i+1、j)←{TT(i+1、k)}として、T(i+1、j)を更新する。処理対象の文字列がsによって分割された形で登録されることになる。
【0084】
(5) すべてのT(i+1、j)に対して処理した結果、sの頻度f′がGi以上であれば、(s、f′)をFRQiに登録する。
【0085】
f′<Giであれば、FRQiには登録せずに、T(i+1、j)を切出し前の状態に戻す。
【0086】
OCiのすべての要素に対して、上記の(1)〜(5)を行なった後、T(i、k)=TT(i+1、k)としてSTiを生成する。
【0087】
図4を参照して、処理例3HはT(9、1)=STに対して、指定頻度値を満たすCO8を出現回数順にソートしたもので切出した出力(8−文字列の頻度表FRQ8)を表している。
【0088】
ST(=ST9)の先頭部分である“ 辞書の本体データや検索用のインデックスを記憶…”は、OC8の要素“辞書の本体データ”の切出しにより、“ ”と“検索用のインデックスを記憶…”という部分に分けられ、これらの分けられた新たな処理対象テキストは、さらに、OC8の要素“のインデックスを”の切出しによって、“ ”、“検索用”、“のインデックスを”、“記憶…”に分けられる。
【0089】
OC8のすべての要素に対する切出処理後の「切残しテキスト」が次回OC7(3I)の切出し対象の処理対象テキストST8={T(8、j)}になる(3G)。
【0090】
切残しテキストに対するi−文字列カウント処理と切出処理をi=n、…、2まで繰返し(34)、その後、FRQiの集合を結合して2文字列長以上の頻度表と、切残しテキストの集合ST2が生成される(35)。図5で、処理例を(3J、3K)に示す。
【0091】
次に、図8を参照して、1文字シンボル抽出手段の実施方法の一例を説明する。
【0092】
1文字シンボル抽出手段の入力は、文字列切出し操作により切残されたテキストの集合、出力は、入力テキストに対してその中に含まれる文字単位の頻度表である。
【0093】
この処理は、処理対象のテキストの集合Tに対して、1−文字カウント処理を適用し(51)、その結果生成される(1−文字シンボル、出現回数)の対の集合をそのまま処理結果の頻度表FRQ1とすればよい。
【0094】
長文字列切出手段により生成した頻度表FRQと、切残しテキストに対して1文字シンボル抽出手段により抽出した頻度表FRQ1とを結合すれば、最終結果である圧縮用静的辞書SDが求められる。
【0095】
SD=FRQ+FRQ1
次に、図6を参照して、「効率指標関数値順文字列切出手段」の実施方法の一例とその処理例を示す。
【0096】
効率指標関数値順文字列切出手段の入出力は、「長文字列切出手段」と同じで、入力は、圧縮対象である固定の「ソーステキスト」と、「静的辞書のシンボルの文字列最大長n(>1)」と、「シンボル長ごとの指定頻度値Gi(i=n、…2)」とであり、出力は、ソーステキストを高効率に圧縮するための「シンボル長が2以上の圧縮用静的辞書」である。
【0097】
「長文字列切出手段」が、ソーステキストからなるべく長い文字列を順に切出すための手法であるのに対して、「効率指標関数値順文字列切出手段」は、単に文字列長だけを指標とするのではなく、出現回数も考慮に入れた何らかの圧縮効率指標を表わす関数を予め用意して、この関数値の大きいもの順に静的辞書のシンボルを切出していくための方式である。
【0098】
この方式では、たとえば文字列長が長く頻度の低いものを切出すより、文字列長が短く頻度の高いものを切出した方が圧縮効率がよくなるといった場合を想定している。
【0099】
効率指標を正確に与える関数を見い出すことは困難な問題である。これは、静的辞書の切出処理が終わらないとすべてのシンボルに対する出現回数の総和がわからない(すなわち正確な出現確率がわからない)ので、切出処理の途中で算出されるシンボル候補の文字列の「文字列長X」とその「出現回数Y」だけから、その文字列の正確な圧縮効率を予想するのが難しいことによる。
【0100】
しかしながら、圧縮効率のおおよその指標を与えることはできる。おおよその圧縮効率を与える関数の例を以下に示す。
【0101】
1つのシンボル候補の文字列長X、出現回数Yの文字列の、圧縮後の符号長の総和Sは、切出後の出現頻度の総和をFSumとすると、S=−Xlog2(Y/FSum)で表わすことができる。
【0102】
1シンボルの圧縮効率を、「元の文字列長の総和と圧縮後の符号長の総和の差が大きいもの」とみなすと、F(X、Y、FSum)=X*Y−S=X*Y+X*log2(Y)−X*log2(FSum)と記述できる。
【0103】
ここで、FSumを、理論的には正しくないが、「どのように切出してもほぼ一定」として現実の計算において丸めこめば、αを定数として、
F(X、Y、FSum)=X*(Y+log2(Y)−α)≒X*(Y+log2(Y))とみなされるから、
F(X、Y)=X*(Y+log2(Y))
を、おおよその圧縮効率指標を与える関数とすることができる。
その他、もっと精度の高い観点から作成した関数を圧縮効率指標関数であるとしてもよいし、あるいは、場合によっては、F(X、Y)=X*Yとして、ソーステキストに占める文字数の多いもの順に切出しても効率のよい切出しができる場合がないとは限らない。
【0104】
処理手順では、圧縮効率指標関数を特に定めずに説明を進める。ソーステキストST、i−文字列の指定頻度をGi、シンボルの最長文字列長をn、nから2までのi−文字列カウント処理の結果をOC、OCを効率指標関数値順にソートしたものをOCC、STをOCCで切出して生成される頻度表をFRQ、切残されたテキストの集合をSTrと置く。
【0105】
i=nから始めて、STに対するi−文字列カウント処理をi=2まで繰返し(41、42)、求めたOCn、OCn−1、...、OC2を結合して(単純な集合の和)、OCを用意する(43)。
【0106】
次に処理効率の観点から、OCの要素(s、o)で指定頻度の条件o≧G|s|を満たさない要素は除去する(44)。
【0107】
さて、OCの要素(s、o)に対して、文字列sの圧縮効率指標はF(s、o、...)で表わされる。各(s、o)の出現回数oをF(o、s、...)に置き換えたものをOCCとし(45)、OCCをF(o、s、...)の降順、sの効率指標関数値順にソート(46)した上で、図3の(34)の処理と同様の方法で、STからOCCの要素を順に切出しFRQとSTrを求める(47)。
【0108】
次に、図7を参照して、処理例に沿って「効率指標関数値順文字列切出手段」の流れを説明する。ここでは、説明をわかりやすくするためにF(X,Y)=X*Yという単純な効率指標関数を例にとる。
【0109】
図7の処理例のソーステキストST、シンボル最大長n、指定頻度Giはそれぞれ図3と同じである。STの先頭から|ST|−8の位置まで1文字ずつずらしながら8−文字列をカウントしたものがOC8で、ここまでは「長文字列切出処理」と同じ結果である。
【0110】
「長文字列切出処理」ではこの後、STをOC8で切出し、8−文字列の頻度表と切残しテキストST8を生成し、その後も切残しテキストに対して切出し−切残しの処理を繰返す。これに対して、「効率指標関数値順文字列切出手段」では、「文字列長によらず、効率指標関数値の大きいシンボルを見い出す」という戦略をとるため、OC8でソーステキストを切出すプロセスは行なわず、最初にソーステキストからすべてのOCi(i=n、...、2)を作成、結合した上で、効率指標関数値順にソートする。
【0111】
したがって、OC7以降のカウント処理ではOC8の場合と同様に、STの先頭から末尾までi−文字列のカウントが行なわれる(48)。OCiを結合し、指定頻度を満たさないものを削除し、効率指標関数値順にソートしたOCCの一部を処理例49に示す。
【0112】
OCCの中の、8−文字列“のインデックスを”という文字列は、効率指標関数値が64(=8*8)である。これに対して、6−文字列“インデックス”という文字列は他の部分でも頻出するため、効率指標関数値が2394(=399*6)になる。
【0113】
このように、「効率指標関数値順文字列切出手段」では「長文字列切出処理」で切出された“のインデックスを”より先に“インデックス”が切出されるという場合が起こり得る。その結果、“のインデックスを”を切出すときは既に処理対象テキストから“のインデックスを”を含むテキストは残っておらず、FRQにはシンボルとしては登録されず(4A)、最初の文字“の”と最後の文字“を”はそれぞれ切残しテキストSTrに残る(4B)。この場合、「長文字列切出処理」よりも“インデックス”に対する頻度が大きくなり“インデックス”に対する符号長は短くなる。
【0114】
「効率指標関数値順文字列切出手段」により生成されたSTrは、「長文字列切出手段の場合と同様に、「1文字シンボル抽出手段」により1文字頻度表化され、これと2文字以上のシンボルの頻度表FRQの和により最終的な静的辞書を得る。
【0115】
さて、これまではテキストから静的辞書を切出す方法についての具体化手順を与えた。それには2種類の方法があり、請求項1を実施するための手段は「長文字列切出手段」と「1文字シンボル抽出手段」を組合せることにより、また、請求項2を実施するための手段は「効率指標関数値順文字列切出手段」と「1文字シンボル抽出手段」を組合せることにより実現できることを示した。
【0116】
しかしながら、これらの手段で構成した静的辞書のサイズはソーステキストの内容により異なり、基本的には「切出処理」を実行して実際に静的辞書を構築してみないとそのサイズを正確に求めることはできない。
【0117】
もし、圧縮伸長モジュールを実現する側で伸長用テーブル(静的辞書をもとにして構成する、静的辞書サイズに比例したサイズのテーブル)のサイズに制限があって、1回の「切出処理」で求めた静的辞書のサイズがこの制限を満たさない場合は、サイズのより小さな静的辞書を構成する必要がある。
【0118】
またそのような制限がなくても、「静的辞書法」を用いる場合は必ず伸長側で「静的辞書」に対応する固定の伸長テーブルを持たなければならないので、圧縮率に大きく影響するようなサイズの静的辞書を生成することは避けなければならない。
【0119】
このような観点から、請求項3、請求項4はソーステキストの圧縮率をあまり損ねることなく、静的辞書のシンボル数を減らすための適切な手段を提供するものとなっている。
【0120】
静的辞書のシンボル数を削減する単純な方法には、2文字以上の長文字シンボルで頻度の低いものを1文字シンボルに分解して、元からある1文字シンボルとマージする方法がある。
【0121】
たとえば、(“辞書本体”、4)、(“辞”、16)、(“書”、16)、(“本”、32)、(“体”、8)という静的辞書の要素に対して、(“辞書本体”、4)というエントリを削除したい場合、“辞書本体”というシンボルを1文字ずつに分解して(“辞”、4)、(“書”、4)、(“本”、4)、(“体”、4)を元からあった静的辞書の要素とマージ(シンボルの頻度の和をとって静的辞書の要素を更新すること)して、(“辞”、20)、(“書”、20)、(“本”、36)、(“体”、12)を得る。この方法は、1文字シンボルの頻度数が増加するので1文字シンボルの符号化コードはもとより短くなる場合があるが、通常1文字シンボルは頻度数が大きく、頻度が多少増えても符号長が変化するに至らない場合も多い。
【0122】
これに対してたとえば“辞書の本体データ”というシンボルが“辞書の”という他のシンボルと“本体データ”という他のシンボルに分解することができれば、それぞれの“辞書の”、“本体データ”というもともとのシンボルの頻度数があまり大きくない場合、分解によって頻度を増やした分、それぞれのシンボルの符号長が短くなる確率が高い。
【0123】
削減対象となったシンボルSの符号化長をL、シンボルSを分解しシンボルS1、S2の和により分解・削除し、静的辞書を上述の方法で更新したときのS1、S2の符号化長をL1、L2とする。このとき大抵はL1+L2>Lであり、分解した符号長の和の方が元の符号長より小さくなる場合は稀である。
【0124】
したがって、通常シンボル数を削減すると伸長用テーブルの容量は確実に減少するが、圧縮データの容量は少し増加する。
【0125】
しかしながら、分解シンボルの個数が少ないほど、また分解個数は同じでも、何通りかの分解の仕方が存在するときはより効率的な分解の仕方を選ぶことにより、ソーステキストの圧縮率の増加を極力抑え込むことができる。
【0126】
図9および図10を参照して、「シンボル削除のための文字列切出手段」の実施の方法の一例とその処理例を説明する。これにより請求項3の要件を実現することができる。
【0127】
「シンボル削除のための文字列切出手段」の入力は既に求められた、ソーステキストに対する「圧縮用静的辞書」と「静的辞書内の削除したい要素」であり、出力は「ソーステキストの圧縮効率の低下を極力抑え込んだ形で、削除対象要素を削除した新しい圧縮用静的辞書」である。
【0128】
以下では説明の便宜上、1文字シンボルがソーステキストのすべての文字種をカバーしている場合について述べる。
【0129】
「シンボル削除のための文字列切出手段」では、シンボル長の降順にソートされた、削除対象要素よりも短いシンボルの集合により、削除対象要素のシンボルに「文字列切出処理」を適用する。すなわちここでは、分解方法として分解シンボルの集合になるべく長いシンボルを含ませるという戦略を用いる。
【0130】
処理方法は削除要素1個に対する処理手順が記述されている。複数個一度に削除したい場合は、この処理手順を個数分繰り返せばよい。
【0131】
まず、静的辞書SDから削除対象要素(si、fi)を取り除き(61)、削除対象のシンボル長pよりシンボル長が短い要素からなる静的辞書の部分集合LowPをシンボル長の降順にソートしておく(62)。
【0132】
siからLowPの各要素を順に切出して、siの分解文字列の集合FRQを生成する(63)。このとき、一般にsiの切残しテキストが生じる可能性があるが、静的辞書に登録されている1文字シンボルは、ここではソーステキストのすべての文字種をカバーしていると仮定しているので、すべて、元の静的辞書のシンボルにより分解されることになる。
【0133】
この仮定を外すと、切残しテキストが生じるので、切残しテキストが生じるような削除対象に関してはこの手法は適用できない。なお、実際は、数メガというサイズの大きなソーステキストでは1文字シンボルがソーステキストのほとんどの文字種をカバーするので、ほとんどのシンボルがこの手法によって削除できる。
【0134】
FRQはSD1の部分集合により切出されたものであるから、FRQの各要素のシンボルと同一のシンボルを持つ要素は必ずSD1に存在する。このようなSD1の要素に対して、削除シンボル(si、fi)の頻度fi分だけその頻度を増やせば、ソーステキストはSD1により切出されたのと同じことになる。
【0135】
これが、FRQの各要素(s′、f′)とシンボルが共通するSD1の要素(s′、f)の頻度をf′*fi増やす(64)ことの意味である。
【0136】
すべての分解シンボルの頻度を削除シンボルの分だけ増やして更新したSD1が本処理の最終結果SDreduceとなる(65)。
【0137】
静的辞書SD(66)からSDの要素(“のインデックスを”、8)を削除する場合を処理例に示す。
【0138】
SD1は最初はSDから(“のインデックスを”、8)を単純に除去したもの(67)であり、LowPは文字列長7以下のシンボルを持つ要素のみからなるSD1の部分集合(68)である。切出しの対象テキストが削除対象要素のシンボルの“のインデックスを”(69)である。
【0139】
対象テキストLowPで切出した結果をFRQ処理例6Aに示す。“のインデックスを”から、まず“インデックス”が次いで切残しテキストから“の”と“を”がそれぞれ頻度1で切出される。
【0140】
最終結果SDreduce(6B)は、SD1の対応要素(“の”、2468)、(“インデックス”、388)、(“を”、1234)の頻度をそれぞれ1*8ずつ増やしたものである。
【0141】
図11、図12、および図13を参照して、より高度なシンボル削除手段である「シンボル分解手段」の実施方法の一例とその処理例を説明する。
【0142】
「シンボル分解手段」の入出力は「シンボル削減のための文字列切出手段」と同じである。すなわち、入力は「圧縮用静的辞書」と「静的辞書内の削除したい要素」、出力は「削除更新後の静的辞書」である。
【0143】
「シンボル分解手段」では文字列切出しの手法は使わず、任意の位置で削除対象文字列を分解したとき、分解されたそれぞれの文字列が静的辞書のシンボルとして登録されているどうかを調べるというアプローチをとる。
【0144】
このようなアプローチをとることにより、「シンボル削減のための文字列切出手段」では処理後にしかわからなかった分解個数を予め指定できるとともに、複数通りの分解候補からソーステキストの圧縮率に最も貢献するものを選択することができるので、圧縮率の低下防止の観点からはより効率的な削除処理が可能となる。
【0145】
しかしながら、一方で、「シンボル削減のための文字列切出手段」では分解できていたシンボルが、分解個数制限のために分解できなくなる場合が増えるため、削除個数のコントロールが難しくなるのも事実である。
【0146】
図11を参照して、処理方法をフローチャートに沿って説明する。
圧縮効率を考慮して、この処理例では分解個数を2とする。3以上の分解個数に対するアルゴリズムも多少の拡張で実施可能であるが、2の場合よりも圧縮効率が低下すること、処理時間が指数関数的に増加することを考え合せれば分解個数2の場合が実用的であると考えられる。
【0147】
まず、静的辞書SDから削除対象要素(s、f)を取り除く(70)。次に、削除対象シンボルs(シンボル長をNとする)に対してsの分解方法の候補の集合Cを求める。
【0148】
sの文字と文字の境界位置を先頭から順に1、…i、…、N−1とし、sを、sの先頭からiまでの部分文字列s1iと、iから末尾までの部分文字列s2iに分解する(72)。
【0149】
ここで、s1i、s2iをシンボルとするSDの要素(s1i、f1i)と(s2i、f2i)があれば(73)、sは静的辞書の他のシンボルで分解できることになるので、((s1i、f1i)、(s2i、f2i))をsの分解方法の1つ(1iでの分解)としてCに登録する(74)。
【0150】
i=1〜N−1までこの操作を繰返し(71)、分解候補集合Cを生成する。ここでC=空集合の場合(77)は、sは2個のシンボルには分解できないのでこの処理は失敗する(78)。C≠空集合ならば(77)、Cの要素中から圧縮効率のよい分解シンボルの候補を選択する処理B(75)に入る。
【0151】
図13を参照して、選択処理では、Cの各要素に対して圧縮効率のおおよその指標を与える計算式によりその効率指標Eを計算し(750)、その中から最も効率指標の値の大きい要素を取出す(751)。
【0152】
ここで(750)の計算式は、
効率指標=Σ(削除対象シンボルの頻度)/(分解シンボルの頻度)…(2)
である。
【0153】
削除後に、削除対象シンボルの頻度数Dだけ、元の静的辞書の分解シンボルの各頻度Fiを増加させるので、頻度の総和Sumは削除の前後で変化しない。削除前後における各分解シンボルのビット数は、分解前が−log(Fi/Sum)ビット、分解後が−log((Fi+D)/Sum)ビットであるから、ビット数の減少分は、
−log(Fi/Sum)−(−log((Fi+D)/Sum))=log(1+D/Fi)
となる。
【0154】
log(1+D/Fi)はD/Fiに比例するから、結局D/Fiの和の大きいものが全体のビット減少幅の大きい、すなわち圧縮効率が高いものとなる。これが式(2)の意味である。
【0155】
再び図11を参照して、こうして選択された最も効率指標の大きいCの要素に対して、実際にSDの中でその頻度を削除要素の頻度数分増加させ、最終的な削除後の静的辞書を得る(76)。
【0156】
図12を参照して、処理例79に静的辞書SDを、処理例7Aに削除対象文字列とその分解位置を、また、処理例7Bに分解候補集合Cの例を示す。
【0157】
SDの内容を見ると、分解位置3で分解した場合と分解位置5で分解した場合に、それぞれの分解シンボルと同一のシンボルを持つ要素がSD内に存在するので、Cには分解シンボルのペアが2つ登録される。
【0158】
処理例7Cに、Cの2つの要素についてそれぞれ効率指標を計算した結果を示す。効率指標は最初の要素の方が大きいので分解シンボルとしては、最初の要素が選ばれ、削除対象文字列“辞書の本体データ”は“辞書の”と“本体データ”に分解されることになる。
【0159】
SDから(“辞書の本体データ”、10)を削除する代わりに、(“辞書の”、8)、(“本体データ”、8)の頻度をそれぞれ10だけ増加させて、削除後の静的辞書SDreduce(7D)を得る。
【0160】
以上のように、実施の形態1に係るテキスト圧縮用辞書作成装置によれば、大容量の固定のテキストデータが必要となる装置(電子辞書や電子ブックなど)において、テキストデータに対する優れた圧縮用静的辞書を提供することができる。
【0161】
本装置により構築した圧縮用静的辞書をもとにテキストデータを圧縮・伸長するモジュールを作成すれば、メモリ容量を大幅に削減して製品のコストダウンを図ることができる。
【0162】
また本装置により提供される圧縮用静的辞書自体のサイズ(エントリ数)を、ソーステキストの圧縮率をあまり落とさずに、細かく調整できる。この結果、実際に製品に圧縮伸長モジュールを搭載する場合のメモリ容量のコントロールが柔軟に行なえ、より迅速な製品開発が可能となる。
【0163】
[実施の形態2]
図14は、実施の形態2に係るテキスト圧縮装置の全体構成説明図である。基本的構成は、実施の形態1に係るテキスト圧縮用辞書作成装置の構成と共通しており、同一の要素には同一の符号を付している。以下、共通する要素については説明を省略し、固有の要素について説明する。
【0164】
構成要素ごとの辞書作成手段211は、入力されたソーステキストに対して、ソーステキストの各構成要素ごとに静的辞書、符号化表、および切換対応表を生成するためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0165】
辞書切換圧縮・伸長手段212は、「構成要素ごとの辞書作成手段」により作成した構成要素ごとの符号化表を切換えながらソーステキスト圧縮・伸長するためのロジックであり、記憶装置11のROMの一部にCPUに処理可能な形式で格納されている。
【0166】
共有辞書作成手段213は、入力された複数の辞典テキストに対して、各辞典に共通なテキストの構成要素を集め、各構成要素ごとに各辞典が共有する静的辞書、符号化表、辞書ごとの切換対応表を作成するためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0167】
共有辞書切換圧縮・伸長手段214は、「共有辞書作成手段」により作成した構成要素ごとの静的辞書を各辞典ごとに用意された切換対応表に従って切換ながら、ソーステキストを圧縮・伸長するためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0168】
オフセット置換圧縮手段215は、静的辞書には登録されなかった局所的な高頻度語を導入シンボル、出現位置、文字列長で置換することにより辞典ソーステキストを圧縮するためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0169】
オフセット置換伸長手段216は、「オフセット置換圧縮手段」により圧縮されたデータを伸長して、元のソーステキストに復元するためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0170】
番号置換圧縮手段217は、静的辞書には登録されなかった局所的な高頻度語を導入シンボルと番号とで置換することにより辞典ソーステキストを圧縮するためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0171】
番号置換伸長手段218は、「番号置換圧縮手段」により圧縮されたデータを伸長して、元のソーステキストに復元するためのロジックであり、記憶装置11のROMの一部にCPU10に処理可能な形式で格納されている。
【0172】
以下、本発明に固有な各手段を実施するための方法を述べる。
図15は、構成要素ごとの辞書作成手段の説明図である。「構成要素ごとの辞書作成手段」の入力は、複数個の記述部分から構成されるテキストであり、辞典では英和辞典の意味テキスト(見出し以外の部分)が代表的な例である。
【0173】
「構成要素ごとの辞書作成手段の出力は、構成要素ごとに作成された静的辞書と符号化表、および切換対応表(切換シンボルと切換シンボルの出現直後にセットされる符号化表の対)である。ここで、切換シンボルとは、静的辞書中に登録されている、テキスト中の構成要素と構成要素を区切るための文字列(シンボル)を示す。
【0174】
処理の第1段階において、まず、入力テキストの構成要素間を区切る文字列が特定できる場合は、その文字列を区切り記号として、どの構成要素とどの構成要素を区切るかという情報とともにRAM上に記憶する。構成要素間を区切る明確な文字列が特定できない場合は、入力テキスト中には決して出現しない適当な文字列を区切り記号としてテキスト中に挿入し、その区切り記号と区切られる構成要素をRAM上に記憶する(220)。
【0175】
区切り記号によって区切られたソーステキスト、区切り記号が前方の構成要素に含まれるように分割し、複数個のサブテキストを生成する(221)。
【0176】
分割されたサブテキストごとに独立に静的辞書(可変長シンボルとその出現頻度の対)を切出す。テキストから1つの静的辞書を切出すための方式については、前述したとおりここでは、前提となる方式であるものとして、詳述はしない。
【0177】
実現方法の1つとしては、テキストの先頭から末尾まで1文字ずつ先頭位置をずらしながらi文字列長の文字列の出現回数をカウントし、これをソートして圧縮率に貢献する頻度を持つ文字列のみをテキストから切出し実際の頻度に計算し、これを静的辞書に登録するとともに、切残されたテキストに対して同様に(i−1)文字列長の文字列に対して処理を行ない、これをi=N〜1まで繰返すという手順がある。ここでは、静的辞書に登録されるシンボルに必ず区切り記号を含めておく必要があるため、静的辞書を切出す前に、対象となるサブテキストから、まず区切り記号だけを静的辞書のシンボルとして切出した後、切残されたサブテキストから上述のような方法を使って他のシンボルを切出すことによって各構成要素ごとの静的辞書を構築する(222)。
【0178】
静的辞書をもとに、対象テキスト圧縮伸長する方法には既知なものがいくつか存在する。ここでは、静的辞書から各シンボルに割り当てられる符号(圧縮データのビット列)を求め、シンボルと符号の対からなる符号化表を作成し、符号化表を参照しながら圧縮・伸長を行なう手法を例にとって以降の説明を行なう。
【0179】
ただし、本発明に関しては符号化手法はそれが統計ベースのものであれば何でもよく、本質的な問題ではない。PRENTICE HALL Advanced Reference Series,“Text Vompression”, 1991 などに記述された方法で、各静的辞書から構成要素ごとに符号化表を作成し、これをROMに記憶しておく(223)。
【0180】
静的辞書中には、区切り記号がシンボルとして登録されているが、この区切り記号のシンボルをここでは「切換シンボル」と呼び、予めRAMに記憶しておいた「区切り記号とそれにより区切られる構成要素の対」の情報をもとに、「切換シンボルとその直後の構成要素の符号化表の対」すなわち、「切換対応表」を作成しこれをROMに記憶しておく(224)。
【0181】
次に、図16〜図21を参照して、構成要素ごとの辞書作成手段による処理例を処理例225以下に示す。処理例225は、英和辞典の意味テキストの一部で、“pace”という項目に対応する付近の内容を示している。テキストは、各項目の先頭から、「発音記号(“[peis]”)」、「訳(“[な]、…、あるく”)」、「例文(“at a、…、歩調で”)」、「変化形(“[な][ふく、…、pacing”)」の各記述部分が順に出現する。
【0182】
このうち、発音記号、変化形は文字を構成するコード種が他とは異なっているので、別々の静的辞書を用意しておく方が効率的に圧縮できる。また、訳の文と例文内の日本語訳の部分は「日本語テキスト」として、例文内の英語部分は「英語テキスト」として別個に圧縮した方が、やはりそれぞれのコード種が大きく異なるため、圧縮効率は良くなる。これに従って、たとえば、「日本語」「英語」「発音記号」「変化形」の各構成要素にテキストを分割する。
【0183】
処理例226に、処理例225のテキストを「日本語」「英語」「発音記号」「変化形」の各構成要素に区切るために区切り記号を特性あるいは挿入した状態を示している。
【0184】
「発音記号」に関しては、“]”が出現した時点で「日本語」テキストに切換わる。これは始めからテキスト内に区切り記号が存在する例である。「訳」に関しては、すべて「日本語」テキストとして処理し、区切記号として挿入した文字列“●”が出現した時点で「英語」テキストに切換わる。「例文」に関しては、例文内で「日本語」テキストに切換わる部分と「変化形」テキストに切換わる部分にそれぞれ“\”、“^”の区切り記号を表わす文字列が挿入されている。
【0185】
処理例227に、処理例226のテキストを実際の「日本語」「英語」「発音記号」「変化形」の各構成要素ごとに分割して構成要素ごとにまとめたサブテキストの例を示す。このようにして同種のコードが多く含まれるように圧縮対象テキストを分割しておいた上で、各テキストに対して静的辞書を作成する。処理例228に「日本語」「英語」「発音記号」「変化形」の各テキストごとに作成された「静的辞書」の例を示す。ここで、各静的辞書には、それぞれのソーステキストに含まれていた区切り記号がそのままの形で「切換えシンボル」として含まれている必要がある。発音記号用静的辞書中のシンボル“]”、日本語テキスト用静的辞書中のシンボル“●”、“^”、英語テキスト用静的辞書中のシンボル“\”が切換えシンボルとして扱われるものである。
【0186】
処理例22Aに、これらの切換えシンボルと、切換えシンボルが出現した直後から次のどの符号化表を使って圧縮伸長を行なわねばならないかを示す「切換え対応表」の作成例を示す。
【0187】
処理例229は処理例228で作成した構成要素ごとの静的辞書をもとに、周知の方法で符号化ビット列を求めることにより作成した、「構成要素ごとの符号化表」の例である。統計情報に基づく符号化表では、出現確率の高いシンボルには短いビット列が、また出現確率が低いシンボルには長いビット列が割り振られることになる。たとえば「日本語テキスト用静的辞書」中で頻度の高い“(1)”、“●”には短いビット列が、また頻度が低い“ゆっくり”には長いビット列が割り振られている。
【0188】
構成要素ごとにテキストを分割した上で静的辞書を用意する場合と、テキスト全体を対象とした1つの静的辞書のみを用意する場合の圧縮効率の違いを処理例22B、処理例22Cに示す。
【0189】
たとえば、変化用静的辞書中のシンボル“[3単]−s”は、変化形テキストに対する場合でも、テキスト全体に対する場合でもその出現頻度は変わらないが、変化形テキスト内での出現確率は、テキスト全体における出現確率よりはるかに大きいため、出現確率から求められる“[3単]−s”の理論上の符号長には大きな差ができる。
【0190】
このように、テキストをうまく分割すれば各々のシンボルの符号長が短くなり、圧縮テキストデータ自体はかなり小さくなる。反面、分割テキストごとに複数個の静的辞書(符号化表)を用意しなければならないので、静的辞書のサイズが増大することになる。一般的には、テキストが巨大な場合(1Mバイト前後以上)は、たとえ静的辞書のサイズが増えてもテキスト自体の圧縮効率がそれを補うため、全体としての圧縮率が改善される場合が多い。図22に辞書切換圧縮伸長手段の実現例を示す。
【0191】
辞書切換圧縮伸長手段の入力は、区切り記号によって明確に区切られた複数の構成要素からなるソーステキスト(または圧縮されたデータ)、構成要素ごとの辞書を作成手段により作成された構成要素ごとの符号化表および切換対応表である。辞書切換圧縮伸長手段の出力は符号化表と切換対応表に基づいて符号化表を切換えながら圧縮伸長した結果の圧縮データまたは復元されたソーステキストである。
【0192】
符号化表に基づく具体的な圧縮伸長方法については、符号化方式自体は既知なものであるので説明を省略し、「複数の符号化表をいかにして切換えながら圧縮伸長を進めるか」という本発明に固有の部分について処理手順を説明する。
【0193】
まず圧縮(伸長)開始時にセットされる符号化表を定める(330)。どこからどんな部分を伸長するかにより、開始時にセットされる符号化表が異なる。たとえば処理例226の項目“pace”に対応する意味テキストの先頭からの末尾までを圧縮する場合には、最初に“発音記号の符号化表”をセットしておく。
【0194】
次に、現在セットされている符号化表をもとに、1シンボル分の圧縮(伸長)処理を行ない(331)、処理されたシンボルば圧縮(伸長)終了を示すシンボルであれば圧縮(伸長)を終え、そうでなければそのシンボルが切換シンボルとして切換対応表に登録されているか否かを調べる(332、333)。切換シンボルであれば切換対応表に従って次からの圧縮(伸長)に用いる符号化表をセットした上で次のシンボルの圧縮(伸長)に移り、切換シンボルでなければそのまま現在セットされている符号化表を使って次のシンボルの圧縮(伸長)を行なう(334)。伸長処理において切換シンボルがソーステキストに挿入されたものである場合(処理例226の“●”や“^”)は、伸長バッファには伸長結果を書込まずにそのまま処理を進める。
【0195】
図23に共有辞書作成手段の実現例を示す。
共有辞書作成手段は、「構成要素ごとの辞書作成手段」と基本的な処理タスクが変わらない。ここでは、入力された複数の辞典テキストに同じような記述部分が存在する場合に、各辞典ごとに静的辞書を用意するよりも、同じ記述部分を縦割りにして圧縮対象テキストをまとめた上で構成要素ごとの静的辞書を用意した方が圧縮効率がよくなることを利用する。したがって、処理タスクは「構成要素ごとの辞書作成手段」とほとんど同じ、「構成要素ごとの辞書作成手段」では処理対象が1つのテキストであったが、「共有辞書作成手段」では処理対象が2つ以上の異なるテキストになる部分にのみ違いがでる。
【0196】
「共有辞書作成手段」の入力は、少なくとも1つの構成要素が一致する複数個の辞典ソーステキストであり、「共有辞書作成手段」の出力は、構成要素ごとに作成された静的辞書と符号化表、および辞典ごとに作成された切換対応表(切換シンボルと切換シンボルの出現直後にセットされる符号化表の対)である。
【0197】
各辞典のソーステキストごとに、まず、「構成要素ごとの辞書作成手段」と同様の方法で、区切り記号の特定、挿入を行ない、区切り記号と区切り記号により区切られる構成要素をRAM上に記憶する(440)。
【0198】
次に、区切り記号によって区切られた各辞典ごとのソーステキストを、区切り記号が前方の構成要素に含まれるように分割し、複数個のサブテキストを生成する(441)。
【0199】
分割されたサブテキストを構成要素ごとに、複数の辞典に跨がった形で集める(442)。構成要素ごとに再編成された各テキストから、「構成要素ごとの辞書作成手段」の場合と同様の手段を用いて静的辞書、符号化表を作成してROMに記憶しておく(443)。ただし、「切換対応表」は「構成要素ごとの辞書作成手段」とは異なり、同じ構成要素内のシンボルでもそれがある辞典内では切換シンボルとして扱われ、また別の辞典内では単なるシンボルとして扱われる場合もあることを考慮し、「辞典ごと」の「切換対応表」を用意しておかねばならない。ここの「切換対応表」の具体的な作成方法は、構成要素ごとの辞書作成手段」と同様である。
【0200】
図24〜図28を参照して、ここまでの処理例を示す。
ここでは、「英和辞典」「和英辞典」「英熟語辞典」「国語辞典」の4つの辞典テキストが圧縮対象として入力された場合を例に説明する。「英和辞典」「和英辞典」「英熟語辞典」「国語辞典」のソーステキストの一部を処理例444〜処理例447に示す。
【0201】
各ソーステキストに対して区切り記号を特定、あるいは挿入した後のテキストを処理例448、449、44Aおよび44Bに示す。「英和辞典」の区切記号は発音記号と日本語テキストの各構成要素を区切る“]”、日本語テキストと英語テキストを区切る“●”(挿入)、英語テキストと日本語テキストを区切る“\”(挿入)、日本語テキストと変化形テキストを区切る“^”(挿入)である。「和英辞典」の区切記号は、日本語テキストと英語テキストを区切る“]”、英語テキストと日本語テキストを区切る“\”である。
【0202】
「英熟語辞典」の区切り記号は、英語テキストと日本語テキストを区切る“\”である。「国語辞典」の区切り記号はなしで、テキストすべてにわたって日本語テキストから構成されるものと見なしている。
【0203】
構成要素ごとに分割した各辞典のサブテキストを、辞典間に跨がる形で、各構成要素ごとに集め、再編成したテキストを処理例44Cに示す。各構成要素ごとに再編成されたテキストから切出した、構成要素ごとの静的辞書を処理44Dに示す。各辞典ごとに作成された、切換シンボルと、その直後からセットされる符号化表の対を示す「切換対応表」を処理例44Eに示す。
【0204】
各辞典のソーステキストの圧縮データ容量を小さくする、という観点からは、共有辞書を作成するより個々の辞典ごとに別個の静的辞書を構築した方が、各シンボルの出現確率が少しでも大きくなるため有利であるが、「構成要素ごとの辞書作成手段」の場合とは逆に、シンボルの出現確率を稼ぐ効果よりも、静的辞書を共有することによって圧縮データの容量を抑える方が、複数個の大容量の辞典を圧縮対象とする場合は効果が大きい。これは、各辞典ごとに各構成要素ごとの静的辞書を作成した場合、重複するシンボルが数多く切出されるため、静的辞書自体が冗長になってしまうことによる。
【0205】
たとえば、日本語テキストの“ゆっくり”、英語テキストの“at”など(4C)は図に示すようなわずかな範囲でも異なる辞典にともに出現する。これらを別個の静的辞書で定義すると、全体としては、同じシンボルが多数定義された冗長な静的辞書がいくつも構成されてしまうことになる。
【0206】
図29を参照して、共有辞書切換圧縮・伸長手段の実現例を示す。
共有辞書切換圧縮・伸長手段の入力は、区切り記号によって明確に区切られた構成要素からなる複数の辞典ソーステキスト(または圧縮されたデータ)と、構成要素ごとの辞書作成手段により作成された構成要素ごとの符号化表および各辞典ごとに作成された切換対応表である。辞書切換圧縮・伸長手段の出力は、符号化表と切換対応表に基づいて符号化表を切換えながら圧縮(伸長)した結果の圧縮データ(または復元されたソーステキスト)である。
【0207】
共有辞書切換伸長・圧縮手段においても、符号化表に基づく具体的な圧縮伸長方法については、周知の方法であるため説明を省略し、「複数の符号化表をいかにして切換えながら各辞典ごとに圧縮伸長を進めるか」という本発明に固有の部分のみについて処理手順を説明する。
【0208】
まず、どの辞典のテキストを圧縮(伸長)するのかを表わす辞典IDをRAMにセットし、処理対象の辞典テキストが変わるごとにIDも変えるものとする(550)。
【0209】
次に、圧縮(伸長)開始時にセットされる符号化表を定める(551)。
次に、現在セットされている符号化表をもとに、1シンボル分の圧縮(伸長)処理を行ない(552)、処理されたシンボルが圧縮(伸長)終了を示すシンボルであれば圧縮(伸長)を終え、そうでなければそのシンボルが切換シンボルとして辞典IDに対する切換対応表に登録されているか否かを調べる(553、554)。切換シンボルであれば辞典IDごとの切換対応表に従って次からの圧縮(伸長)に用いる符号化表をセットした上で次のシンボルの圧縮(伸長)に移り、切換シンボルでなければそのまま現在セットされている符号化表を使って次のシンボルの圧縮(伸長)を行なう(554、555)。伸長処理において切換シンボルがソーステキストに挿入されたものである場合(448)の“●”や“^”は、伸長バッファには伸長結果を書込まずにそのまま処理を進める。
【0210】
図30、図31および図32を参照して、オフセット置換圧縮手段の実現例を説明する。
【0211】
オフセット置換圧縮手段の入力は、局所的な高頻度が存在するような辞典テキストおよび、その辞典テキストに対して予め構築された静的辞書と符号化表である。また、オフセット置換圧縮手段の出力は、局所的な高頻度語の部分が高効率に圧縮された辞典テキストの圧縮データである。また、処理の途中で、高頻度語を特定し、それを取込んだ形で置換修正された辞典テキストと、修正テキストに対して更新された静的辞書および符号化表が生成される。
【0212】
ここでは、説明の便宜上、図34、図35および図36を参照して、処理例から先に説明を行なう。処理例663は英和辞典のソーステキストの一部である。上から順に、“citric acid”、“citron”、“citrus”という項目のそれぞれの意味が記述されているようすが示されている。
【0213】
処理例663の中に出現する局所的な高頻度語が“柑橘(かんきつ)類”および“シトロン”であるとすると、オフセット置換圧縮手段によって処理例663のテキストは処理例664のように書替えられる。すなわち、“柑橘(かんきつ)類”および“シトロン”はどちらも初回の出現時には何も置換されないが、2回目以降の出現時には導入シンボル“*”と“:”で区切られた2つの数字に置換される。たとえば、処理例663の2行目の“シトロンの木…”の部分の“シトロン”は、処理例664では“*29:,8”で置き換えられているがこれは、この位置にはソーステキストで29バイト手前の位置から8バイト分の文字列(=同じ行の“シトロン(レモン)に…”の部分の“シトロン”)と同じ文字列が出現することを表わしている。
【0214】
導入シンボルは入力されたソーステキスト中に存在しない文字列であれば何であっても構わない。また、出現位置と文字列長を表わす2つの数字は、圧縮効率を考えてその値の範囲を制限する必要がある。この例では、出現位置を1Kバイト手前まで(10bit)、文字列量を32バイトまでとしている。
【0215】
以上の置換操作によって、ソーステキストが書替えられてしまったので、それに併せて静的辞書665、符号化表666にも変更が必要になる。すなわち、1回置換を行なうごとに導入シンボル“*”の静的辞書への登録(カウントアップ)、置換された各シンボルの静的辞書内でのカウントダウンにより、静的辞書とテキストの整合性を維持しておく。テキスト全体にわたって置換および静的辞書667の変更を行なった後、静的辞書から周知の手段で符号化表を作成し直す。
【0216】
このようにして更新されたテキスト664を、更新した符号化表668により符号化(圧縮)する。
【0217】
ただし、“*”の直後の数字の対に対しては、符号化表による符号化は行なわずに、それらを10bit、5bitのバイナリの数値に変換する処理が通常の場合とは異なる。
以上のような圧縮法により、オフセット置換された文字列(2回目以降の出現文字列)は一様に導入シンボルの符号長+15bitで符号化されることになる。導入シンボルの出現回数によりその符号長は異なるが、英和辞典のような局所的な高頻度語がよく出てくるテキストに対してはその符号長を短く抑えることができる。
【0218】
処理例669にオフセット置換圧縮を採用せずに、元の静的辞書665および符号化表666を元に圧縮した場合の符号長と、オフセット置換圧縮を併用して圧縮した場合の符号長の比較を示す。
【0219】
このように、置換対象のシンボルが局所的な高頻度語であれば、元の静的辞書中では符号長の長いいくつかのシンボルに分解せざるを得ない文字列も、オフセット置換を用いることにより、2回目以降の出現以降で一定長の、元より短いビットで符号化できることがわかる。
【0220】
オフセット置換圧縮を併用する場合に最も重要なことは、局所的な高頻度語をうまく検出することである。すなわち、元の静的辞書を圧縮する場合より少なくとも置換後の符号長が短くなるような置換対象の文字列を見つけ出さなければならない。
【0221】
幸い、元の符号化表から任意の文字列の符号長が算出でき、かつ、置換後の符号長も出現位置と文字列長が固定であるから導入シンボルの符号化長をうまく想定できれば静的辞書を更新する前に概算できる。置換対象文字列は、任意の文字列に対してこの2つの値を常に比較し、置換後の符号長の短くなると予想できるものを選択すればよい。
【0222】
以上処理例に基づいてオフセット置換圧縮方式の概要を述べた。
図30〜図33を参照して、より詳細な処理手順を説明する。処理は2つの段階に大別される。すなわち、元の静的辞書Sでに導入シンボル(“*”,0)を追加(660)しておいた上で、処理の第1段階でテキスト中の置換対象文字列を検出しながら、テキストと静的辞書の更新を行ない(661)、第2段階で、更新されたテキストを、更新された静的辞書から作成した符号化表に基づいてエンコードする(662)。
【0223】
元の静的辞書SDおよびソーステキストSTを更新する作業の準備として、項目ごとの圧縮データへのアクセスを想定して、STを辞典の各項目ごとに分けたもの(S0,…Se)を処理単位として考える(611)。項目ごとのテキストSnをn=0からeまで順次処理する(612)。まず、Snを(更新されていない元の)SDの符号化表でエンコードし(613)、Snのエンコードシンボル列SS(0)=“s0,s1,…,sp”を抽出する(614)。エンコードシンボルとは実際にエンコードされる際にエンコード対象となる静的辞書(符号化表)中のシンボルを指す。図34の処理例663の“citron”に対応するテキストを例に取れば、s0=“[名](1)”,s1=“シ”、s2=“ト”、s3=“ロン”、s4=“(“,…,sp=”)”となる。
【0224】
SS(0)に関する置換・更新処理(615)は(6151)以下で示される。SS(j)は現在の処理対象範囲を示している。処理が進むにつれて、jの値は増やされ、処理対象範囲は1エンコードシンボルずつ後方に縮められる。SS(p−1)の処理が終わった時点で、辞典1項目(SS(0))に関する置換・更新処理が終了する(6151)。
【0225】
処理範囲SS(j)=“sj,…,si,…,sp”に対して、SS(j)内に局所的な高頻度語となる文字列str(i)が存在するかどうかを検査し、存在すれば、特定したstr(i)を更新するとともに、静的辞書の修正を行なう。この仮定ではまず、i=pとおいて(6152)、SS(j)内の最長文字列から順に局所的な高頻度語がないかどうか検査し、見つかればjの位置をi+1に更新して、残りの処理範囲SS(j)の処理を行なう。i=j+2、すなわちSS(j)の最初の2シンボルになるまでstr(i)を縮めても見つからない場合は、処理範囲を1シンボル分縮めて、引続きSS(j+1)に対する処理を行なう(6153)。
【0226】
処理例663の“citron”に対応するテキストを例に取れば、SS(11)=‘シ’‘ト’‘ロン’‘の’‘木’,…,‘ケーキ’‘用’に対しては、str(13)=‘シ’‘ト’‘ロン’で、元のST中の29バイト手前に同一の文字列が出現(最初の“シトロン”)し、これが局所的な高頻度語として処理される。
【0227】
str(i)が局所的な高頻度語になるかどうかの検査は、まず、処理の無駄を省くために符号化表からstr(i)の符号長を計算し、これが置換符号長よりも短くならない場合は、たとえ前方に一致する文字列があっても圧縮効率が改善されないので、置換・更新処理は行なわず、処理対象範囲を次に進める(6154)。置換符号長は処理例の場合は22bit(想定導入シンボル長7bit、出現位置10bit、文字列長5bit)に設定しているが、テキストによりこれらの値は最適な値が異なる。
【0228】
str(i)の符号長が置換符号長より短い場合は、これを局所的な高頻度語の候補と見なして、(更新されていない元の)SD上の現在位置から出現位置の制限幅(ここでは1024バイトとしている)分だけ手前にある文字列に対して、str(i)と同一の文字列が存在するか否かサーチする。元のソーステキスト上で(pos(<1024)バイト手前に同一文字列が見つかり、かつその文字列がこれまでの処理で、更新テキストにおいて置換されていない場合(6155)、str(i)を“*”で置換し(6156)、その直後に、POSおよびstr(i)を文字列長の値を“,”で区切って、アスキー数字で出力する(6157)。さらにテキストの修正に伴い、str(i)中のシンボルsj、…、siがテキストから1つずつ削除されるので、静的辞書SD中のsj、…、siの各頻度も1減らす(6158)とともに、“*”が1増えるので、SD中の“*”の頻度も1増やす(6159)。
【0229】
今一度、処理例663の“citron”に対応するテキストを例にとって説明しておく。3回目に出現するstr(4)=‘シ’‘ト’‘ロン’‘の’を局所的な高頻度語の候補として検査する場合、元のST中の31バイト手前に同一の文字列が出現(2回目の“シトロン”以下)するが、これはこれまでの処理で既に更新テキスト中で置換されている。したがって、「同一文字列が見つかり、かつその文字列がこれまでの処理で、更新テキストにおいて置換されていない場合」という条件の後半部に抵触するため、これを局所的な高頻度語としては処理せず、strをもう1シンボル分減らした上で、最初に出てくる(置換処理されていない)“シトロン”とマッチングするstr(3)=‘シ’‘ト’‘ロン’を局所的な高頻度語として置換する。
【0230】
制限幅内に同一の文字列が見つからなかった場合は、検査対象文字列を1シンボル分末尾方向から短くして(−−i)、str(i−1)に対する処理を行なう。
【0231】
以上が「静的辞書とソーステキストの更新」処理の内容である。
次に、更新したソーステキストを更新した静的辞書でエンコードする手段について説明する。圧縮は、静的辞書から符号化表を作成し、符号化表を参照しながら文字列をビット列で置き換える周知の方法を用いればよいが、オフセット置換に依存する部分だけ別個の処理を行なう必要がある。
【0232】
1シンボルずつ、終了シンボルが出現するまで(622)、周知の方法によってエンコードする(621)。ただし、エンコードシンボルが導入“*”である場合(623)は、それに続く、“,”で区切られたアスキー数字d1、d2を読込み(624)、d1、d2の各値を定められた出現位置のビット幅および文字列長のビット幅(この場合はそれぞれ10bit、5bit)にバイナリパックする(625)。
【0233】
以上がエンコード処理の内容である。
次に図43を参照して、「オフセット置換圧縮手段により圧縮されたデータの伸長手段」の実現例について説明する。オフセット置換伸長処理も、前述のエンコード処理同様、基本的には周知の方法を用いて伸長を行なう。オフセット置換圧縮に依存して変更した部分だけがオフセット置換伸長処理においても異なることになる。
【0234】
説明の便宜上、フローチャートでは圧縮データの先頭から伸長を行なうものとする。伸長したシンボルがデータの終了コードになるまで(82)、符号化表に基づいて、周知の方法により1シンボルずつ伸長する(81)。
【0235】
デコードシンボルが“*”でない場合は、デコード結果の文字列を出力(84)して次のデータをデコードする。デコードシンボルが“*”であれば、次の15bitの圧縮データを読込み、出現位置d1、文字列長d2をセットし、既に復元されたテキストの中から、現在位置よりd1バイト手前の位置からd2バイト分の文字列を置換コードの伸長結果として出力し(86、87)、次の圧縮データの処理に移る。
【0236】
以上の伸長アルゴリズムでは、もし、特定の辞書項目だけを伸長しようとする場合でも、基本的には圧縮データの先頭から伸長しなければならないことになるが、圧縮時の制限から実は、伸長対象項目の(ソーステキスト上で)その手前1024バイト分の情報さえ事前に処理されていればよい。すなわち、特定の辞書項目だけを伸長する場合は、ソーステキスト上で所定の辞書項目の1024バイト分以上手前の項目に相当する圧縮データ区切りから伸長を始める。
【0237】
手前部分の伸長処理において、置換圧縮された部分は、さらにその手前のデータを伸長しないとテキストに復元できない場合はテキストへの復元は行なわずに置換コードの文字列長の情報からそれが復元テキスト上では何バイトの文字列になるかという情報だけを得ておく。その他のテキストに復元できる部分はすべて復元しておく。
【0238】
このような準備をしておけば、手前の1024バイト内にある、テキストに復元された任意の文字列に対して、それが現在の位置から何バイト手前に出現するかを算出することができる。一方、「オフセット置換圧縮手段」の実現方法から、置換のもとになる文字列が別途置換されていることはないので(図32の処理6155の処理要件に違反するため)、出現位置まで遡った位置には、文字列長分の復元テキストが必ず存在する。
【0239】
このように、辞典の任意の項目からの伸長には多少複雑なロジックと、処理時間のオーバヘッドが生じるが、辞典のソース的を圧縮データの先頭から伸長しなくてもすむので、「オフセット置換伸長手段」は辞典モジュールの検索性能を損ねない利点を併せ持っているといえる。
【0240】
次に、図37〜図39を参照して、番号置換圧縮手段の実現例を説明する。
番号置換圧縮手段の入力は、「オフセット置換圧縮手段」と同様、局所的な高頻度語が存在するような辞典テキストおよび、その辞典テキストに対して予め構築された静的辞書と符号化表である。また、番号置換圧縮手段の出力は、局所的な高頻度語の部分も高効率に圧縮した辞典テキストの圧縮データである。また、処理の途中で、高頻度語を特定し、それを取込んだ形で置換修正された辞典テキストと、修正テキストに対して更新された静的辞書および符号化表が生成される。
【0241】
ここでも、説明の便宜上、図40〜図42を参照して、処理例から先に説明を行なう。
【0242】
処理例774は「オフセット置換圧縮手段」の処理例663と同一の、英和辞典のソーステキストの一部である。処理例774の中に出現する局所的な高頻度語が“柑橘(かんきつ)類”および“シトロン”であるとすると、番号置換圧縮手段によって処理例774のテキストは処理例775のように書替えられる。すなわち、“柑橘(かんきつ)類”および“シトロン”はどちらも初回出現時には導入シンボル△、番号、および文字列長を表わす数字がその前に挿入され、2回目以降の出現時には導入シンボル★と初回出現時に番号付けされたものと同じ番号で文字列自体が置換される。
【0243】
たとえば、処理例773の2行目の最初の“(1)シトロン(…”の部分の“シトロン”の前には△1,8が挿入されているが、これは以下の8バイトを置換対象文字列として番号を1で登録することを表わしている。また、同じ行の次の“シトンの木…”の“シトロン”は★1で置換されているが、これは最も近い△1を自分自身の前に持つ文字列が★1で置換されていることを表わしている。
【0244】
導入シンボルは「オフセット置換圧縮手段」同様、入力されたソーステキスト中に存在しない文字列であれば何であっても構わない。また、番号と文字列長を表わす数字は、圧縮効率を考えてその値の範囲を制限する必要がある。この例では、番号を0〜7の8個(3bit)、文字列長32バイト(5bit)までとしている。
【0245】
ここで、番号はテキスト全体で8個しか使えないのではなく、mod−8(7の次はまた0に戻る)で個数制限なしに使用することができる。ただし、一意に伸長するために、★dがその前方の最も近くの△d,1以下の1バイトの文字列を指すという制限が必ず守られるようにテキスト置換操作を行なう。
【0246】
テキストの置換操作に伴う静的辞書776、符号化表777の変更も「オフセット置換圧縮手段」と同様である。すなわち、1回目の置換を行なう際は、“△”、“★”のカウントアップ、および置換された各シンボルの静的辞書内でのカウントダウンを行ない、2回目以降の置換では、“★”のカウントアップと置換された各シンボルの静的辞書内でのカウントダウンを行なう。テキスト全体にわたって置換および静的辞書778の変更を行なった後静的辞書から周知の手段で符号化表779を作成し直す。
【0247】
このようにして更新したテキストの処理例775を、更新した符号化表779により符号化(圧縮)する。ただし、“△”の直後の処理と“★”の直後の処理が通常の場合とは異なる。すなわち、△直後の数字の対に対しては、符号化表による符号化は行なわずに、それぞれを3bit、5bitのバイナリの数値に変換し、★の直後の数字に対しては、符号化表による符号化は行なわずに、3bitのバイナリ数値にこれを変換する。
【0248】
以上のような圧縮法により、番号置換された文字列(2回目以降の出現文字列)は一様に導入シンボルの符号長+3bitで符号化されることになる。導入シンボルの出現回数によりその符号長が異なるが、英和辞典のような局所的な高頻度語がよく出てくるテキストに対してはその符号長を短く抑えることができる。
【0249】
また、「オフセット置換圧縮手段」に比べて、何回も同一の置換対象文字列が出現する場合は、置換文字列に対する符号長が「オフセット置換圧縮手段」よりも短いため圧縮効率の点では有利になる。処理例77Aに番号置換圧縮を採用せずに、元の静的辞書776および符号化表777を使って圧縮した場合の符号長と、番号置換圧縮を併用して圧縮した場合の符号長との比較を示す。
【0250】
番号置換圧縮を併用する場合に最も重要なことは、「オフセット置換圧縮手段」の場合と同様、局所的な高頻度語をうまく検出することである。すなわち、元の静的辞書で圧縮する場合より少なくとも置換後の符号長が短くなるような置換対象の文字列を見つけ出さなければならない。「番号置換圧縮」においても、元の符号化表から算出される符号長と、置換後の符号長との比較を行ない、置換後の符号長が短くなると予想できるものを選択する。
【0251】
以上、処理例に基づいて番号置換圧縮方式の概要を述べた。再び、図37〜図39を参照して、より詳細な処理手順を記述する。
【0252】
処理は「オフセット置換圧縮手段」の場合と同様、2つの段階に大別される。すなわち、番号カウンタCを0クリアし(770)、元の静的辞書SDに導入シンボル(“△”,0)および(“★”,0)を追加(771)しておいた上で、処理の第1段階でテキスト中の置換対象文字列を検出しながら、テキストと静的辞書の更新を行ない(772)、第2段階で、更新されたテキストを、更新された静的辞書から作成した符号化表に基づいてエンコードする(773)。
【0253】
元の静的辞書SDおよびソーステキストSTを更新する作業の準備として、項目ごとの圧縮データへのアクセスを想定して、STを辞典の各項目ごとに分けたもの(S0、…Se)を処理単位として考える(721)。項目ごとのテキストSnをn=0からeまで順次処理する(722)。まず、Snを(更新されていない元の)SDの符号化表でエンコードし(723)、Snのエンコードシンボル列SS(0)=“s0、s1、…、sp”を抽出する(724)。
【0254】
SS(0)に関する置換・更新処理725は図38で示す処理7251以下で示される。SS(j)は現在の処理対象範囲を示している。処理が進むにつれて、jの値は増やされ、処理対象範囲は1エンコードシンボルずつ後方に縮められる。SS(p−1)の処理が終わった時点で、辞典1項目(SS(0))に関する置換・更新処理が終了する(7251)。
【0255】
処理範囲SS(j)=“sj、…、si、…、sp”に対して、SS(j)内に局所的な高頻度語となる文字列str(i)が存在するかどうかを検査し、存在すれば、特定したstr(i)を更新するとともに、静的辞書の修正を行なう。この過程では、まず、i=pとおいて(7152)、SS(j)内の最長文字列から順に局所的な高頻度語がないかどうか検査し、見つかればjの位置をi+1に更新して、残りの処理範囲SS(j)の処理を行なう。i=j+1、すなわちSS(j)の最初の2シンボルになるまでstr(i)を縮めても見つからない場合は、処理範囲を1シンボル分縮めて、再度SS(j+1)に対する処理を行なう(7253)。
【0256】
ここまでは、「オフセット置換圧縮手段」と同様である。
str(i)が局所的な高頻度語になるかどうかの検査は、まず、処理の無駄を省くために符号化表からstr(i)の符号長を計算し、これが置換符号長よりも短くならない場合は、たとえ前方に一致する文字列があっても圧縮効率が改善されないので、置換・圧縮更新処理は行なわず、処理対象範囲を次に進める(7254)。置換符号長は処理例の場合は26bit(想定導入シンボル長(77+8)bit、番号(3*2)bit、文字列長5bit)に設定しているが、テキストによりこれらの値は最適な値が異なる。
【0257】
str(i)の符号長が置換符号長より短い場合は、これを局所的な高頻度語の候補と見なして、(更新されていない元の)SD上の現在位置から前方にある適当な範囲内の文字列に対して、str(i)と同一の文字列が存在するか否かサーチする。元のソーステキスト上でPOSバイト手前に同一文字列が見つかった場合は置換処理を次のステップに進め、見つからなければ、1エンコードシンボル分短くしたstr(i−1)に対して再度サーチを行なう(7255)。
【0258】
処理7255で、str(i)と同一の文字列が元のソーステキスト上でPOSバイト手前に見つかった場合は、さらに、更新テキストでPOS位置に対応する位置の直前に△C′,1または★C′が配置されておらず(すなわち置換されていない文字列であり)、かつ更新テキスト上でPOS位置に対応する位置以降に△Cが存在しなければ(7256、7257)、これから番号付けしようとする文字列が、置換対象文字列の位置から前方の最も近い位置にあることを保証できるので、POS位置の直前に△C,1(1=|str(i)|)を挿入して、POS位置以下の1バイトの文字列をC番に番号登録するとともに、str(i)を★Cに置換する(7259)。
【0259】
一方△Cが存在すれば、前回C番で番号付けしたより前の部分に遡ってサーチしてしまったことになり、ここで、Cの番号付けを行なうと、以降の★Cがどちらの△Cに対応するものかわからなくなってしまう。すなわち、これから番号付けしようとする文字列が、置換対象文字列の位置から前方の最も近い位置にあることが保証できなくなるため、この場合はstr(i)に対する処理を止めて、str(i−1)に対する処理を行なう(7257)。
【0260】
処理7259でテキストが修正された場合は、テキストの変更に伴う静的辞書の修正を行ない(725A)、C番の登録が済んだので、番号カウンタをmod(8,(C+1))として次に進め(725B)、処理対象範囲jをi+1に更新して、未処理部分に対する処理を継続する。
【0261】
処理7256でPOS位置に対応する更新テキストの位置の直前に△C′,1または★C′が配置されている(すなわち既に置換または番号登録された文字列である)場合は、△の最近の位置の制約を守るために、△C′がPOS対応位置以降に出現しないことを確認した上で(7258)、str(i)を★C′で置換し(725C)、静的辞書の対応する箇所を修正する(725D)。
【0262】
この処理過程では置換処理されるものが以前番号付けされたC′であるため、Cは更新せずに、処理対象範囲だけをi+1に進めて残りの部分SS(i+1)に対する処理を行なう。
【0263】
以上の処理を、図40で示された処理例774の“citron”に代用するテキストを例にとって今一度説明しておく。
【0264】
今C=1で、2回目に出現するSS(11)のstr(13)=‘シ’‘ト’‘ロン’まで処理が進んだとする。処理7255により、POS=29バイト手前の同一の文字列を特定する。処理7256、処理7257の制限をクリアして、処理7259に進み、このタイミングで、最初の“シトロン”の手前に△1,8が置かれ、2番目の“シトロン”(=str(13))が★1に置換される。静的辞書がアップデートされ、C=2として、“の木(3)…”以降に処理対象範囲が移る。C=2のまま、3回目に出現する“シトロン”がstrにセットされたとき、処理7255により、POS=31バイト手前に同一の文字列が特定されるが、これは更新テキストにおいては既に★1で置換されている(処理7256のYesの場合に相当)ので、3回目に現れる“シトロン”の★1に置換される。
【0265】
以上が「静的辞書とソーステキストの更新」処理の内容である。
次に、図39を参照して、更新したソーステキストを更新した静的辞書でエンコードする手段について説明する。圧縮は、静的辞書から符号化表を作成し、符号化表を参照しながら文字列をビット列で置き換える周知の方法を用いればよいが、番号置換に依存する部分だけ別個の処理を行なう必要がある。
【0266】
1シンボルずつ、終了シンボルが出現するまで(732)、周知の方法によってエンコードする(731)。ただし、エンコードシンボルが導入シンボル“★”である場合(733)は、それに続く、アスキー数字d1を読込みこれを3bitでバイナリパックして、次の部分のエンコードに移る(735)。“★”でなく、“△”である場合は、それに続くアスキー数字d1、d2の各値をそれぞれ3bit、5bitにバイナリパックして、次の部分のエンコードに移る(736)。
【0267】
以上がエンコード処理の内容である。
次に図44を参照して、「番号置換圧縮手段」により圧縮されたデータの伸長手段の実現例を説明する。番号置換伸長手段も、前述のエンコード処理と同様、基本的には周知の方法を用いて伸長を行なう。番号置換圧縮に依存して変更した部分だけが、番号置換伸長処理においても異なることになる。
【0268】
伸長したシンボルがデータの終了コードになるまで(91)、符号化表に基づいて、周知の方法により1シンボルずつ伸長する(90)。
【0269】
デコードシンボルが“★”でも“△”でもない場合は、デコードの結果の文字列を出力(99)して次のデータの伸長に移る。デコードシンボルが“△”であれば、次の8bitの圧縮データを読み飛ばし、次のデータの伸長に移る。
【0270】
デコードシンボルが“★”であれば、圧縮データの次の3bitを読込み、番号d1を得る(93)。ここで、これまでの処理において既に手前方向で最初に出現する“△d1,len”以下のlenバイトを伸長済みならば(94)、そのlenバイト分の文字列をデコード結果として出力し(96)、次のデータの伸長に移る。
【0271】
“△d1,len”以下のlenバイトが未伸長ならばさらに手前の部分をデコードして、現在位置から手前方向で最初に“△d1,len”が出現する箇所とそれ以下のlenバイトの文字列を確定させた上で(95)、そのlenバイト分の文字列をデコード結果として出力し(96)、次のデータの伸長に移る。
【0272】
以上の伸長アルゴリズムでは、置換データ(★d)が出現したとき、対応する△が未伸長であれば、その都度遡って伸長を行なわねばならないオーバヘッドはあるものの、基本的には特定の辞典項目だけを伸長できるようになっており、「番号置換伸長手段」も辞典モジュールの検索性能を損ねない利点を持ち合わせているといえる。
【0273】
以上のように、実施の形態2に係るテキスト圧縮装置によれば、大容量の固定の辞典テキストデータを必要とする装置(電子辞書など)において、辞典テキストデータを効率よく圧縮・伸長をする具体的な手段を提供することができる。特に、対象となる辞典テキストが複数の異なる記述部分から構成されている場合(英和辞典など)、共通の構成要素を持つ複数個の辞典テキストを圧縮対象とする場合(英和、和英辞典など)には、それぞれ、請求項5、6の手法により圧縮率を高めることができる。
【0274】
また本装置により、辞典テキストの圧縮メモリ容量を大幅に削減して製品のコストダウンを図ることができる。
【0275】
さらに本装置によれば、大容量の固定の辞典のテキストデータを必要とする装置(電子辞書など)において、特にその装置が、全体としての出現頻度は低いが、局所的には集中的に出現する文字列が多数存在するような辞典テキスト(英和辞典など)を扱う場合に、辞典テキストの検索性能をあまり落とすことなく、圧縮メモリ容量を大幅に削減して製品のコストダウンを図ることができる。
【図面の簡単な説明】
【図1】実施の形態1に係るテキスト圧縮用辞書作成装置の全体構成説明図である。
【図2】実施の形態1に係るテキスト圧縮用辞書作成装置の頻度ガイドライン算出手段の説明図である。
【図3】実施の形態1に係るテキスト圧縮用辞書作成装置の長文字列切出手段の説明図である。
【図4】実施の形態1に係るテキスト圧縮用辞書作成装置の長文字列切出手段による処理例の説明図である。
【図5】実施の形態1に係るテキスト圧縮用辞書作成装置の長文字列切出手段による処理例の説明図である。
【図6】実施の形態1に係るテキスト圧縮用辞書作成装置の効率指標関数値順文字列切出手段の説明図である。
【図7】実施の形態1に係るテキスト圧縮用辞書作成装置の効率指標関数値順文字列切出手段による処理例の説明図である。
【図8】実施の形態1に係るテキスト圧縮用辞書作成装置の1文字シンボル抽出手段の説明図である。
【図9】実施の形態1に係るテキスト圧縮用辞書作成装置のシンボル削除のための文字列切出手段の説明図である。
【図10】実施の形態1に係るテキスト圧縮用辞書作成装置のシンボル削除のための文字列切出手段による処理例の説明図である。
【図11】実施の形態1に係るテキスト圧縮用辞書作成装置のシンボル分解手段の説明図である。
【図12】実施の形態1に係るテキスト圧縮用辞書作成装置のシンボル分解手段による処理例の説明図である。
【図13】実施の形態1に係るテキスト圧縮用辞書作成装置のシンボル分解手段の説明図である。
【図14】実施の形態2に係るテキスト圧縮装置の全体構成説明図である。
【図15】実施の形態2に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の説明図である。
【図16】実施の形態2に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図17】実施の形態2に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図18】実施の形態2に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図19】実施の形態2に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図20】実施の形態2に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図21】実施の形態2に係るテキスト圧縮装置の構成要素種類ごとの辞書作成手段の処理例の説明図である。
【図22】実施の形態2に係るテキスト圧縮装置の辞書切換圧縮伸長手段の説明図である。
【図23】実施の形態2に係るテキスト圧縮装置の共有辞書作成手段の説明図である。
【図24】実施の形態2に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図25】実施の形態2に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図26】実施の形態2に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図27】実施の形態2に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図28】実施の形態2に係るテキスト圧縮装置の共有辞書作成手段の処理例の説明図である。
【図29】実施の形態2に係るテキスト圧縮装置の共有辞書切換圧縮伸長手段の説明図である。
【図30】実施の形態2に係るテキスト圧縮装置のオフセット置換圧縮手段の説明図である。
【図31】実施の形態2に係るテキスト圧縮装置のオフセット置換圧縮手段の説明図である。
【図32】実施の形態2に係るテキスト圧縮装置のオフセット置換圧縮手段の説明図である。
【図33】実施の形態2に係るテキスト圧縮装置のオフセット置換圧縮手段の説明図である。
【図34】実施の形態2に係るテキスト圧縮装置のオフセット置換圧縮手段の処理例の説明図である。
【図35】実施の形態2に係るテキスト圧縮装置のオフセット置換圧縮手段の処理例の説明図である。
【図36】実施の形態2に係るテキスト圧縮装置のオフセット置換圧縮手段の処理例の説明図である。
【図37】実施の形態2に係るテキスト圧縮装置の番号置換圧縮手段の説明図である。
【図38】実施の形態2に係るテキスト圧縮装置の番号置換圧縮手段の説明図である。
【図39】実施の形態2に係るテキスト圧縮装置の番号置換圧縮手段の説明図である。
【図40】実施の形態2に係るテキスト圧縮装置の番号置換圧縮手段の処理例の説明図である。
【図41】実施の形態2に係るテキスト圧縮装置の番号置換圧縮手段の処理例の説明図である。
【図42】実施の形態2に係るテキスト圧縮装置の番号置換圧縮手段の処理例の説明図である。
【図43】実施の形態2に係るテキスト圧縮装置のオフセット置換伸長手段の説明図である。
【図44】実施の形態2に係るテキスト圧縮装置の番号置換伸長手段の説明図である。
【符号の説明】
111 頻度ガイドライン算出手段
112 長文字列切出手段
113 1文字シンボル抽出手段
114 効率指標関数値順文字列切出手段
115 シンボル削除のための文字列切出手段
116 シンボル分解手段
211 構成要素種類ごとの辞書作成手段
212 辞書切換圧縮・伸長手段
213 共有辞書作成手段
214 共有辞書切換圧縮・伸長手段
215 オフセット置換圧縮手段
216 オフセット置換伸長手段
217 番号置換圧縮手段
218 番号置換伸長手段
Claims (4)
- テキストを圧縮する際に参照される辞書を作成するためのテキスト圧縮用辞書作成装置であって、
目標圧縮率に対して、2以上の文字列長の各々について前記目標圧縮率を満足するためにテキスト中で出現が要求される頻度のガイドラインを算出する頻度ガイドライン算出手段と、
テキストから、文字列長2以上の文字列であって、対応する文字列長の頻度ガイドラインを満たす頻度で出現するものを、その実頻度とともに文字列長の降順に切出して第1の静的辞書を生成するとともに、前記頻度ガイドラインを満たさない切残しのテキストの集合を生成する長文字列切出手段と、
前記切残しのテキストの集合から文字列長1の文字ごとにその頻度をカウントして第2の静的辞書を生成する1文字シンボル抽出手段と、
前記第1の静的辞書に前記第2の静的辞書を追加して最終的静的辞書を生成する最終的静的辞書構築手段とを含むテキスト圧縮用辞書作成装置。 - テキストを圧縮する際に参照される辞書を作成するためのテキスト圧縮用辞書作成装置であって、
目標圧縮率に対して、2以上の文字列長の各々について前記目標圧縮率を満足するためにテキスト中で出現が要求される頻度のガイドラインを算出する頻度ガイドライン算出手段と、
テキストから、文字列長2以上の文字列であって、対応する文字列長の頻度ガイドラインを満たす頻度で出現するものを、その実頻度とともに文字列長と実頻度との積の降順に切出して第1の静的辞書を生成するとともに、前記頻度ガイドラインを満たさない切残しのテキストの集合を生成する効率指標関数値順文字列切出手段と、
前記切残しのテキストの集合から文字列長1の文字ごとにその頻度をカウントして第2の静的辞書を生成する1文字シンボル抽出手段と、
前記第1の静的辞書に前記第2の静的辞書を追加して最終的静的辞書を生成する最終的静的辞書構築手段とを含むテキスト圧縮用辞書作成装置。 - 前記最終的静的辞書中の文字列であって、前記最終的静的辞書中の他の文字列の組合せであるものを、最も長い文字列が含まれる複数個の他の文字列に分解し削除するとともに、当該他の文字列の実頻度を前記削除された文字列の頻度だけそれぞれ増加させるための文字列切出手段をさらに含む請求項1または請求項2に記載のテキスト圧縮用辞書作成装置。
- 前記最終的静的辞書中の文字列であって、前記最終的静的辞書中の他の文字列の組合せであるものを、圧縮率への寄与が最も大きくなるような複数個の他の文字列に分解し削除するとともに、当該他の文字列の実頻度を前記削除された文字列の頻度だけそれぞれ増加させるための文字列切出手段をさらに含む請求項1または請求項2に記載のテキスト圧縮用辞書作成装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP01389296A JP3566441B2 (ja) | 1996-01-30 | 1996-01-30 | テキスト圧縮用辞書作成装置 |
US08/791,392 US6047298A (en) | 1996-01-30 | 1997-01-30 | Text compression dictionary generation apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP01389296A JP3566441B2 (ja) | 1996-01-30 | 1996-01-30 | テキスト圧縮用辞書作成装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH09212395A JPH09212395A (ja) | 1997-08-15 |
JP3566441B2 true JP3566441B2 (ja) | 2004-09-15 |
Family
ID=11845842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP01389296A Expired - Fee Related JP3566441B2 (ja) | 1996-01-30 | 1996-01-30 | テキスト圧縮用辞書作成装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US6047298A (ja) |
JP (1) | JP3566441B2 (ja) |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5845238A (en) * | 1996-06-18 | 1998-12-01 | Apple Computer, Inc. | System and method for using a correspondence table to compress a pronunciation guide |
US6414610B1 (en) * | 1997-02-24 | 2002-07-02 | Rodney J Smith | Data compression |
JPH11143877A (ja) * | 1997-10-22 | 1999-05-28 | Internatl Business Mach Corp <Ibm> | 圧縮方法、辞書の見出し語インデックス・データを圧縮するための方法、及び機械翻訳システム |
JP3337633B2 (ja) * | 1997-12-03 | 2002-10-21 | 富士通株式会社 | データ圧縮方法及びデータ復元方法並びにデータ圧縮プログラム又はデータ復元プログラムを記録したコンピュータ読み取り可能な記録媒体 |
JP3421700B2 (ja) * | 1998-01-22 | 2003-06-30 | 富士通株式会社 | データ圧縮装置及び復元装置並びにその方法 |
JP3566111B2 (ja) * | 1998-11-30 | 2004-09-15 | 松下電器産業株式会社 | 記号辞書作成方法及び記号辞書検索方法 |
US6456209B1 (en) * | 1998-12-01 | 2002-09-24 | Lucent Technologies Inc. | Method and apparatus for deriving a plurally parsable data compression dictionary |
US6404931B1 (en) | 1998-12-14 | 2002-06-11 | Microsoft Corporation | Code book construction for variable to variable length entropy encoding |
US6377930B1 (en) | 1998-12-14 | 2002-04-23 | Microsoft Corporation | Variable to variable length entropy encoding |
US6651219B1 (en) * | 1999-01-11 | 2003-11-18 | Multex Systems, Inc. | System and method for generation of text reports |
US7026962B1 (en) * | 2000-07-27 | 2006-04-11 | Motorola, Inc | Text compression method and apparatus |
US6883087B1 (en) | 2000-12-15 | 2005-04-19 | Palm, Inc. | Processing of binary data for compression |
US7500017B2 (en) * | 2001-04-19 | 2009-03-03 | Microsoft Corporation | Method and system for providing an XML binary format |
US20030018647A1 (en) * | 2001-06-29 | 2003-01-23 | Jan Bialkowski | System and method for data compression using a hybrid coding scheme |
CA2411227C (en) * | 2002-07-03 | 2007-01-09 | 2012244 Ontario Inc. | System and method of creating and using compact linguistic data |
JP4382663B2 (ja) * | 2002-07-03 | 2009-12-16 | 2012244 オンタリオ インコーポレイテッド | 簡潔言語学データを生成かつ使用するシステムおよび方法 |
JP4365641B2 (ja) * | 2002-07-10 | 2009-11-18 | 日本特殊陶業株式会社 | 多層配線基板及び多層配線基板の製造方法 |
US6670897B1 (en) | 2002-10-03 | 2003-12-30 | Motorola, Inc. | Compression/decompression techniques based on tokens and Huffman coding |
JP2005301664A (ja) * | 2004-04-12 | 2005-10-27 | Fuji Xerox Co Ltd | 画像辞書作成装置、符号化装置、データファイル、画像辞書作成方法及びそのプログラム |
US8874504B2 (en) * | 2004-12-03 | 2014-10-28 | Google Inc. | Processing techniques for visual capture data from a rendered document |
EP1825395A4 (en) * | 2004-10-25 | 2010-07-07 | Yuanhua Tang | FULL TEXT INTERROGATION AND RESEARCH SYSTEMS AND METHODS OF USE |
US7627816B2 (en) * | 2005-04-12 | 2009-12-01 | International Business Machines Corporation | Method for providing a transient dictionary that travels with an original electronic document |
EP1780947B1 (en) * | 2005-10-27 | 2009-06-17 | Alcatel Lucent | Data collection from network nodes in a telecommunication network |
US8078454B2 (en) * | 2007-09-28 | 2011-12-13 | Microsoft Corporation | Two-pass hash extraction of text strings |
US8326605B2 (en) * | 2008-04-24 | 2012-12-04 | International Business Machines Incorporation | Dictionary for textual data compression and decompression |
US8326604B2 (en) * | 2008-04-24 | 2012-12-04 | International Business Machines Corporation | Dictionary for textual data compression and decompression |
EP2378766A1 (en) * | 2010-04-16 | 2011-10-19 | Liberty Global Europe Holding B.V. | Electronic Program Guide compression method and system |
US20110313756A1 (en) * | 2010-06-21 | 2011-12-22 | Connor Robert A | Text sizer (TM) |
US9087038B1 (en) * | 2010-07-21 | 2015-07-21 | Sprint Communications Company L.P. | Messaging with shortcut character strings |
WO2013136418A1 (ja) * | 2012-03-12 | 2013-09-19 | 株式会社日立製作所 | ログ管理計算機、及びログ管理方法 |
US9229960B2 (en) * | 2013-02-11 | 2016-01-05 | International Business Machines Corporation | Database management delete efficiency |
US9378234B2 (en) | 2013-03-11 | 2016-06-28 | International Business Machines Corporation | Management of updates in a database system |
US9229968B2 (en) | 2013-03-11 | 2016-01-05 | Intenational Business Machines Corporation | Management of searches in a database system |
KR101750646B1 (ko) | 2013-03-22 | 2017-06-23 | 후지쯔 가부시끼가이샤 | 압축 장치, 압축 방법, 신장 장치, 신장 방법 및 정보 처리 시스템 |
US9766805B2 (en) * | 2014-04-14 | 2017-09-19 | Sony Corporation | System and method for textual input |
JP6531398B2 (ja) | 2015-01-19 | 2019-06-19 | 富士通株式会社 | プログラム |
JP6613669B2 (ja) * | 2015-07-14 | 2019-12-04 | 富士通株式会社 | 圧縮プログラム、圧縮方法、情報処理装置、置換プログラムおよび置換方法 |
US9912624B2 (en) * | 2015-09-25 | 2018-03-06 | International Business Machines Corporation | Lossy text source coding by word length |
JP6641857B2 (ja) * | 2015-10-05 | 2020-02-05 | 富士通株式会社 | 符号化プログラム、符号化方法、符号化装置、復号化プログラム、復号化方法および復号化装置 |
US11429616B2 (en) * | 2019-04-02 | 2022-08-30 | Keysight Technologies, Inc. | Data recording and analysis system |
CN112699660B (zh) * | 2019-10-23 | 2024-08-06 | 阿里巴巴集团控股有限公司 | 数据处理方法、系统及设备 |
CN114025024B (zh) * | 2021-10-18 | 2023-07-07 | 中国银联股份有限公司 | 一种数据传输方法及装置 |
CN116614139B (zh) * | 2023-07-20 | 2023-09-19 | 酒仙网络科技股份有限公司 | 一种售酒小程序内用户交易信息压缩存储方法 |
CN116865768B (zh) * | 2023-08-31 | 2023-11-21 | 临沂安迪电气有限公司 | 一种plc设备数据优化存储方法 |
CN117896442B (zh) * | 2024-03-15 | 2024-06-14 | 陕西禄远电子科技有限公司 | 一种基于物联网的综合能源数据管理系统 |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4560976A (en) * | 1981-10-15 | 1985-12-24 | Codex Corporation | Data compression |
US4597057A (en) * | 1981-12-31 | 1986-06-24 | System Development Corporation | System for compressed storage of 8-bit ASCII bytes using coded strings of 4 bit nibbles |
US4558302A (en) * | 1983-06-20 | 1985-12-10 | Sperry Corporation | High speed data compression and decompression apparatus and method |
JPH0664585B2 (ja) * | 1984-12-25 | 1994-08-22 | 株式会社東芝 | 翻訳編集装置 |
US4747053A (en) * | 1985-05-20 | 1988-05-24 | Brother Kogyo Kabushiki Kaisha | Electronic dictionary |
US4843389A (en) * | 1986-12-04 | 1989-06-27 | International Business Machines Corp. | Text compression and expansion method and apparatus |
US4899148A (en) * | 1987-02-25 | 1990-02-06 | Oki Electric Industry Co., Ltd. | Data compression method |
JPS63263561A (ja) * | 1987-04-22 | 1988-10-31 | Ricoh Co Ltd | 日本語文の圧縮方法 |
JPH01290036A (ja) * | 1988-05-18 | 1989-11-21 | Nec Corp | ソースメンバの文字列圧縮方式 |
US5003307A (en) * | 1989-01-13 | 1991-03-26 | Stac, Inc. | Data compression apparatus with shift register search means |
JPH02271723A (ja) * | 1989-04-12 | 1990-11-06 | Nec Corp | 日本語情報圧縮方式 |
JPH03206533A (ja) * | 1990-01-09 | 1991-09-09 | Nec Software Ltd | データ圧縮方式 |
US5049881A (en) * | 1990-06-18 | 1991-09-17 | Intersecting Concepts, Inc. | Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique |
JP2729416B2 (ja) * | 1991-07-15 | 1998-03-18 | シャープ株式会社 | テキストデータの復元方法 |
US5140321A (en) * | 1991-09-04 | 1992-08-18 | Prime Computer, Inc. | Data compression/decompression method and apparatus |
JPH0580972A (ja) * | 1991-09-19 | 1993-04-02 | Nec Corp | データ圧縮装置 |
JPH06131152A (ja) * | 1992-04-13 | 1994-05-13 | Compaq Computer Corp | セパレータが無いか少ない言語を表わすコンピュータファイルのためのデータ圧縮方法 |
US5396595A (en) * | 1992-04-24 | 1995-03-07 | Spacelabs Medical, Inc. | Method and system for compression and decompression of data |
US5442350A (en) * | 1992-10-29 | 1995-08-15 | International Business Machines Corporation | Method and means providing static dictionary structures for compressing character data and expanding compressed data |
US5467087A (en) * | 1992-12-18 | 1995-11-14 | Apple Computer, Inc. | High speed lossless data compression system |
US5530645A (en) * | 1993-06-30 | 1996-06-25 | Apple Computer, Inc. | Composite dictionary compression system |
JPH07306854A (ja) * | 1994-03-14 | 1995-11-21 | Mita Ind Co Ltd | 文書データの圧縮方法及びその装置 |
JP3302210B2 (ja) * | 1995-02-10 | 2002-07-15 | 富士通株式会社 | データ符号化/復号化方法及び装置 |
US5548338A (en) * | 1995-06-07 | 1996-08-20 | News American Publishing, Inc. | Compression of an electronic programming guide |
US5815096A (en) * | 1995-09-13 | 1998-09-29 | Bmc Software, Inc. | Method for compressing sequential data into compression symbols using double-indirect indexing into a dictionary data structure |
-
1996
- 1996-01-30 JP JP01389296A patent/JP3566441B2/ja not_active Expired - Fee Related
-
1997
- 1997-01-30 US US08/791,392 patent/US6047298A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH09212395A (ja) | 1997-08-15 |
US6047298A (en) | 2000-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3566441B2 (ja) | テキスト圧縮用辞書作成装置 | |
US5704060A (en) | Text storage and retrieval system and method | |
Silva de Moura et al. | Fast and flexible word searching on compressed text | |
CA2263453C (en) | A lempel-ziv data compression technique utilizing a dictionary pre-filled with frequent letter combinations, words and/or phrases | |
Nevill-Manning et al. | Compression and explanation using hierarchical grammars | |
US5893102A (en) | Textual database management, storage and retrieval system utilizing word-oriented, dictionary-based data compression/decompression | |
JP3421700B2 (ja) | データ圧縮装置及び復元装置並びにその方法 | |
WO1998006028A9 (en) | A lempel-ziv data compression technique utilizing a dicionary pre-filled with fequent letter combinations, words and/or phrases | |
Skibiński et al. | Revisiting dictionary‐based compression | |
Abel et al. | Universal text preprocessing for data compression | |
Farina et al. | Boosting text compression with word-based statistical encoding | |
Adiego et al. | Using structural contexts to compress semistructured text collections | |
Martínez-Prieto et al. | Natural language compression on edge-guided text preprocessing | |
Nevill-Manning et al. | Compressing semi-structured text using hierarchical phrase identifications | |
JP2729416B2 (ja) | テキストデータの復元方法 | |
Klein et al. | Searching in compressed dictionaries | |
Skibinski et al. | Fast transform for effective XML compression | |
Nguyen et al. | A syllable-based method for vietnamese text compression | |
Vines et al. | Compression techniques for Chinese text | |
Anisimov et al. | Practical Word-based Text Compression Using the Reverse Multi-Delimiter Codes. | |
JPS63263561A (ja) | 日本語文の圧縮方法 | |
JPH07182354A (ja) | 電子文書の作成方法 | |
Brisaboa et al. | Improving semistatic compression via phrase-based modeling | |
Adiego et al. | SCM: Structural contexts model for improving compression in semistructured text databases | |
Garcia et al. | Compression of Textual Column-Oriented Data |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20040601 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040610 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090618 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100618 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100618 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110618 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120618 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120618 Year of fee payment: 8 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130618 Year of fee payment: 9 |
|
LAPS | Cancellation because of no payment of annual fees |