説明

データ圧縮装置、データ伸長装置、データ圧縮プログラム、及びデータ伸長プログラム

【課題】ブロックストリーム処理においてテキストデータの圧縮率を向上させる。
【解決手段】テキストデータの入力を受け付け、テキストデータを複数のブロックに分割するデータ取得部110と、文字列と符号とが対応付けられて格納された基準辞書に基づき、処理対象ブロックに出現する文字列のうち、基準辞書に登録されていない文字列と、基準辞書において処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた差分辞書を生成する差分辞書生成部112と、作成した差分辞書と基準辞書とに基づき、処理対象辞書を生成する辞書作成部111と、生成した処理対象辞書を参照し、処理対象ブロックに出現する文字列を対応する符号に置き換えることで、処理対象ブロックを圧縮する符号化部113と、符号化部113が圧縮した処理対象ブロックのデータと、生成した差分辞書とを出力する出力部114と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データ圧縮装置、データ伸長装置、データ圧縮プログラム、及びデータ伸長プログラムに関する。
【背景技術】
【0002】
テキストデータ(プレーンなテキスト形式のデータや、CSV(Comma Separated Values)形式のデータ、XML(eXtensible Markup Language)データ等)を圧縮する方法として、辞書型符号化方式が知られている。辞書型符号化方式は、圧縮対象のデータ列中に出現する文字や文字列にそれぞれ所定の番号(符号)を割り当てて辞書を作成しておき、この辞書に基づいて実際の入力文字の符号化を行う。辞書式符号化方式には、辞書の保存が必要な静的辞書式符号化(BPE(Byte Pair Encoding)やSTVF(Suffix-Tree based VF coding) 等)と、辞書の保存が不要な動的辞書式符号化(LZ77やLZ78等)がある。データベースから出力されたデータなど、重複した値文字列を多く含むようなデータでは、静的辞書式符号化を適用してから、さらに動的辞書式符号化を適用することで、動的辞書式符号化のみの適用より圧縮率が向上することが知られている。また、静的辞書式符号化は、圧縮データを伸長することなくパターン検索するのに適した方式であることも知られている。
【0003】
また、入力データを適当な大きさに分割したブロックを逐次処理(ストリーム処理)するブロックストリーム処理が知られている。多くの静的辞書式符号化方式は、辞書作成と符号化の2パスで符号化を行うため、逐次処理を行うことができないが、ブロックストリーム処理を適用することで、限られた計算領域しか用いずに、逐次処理を行うことができる。また、ブロックストリーム処理は、より細かい単位でのストリーム処理(文字ストリーム処理や単語ストリーム処理)に比べて、より軽量なインデックスを用いたフィルタリングを行える、等の利点がある。
【0004】
そこで、ブロックストリーム処理において圧縮率を向上させる圧縮・伸長アルゴリズムが提案されている(例えば、特許文献1)。また、単語ストリーム処理において、辞書を使用してデータを圧縮する技術も提案されている(例えば、特許文献2)。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開平9−214353号公報
【特許文献2】特開平11−168390号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
しかしながら、ブロックストリーム処理を用いて入力データの辞書式符号化を行う場合に、上記特許文献1および2の技術では、次の問題がある。特許文献1の技術では、各ブロックにおける辞書サイズの削減について考慮していないため、十分な圧縮率を得られない恐れがある。特許文献2の技術は、単語ストリーム処理を行っているので、ブロックストリーム処理に特有の利点を失ってしまう。また、特許文献2の技術をブロックストリーム処理に自然に拡張することは可能だが、その場合、各ブロックの辞書の増大により、やはり十分な圧縮率が得られない恐れがある。
【0007】
本件は、上記の事情に鑑みて成されたものであり、ブロックストリーム処理において、テキストデータの圧縮率を向上させるデータ圧縮装置、データ伸長装置、データ圧縮プログラム、及びデータ伸長プログラムを提供することを目的とする。
【課題を解決するための手段】
【0008】
上記課題を解決するために、明細書開示のデータ圧縮装置は、テキストデータの入力を受け付ける入力部と、前記テキストデータを所定の規則に基づき複数のブロックに分割する分割部と、文字列と符号とが対応付けられて格納された辞書データである基準辞書に基づき、処理対象ブロックに出現する文字列のうち、該基準辞書に登録されていない文字列と、該基準辞書において前記処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書を生成する差分辞書生成部と、前記作成した差分辞書と前記基準辞書とに基づき、辞書データである処理対象辞書を生成する処理対象辞書生成部と、前記生成した処理対象辞書を参照し、前記処理対象ブロックに出現する文字列を対応する符号に置き換えることで、該処理対象ブロックを圧縮する圧縮部と、前記圧縮部が圧縮した前記処理対象ブロックのデータと、前記生成した差分辞書とを出力する出力部と、を備える。
【0009】
また、上記課題を解決するために、明細書開示のデータ伸長装置は、処理対象ブロック毎に、文字列と符号とが対応付けられて格納された辞書データである基準辞書に基づき、該処理対象ブロックに出現する文字列のうちで該基準辞書に登録されていない文字列と該基準辞書において前記処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書と、符号列である圧縮データとの入力を受け付ける入力部と、前記圧縮データを所定の規則に基づき複数のブロックに分割する分割部と、処理対象ブロック毎に、前記受け付けた基準辞書と該処理対象ブロックの差分辞書とに基づき、辞書データである処理対象辞書を生成する処理対象辞書生成部と、処理対象ブロック毎に、前記生成した処理対象辞書に基づいて、該処理対象ブロックを復号する復号部と、を備える。
【0010】
また、上記課題を解決するために、明細書開示のデータ圧縮プログラムは、コンピュータに、テキストデータの入力を受け付ける入力ステップと、前記テキストデータを所定の規則に基づき複数のブロックに分割する分割ステップと、文字列と符号とが対応付けられて格納された辞書データである基準辞書に基づき、処理対象ブロックに出現する文字列のうち、該基準辞書に登録されていない文字列と、該基準辞書において前記処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書を生成する差分辞書生成ステップと、前記作成した差分辞書と前記基準辞書とに基づき、辞書データである処理対象辞書を生成する処理対象辞書生成ステップと、前記生成した処理対象辞書を参照し、前記処理対象ブロックに出現する文字列を対応する符号に置き換えることで、該処理対象ブロックを圧縮する圧縮ステップと、前記圧縮部が圧縮した前記処理対象ブロックのデータと、前記生成した差分辞書とを出力する出力ステップと、を実行させる。
【0011】
上記課題を解決するために、明細書開示のデータ伸長プログラムは、コンピュータに、処理対象ブロック毎に、文字列と符号とが対応付けられて格納された辞書データである基準辞書に基づき、該処理対象ブロックに出現する文字列のうちで該基準辞書に登録されていない文字列と該基準辞書において前記処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書と、符号列である圧縮データとの入力を受け付ける入力ステップと、前記圧縮データを所定の規則に基づき複数のブロックに分割する分割ステップと、処理対象ブロック毎に、前記受け付けた基準辞書と該処理対象ブロックの差分辞書とに基づき、辞書データである処理対象辞書を生成する処理対象辞書生成ステップと、処理対象ブロック毎に、前記生成した処理対象辞書に基づいて、該処理対象ブロックを復号する復号ステップと、を実行させる。
【発明の効果】
【0012】
明細書開示のデータ圧縮装置、及びデータ圧縮プログラムによれば、ブロックストリーム処理において、テキストデータの圧縮率を向上できる。
【0013】
明細書開示のデータ伸長装置、及びデータ伸長プログラムによれば、ブロックストリーム処理において、テキストデータの圧縮率を向上させた圧縮データを、伸長できる。
【図面の簡単な説明】
【0014】
【図1】実施例に係るデータ圧縮装置を含むシステム構成の一例を示す図である。
【図2】データ圧縮装置のハードウェア構成の一例を示す図である。
【図3】データ圧縮装置が有する機能を実現する手段の一例を示す機能ブロック図である。
【図4】辞書型符号化方式の概要を説明する図である。
【図5】データ圧縮装置が実行するデータ圧縮処理の一例を示すフローチャートである。
【図6】辞書更新処理の一例を示すフローチャートである。
【図7】被圧縮データの一例を示す図である。
【図8】圧縮データを作成する過程の一例を説明するための図である。
【図9】差分辞書作成処理の一例を示すフローチャートである。
【図10】圧縮データを作成する過程の一例を説明するための図である。
【図11】圧縮データを作成する過程の一例を説明するための図である。
【図12】圧縮データを作成する過程の一例を説明するための図である。
【図13】圧縮データを作成する過程の一例を説明するための図である。
【図14】圧縮データを作成する過程の一例を説明するための図である。
【図15】圧縮データを作成する過程の一例を説明するための図である。
【図16】圧縮データを作成する過程の一例を説明するための図である。
【図17】圧縮データの一例を示す図である。
【図18】比較例1、比較例2及び実施例により作成される圧縮データの一例を説明するための図である。
【図19】比較例1、比較例2及び実施例により作成される圧縮データの一例を説明するための図である。
【図20】比較例1、比較例2、及び実施例による圧縮データのサイズ比較の一例を示す模式図である。
【図21】実施例に係るデータ伸長装置を含むシステム構成の一例を示す図である。
【図22】データ伸長装置が有する機能を実現する手段の一例を示す機能ブロック図である。
【図23】データ伸長処理の一例を示すフローチャートである。
【図24】圧縮データを伸長する過程の一例を説明するための図である。
【図25】辞書復元処理の一例を示すフローチャートである。
【図26】圧縮データを伸長する過程の一例を説明するための図である。
【図27】圧縮データを伸長する過程の一例を説明するための図である。
【図28】データ圧縮/伸長装置を含むシステム構成の一例を示す図である。
【発明を実施するための形態】
【0015】
以下、本件の実施形態について、添付図面を参照しつつ説明する。
[データ圧縮装置]
【0016】
本件のデータ圧縮装置について説明する。図1は本件のデータ圧縮装置を含むシステム構成の一例を示す図である。図1に示すように、データ圧縮装置100は、ネットワーク40を介して、記憶装置10、センサ装置20、及びデータ処理装置30と接続されている。
【0017】
記憶装置10は、ハードディスクドライブ等で構成され、圧縮対象のデータ(以後、被圧縮データと記載する)、及び圧縮後のデータを格納する。
【0018】
センサ装置20は、例えば、企業の従業員出入り口に設置される入退出管理装置である。センサ装置20は、センサにより取得したデータをデータ圧縮装置100へ送信する。例えば、センサ装置20は、従業員が所持するIDカードの情報を取得して、従業員番号、氏名、及び勤務地を被圧縮データとしてデータ圧縮装置100へ送信する。センサ装置20は、センサと、センサが取得したデータを処理する情報処理装置とからなるセンサネットワークであっても良い。
【0019】
データ処理装置30は、パーソナルコンピュータ等で構成され、入力されたデータに対し、演算等の予め定められたデータ処理を行う。データ処理装置30は、予め定められた処理を施したデータを被圧縮データとして、データ圧縮装置100へ送信する。また、データ処理装置30は、データ圧縮装置100から、データ圧縮装置100が圧縮したデータを受け付ける。
【0020】
ネットワーク40は、例えば、LAN(Local Area Network)、WAN(Wide Area Network)等で構成される。ネットワーク40は、センサ装置20、データ処理装置30、及びデータ圧縮装置100が送信するデータを、送信先に伝送する。
【0021】
データ圧縮装置100は、記憶装置10、センサ装置20、及びデータ処理装置30から被圧縮データを受信する。被圧縮データは、CSV形式、XML形式等の構造を有するテキストデータである。データ圧縮装置100は、被圧縮データを複数のブロックに分割し、ブロック毎に圧縮処理を実行して圧縮データを生成する。データ圧縮装置100は、圧縮データを記憶装置10へ格納する。または、データ圧縮装置100は、圧縮データをデータ処理装置30へ送信する。
【0022】
次に、図2を用いてデータ圧縮装置100のハードウェア構成について説明する。図2に示すように、データ圧縮装置100は、入出力部101、ROM(Read Only Memory)102、中央処理装置(CPU:Central Processing Unit)103、及びRAM(Random Access Memory)104を備える。
【0023】
入出力部101は、記憶装置10、センサ装置20、及びデータ処理装置30から被圧縮データを受け付ける。また、入出力部101は、圧縮データを記憶装置10、及びデータ処理装置30へ出力する。ROM102は、被圧縮データを圧縮するためのプログラム等を格納する。CPU103は、ROM102に格納されたプログラムを読み込んで実行する。RAM104は、プログラムを実行する際に使用される一時的なデータを保存する。また、ROM102に格納されたプログラムのCPU103による演算によって、図3に示すデータ圧縮装置100が有する機能が実現される。
【0024】
次に、図3を参照して、データ圧縮装置100が有する機能の一例について説明する。図3は、データ圧縮装置100が有する機能を実現する手段の一例を示す機能ブロック図である。
【0025】
データ圧縮装置100は、データ取得部110、辞書作成部111、差分辞書作成部112、符号化部113、及び出力部114を備える。
【0026】
データ取得部110は、記憶装置10、センサ装置20、及びデータ処理装置30等が送信した被圧縮データ(テキストデータ)を受け付ける入力部としての機能と、被圧縮データを所定の規則に基づき複数のブロックに分割する分割部としての機能を有する。データ取得部110は、分割した被圧縮データを、辞書作成部111に出力する。
【0027】
辞書作成部111(処理対象辞書生成部)は、被圧縮データを所定の規則に基づき分割した複数ブロックのうち、圧縮処の対象となるブロック(以後、処理対象ブロックという)のデータを符号化する際に必要な辞書を、データ取得部110から入力されたデータを元に作成する。辞書は、符号項目と、値項目とを有しており、辞書作成部111は、処理対象ブロックのデータに出現する文字列を値項目に登録し、文字列に対応付けられる所定の符号を符号項目に登録する。例えば、入力データが図4(1)に示すデータであり、符号化する項目が「地区」の場合、辞書作成部111は、地区の列に出現する文字列と、所定の符号とを対応付けた、図4(2)に示す辞書を作成する。
【0028】
符号化部113(圧縮部)は、ブロック毎に、辞書作成部111が作成した辞書を用いて、データを符号化し、出力部114に出力する。例えば、符号化部113は、図4(2)に示した辞書を用いて、図4(1)の「地区」の文字列を符号に置換することによって被圧縮データを符号化する。符号化されたデータは、図4(3)となる。
【0029】
差分辞書作成部112(差分辞書生成部)は、差分辞書を作成し、出力部114へ出力する。差分辞書作成部112は、処理対象ブロックとは異なる基準ブロックの符号化に用いた辞書と、処理対象ブロックに含まれる符号化対象の文字列とに基づいて差分辞書を作成する。差分辞書は、符号化に使用される辞書と同様に、符号項目と値項目とを有する。差分辞書作成部112は、処理対象ブロックに出現する文字列のうち、基準ブロックの符号化に用いた辞書に登録されていない文字列を差分辞書の値項目に登録する。また、差分辞書作成部112は、差分辞書に登録した文字列に対して、基準ブロックの辞書において、基準ブロックの辞書には登録されているが処理対象ブロックには出現しない文字列に対応付けられている符号を割り当てる。例えば、基準ブロックの辞書が図4(4)であり、処理対象ブロックに含まれる符号化対象の文字列が図4(5)であるとする。この場合、差分辞書作成部112は、処理対象ブロックには出現するが基準ブロックの辞書には登録されていない文字列「New York」を差分辞書に登録する。また、差分辞書作成部112は、処理対象ブロックには出現しないが基準ブロックには登録されている文字列「Las Vegas」に割り当てられている符号「3」を、差分辞書に登録した文字列「New York」に対して割り当てる。その結果、差分辞書は図4(6)となる。
【0030】
出力部114は、差分辞書と符号化されたデータとを、ブロック毎に、記憶装置10、又は、データ処理装置30に出力する。
【0031】
次に、データ圧縮装置100が実行する処理の一例について、図5及び図6を用いて説明する。図5は、データ圧縮装置100が実行する圧縮処理の一例を示すフローチャートである。本実施例では、連続する2つのブロックにおける前方のブロックを基準ブロックと記載し、後方のブロックを処理対象ブロックと記載する。
【0032】
辞書作成部111は、基準ブロックの辞書Dic0を空テーブルで初期化する(ステップS10)。これは、被圧縮データの最初のブロックが処理対象ブロックである場合、基準ブロックが存在しないためである。
【0033】
次に、辞書作成部111は、処理対象ブロックの符号化に使用する辞書(処理対象辞書)Dic1、及び読み込んだレコード数をカウントするための変数Mをそれぞれ初期化する(ステップS12)。初期化によって、辞書Dic1は空テーブルとなり、Mの値は0となる。
【0034】
データ取得部110は、被圧縮データに処理するレコードが存在するか否か判定する(ステップS14)。データ取得部110は、処理するレコードが存在する場合(ステップS14/YES)、レコードを取得し、Mに1を加算する(ステップS16)。
【0035】
次に、辞書作成部111は、処理対象ブロックの辞書を作成するため、辞書更新処理を実行する(ステップS18)。ここで、ステップS18の辞書更新処理について、図6を用いて説明する。
【0036】
図6は、処理対象ブロックの辞書を作成する辞書更新処理の一例を示すフローチャートである。
【0037】
辞書作成部111は、取得したレコードに含まれる文字列が辞書Dic1のエントリに存在するか否か判定する(ステップS50)。辞書作成部111は、取得したレコードに含まれる文字列が辞書Dic1のエントリに存在しない場合(ステップS50/NO)、文字列と符号とを対応付けたエントリを辞書Dic1に新規登録し(ステップS52)、更新処理を終了する。一方、辞書作成部111は、取得したレコードに含まれる文字列が辞書Dic1のエントリに存在する場合、更新処理を終了する。
【0038】
図5に戻り、圧縮処理の一例について説明を続ける。データ取得部110は、Mの値が、予め定められた値MBよりも小さいか否か判定する(ステップS20)。ここで、MBは、1ブロックに含まれるレコード数を定める。MBの値は、被圧縮データが保持していても良いし、ユーザが予め決定しておいても良い。また、MBの値は、全ブロックを通して同一でも良いし、ブロック毎に異なっても良い。
【0039】
Mの値がMBの値よりも小さい場合、処理対象ブロックのレコードが、未だ全て読み込まれていないことを意味する。従って、データ取得部110は、Mの値がMBの値よりも小さい場合(ステップS20/YES)、ステップS14に戻って処理を継続する。
【0040】
Mの値がMBの値と等しい場合、処理対象ブロックのレコードが全て読みこまれたことを意味する。そこで、データ取得部110が、Mの値がMBの値と等しいと判定すると(ステップS20/NO)、差分辞書作成部112は、差分辞書作成処理(ステップS22)を実行する。差分辞書作成処理の詳細については後述する。
【0041】
出力部114は、差分辞書作成部112が差分辞書作成処理で作成した差分辞書Δを出力する(ステップS24)。次に、辞書作成部111は、基準ブロックの辞書Dic0と差分辞書Δとをマージして符号化用の辞書を構築し、それを新たな辞書Dic1とする(ステップS26)。具体的には、辞書Dic0と差分辞書Δとの間で重複する符号がある場合には、重複する符号に対応付けられた辞書Dic0の文字列を、差分辞書Δの文字列で置換する。また、辞書Dic0に登録されていない符号が差分辞書Δに登録されている場合には、辞書Dic0に差分辞書Δのエントリを追加する。つまり、符号化部113が使用する辞書Dic1は、処理対象ブロックに出現する文字列のうち、基準ブロックで使用された辞書に定義されている文字列には、基準ブロックの辞書と同一の符号が割り当てられた辞書となる。また、辞書Dic1は、基準ブロックの辞書に登録されていない文字列には、基準ブロックの辞書において処理対象ブロックに出現しない文字列に対応付けられた符号が割り当てられた辞書となる。
【0042】
符号化部113は、ステップS26で更新された辞書Dic1を使用して、処理対象ブロックに出現する文字列を符号化する(ステップS28)。出力部114は、符号化部113が符号化したデータを出力する(ステップS30)。ステップS24及びステップS30の処理によって、処理対象ブロックの圧縮データが作成される。
【0043】
辞書作成部111は、次ブロックの圧縮処理のために、辞書Dic0を初期化し(ステップS32)、ステップS12の処理へ戻る。本フローチャートでは、連続する2つのブロックのうち、前方のブロックを基準ブロック、後方のブロックを処理対象ブロックとしている。従って、今回処理したブロックは次に処理するブロックの基準ブロックとなるので、辞書Dic0は、辞書Dic1で初期化される。
【0044】
データ取得部110は、処理するレコードが存在しない場合(ステップS14/NO)、Mの値が0か否か判定する(ステップS34)。
【0045】
Mの値が0の場合とは、次のブロックが存在しない場合である。従って、データ取得部110はMの値が0の場合(ステップS34/YES)、データ圧縮処理を終了する。
【0046】
Mの値が0ではない場合とは、最後の処理対象ブロックに存在するデータの読込が全て終了した場合である。そこで、データ取得部110が、Mの値が0ではないと判定すると(ステップS34/NO)、差分辞書作成部112はステップS22、出力部114はステップS24及びステップS30、符号化部113はステップS28、辞書作成部111はステップS26の処理をそれぞれ実行する。ステップS22〜ステップS30の処理は、前述した各ステップの処理と同じであるため、説明を省略する。以上の処理により、被圧縮データは、ブロック毎に差分辞書と符号化データを含んで圧縮される。
【0047】
次に、図7〜図17を参照しつつ、具体的なデータを用いて、上述した圧縮処理によるデータ圧縮について説明すると共に、差分辞書作成処理の詳細について説明する。図7は、本説明で用いる被圧縮データの一例である。本実施例では、地区項目に入力されている文字列を符号化した圧縮データを作成するとする。また、3レコード(つまり、MB=3)を1ブロックとして、ブロックストリーム処理によりデータを圧縮するものとする。
【0048】
データ圧縮装置100は、図5のステップS10及びS12の初期化処理を行う。次に、処理対象となるレコードが存在するため(ステップS14/YES)、データ取得部110が、図8(1)に示す1行目のレコードを取得する(ステップS16)。
【0049】
次に、辞書作成部111が、辞書Dic1の更新処理(ステップS18)を実行する。この時点で辞書Dic1は空テーブルであるため、辞書Dic1において、San Franciscoを値項目に有するエントリは存在しない(ステップS50/NO)。従って、辞書作成部111は、San Franciscoに符号「1」を割り当てたエントリを辞書Dic1に新規登録し(ステップS52)、処理を終了する。更新後の辞書Dic1は図8(2)となる。
【0050】
M(=1)<MB(=3)であり(ステップS20/YES)、次のレコードが存在するため(ステップS14/YES)、データ取得部110は、図8(3)に示す2行目のレコードを取得する(ステップS16)。
【0051】
図6の辞書更新処理において、Washington D.C.は、辞書Dic1に存在しないため(ステップS50/NO)、辞書作成部111は、Washington D.C.に符号「2」を割り当てたエントリを辞書Dic1に新規登録し(ステップS52)、処理を終了する。更新後の辞書Dic1は、図8(4)となる。
【0052】
M(=2)<MB(=3)であり(ステップS20/YES)、次のレコードが存在するため(ステップS14/YES)、データ取得部110は、図8(5)に示す3行目のレコードを入力する。
【0053】
図6の辞書更新処理において、Washington D.C.は、既に辞書Dic1に存在しているため(ステップS50/YES)、辞書作成部111は、辞書Dic1にエントリは新規登録せず、処理を終了する。
【0054】
M(=3)がMB(=3)と一致するため(ステップS20/NO)、差分辞書作成部112が、差分辞書作成処理(ステップS22)を実行する。
【0055】
ここで、具体例を用いながら、差分辞書作成処理について説明する。図9は、差分辞書作成処理の一例を示すフローチャートである。
【0056】
差分辞書作成部112は、差分辞書Δを基準ブロックの辞書Dic0で初期化する(ステップS60)。なお、最初のブロックでは、辞書Dic0は空集合となっているため、差分辞書Δも空集合となる。
【0057】
次に、差分辞書作成部112は、基準ブロックの辞書Dic0の値項目の集合と、更新処理を実行した辞書Dic1の値項目の集合との差集合Diff0を求める(ステップS62)。図9では、辞書Dic0の値項目の集合をDic0.val、辞書Dic1の値項目の集合を辞書Dic1.valと記載する。
【0058】
次に、差分辞書作成部112は、辞書Dic1の値項目の集合と、辞書Dic1の値項目の集合との差集合Diff1を求める(ステップS64)。更に、差分辞書作成部112は辞書Dic1の値項目の集合と、辞書Dic0の値項目の集合との積集合NoDiffを求める(ステップS66)。
【0059】
図8に示した具体例において、辞書Dic0の値項目の集合Dic0.valは空集合であり、辞書Dic1の値項目の集合Dic1.val={San Francisco,Washington D.C.}である。この場合、辞書Dic0には存在するが辞書Dic1には存在しない値項目は、存在しない。従って、ステップS62の処理を実行すると、差集合Diff0は空集合となる。また、辞書Dic0には存在しないが辞書Dic1には存在する値項目は、San Francisco及びWashington D.C.である。従って、ステップS64の処理を実行すると、差集合Diff1={San Francisco,Washington D.C.}となる。更に、辞書Dic0と、辞書Dic1との間に共通する値項目は存在しないため、ステップS66の処理を実行すると、積集合NoDiffは空集合となる。
【0060】
次に、差分辞書作成部112は、Diff1が空集合か否か判定する(ステップS68)。差分辞書作成部112は、Diff1が空集合ではない場合(ステップS68/NO)、差分辞書作成部112は、Diff0が空集合か否か判定する(ステップS70)。
【0061】
差分辞書作成部112は、Diff0が空集合の場合(ステップS70/YES)、Diff1の全ての要素を差分辞書Δに新規登録する(ステップS76)。そして、差分辞書作成部112は、NoDiffの要素と一致する値を持つエントリを差分辞書Δから全て除去し(ステップS78)、差分辞書Δを辞書作成部111及び出力部114に出力する(ステップS80)。
【0062】
具体例では、Diff1は空集合ではなく(ステップS68/NO)、Diff0は空集合である(ステップS70/YES)。したがって、差分辞書作成部112は、ステップS76の処理を実行する。ステップS76の処理実行後の差分辞書Δは図10(1)となる。また、具体例において、NoDiffは空集合であるため、ステップS78において、差分辞書Δから除去するエントリは存在しない。従って、差分辞書作成部112は、ステップS80の処理を実行し、図10(1)に示す差分辞書Δを辞書作成部111及び出力部114に出力する。図9の差分辞書作成処理における他のステップについては、後述する。
【0063】
差分辞書作成処理が終了すると、出力部114が差分辞書Δを圧縮データの一部として出力する(ステップS24)。次に、辞書作成部111は、辞書Dic0と差分辞書Δとに基づいて、辞書Dic1を更新する(ステップS26)。今回は、辞書Dic0が空集合であるため、差分辞書Δのエントリが辞書Dic0に追加され、符号化に使用される辞書Dic1となる(図10(2))。
【0064】
符号化部113は、図10(2)に示す、辞書作成部111が作成した辞書を用いて、図10(3)に示すように、1行目〜3行目までのレコードを符号化する。
【0065】
上述のように符号化されたブロックB1は、次に圧縮処理が実行されるブロックの基準ブロックとなる。従って、辞書作成部111は、ブロックB1の辞書Dic1で、辞書Dic0を初期化する(ステップS32)。初期化された辞書Dic0は、図11(1)となる。
【0066】
次に、データ取得部110は、図11(2)に示す、ブロックB2の1行目のレコードを取得する(ステップS16)。新しいブロックの処理を開始するにあたり、ステップS12において辞書Dic1は初期化されて空テーブルとなっており、辞書Dic1には、San Franciscoの値を持つエントリが存在しない(ステップS50/NO)。従って、図6の辞書更新処理により、辞書Dic1には、図11(3)に示す、San Franciscoに符号「1」を割り当てたエントリが新規登録される(ステップS52)。
【0067】
データ取得部110は、同様にして、図11(4)に示す、ブロックB2の2行目のレコードを取得する(ステップS16)。辞書Dic1には、Washington D.C.の値を持つエントリが存在しないため(ステップS50/NO)、図11(5)に示すように、Washington D.C.に符号「2」を割り当てたエントリが、辞書Dic1に新規登録される(ステップS52)。
【0068】
データ取得部110は、次に、図11(6)に示す、ブロックB2の3行目のレコードを取得する(ステップS16)。辞書Dic1には、New Yorkの値を持つエントリが存在しないため(ステップS50/NO)、図11(7)に示すように、New Yorkに符号「3」を割り当てたエントリが、辞書Dic1に新規登録される(ステップS52)。
【0069】
ここで、Mの値が3となり、所定のレコード数を読み込んだため(ステップS20/NO)、差分辞書作成部112が差分辞書作成処理(ステップS22)を行う。
【0070】
ステップS22では、前述した図9のステップS60〜ステップS66の処理を、差分辞書作成部112が実行する。その結果、初期化された差分辞書Δは、図12(1)となり、Diff0は空集合、Diff1={New York}、NoDiff={San Francisco,Washington D.C.}となる。
【0071】
Diff1が空集合ではなく(ステップS68/NO)、Diff0が空集合であるため(ステップS70/YES)、Diff1の要素が差分辞書Δに新規登録される(ステップS76)。その結果、具体例において、ステップS76の処理実行後の差分辞書Δは図12(2)となる。
【0072】
次に、差分辞書作成部112は、ステップS78の処理を実行する。具体例では、NoDiffの要素(San FranciscoとWashington D.C.)を値に持つエントリが、現在の差分辞書Δに存在する。従って、差分辞書作成部112は、差分辞書Δから、(San FranciscoとWashington D.C.)を値に持つエントリを削除し(ステップS78)、差分辞書Δを出力部114及び辞書作成部111に出力する(ステップS80)。出力される差分辞書Δは、図12(3)となる。
【0073】
次に、辞書作成部111は、図13(1)に示す辞書Dic0と、図13(2)に示す差分辞書Δとに基づいて、辞書Dic1を更新する(ステップS26)。この場合、差分辞書Δに含まれる符号「3」は、辞書Dic0には登録されていない符号であるので、辞書Dic0に差分辞書Δのエントリを追加したものを、辞書Dic1とする。その結果、辞書Dic1は図13(3)となる。
【0074】
符号化部113は、図13(3)の辞書を用いて、ブロックB2のデータを符号化する(ステップS28)。符号化されたデータは図13(4)となる。
【0075】
ブロックB2は、次に圧縮処理が実行されるブロックの基準ブロックとなる。従って、辞書作成部111は、ブロックB2の辞書Dic1で、辞書Dic0を初期化する(ステップS32)。初期化された辞書Dic0は、図14(1)となる。
【0076】
次に、データ取得部110は、図14(2)に示す、ブロックB3の1行目のレコードを取得する(ステップS16)。新しいブロックの処理を開始するにあたり、辞書Dic1は初期化されて空テーブルとなっているため、辞書Dic1には、Chicagoの値を持つエントリは存在しない(ステップS50/NO)。従って、辞書更新処理により、辞書Dic1には、図14(3)に示す、Chicagoに符号「1」を割り当てたエントリが新規登録される(ステップS52)。
【0077】
データ取得部110は、図13(4)に示す、ブロックB3の2行目のレコードを取得する(ステップS16)。辞書Dic1には、San Franciscoの値を持つエントリが存在しないため(ステップS50/NO)、図14(5)に示すように、San Franciscoに符号「2」を割り当てたエントリが辞書Dic1に新規登録される(ステップS52)。
【0078】
データ取得部110は、次に、図14(6)に示す、ブロックB3の3行目のレコードを取得する(ステップS16)。辞書Dic1には、San Franciscoの値を持つエントリが既に存在するので(ステップS50/YES)、辞書Dic1は変更されず、図14(5)のままである。
【0079】
ここで、Mの値が3となり、所定のレコード数を読み込んだため(ステップS20/NO)、差分辞書作成部112が差分辞書作成処理(ステップS22)を行う。
【0080】
ステップS22では、前述した図9のステップS60〜ステップS66の処理を、差分辞書作成部112が実行する。その結果、具体例において、初期化された差分辞書Δは図15(1)となる。また、Diff0={Washington D.C.,New York}、Diff1={Chicago}、NoDiff={San Francisco}となる。具体例において、Diff1は空集合ではなく(ステップS70/NO)、Diff0も空集合ではない(ステップS70/NO)。
【0081】
図9のフローチャートにおいて、差分辞書作成部112は、Diff0が空集合ではない場合(ステップS70/NO)、集合Diff0の要素d0、集合Diff1の要素d1を取得し、差分辞書Δにおけるd0をd1に置換する。そして、差分辞書作成部112は、Diff0から要素d0を、Diff1から要素d1をそれぞれ削除する(ステップS72)。その後、差分辞書作成部112は、ステップS68に戻り処理を継続する。
【0082】
具体例で、差分辞書Δにおいて、Diff0の要素であるWashington D.C.が、Diff1の要素であるChicagoで置換される。また、Diff0からWashington D.C.が削除され、Diff1からChicagoが削除される。その結果、ステップS72実行後の差分辞書Δは、図15(2)となり、また、Diff0={New York}、Diff1は空集合となる。Diff1が空集合であるとは、基準ブロックの辞書Dic0に存在するが処理対象ブロックには出現しない文字列の数が、辞書Dic0には存在しないが処理対象ブロックには出現する文字列の数を超えているということである。
【0083】
そこで、図9のフローチャートにおいて、差分辞書作成部112は、Diff1が空集合の場合(ステップS68/YES)、差分辞書Δにおいて、Diff0の要素と一致する値を全てNULLに置換する(ステップS74)。次に、差分辞書作成部112は、Nodiffの要素と一致する値を持つエントリを差分辞書Δから全て除去し(ステップS78)、差分辞書Δを出力部114及び辞書作成部111出力する(ステップS80)。
【0084】
具体例においては、差分辞書Δにおいて、Diff0の要素であるNew YorkがNULLに置換される(ステップS74)。この処理の結果、ステップS74実行後の差分辞書Δは図15(3)となる。そして、差分辞書作成部112は、ステップS78において、現在の差分辞書ΔからNoDiffの要素(San Francisco)の値を持つエントリを除去する。その結果、ステップS80で出力される差分辞書Δは、図15(4)となる。
【0085】
次に、辞書作成部111は、図16(1)に示す辞書Dic0と、図16(2)に示す差分辞書Δとに基づいて、ブロックB3の符号化に用いる辞書Dic1を更新する(ステップS26)。辞書Dic0と差分辞書Δとは、符号「2」及び「3」が重複するので、辞書Dic0において、符号「2」及び「3」が割り当てられている文字列を、差分辞書Δの文字列で上書きし、辞書Dic1を更新する。その結果、辞書Dic1は、図16(3)となる。
【0086】
符号化部113は、図16(3)に示される辞書Dic1を用いて、ブロックB3のデータを符号化する(ステップS28)。符号化されたデータは、図16(4)となる。
【0087】
このようにして、図7に示す被圧縮データは、図17に示すように、ブロック毎に、差分辞書Δと符号化データとを有する圧縮データとなり出力される。
【0088】
以上の説明から明らかなように、本実施例に係るデータ圧縮装置は、ブロックにおいて、処理対象ブロックに出現する文字列のうち、基準辞書に登録されていない文字列と、基準辞書において処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書を生成する。これにより、ブロックストリーム処理においてテキストデータを圧縮する場合、ブロック毎に差分辞書と符号化データとを含む圧縮データを作成し、かつ差分辞書で文字列に割り当てる符号を再利用して、圧縮率を向上させることができる。
【0089】
ここで、図18及び図19を用いて、比較例1及び2と、本実施例とによる被圧縮データの圧縮率を比較する。図18(1)は、本説明で使用する被圧縮データを示す。本説明では、4レコードを1ブロックとして処理することとする。
【0090】
まず、比較例1による圧縮データの作成について説明する。図18(2)は、比較例1により被圧縮データを圧縮した場合のデータ例である。比較例1は、ブロック毎に、ブロックに出現する文字列と、符号とを対応付けた辞書を登録して、圧縮データを作成する。また、ブロックが変わる都度、符号を1から採番し直す。
【0091】
具体的に、図18(1)のデータを用いて説明する。図18(1)に示す被圧縮データのブロックB1において、ブロックに出現する文字列は、San Francisco、Washington D.C.、Los Angels、New Orleansの4つである。従って、比較例1では、上記4つの文字列と符号とを対応付けた辞書をブロックB1の辞書として登録し、図18(2)に示すように、辞書と符号化データとを含むブロックB1の圧縮データを作成する。
【0092】
次に、比較例1では、ブロックB2において、ブロックに出現するWashington D.C.、New York、Chicago、及びLos Angelsの4つの文字列と、符号とを対応付けた辞書をブロックB2の辞書として登録する。また、ブロックB3では、ブロックに出現するWashington D.C.、New York、Chicago、及びLos Angelsの4つの文字列と、符号とを対応付けた辞書をブロックB3の辞書として登録する。そして、ブロック毎に登録された辞書を用いて、被圧縮データを符号化する。その結果、比較例1の圧縮データは、図18(2)となる。
【0093】
次に、比較例2による圧縮データの作成について説明する。図19(1)は、比較例2により被圧縮データを圧縮した場合のデータ例である。比較例2は、ブロック毎に、本実施例と同様の差分辞書を作成するが、差分辞書に登録される文字列に、新たに採番した符号を割り当てる。すなわち、比較例2は、基準ブロックには出現するが処理対象ブロックには出現しない文字列に対応付けられていた符号の再利用は行わない。
【0094】
比較例2について、具体的に説明する。比較例2において、ブロックB1は最初の処理対象ブロックであるため、基準ブロックの辞書が存在しない。従って、ブロックB1については、比較例2においても、比較例1と同様のエントリを持つ差分辞書が登録される。次に、ブロックB2において、比較例2はブロックB1の辞書には登録されていないがブロックB2には出現する文字列に対して、差分辞書を登録する。つまり、New York、及びChicagoの文字列を差分辞書に登録する。ここで、比較例2では、差分辞書に登録された文字列に、新たに採番した符号を割り当てる。ブロックB1において、符号は「4」まで使用されているので、比較例2は、新規の符号「5」及び「6」をNew York及びChicagoにそれぞれ割り当てる。ブロックB3では、ブロックB2の符号化に使用された辞書には存在しないがブロックB3には出現する文字列に対して、差分辞書を登録する。つまり、Las Vegas及びMexico Cityの文字列を差分辞書に登録する。そして、ブロックB2の差分辞書を作成する際に、符号を「6」まで採番済みであるので、Las Vegas及びMexico Cityには、新規の符号「7」及び「8」をそれぞれ割り当てる。以上のようにして、比較例2は、図19(1)に示すように、差分辞書と符号化データとを含む圧縮データをブロック毎に作成する。
【0095】
図19(2)は、本実施例により図18(1)の被圧縮データを圧縮した場合のデータ例である。本実施例において、ブロックB1は最初の処理対象ブロックであるため、基準ブロックの辞書が存在しない。従って、ブロックB1については、実施例においても、比較例1及び2と同様のエントリを持つ差分辞書が登録される。次に、ブロックB2において、実施例はブロックB1の辞書には登録されていないがブロックB2には出現する文字列に対して、差分辞書を登録する。つまり、New York、及びChicagoの文字列を差分辞書に登録する。そして、実施例では、ブロックB1の辞書において、ブロックB1の辞書には登録されているがブロックB2には出現しない文字列に割り当てられている符号を再利用する。図19(2)の例では、ブロックB2には出現しないSan Francisco及びNew Orleansに対して、ブロックB1の辞書で割り当てられている符号「1」及び「4」を再利用し、New York、及びChicagoに対して割り当てる。また、ブロックB3では、ブロックB3には出現しないLos Angels及びChicagoに対して、ブロックB2を符号化した辞書で割り当てられている符号「3」及び「4」を再利用し、Las Vegas及びMexico Cityに割り当てる。以上のようにして、本実施例は、図19(2)に示すように、差分辞書と符号化データとを含む圧縮データをブロック毎に作成する。
【0096】
次に、比較例1及び2と、本実施例との圧縮率を比較する。
【0097】
比較例1では、上述したように、ブロック毎に、ブロックに出現する文字列と符号とを対応付けた辞書を作成する。従って、図18(2)に示すように、ブロック毎に登録された辞書間で重複した値を含むこととなる。例えば、ブロックB1の辞書と、ブロックB2の辞書とでは、Washington D.C.とLos Angelsとが重複している。また、ブロックB2の辞書とブロックB3の辞書とでは、Washington D.C.とNew Yorkとが重複している。このため、比較例1では、辞書全体のサイズが大きくなり、圧縮率の悪化を引き起こす。
【0098】
比較例2では、ブロックB2の辞書には、ブロックB1で出現する文字列は登録されず、ブロックB2で初めて出現した文字列のみが差分辞書に登録される。従って、比較例1と比較して、辞書サイズを小さくすることができる。
【0099】
しかし、比較例2では、基準ブロックには出現しないが処理対象ブロックでは出現する文字列に、新たに採番した符号を割り当てる。従って、比較例1のようにブロック毎に辞書を出力する場合と比べて、符号数が増加してしまい、符号の符号長が長くなってしまう恐れがある。そこで、比較例2のように、符号を新たに採番する場合と、本実施例のように再利用する場合との間の圧縮率の違いについて説明する。
【0100】
被圧縮データDを、N個のブロックに分割したとする(D=B1・B2・B3・・・BN)。すると、比較例2の場合、つまり、符号を再利用しない場合に必要な符号の総数は、最大で被圧縮データDに含まれるエントリの数となる。一方、本実施例のように、符号を再利用する場合、必要な符号の総数は、最大で、ブロックBi(i=1〜N)に含まれるエントリの数となる。
【0101】
符号化に整数を用いると仮定すると、比較例2の場合、符号が256種類までならば、符号長1バイトで符号化できるが、それ以上の場合、65536種類までは符号長2バイトが必要となり、それ以上となると符号長はさらに長くなる。一方、本実施例の場合、必要な符号の総数は、最大でブロックBiに含まれるエントリ数であるため、1ブロックに含まれるレコード数を256以下とすれば、符号長が1バイトを超えることはない。
【0102】
図20は、比較例1、比較例2、及び本実施例によってデータを圧縮した場合の、圧縮データのファイルサイズを模式的に示した図である。図20中、ハッチングを施した部分は辞書データを表し、ハッチングを施していない部分は、符号化データを表す。図20からもわかるように、比較例1と比較例2とでは、比較例2の方が、辞書サイズが小さくなるため、圧縮データサイズも小さくなる。
【0103】
また、比較例2と本実施例とでは、本実施例の方が、符号を再利用することのより、符号長が長くなる可能性を低減できるため、比較例2と比較して更に圧縮データサイズを小さくすることができる。つまり、本実施例では、差分辞書を用いることで、辞書に登録されるエントリ数を削減できるため、辞書データのファイルサイズを削減できる。更に、符号を再利用することによって、符号長を短くして、符号に必要なデータサイズを削減できるため、更に圧縮率を向上できる。
[データ伸長装置]
【0104】
次に、本件に係るデータ伸長装置について説明する。図21は、本件に係るデータ伸長装置を含むデータ伸長システムの一構成例を示している。
【0105】
データ伸長装置200は、ネットワーク40を介して、記憶装置10、及びデータ処理装置30と接続している。
【0106】
記憶装置10は、伸長対象のデータ(被伸長データと記載する)を格納している。また、データ伸長装置200は、伸長されたデータを格納する。
【0107】
データ処理装置30は、データ伸長装置200に被伸長データを送信する。また、データ伸長装置200が伸長したデータを受信する。
【0108】
データ伸長装置200のハードウェア構成は、データ圧縮装置100のハードウェア構成と同様であるため、説明を省略する。ただし、データ伸長装置200の場合、ROM102は、被伸長データを伸長するためのプログラムを格納する。また、ROM102に格納されたプログラムのCPU103による演算によって、図22に示すデータ伸長装置200が有する機能が実現される。
【0109】
次に、図22を用いて、データ伸長装置200が有する機能を実現する手段について説明する。図22は、データ伸長装置200の機能ブロック図の一例である。
【0110】
図22に示すように、データ伸長装置200は、ブロック取得部201と、差分辞書及び圧縮データの入力を受け付ける入力部としての機能を実現するデータ取得部202及び差分辞書取得部203と、辞書復元部204と、復号部205と、出力部206とを備える。
【0111】
ブロック取得部201は、記憶装置10から取得した、あるいは、データ処理装置30から受信した、複数のブロックで構成された被伸長データを所定の規則に基づき複数のブロックに分割する分割部としての機能を有する。ブロック取得部201は、被伸長データから伸長処理の対象となるブロック(処理対象ブロック)を取得する。被伸長データを構成する各ブロックは、差分辞書と符号化データとを有する。
【0112】
データ取得部202は、ブロック取得部201が取得した処理対象ブロックから、符号化データを取得する。
【0113】
差分辞書取得部203は、処理対象ブロックから、差分辞書を取得する。
【0114】
辞書復元部204(処理対象辞書生成部)は、差分辞書取得部203が取得した差分辞書と、処理対象ブロックとは異なる基準ブロックの復号に使用した辞書とに基づいて、処理対象ブロックの符号化データを作成した際に使用された辞書(処理対象辞書)を復元する。本実施例では、連続する2つのブロックにおいて、前方のブロックを基準ブロックとし、後方のブロックを処理対象ブロックとする。
【0115】
復号部205は、辞書復元部204が復元した辞書を用いて、データ取得部202が取得した符号化データを復号する。
【0116】
出力部206は、復号部205が復号したブロックのデータを、記憶装置10に格納する、または、データ処理装置30に送信する。
【0117】
次に、データ伸長装置200が実行する伸長処理について説明する。図23は、データ伸長装置200が実行する伸長処理の一例を示すフローチャートである。
【0118】
まず、辞書復元部204は、基準ブロックの辞書Dicを空テーブルで初期化する(ステップS100)。被伸長データの最初のブロックが処理対象ブロックである場合、基準ブロックが存在しないためである。
【0119】
ブロック取得部201は、被伸長データに処理対象となるブロックが存在するか否かを判定する(ステップS102)。ブロック取得部201は、ブロックが存在する場合には(ステップS102/YES)、ブロックを取得する(ステップS104)。ブロック取得部201は、ブロックが存在しない場合には(ステップS102/NO)、本処理を終了する。
【0120】
ブロック取得部201がブロックを取得すると(ステップS104)、差分辞書取得部203が取得されたブロックに含まれる差分辞書Δを取得する(ステップS106)。
【0121】
次に、辞書復元部204が、処理対象ブロックの復号に使用される辞書Dic1の復元処理を実行する(ステップS108)。辞書復元処理の詳細は後述する。
【0122】
復元部205は、ステップS108の処理で復元された辞書Dic1を用いて、符号化データを復号する(ステップS110)。
【0123】
出力部206は、復号されたデータを出力する(ステップS112)。次に、辞書復元部204が、処理対象ブロックの復号に使用した辞書Dic1を使用して、辞書Dicを初期化する(ステップS114)。本実施例では、基準ブロックと処理対象ブロックとは連続する2つのブロックであるため、ステップS110で復号に使用した辞書Dic1が、次の処理対象ブロックに対する基準ブロックの辞書Dicとなるからである。
【0124】
次に、具体的なデータを用いて、上述した伸長処理によるデータ伸長について説明するとともに、辞書復元処理の詳細について説明する。ここでは、図17に示した圧縮データに伸長処理を施し、復号データを得るものとする。
【0125】
まず、ブロック取得部201が、ブロックB1を取得する(ステップS104)。差分辞書取得部203は、図24(1)に示す、ブロックB1に含まれる差分辞書Δを取得する(ステップS106)。次に、辞書復元部204が辞書復元処理を実行する(ステップS108)。
【0126】
ここで、辞書復元処理について、具体例を参照しつつ説明する。図25は辞書復元処理の一例を示すフローチャートである。辞書復元部204は、まず、処理対象ブロックのデータ復号に使用される辞書Dic1及び、集合DiffIDを初期化する(ステップS120)。辞書復元部204は、辞書Dic1を辞書Dicで初期化し、DiffIDを差分辞書Δの符号項目の値集合(図25では、Δ.IDと記載)で初期化する。
【0127】
具体例では、ブロックB1は、最初のブロックであるので基準ブロックの復号に用いた辞書Dicは空テーブルとなっている。従って、ステップS120の初期化の結果、辞書Dic1は空テーブルとなり、また、DiffID={1,2}となる。
【0128】
次に、辞書復元部204は、DiffIDに要素が存在するか否か判定する(ステップS122)。DiffIDに要素が存在する場合(ステップS122/YES)、辞書復元部204は、DiffIDにおける最小の要素kを取得し、DiffIDから要素kを消去する(ステップS124)。次に、辞書復元部204は、ステップS124で取得したkが辞書Dic1のエントリ数以下か否か判定する(ステップS126)。図25では、辞書Dic1のエントリ数を|Dic1|で表す。
【0129】
kの値が辞書Dic1のエントリ数より大きい場合(ステップS126/NO)、辞書復元部204は、辞書Dic1の末尾に、Dic1[k]=Δ[k]となるエントリを追加する。その後、辞書復元部204はステップS122に戻り処理を継続する。ここで、Dic1[k]は、辞書Dic1において符号「k」と対応付けられている文字列を表し、Δ[k]は、差分辞書Δにおいて符号「k」と対応付けられている文字列を表す。
【0130】
具体例では、DiffIDに要素が存在するので、辞書復元部204は、DiffIDにおける最小の要素k=1を取得し、DiffIDからk=1を消去する(ステップS124)。その結果、DiffID={2}となる。
【0131】
k(=1)が、辞書Dic1のエントリ数(=0)よりも大きいため、辞書復元部204は、辞書Dic1において符号「1」と対応付けられた文字列が、差分辞書Δにおいて符号「1」と対応付けられた文字列となるエントリを、辞書Dic1の末尾に追加する(ステップS130)。その結果、ステップS130の処理後の辞書Dic1は、図24(2)となる。
【0132】
辞書復元部204は、DiffIDに、未だ要素が存在するので(ステップS122/YES)、DiffIDからk=2を取得し、DiffIDからk=2を除去する(ステップS124)。この結果、DiffIDは空集合となる。
【0133】
k=2は、辞書Dic1のエントリ数(=1)より大きいため、辞書復元部204は、辞書Dic1において符号「2」と対応付けられた文字列が、差分辞書Δにおいて符号「2」と対応付けられた文字列となるエントリを、辞書Dic1の末尾に追加する。ステップS130の処理後の辞書Dic1は、図24(3)となる。先ほどのステップS124の処理で、DiffIDは空集合となっている。
【0134】
図25のフローチャートにおいて、DiffIDに要素が存在しない場合(ステップS122/NO)、辞書復元部204は、辞書Dic1を出力し(ステップS132)、本処理を終了する。辞書復元処理の他のステップについては、後述する。
【0135】
具体例において、辞書復元部204は、DiffIDが空集合であるので(ステップS122/NO)、辞書Dic1を出力する(ステップS132)。図24(4)が復元された辞書Dic1である。
【0136】
復号部205は、図24(4)に示す辞書Dic1を用いて、データ取得部202が取得したブロックB1に含まれる符号化データを復号する(ステップS110)。復号されたデータは、図24(5)となる。
【0137】
ブロック取得部201は、次のブロック(ブロックB2)が存在するので(ステップS102/YES)、ブロックB2を取得する。差分辞書取得部203は、図26(1)に示す、ブロックB2に含まれる差分辞書Δを取得する(ステップS106)。次に、辞書復元部204が辞書復元処理(ステップS108)を実行する。
【0138】
まず、辞書復元部204は、辞書Dic1を、基準ブロックとなるブロックB1の復号に用いた辞書Dicで初期化する(ステップS120)。また、DiffIDをΔ.IDで初期化する(ステップS120)。その結果、初期化された辞書Dic1は図26(2)となり、DiffID={3}となる。
【0139】
次に、辞書復元部204は、DiffIDに要素が存在するので(ステップS122/YES)、DiffIDからk=3を取得し、DiffIDからk=3を除去する(ステップS124)。この結果、DiffIDは空集合となる。k=3は辞書Dic1のエントリの数(=2)よりも大きいので(ステップS126/YES)、辞書復元部204は、辞書Dic1の符号「3」と対応付けられた文字列が、差分辞書Δにおいて符号「3」と対応付けられた文字列となるエントリを、辞書Dic1に追加する(ステップS130)。ステップS130の処理後の辞書Dic1は、図26(3)となる。
【0140】
辞書復元部204は、DiffIDが空集合となっているので(ステップS122/NO)、図26(4)に示す辞書Dic1を出力する(ステップS132)。
【0141】
復号部205は、図26(4)に示す辞書を使用して、ブロックB2に含まれる符号化データを復号する(ステップS110)。その結果、復号されたデータは図26(5)となる。
【0142】
ブロック取得部201は、次のブロックが存在するので(ステップS102/YES)、ブロックB3を読み込む(ステップS104)。差分辞書取得部203は、図27(1)に示す差分辞書ΔをブロックB3から取得する(ステップS106)。辞書復元部204が、辞書復元処理を実行する(ステップS108)。
【0143】
辞書復元部204は、辞書Dic1を、基準ブロックとなるブロックB2の復号に用いた辞書Dicで初期化する(ステップS120)。また、DiffIDをΔ.IDで初期化する(ステップS120)。その結果、初期化された辞書Dic1は、図27(2)となり、DiffID={2,3}となる。
【0144】
辞書復元部204は、DiffIDに要素が存在するので(ステップS122/YES)、DiffIDから最小の要素k=2を取得し、DiffIDからk=2を除去する(ステップS124)。その結果、DiffID={3}となる。ここで、具体例において、k=2が辞書Dic1のエントリ数(=3)以下となっている。
【0145】
図25のフローチャートにおいて、kの値が、辞書Dic1のエントリ数以下である場合(ステップS126/YES)、辞書復元部204は、辞書Dic1において符号「k」と対応付けられている文字列を、差分辞書Δにおいて符号「k」と対応付けられている文字列で上書きする(ステップS128)。そして、ステップS128の処理を終えると、辞書復元部204は、ステップS122に戻り処理を継続する。
【0146】
具体例において、辞書復元部204は、k=2が辞書Dic1のエントリ数(=3)以下であるので、ステップS128の処理を実行する。すなわち、辞書Dic1の符号「2」と対応付けられた文字列を、差分辞書Δにおいて符号「2」に対応付けられた文字列で上書きする。ステップS128の処理後の辞書Dic1は、図27(3)となる。
【0147】
次に、辞書復元部204は、DiffIDに未だ要素が存在するので(ステップS122/YES)、要素k=3を取得し、DiffIDからk=3を除去する(ステップS124)。その結果、DiffIDは空集合となる。
【0148】
取得したk(=3)は、辞書Dic1のエントリ数(=3)以下であるので(ステップS126/YES)、辞書復元部204はステップS128の処理を実行する。すなわち、辞書Dic1において符号「3」と対応付けられた文字列を、差分辞書Δにおいて符号「3」と対応付けられた文字列で上書きする。その結果、ステップS128の処理後の辞書Dic1は、図27(4)となる。
【0149】
DiffIDが空集合となったので(ステップS122/NO)、辞書復元部204は、図27(5)に示す辞書Dic1を出力する。復号部205は、ブロックB3に含まれるデータを、図27(5)に示す辞書で復号する。その結果、復号されたデータは、図27(6)になる。
【0150】
ブロックB3の次に、処理対象となるブロックは存在しないため(ステップS102/NO)、データ伸長装置200は、データ伸長処理を終了する。
【0151】
以上の説明から明らかなように、本実施例に係るデータ伸長装置200は、基準ブロックの符号化に使用された辞書と、処理対象ブロックの差分辞書との間に重複する符号が存在する場合、重複する符号に対応する基準ブロックの文字列を、差分辞書の文字列で置換する。その結果、上述したデータ圧縮方法により作成された圧縮データを伸長して、元のデータを復元することができる。
【0152】
以上、本件実施例について詳述したが、本件は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【0153】
例えば、本実施例では、連続する2つのブロックにおいて、前方のブロックを基準ブロックとし、後方のブロックを処理対象ブロックとして、順次圧縮処理、伸長処理を行った。しかしながら、基準ブロックを被圧縮データの最初のブロックとし、処理対象ブロックを、最初のブロック以外の、任意のブロックBiとしても良い。つまり、データ圧縮装置100は、処理対象ブロックの圧縮処理において、常に、最初のブロックを基準ブロックとして差分辞書を作成するようにしても良い。連続する2つのブロックを本実施例を用いて圧縮した場合、例えば、ブロックBiのデータを伸長するためには、ブロックB1〜ブロックBi−1の符号化に用いられた辞書をそれぞれ復元してから、ブロックBiの辞書を復元し、データを復号する必要がある。しかしながら、最初のブロックとの差分辞書を作成するようにした場合、最初のブロックの差分辞書と、ブロックBiの差分辞書とを使用すれば、ブロックBiの符号化に用いられた辞書を復元できるため、ブロックB1〜ブロックBi−1において順次辞書を復元する必要がない。従って、指定されたブロックのデータを復号するまでの時間を短縮することができる。また、本実施例における被圧縮データは構造を有するテキストデータであるが、被圧縮データが構造を有しないプレーンなテキスト形式のデータである場合も、同様に実施することができる。さらに、本実施例では、静的辞書式符号化手法として、単純な「値の符号化方式」を採用したが、その他の静的辞書式符号化手法を用いても、同様に実施することが可能である。
【0154】
なお、上記のデータ圧縮装置、及びデータ伸長装置が有する機能は、コンピュータによって実現することができる。その場合、データ圧縮装置、及びデータ伸長装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。
【0155】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD(Digital Versatile Disc)、CD−ROM(Compact Disc Read Only Memory)などの可搬型記録媒体の形態で販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【0156】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【0157】
また、本実施例では、データ圧縮装置及びデータ伸長装置を別々の装置として記載したが、図28に示すように1つの情報処理装置がデータ圧縮装置及びデータ伸長装置としての機能を果すように構成しても良い。また、例えば、インターネット等の通信網に接続されたサーバコンピュータを本件のデータ圧縮装置及びデータ伸長装置の少なくとも一方とし、これに接続されたパーソナルコンピュータ等の通信装置に、データ圧縮及びデータ伸長の少なくとも一つを行うサービスをサーバコンピュータから提供するようにしても良い(ASP(Application Service Provider))。
【0158】
また、本実施例ではネットワーク40を介して、データ圧縮装置100又はデータ伸長装置200は、記憶装置10、センサ装置20、及びデータ処理装置30とデータの送受信を行うこととした。しかしながら、データ圧縮装置100又はデータ伸長装置200を、記憶装置10、センサ装置20、及びデータ処理装置30のそれぞれと直接接続(ローカル接続)して、データの送受信を行うように構成しても良い。また、本実施例では、地区項目のみを符号化したが、他の項目についても符号化が可能なことはいうまでもない。
【符号の説明】
【0159】
100…データ圧縮装置
110…データ取得部
111…辞書作成部
112…差分辞書作成部
113…符号化部
114…出力部
200…データ伸長装置
201…ブロック取得部
202…データ取得部
203…差分辞書取得部
204…辞書復元部
205…復号部

【特許請求の範囲】
【請求項1】
テキストデータの入力を受け付ける入力部と、
前記テキストデータを所定の規則に基づき複数のブロックに分割する分割部と、
文字列と符号とが対応付けられて格納された辞書データである基準辞書に基づき、処理対象ブロックに出現する文字列のうち、該基準辞書に登録されていない文字列と、該基準辞書において前記処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書を生成する差分辞書生成部と、
前記作成した差分辞書と前記基準辞書とに基づき、辞書データである処理対象辞書を生成する処理対象辞書生成部と、
前記生成した処理対象辞書を参照し、前記処理対象ブロックに出現する文字列を対応する符号に置き換えることで、該処理対象ブロックを圧縮する圧縮部と、
前記圧縮部が圧縮した前記処理対象ブロックのデータと、前記生成した差分辞書とを出力する出力部と、
を備えることを特徴とするデータ圧縮装置。
【請求項2】
前記基準辞書は、処理対象辞書生成部が一つ前の処理対象ブロックに対して生成した処理対象辞書であることを特徴とする請求項1に記載のデータ圧縮装置。
【請求項3】
前記基準辞書は、処理対象辞書生成部が最初の処理対象ブロックに対して生成した処理対象辞書であることを特徴とする請求項1に記載のデータ圧縮装置。
【請求項4】
処理対象ブロック毎に、文字列と符号とが対応付けられて格納された辞書データである基準辞書に基づき、該処理対象ブロックに出現する文字列のうちで該基準辞書に登録されていない文字列と該基準辞書において前記処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書と、符号列である圧縮データとの入力を受け付ける入力部と、
前記圧縮データを所定の規則に基づき複数のブロックに分割する分割部と、
処理対象ブロック毎に、前記受け付けた基準辞書と該処理対象ブロックの差分辞書とに基づき、辞書データである処理対象辞書を生成する処理対象辞書生成部と、
処理対象ブロック毎に、前記生成した処理対象辞書に基づいて、該処理対象ブロックを復号する復号部と、
を備えることを特徴とするデータ伸長装置。
【請求項5】
前記基準辞書は、処理対象辞書生成部が一つ前の処理対象ブロックに対して生成した処理対象辞書であることを特徴とする請求項4に記載のデータ伸長装置。
【請求項6】
前記基準辞書は、処理対象辞書生成部が最初の処理対象ブロックに対して生成した処理対象辞書であることを特徴とする請求項4に記載のデータ伸長装置。
【請求項7】
コンピュータに、
テキストデータの入力を受け付ける入力ステップと、
前記テキストデータを所定の規則に基づき複数のブロックに分割する分割ステップと、
文字列と符号とが対応付けられて格納された辞書データである基準辞書に基づき、処理対象ブロックに出現する文字列のうち、該基準辞書に登録されていない文字列と、該基準辞書において前記処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書を生成する差分辞書生成ステップと、
前記作成した差分辞書と前記基準辞書とに基づき、辞書データである処理対象辞書を生成する処理対象辞書生成ステップと、
前記生成した処理対象辞書を参照し、前記処理対象ブロックに出現する文字列を対応する符号に置き換えることで、該処理対象ブロックを圧縮する圧縮ステップと、
前記圧縮部が圧縮した前記処理対象ブロックのデータと、前記生成した差分辞書とを出力する出力ステップと、
を実行させることを特徴とするデータ圧縮プログラム。
【請求項8】
コンピュータに、
処理対象ブロック毎に、文字列と符号とが対応付けられて格納された辞書データである基準辞書に基づき、該処理対象ブロックに出現する文字列のうちで該基準辞書に登録されていない文字列と該基準辞書において前記処理対象ブロックに出現しない文字列に対応付けられた符号とを対応付けた辞書データである差分辞書と、符号列である圧縮データとの入力を受け付ける入力ステップと、
前記圧縮データを所定の規則に基づき複数のブロックに分割する分割ステップと、
処理対象ブロック毎に、前記受け付けた基準辞書と該処理対象ブロックの差分辞書とに基づき、辞書データである処理対象辞書を生成する処理対象辞書生成ステップと、
処理対象ブロック毎に、前記生成した処理対象辞書に基づいて、該処理対象ブロックを復号する復号ステップと、
を実行させることを特徴とするデータ伸長プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate


【公開番号】特開2011−114546(P2011−114546A)
【公開日】平成23年6月9日(2011.6.9)
【国際特許分類】
【出願番号】特願2009−268693(P2009−268693)
【出願日】平成21年11月26日(2009.11.26)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】