(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0011】
以下に、図面を参照して、本発明にかかる圧縮プログラム、復元プログラム、圧縮方法、復元方法、および情報処理装置の実施の形態を詳細に説明する。
【0012】
(実施の形態にかかる圧縮方法の一実施例)
図1は、実施の形態にかかる圧縮方法の一実施例を示す説明図である。情報処理装置100は、スライド辞書法を用いた圧縮を行うコンピュータである。スライド辞書法を用いた圧縮は、例えば、「LZ77」による圧縮や、「LZMA」による圧縮などである。
【0013】
例えば、スライド辞書法を用いた圧縮では、圧縮対象データ110の中に同じ文字列が複数出現する場合に、後に出現する文字列を、先に出現する同じ文字列の開始位置と長さとを示すデータに変換して、圧縮対象データ110を圧縮することが考えられる。
【0014】
しかしながら、この場合、圧縮対象データ110の内容によって圧縮効率が大きく変化してしまう傾向がある。例えば、圧縮対象データ110において同じ文字列が比較的近い位置に連続して現れる場合に比べて、同じ文字列が比較的離れた位置に連続して現れる場合には、圧縮後のデータのサイズが小さくなりにくく、圧縮効率が悪くなってしまう傾向がある。
【0015】
具体的には、スライド辞書法を用いた圧縮では、後に出現する文字列より前にあるスライド窓と呼ばれる参照範囲に同じ文字列があれば、後に出現する文字列を先に出現する同じ文字列の開始位置と長さとを示すデータに変換する。このとき、同じ文字列が比較的離れた位置に出現すると、後に出現する文字列より前にある参照範囲に同じ文字列がなく、後に出現する文字列を先に出現する同じ文字列の開始位置と長さとを示すデータに変換することができない場合がある。このため、圧縮後のデータのサイズが小さくなりにくく、圧縮効率が悪くなってしまう傾向がある。
【0016】
これに対し、後に出現する文字列を、参照範囲を広げて、比較的離れた位置に先に出現する同じ文字列の開始位置と長さとを示すデータに変換しようとすると、開始位置を示すために用いるビット数の増大化を招いてしまう。このため、後に出現する文字列を、先に出現する同じ文字列の開始位置と長さとを示すデータに変換しても、圧縮後のデータのサイズが小さくなりにくく、圧縮効率が悪くなってしまう傾向がある。
【0017】
一方で、同じ文字列が比較的近い位置に出現すると、後に出現する文字列より前にある参照範囲に同じ文字列があり、後に出現する文字列を先に出現する同じ文字列の開始位置と長さとを示すデータに変換することができる可能性がある。このため、圧縮効率が悪くなりにくい傾向がある。
【0018】
また、同じ文字列が比較的近い位置に出現すれば、後に出現する文字列を、参照範囲を比較的狭くしても、先に出現する同じ文字列の開始位置と長さとを示すデータに変換することができる可能性があり、開始位置を示すために用いるビット数は比較的小さくなる。このため、後に出現する文字列を、先に出現する文字列の開始位置と長さとを示すデータに変換しても、圧縮効率が悪くなりにくい傾向がある。
【0019】
そこで、本実施の形態では、圧縮対象データ110を基に、同じ文字列が比較的近い位置に連続して現れやすく、かつ、圧縮対象データ110に戻すことが可能なデータを生成してから、スライド辞書法を用いた圧縮を行うことができる圧縮方法について説明する。
【0020】
具体的には、圧縮対象データ110が所定の区切り文字で区切られた一定の形式に沿ったデータの集まりである場合、圧縮対象データ110において同じ種類の組み合わせの2つの区切り文字で挟まれる複数の文字列は、同じ文字列になる可能性がある。そこで、本実施の形態では、圧縮対象データ110を基に、2つの区切り文字の組み合わせの種類を用いて、同じ文字列が比較的近い位置に連続して現れやすいデータを生成することにより、圧縮効率の向上を図ることになる。
【0021】
図1の例では、情報処理装置100は、圧縮対象データ110を受け付ける。圧縮対象データ110とは、所定の区切り文字を含むデータである。圧縮対象データ110は、例えば、所定の区切り文字で区切られた一定の形式に沿ったログが集約され、同じ文字列が繰り返し出現するログデータであることが好ましい。
図1の例では、圧縮対象データ110は、「$11:03#load:#jerasure#load:#lrc#load:#isa$11:03#monmap$11:03#adding#auth#protocol:#none$」である。
【0022】
区切り文字とは、圧縮対象データ110に含まれる文字列を便宜上区切るために用いられる文字である。区切り文字は、例えば、数字やアルファベット以外の文字である。区切り文字は、ユーザからの操作入力によって設定されてもよい。区切り文字は、例えば、1文字である。区切り文字は、例えば、文字数が2以上の文字列を含んでもよい。区切り文字は、例えば、制御文字を含んでもよい。
【0023】
(1−1)情報処理装置100は、圧縮対象データ110から、所定の区切り文字と、2つの所定の区切り文字に挟まれた文字列とを抽出する。2つの所定の区切り文字に挟まれた文字列は、例えば、区切り文字を含まない文字列であるとする。情報処理装置100は、例えば、所定の区切り文字「$ : # :# # :# # :# $ : # $ : # # # :# $」を抽出する。情報処理装置100は、例えば、文字列「11 11 11 03 03 03 monmap adding auth load load load protocol isa none jerasure lrc」などを抽出する。
【0024】
(1−2)情報処理装置100は、抽出した区切り文字が圧縮対象データ110に出現した順序を特定可能に、抽出した区切り文字を並べた第1のデータ121を生成する。情報処理装置100は、例えば、抽出した区切り文字を出現順に並べたデータを、第1のデータ121として生成する。第1のデータ121は、区切り文字が圧縮対象データ110に出現した順序を特定可能であればよく、抽出した区切り文字を出現順の逆に並べたデータであってもよい。
【0025】
(1−3)情報処理装置100は、2つの区切り文字の組み合わせの種類ごとに、抽出した当該種類の組み合わせの2つの区切り文字に挟まれた文字列が圧縮対象データ110に出現した順序を特定可能に、抽出した文字列を並べた第2のデータ122を生成する。組み合わせは、区切り文字を組み合わせる順番を考慮した組み合わせである。組み合わせは、例えば、区切り文字「:」と「#」との組み合わせと、区切り文字「#」と「:」との組み合わせとを、異なる組み合わせとして含んでもよい。また、組み合わせは、区切り文字を組み合わせる順番を考慮しない組み合わせであってもよい。
【0026】
種類は、2つの区切り文字を組み合わせたパターンである。種類は、複数のパターンをまとめたものであってもよい。情報処理装置100は、例えば、区切り文字「:」と「#」との組み合わせのパターンと、区切り文字「#」と「:」との組み合わせのパターンとを、同じ種類の組み合わせとして扱ってもよい。
【0027】
情報処理装置100は、例えば、2つの区切り文字の組み合わせの種類ごとに区切って、抽出した文字列を出現順に並べたデータを、第2のデータ122として生成する。第2のデータ122は、文字列が圧縮対象データ110に出現した順序を特定可能であればよく、抽出した文字列を出現順の逆に並べたデータであってもよい。また、第2のデータ122は、2つの区切り文字の組み合わせの種類自体を示す情報を含んでいなくてもよい。第2のデータ122は、例えば、第1のデータ121から特定可能な2つの区切り文字の組み合わせの種類を利用することにより、各種類の組み合わせの2つの区切り文字に挟まれた文字列が圧縮対象データ110に出現した順序を特定可能であってもよい。
【0028】
(1−4)情報処理装置100は、生成した第1のデータ121と第2のデータ122とに対してスライド辞書法を用いた圧縮を行う。情報処理装置100は、例えば、生成した第1のデータ121に第2のデータ122を連結し、LZMAによる圧縮を行う。そして、情報処理装置100は、圧縮により得られた圧縮データ130を出力する。情報処理装置100は、第1のデータ121と第2のデータ122とを連結し、第1のデータ121については符号化されないように、LZMAによる圧縮を行ってもよい。
【0029】
これによれば、情報処理装置100は、圧縮対象データ110に戻すことが可能である第1のデータ121と第2のデータ122とを生成することができ、第2のデータ122においては同じ文字列が比較的近い位置に連続して現れやすいようにすることができる。これにより、情報処理装置100は、開始位置を示すために用いるビット数を少なくしやすく、また、同じ文字列を見つけやすく圧縮しやすいようにして、圧縮効率の向上を図ることができる。
【0030】
情報処理装置100は、具体的には、所定の区切り文字で区切られた一定の形式に沿ったデータが集約されている圧縮対象データ110について圧縮効率の向上を図りやすくすることができる。このため、情報処理装置100は、表計算ソフトウェアから出力される表データや、ログ収集ソフトウェアから出力されるログデータなどを圧縮対象データ110として用いる場合には、圧縮効率をより向上させることができる。
【0031】
(情報処理装置100のハードウェア構成例)
次に、
図2を用いて、情報処理装置100のハードウェア構成例について説明する。
【0032】
図2は、情報処理装置100のハードウェア構成例を示すブロック図である。
図2において、情報処理装置100は、CPU(Central Processing Unit)201と、メモリ202と、ネットワークI/F(Interface)203と、ディスクドライブ204と、ディスク205と、記録媒体I/F206とを有する。また、各構成部は、バス200によってそれぞれ接続される。
【0033】
ここで、CPU201は、情報処理装置100の全体の制御を司る。メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有する。具体的には、例えば、フラッシュROMやROMが各種プログラムを記憶し、RAMがCPU201のワークエリアとして使用される。各種プログラムは、例えば、実施の形態にかかる圧縮プログラムや復元プログラムを含んでもよい。メモリ202に記憶されるプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させる。
【0034】
ネットワークI/F203は、通信回線を通じてネットワーク210に接続され、ネットワーク210を介して他のコンピュータに接続される。そして、ネットワークI/F203は、ネットワーク210と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークI/F203には、例えば、モデムやLAN(Local Area Network)アダプタなどを採用することができる。
【0035】
ディスクドライブ204は、CPU201の制御に従ってディスク205に対するデータのリード/ライトを制御する。ディスクドライブ204は、例えば、磁気ディスクドライブである。ディスク205は、ディスクドライブ204の制御で書き込まれたデータを記憶する不揮発メモリである。ディスク205は、例えば、磁気ディスク、光ディスクなどである。
【0036】
記録媒体I/F206は、外部の記録媒体207に接続され、外部の記録媒体207と内部のインターフェースを司り、外部の記録媒体207に対するデータの入出力を制御する。記録媒体I/F206は、例えば、USB(Universal Serial Bus)ポートである。記録媒体207は、例えば、USBメモリである。記録媒体207は、実施の形態にかかる圧縮プログラムや復元プログラムを記憶してもよい。
【0037】
情報処理装置100は、上述した構成部のほか、例えば、SSD(Solid State Drive)、半導体メモリ、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、情報処理装置100は、ディスクドライブ204およびディスク205の代わりに、SSDおよび半導体メモリなどを有していてもよい。情報処理装置100は、具体的には、携帯電話、スマートフォン、タブレット端末、PC(Personal Computer)やサーバなどである。
【0038】
(情報処理装置100の機能的構成例)
次に、
図3を用いて、情報処理装置100の機能的構成例について説明する。
【0039】
図3は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、抽出部301と、生成部302と、圧縮部303と、復号部304と、復元部305とを含む。抽出部301〜復元部305は、制御部となる機能であり、具体的には、
図2に示したメモリ202、ディスク205などの記憶領域に記憶されたプログラムをCPU201に実行させることにより、または、ネットワークI/F203により、その機能を実現する。各機能部の処理結果は、例えば、メモリ202、ディスク205などの記憶領域に記憶される。
【0040】
抽出部301は、圧縮対象データ110から、所定の区切り文字と、2つの所定の区切り文字に挟まれた文字列とを抽出する。圧縮対象データ110とは、所定の区切り文字を含むデータである。圧縮対象データ110は、例えば、所定の区切り文字で区切られた一定の形式に沿ったログが集約され、同じ文字列が繰り返し出現するログデータであることが好ましい。圧縮対象データ110は、具体的には、ユーザからの操作入力によって作成されたデータであってもよい。圧縮対象データ110は、具体的には、他のコンピュータから情報処理装置100に送信され、圧縮を依頼されたデータであってもよい。
【0041】
区切り文字とは、圧縮対象データ110に含まれる文字列を便宜上区切るために用いられる文字である。区切り文字は、例えば、数字やアルファベット以外の文字である。組み合わせは、区切り文字を組み合わせる順番を考慮した組み合わせである。また、組み合わせは、区切り文字を組み合わせる順番を考慮しない組み合わせであってもよい。
【0042】
抽出部301は、例えば、圧縮対象データ110から、数字やアルファベット以外の文字を区切り文字として抽出し、数字やアルファベット以外の2つの文字に挟まれた文字列を抽出する。これにより、抽出部301は、区切り文字と、区切り文字以外の文字列とを分類することができる。
【0043】
抽出部301は、区切り文字として、文字数が2以上の文字列を用いるようにしてもよい。抽出部301は、例えば、区切り文字として「:#」を用いるようにする。これにより、抽出部301は、区切り文字の種類数を増大させやすくし、2つの区切り文字の組み合わせの種類数を増大させやすくすることができる。このため、抽出部301は、同じ種類の組み合わせの2つの区切り文字に挟まれた文字列が同じ属性の文字列になりやすくし、第2のデータ122において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【0044】
抽出部301は、区切り文字の文字数が1であるとして、区切り文字として文字数が2以上の文字列を用いないようにしてもよい。抽出部301は、例えば、区切り文字として「:#」を用いないようにし、「:#」を区切り文字「:」と「#」とが連続して出現したとして扱う。また、抽出部301は、例えば、区切り文字として「:#」を用いないようにし、「:#」を区切り文字「:」が出現したとして扱ってもよい。これにより、抽出部301は、区切り文字の種類数を増大しにくくし、2つの区切り文字の組み合わせの種類数を増大しにくくすることができる。このため、抽出部301は、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列を分類する際に用いられる記憶領域のサイズを抑制し、記憶領域を節約するとともに効率よく処理を行うことができる。
【0045】
抽出部301は、区切り文字として制御文字を用いてもよい。抽出部301は、例えば、区切り文字として、改行を示す制御文字を用いる。これにより、抽出部301は、2つの区切り文字の組み合わせの種類ごとに文字列を分類するときに、制御文字を含む組み合わせの2つの区切り文字に挟まれた文字列についても分類することができる。結果として、抽出部301は、第2のデータ122において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【0046】
抽出部301は、所定の区切り文字の指定を受け付け、圧縮対象データ110から、指定を受け付けた所定の区切り文字と、指定を受け付けた2つの区切り文字に挟まれた文字列を抽出してもよい。抽出部301は、例えば、ユーザからの操作入力によって所定の区切り文字の指定を受け付け、圧縮対象データ110から、指定を受け付けた所定の区切り文字と、指定を受け付けた2つの区切り文字に挟まれた文字列を抽出する。これにより、抽出部301は、圧縮対象データ110の形式に沿った区切り文字を用いやすくなり、第2のデータ122において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【0047】
抽出部301は、圧縮対象データ110の先頭には改行を示す制御文字が出現するものとして扱うことができる。これにより、抽出部301は、2つの区切り文字の組み合わせの種類ごとに文字列を分類するときに、圧縮対象データ110の先頭の文字列についても分類することができる。
【0048】
生成部302は、第1のデータ121と第2のデータ122とを生成する。第1のデータ121とは、圧縮対象データ110において区切り文字が出現した順序を特定可能に区切り文字を並べたデータである。第2のデータ122とは、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列が圧縮対象データ110に出現した順序を特定可能に文字列を並べたデータである。種類は、2つの区切り文字を組み合わせたパターンである。種類は、複数のパターンをまとめたものであってもよい。例えば、区切り文字「:」と「#」との組み合わせと、区切り文字「#」と「:」との組み合わせとは、同じ種類の組み合わせと扱われてもよい。
【0049】
生成部302は、例えば、圧縮対象データ110から区切り文字以外の文字を削除し、区切り文字と区切り文字との境界を判別可能なように、区切り文字と区切り文字との間に所定の文字「a」を挿入し、圧縮対象データ110を第1のデータ121に変形する。また、生成部302は、区切り文字の文字数が固定である場合、区切り文字と区切り文字との境界を明示しなくてもよいため、区切り文字と区切り文字との間に所定の文字「a」を挿入しなくてもよい。
【0050】
生成部302は、例えば、2つの区切り文字の組み合わせの種類のそれぞれに対応するドットを並べる。そして、生成部302は、2つの区切り文字の組み合わせの種類のそれぞれに対応するドットの直前に、当該種類の組み合わせの2つの区切り文字に挟まれた文字列を「,」で区切って挿入し、第2のデータ122を生成する。これにより、生成部302は、圧縮対象データ110に戻すことが可能である第1のデータ121と第2のデータ122とを生成することができ、第2のデータ122においては同じ文字列が比較的近い位置に連続して現れやすいようにすることができる。
【0051】
生成部302は、圧縮対象データ110に出現する区切り文字の種類数が閾値より大きい場合、圧縮対象データ110を、出現する区切り文字の種類数が閾値以下になる部分データに分割する場合があってもよい。この場合、生成部302は、部分データごとに、第1のデータ121と第2のデータ122とを生成する。この場合、第1のデータ121は、例えば、区切り文字が部分データに出現した順序を特定可能に区切り文字を並べたデータである。この場合、第2のデータ122は、例えば、部分データに出現する2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列が部分データに出現した順序を特定可能に文字列を並べたデータである。これにより、生成部302は、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列を分類する際に用いられる記憶領域のサイズを抑制し、記憶領域を節約するとともに効率よく処理を行うことができる。
【0052】
生成部302は、具体的には、区切り文字を、圧縮対象データ110に出現した順序に沿って所定の文字と交互に並べた第1のデータ121を生成する。生成部302は、具体的には、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列を、圧縮対象データ110に出現した順序に沿って所定の文字と交互に並べた第2のデータ122を生成する。これにより、生成部302は、圧縮対象データ110に戻すことが可能である第1のデータ121と第2のデータ122とを生成することができ、第2のデータ122においては同じ文字列が比較的近い位置に連続して現れやすいようにすることができる。
【0053】
圧縮部303は、生成した第1のデータ121と第2のデータ122とに対してスライド辞書法を用いた圧縮を行う。圧縮は、例えば、「LZ77」の圧縮アルゴリズムによる圧縮である。圧縮は、例えば、「LZ77」の圧縮アルゴリズムを改良した各種アルゴリズムによる圧縮であってもよく、具体的には、「LZMA」の圧縮アルゴリズムによる圧縮などである。
【0054】
圧縮部303は、例えば、生成した第1のデータ121と第2のデータ122とに対してLZ77またはLZMAの圧縮アルゴリズムを用いた圧縮を行う。圧縮部303は、具体的には、生成した第1のデータ121と第2のデータ122とを連結し、連結したデータの先頭に第1のデータ121と第2のデータ122との境界を示すメタデータを付与してから、LZMAの圧縮アルゴリズムを用いた圧縮を行う。
【0055】
メタデータは圧縮されなくてもよい。メタデータは、例えば、第2のデータ122の先頭の位置を示す値であり、具体的には、第1のデータ121のサイズである。メタデータは、第1のデータ121と第2のデータ122との間に挿入されてもよい。メタデータは、例えば、第1のデータ121と第2のデータ122との間に挿入される場合、第1のデータ121にも第2のデータ122にも出現しない文字によって表現される。
【0056】
また、圧縮部303は、具体的には、第1のデータ121と第2のデータ122とを連結し、メタデータを付与した後、メタデータと第1のデータ121とについては圧縮せず、第2のデータ122を圧縮してもよい。これにより、圧縮部303は、同じ文字列が比較的近い位置に連続して現れやすいようにした第2のデータ122について、スライド辞書法を用いた圧縮における圧縮効率の向上を図ることができる。また、圧縮部303は、第2のデータ122に対する圧縮に用いることが好ましいLZ77またはLZMAの圧縮アルゴリズムを用いることができ、さらに圧縮データのサイズの低減化を図ることができる。
【0057】
復号部304は、第1のデータ121と第2のデータ122とにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号する。復号部304は、圧縮データに対して、LZ77またはLZMAの圧縮アルゴリズムに対応する復号アルゴリズムを用いた復号を行う。これにより、復号部304は、圧縮対象データ110に戻すことが可能である第1のデータ121と第2のデータ122とを取得することができる。
【0058】
復元部305は、復号によって得られた第2のデータ122を参照し、復号によって得られた第1のデータ121における2つの区切り文字の間に、当該2つの区切り文字の組み合わせの種類に対応付けられた文字列を順次挿入する。これにより、情報処理装置100は、効率よく圧縮された圧縮データから、圧縮元である圧縮対象データ110を復元することができる。
【0059】
ここでは、情報処理装置100が、圧縮対象データ110を圧縮する機能と、圧縮対象データ110を復元する機能との両方を有する場合について説明したが、これに限らない。例えば、情報処理装置100は、圧縮対象データ110を圧縮する機能と、圧縮対象データ110を復元する機能とのいずれかを有さなくてもよい。
【0060】
(圧縮対象データ400を圧縮する一例)
次に、
図4〜
図11を用いて、情報処理装置100が圧縮対象データ400を圧縮する一例について説明する。
【0061】
図4〜
図11は、圧縮対象データ400を圧縮する一例を示す説明図である。
図4において、情報処理装置100は、圧縮対象データ400の入力を受け付ける。
図4の例では、圧縮対象データ400は、数字やアルファベット以外の文字を、所定の区切り文字として含むデータである。所定の区切り文字は、文字数が2以上の文字列を含んでよい。所定の区切り文字は、制御文字を含んでよい。
【0062】
具体的には、圧縮対象データ400の1行目は、「11:03 load: jerasure load: lrc load: isa」であり、末尾で改行されている。圧縮対象データ400の2行目は、「11:03 monmap」であり、末尾で改行されている。圧縮対象データ400の3行目は、「11:03 adding auth protocol: none」であり、末尾で改行されている。改行を示す制御文字は非表示である。
【0063】
以下の説明では、便宜上、空白を「#」と表記し、改行を示す制御文字を「$」と表記する場合がある。このため、以下の説明では、圧縮対象データ400は、「11:03#load:#jerasure#load:#lrc#load:#isa$11:03#monmap$11:03#adding#auth#protocol:#none$」である。ここで、
図5の説明に移行する。
【0064】
図5において、情報処理装置100は、入力を受け付けた圧縮対象データ400に基づいて、圧縮用テーブル500を用意する。圧縮用テーブル500は、圧縮対象データ400に出現する2つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせの2つの区切り文字に挟まれた文字列を分類するために用いられるテーブルである。圧縮用テーブル500は、圧縮対象データ400に出現する2つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせに対応する記憶領域を有する。
【0065】
情報処理装置100は、例えば、圧縮対象データ400に基づいて区切り文字の種類数「4」を計数し、区切り文字の種類数「4」の二乗「16」個の記憶領域を有する圧縮用テーブル500を用意する。ここで、
図6の説明に移行する。
【0066】
図6において、情報処理装置100は、圧縮対象データ400の先頭が区切り文字ではない場合、圧縮対象データ400の先頭に所定の区切り文字を付与しておく。
図6の例では、情報処理装置100は、圧縮対象データ400の先頭に、改行を示す制御文字「$」を付与しておく。また、情報処理装置100は、圧縮対象データ400の末尾が区切り文字ではない場合、圧縮対象データ400の末尾に所定の区切り文字を付与しておいてもよい。
【0067】
次に、情報処理装置100は、圧縮対象データ400に基づいて、所定の組み合わせルールにしたがって2つの区切り文字の組み合わせのパターンを特定する。所定の組み合わせルールは、例えば、先に出現した区切り文字から順に選択し、選択した区切り文字に対して、先に出現した区切り文字から順に組み合わせていくルールである。
【0068】
図6の例では、情報処理装置100は、最初に出現した区切り文字「$」を選択し、選択した区切り文字「$」に対して、最初に出現した区切り文字「$」を組み合わせたパターンを特定する。同様に、情報処理装置100は、選択した区切り文字「$」に対して、2番目に出現した区切り文字「:」、3番目に出現した区切り文字「#」、最後に出現した区切り文字「:#」それぞれを組み合わせたパターンを特定する。情報処理装置100は、同様に、2番目に出現した区切り文字「:」、3番目に出現した区切り文字「#」、最後に出現した区切り文字「:#」それぞれを選択して、2つの区切り文字の組み合わせのパターンを特定する。
【0069】
そして、情報処理装置100は、用意した記憶領域のそれぞれに、特定した2つの区切り文字の組み合わせのパターンのそれぞれを記憶し、特定した2つの区切り文字の組み合わせのパターンのそれぞれに対応付ける。
図6の例では、情報処理装置100は、用意した記憶領域を、区切り文字「$」と「$」との組み合わせのパターンに対応付ける。また、情報処理装置100は、例えば、用意した記憶領域を、区切り文字「$」と「:」との組み合わせのパターンに対応付ける。また、情報処理装置100は、例えば、用意した記憶領域を、区切り文字「$」と「#」との組み合わせのパターンに対応付ける。また、情報処理装置100は、例えば、用意した記憶領域を、区切り文字「$」と「:#」との組み合わせのパターンに対応付ける。
【0070】
ここでは、情報処理装置100が、2つの区切り文字の組み合わせのパターンのうち、圧縮対象データ400において文字列を挟むために用いられていないパターンについても特定する場合について説明したが、これに限らない。例えば、情報処理装置100は、圧縮対象データ400において文字列を挟むために用いられていないパターンについて特定しなくてもよい。この場合、情報処理装置100は、区切り文字の種類数の二乗個の記憶領域を用意しなくても、圧縮対象データ400において文字列を挟むために用いられているパターンに対応する記憶領域を用意すればよい。ここで、
図7の説明に移行する。
【0071】
図7において、情報処理装置100は、2つの区切り文字の組み合わせのパターンごとに、圧縮対象データ400において当該パターンの組み合わせの2つの区切り文字に挟まれた文字列を抽出する。そして、情報処理装置100は、2つの区切り文字の組み合わせのパターンのそれぞれに対応付けた記憶領域に、圧縮対象データ400において当該2つの区切り文字に挟まれた文字列を、圧縮対象データ400に出現した順序を特定可能に並べて記憶する。
【0072】
情報処理装置100は、例えば、区切り文字「$」と「:」との組み合わせのパターンに対応付けた記憶領域に、当該組み合わせの2つの区切り文字に挟まれた文字列「11」「11」「11」を、「,」で区切って出現順に並べて記憶する。同様に、情報処理装置100は、区切り文字「:」と「#」との組み合わせのパターンに対応付けた記憶領域に、当該組み合わせの2つの区切り文字に挟まれた文字列「03」「03」「03」を、「,」で区切って出現順に並べて記憶する。また、情報処理装置100は、区切り文字「$」と「$」との組み合わせのパターンに対応付けた記憶領域には、当該組み合わせの2つの区切り文字に挟まれた文字列がないため、文字列を記憶しない。ここで、
図8の説明に移行する。
【0073】
図8において、情報処理装置100は、圧縮対象データ400の先頭に付与しておいた所定の区切り文字を削除する。
図8の例では、情報処理装置100は、圧縮対象データ400の先頭に付与しておいた改行を示す制御文字「$」を削除する。また、情報処理装置100は、圧縮対象データ400の末尾に所定の区切り文字を付与していれば、圧縮対象データ400の末尾に付与しておいた所定の区切り文字についても削除する。
【0074】
そして、情報処理装置100は、第1のデータ800を生成する。第1のデータ800とは、圧縮対象データ400において区切り文字が出現した順序を特定可能に区切り文字を並べたデータである。情報処理装置100は、例えば、圧縮対象データ400から区切り文字以外の文字を削除し、区切り文字と区切り文字との間に所定の文字「a」を挿入することにより、圧縮対象データ400を第1のデータ800に変形する。
【0075】
図8の例では、情報処理装置100は、圧縮対象データ400から区切り文字以外の文字を削除して、圧縮対象データ400を「:#:##:##:#$:#$:###:#$」に変形する。そして、情報処理装置100は、区切り文字と区切り文字との間に所定の文字「a」を挿入し、第1のデータ800「a:a#a:#a#a:#a#a:#a$a:a#a$a:a#a#a#a:#a$」に変形する。
【0076】
ここでは、情報処理装置100が、圧縮対象データ400の先頭に付与しておいた所定の区切り文字を削除する場合について説明したが、これに限らない。例えば、情報処理装置100は、圧縮対象データ400の先頭に付与しておいた所定の区切り文字をそのまま残しておき、圧縮対象データ400が復元される際に削除されるようにしておいてもよい。ここで、
図9の説明に移行する。
【0077】
図9において、情報処理装置100は、2つの区切り文字の組み合わせのパターンのそれぞれに対応するドットを並べたデータ900を作成する。そして、情報処理装置100は、2つの区切り文字の組み合わせのパターンのそれぞれに対応するドットの直前に、当該パターンの組み合わせの2つの区切り文字に挟まれた文字列を「,」で区切って挿入する。
【0078】
図9の例では、情報処理装置100は、2つの区切り文字の組み合わせの16個のパターンのそれぞれに対応する16個のドットを並べたデータ「................」を作成する。ここで、先頭のドットから順に、特定された順が早い組み合わせのパターンに対応する。換言すれば、先頭のドットは、最初に特定された区切り文字「$」と「$」との組み合わせのパターンに対応する。2番目のドットは、2番目に特定された区切り文字「$」と「:」との組み合わせのパターンに対応する。
【0079】
そして、情報処理装置100は、区切り文字「$」と「:」との組み合わせのパターンに対応するドットの直前に、当該組み合わせの2つの区切り文字に挟まれた文字列「11」「11」「11」を「,」で区切って出現順に並べて挿入する。このように、情報処理装置100は、16個のドットを並べたデータ「................」を、「.11,11,11...............」に変形する。
【0080】
同様に、情報処理装置100は、区切り文字「:」と「#」との組み合わせのパターンに対応するドットの直前に、当該組み合わせの2つの区切り文字に挟まれた文字列「03」「03」「03」を、「,」で区切って出現順に並べて挿入する。また、情報処理装置100は、区切り文字「$」と「$」との組み合わせのパターンに対応するドットの直前には、当該組み合わせの2つの区切り文字に挟まれた文字列がないため、文字列を挿入しない。ここで、
図10の説明に移行する。
【0081】
図10において、情報処理装置100は、それぞれのパターンの2つの区切り文字に挟まれた文字列を「,」で区切って挿入することにより変形されたデータを、第2のデータ1000とする。第2のデータ1000とは、2つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせの2つの区切り文字に挟まれた文字列が圧縮対象データ400に出現した順序を特定可能に文字列を並べたデータである。
【0082】
図10の例では、第2のデータ1000は、「.11,11,11.....03,03,03..monmap..adding,auth.load,load,load,protocol.isa,none..jerasure,lrc.」である。
【0083】
ここで、情報処理装置100は、圧縮対象データ400を復元する際に、所定の組み合わせルールを用いれば第1のデータ800から、
図6において特定された2つの区切り文字の組み合わせと、順番も一致したパターンを特定可能である。このため、第2のデータ1000は、第1のデータ800から特定可能な2つの区切り文字の組み合わせの種類を利用することにより、各種類の組み合わせの2つの区切り文字に挟まれた文字列が圧縮対象データ400に出現した順序を特定可能であればよい。結果として、第2のデータ1000は、2つの区切り文字の組み合わせのパターン自体を示す情報を含んでいない。また、第2のデータ1000は、2つの区切り文字の組み合わせのパターン自体を示す情報を含んでもよい。ここで、
図11の説明に移行する。
【0084】
図11において、情報処理装置100は、第1のデータ800と第2のデータ1000とを連結して、LZMAの圧縮アルゴリズムを用いて圧縮を行うことにより、圧縮ファイル1100を生成する。情報処理装置100は、例えば、第1のデータ800の末尾に第2のデータ1000を連結する場合、第1のデータ800と第2のデータ1000との境界を示すメタデータを第1のデータ800の先頭に付与しておく。そして、情報処理装置100は、連結した第1のデータ800と第2のデータ1000とをまとめて、LZMAの圧縮アルゴリズムを用いて圧縮を行う。メタデータは圧縮されなくてもよい。
【0085】
(圧縮対象データ400を復元する一例)
次に、
図12〜
図23を用いて、
図11において生成された圧縮ファイル1100から、情報処理装置100が圧縮対象データ400を復元する一例について説明する。
【0086】
図12〜
図23は、圧縮対象データ400を復元する一例を示す説明図である。
図12において、情報処理装置100は、LZMAの圧縮アルゴリズムに対応する復号アルゴリズムを用いて圧縮ファイル1100を復号し、第1のデータ800と第2のデータ1000とを取得する。
【0087】
情報処理装置100は、例えば、LZMAの圧縮アルゴリズムに対応する復号アルゴリズムを用いて圧縮ファイル1100を復号する。そして、情報処理装置100は、先頭のメタデータに基づいて第1のデータ800と第2のデータ1000との境界を特定し、第1のデータ800と第2のデータ1000とを分割して取得する。ここで、
図13の説明に移行する。
【0088】
図13において、情報処理装置100は、取得した第1のデータ800に基づいて、復元用テーブル1300を用意する。復元用テーブル1300は、第1のデータ800に出現する2つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせの2つの区切り文字に挟まれた文字列を分類するために用いられるテーブルである。復元用テーブル1300は、第1のデータ800に出現する2つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせに対応する記憶領域を有する。以下、復元用テーブル1300は、圧縮用テーブル500と同じ記憶内容になるように作成されていく。
【0089】
情報処理装置100は、例えば、第1のデータ800に基づいて区切り文字の種類数「4」を計数し、区切り文字の種類数「4」の二乗「16」個の記憶領域を有する復元用テーブル1300を用意する。ここで、
図14の説明に移行する。
【0090】
図14において、情報処理装置100は、第1のデータ800の先頭が区切り文字ではない場合、第1のデータ800の先頭に所定の区切り文字を付与しておく。
図14の例では、情報処理装置100は、第1のデータ800の先頭に、改行を示す制御文字「$」を付与しておく。また、情報処理装置100は、第1のデータ800の末尾が区切り文字ではない場合、第1のデータ800の末尾に所定の区切り文字を付与しておいてもよい。
【0091】
次に、情報処理装置100は、第1のデータ800に基づいて、所定の組み合わせルールにしたがって2つの区切り文字の組み合わせのパターンを特定する。所定の組み合わせルールは、例えば、先に出現した区切り文字から順に選択し、選択した区切り文字に対して、先に出現した区切り文字から順に組み合わせていくルールである。所定の組み合わせルールは、
図6において情報処理装置100が2つの区切り文字の組み合わせのパターンを特定した際の組み合わせルールと同一である。
【0092】
図14の例では、情報処理装置100は、最初に出現した区切り文字「$」を選択し、選択した区切り文字「$」に対して、最初に出現した区切り文字「$」を組み合わせたパターンを特定する。同様に、情報処理装置100は、選択した区切り文字「$」に対して、2番目に出現した区切り文字「:」、3番目に出現した区切り文字「#」、最後に出現した区切り文字「:#」それぞれを組み合わせたパターンを特定する。情報処理装置100は、同様に、2番目に出現した区切り文字「:」、3番目に出現した区切り文字「#」、最後に出現した区切り文字「:#」それぞれを選択して、2つの区切り文字の組み合わせのパターンを特定する。
【0093】
そして、情報処理装置100は、用意した記憶領域のそれぞれに、特定した2つの区切り文字の組み合わせのパターンのそれぞれを記憶し、特定した2つの区切り文字の組み合わせのパターンのそれぞれに対応付ける。
図14の例では、情報処理装置100は、用意した記憶領域を、区切り文字「$」と「$」との組み合わせのパターンに対応付ける。また、情報処理装置100は、例えば、用意した記憶領域を、区切り文字「$」と「:」との組み合わせのパターンに対応付ける。また、情報処理装置100は、例えば、用意した記憶領域を、区切り文字「$」と「#」との組み合わせのパターンに対応付ける。また、情報処理装置100は、例えば、用意した記憶領域を、区切り文字「$」と「:#」との組み合わせのパターンに対応付ける。
【0094】
ここでは、情報処理装置100が、2つの区切り文字の組み合わせのパターンのうち、第1のデータ800において所定の文字「a」を挟むために用いられていないパターンについても特定する場合について説明したが、これに限らない。例えば、情報処理装置100は、第1のデータ800において所定の文字「a」を挟むために用いられていないパターンについて特定しなくてもよい。この場合、情報処理装置100は、区切り文字の種類数の二乗個の記憶領域を用意しなくても、第1のデータ800において所定の文字「a」を挟むために用いられているパターンに対応する記憶領域を用意すればよい。ここで、
図15の説明に移行する。
【0095】
図15において、情報処理装置100は、第2のデータ1000を参照して、2つの区切り文字の組み合わせのパターンごとに、当該パターンに対応付けて並べられた文字列を抽出する。そして、情報処理装置100は、2つの区切り文字の組み合わせのパターンごとに、当該パターンに対応付けられた記憶領域に、第2のデータ1000において当該パターンの組み合わせに対応付けて並べられた文字列を記憶する。
【0096】
情報処理装置100は、例えば、区切り文字「$」と「:」との組み合わせのパターンに対応付けられた記憶領域に、第2のデータ1000において当該パターンに対応付けて並べられた文字列「11,11,11」を記憶する。同様に、情報処理装置100は、区切り文字「:」と「#」との組み合わせのパターンに対応付けられた記憶領域に、第2のデータ1000において当該パターンに対応付けて並べられた文字列「03,03,03」を記憶する。また、情報処理装置100は、区切り文字「$」と「$」との組み合わせのパターンに対応付けた記憶領域には、第2のデータ1000において当該パターンに対応付けて並べられた文字列がないため、文字列を記憶しない。ここで、
図16の説明に移行する。
【0097】
図16において、情報処理装置100は、2つの区切り文字の組み合わせのパターンに対応する記憶領域に記憶された文字列のいずれかの挿入先となる、第1のデータ800において当該パターンの組み合わせの2つの区切り文字に挟まれた箇所を特定する。
【0098】
図16の例では、情報処理装置100は、例えば、第1のデータ800のうち所定の文字「a」がある箇所を探索する。情報処理装置100は、具体的には、第1のデータ800のうち1番目に出現する文字「a」がある箇所であって、区切り文字「$」と「:」とに挟まれた箇所を特定する。ここで、
図17の説明に移行する。
【0099】
図17において、情報処理装置100は、特定した文字「a」がある箇所を挟む2つの区切り文字の組み合わせのパターンを特定する。情報処理装置100は、区切り文字「$」と「:」との組み合わせのパターンを特定すると、特定した区切り文字「$」と「:」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「11,11,11」の先頭の文字列「11」を読み出す。そして、情報処理装置100は、読み出した文字列「11」を、特定した箇所にある文字「a」の代わりに、第1のデータ800に挿入する。ここで、
図18の説明に移行する。
【0100】
図18において、情報処理装置100は、特定した区切り文字「$」と「:」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「11,11,11」のうち、読み出し済みである先頭の文字列「11」を削除する。ここで、
図19の説明に移行する。
【0101】
図19において、情報処理装置100は、同様に、第1のデータ800のうち2番目に出現する文字「a」がある箇所であって、区切り文字「:」と「#」とに挟まれた箇所を特定する。情報処理装置100は、特定した文字「a」がある箇所を挟む2つの区切り文字の組み合わせのパターンを特定する。情報処理装置100は、区切り文字「:」と「#」との組み合わせのパターンを特定すると、特定した区切り文字「:」と「#」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「03,03,03」の先頭の文字列「03」を読み出す。そして、情報処理装置100は、読み出した文字列「03」を、特定した箇所にある文字「a」の代わりに、第1のデータ800に挿入する。
【0102】
情報処理装置100は、特定した区切り文字「:」と「#」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「03,03,03」のうち、読み出し済みである先頭の文字列「03」を削除する。ここで、
図20の説明に移行する。
【0103】
図20において、情報処理装置100は、同様に、第1のデータ800のうち3番目に出現する文字「a」がある箇所であって、区切り文字「#」と「:#」とに挟まれた箇所を特定する。情報処理装置100は、特定した文字「a」がある箇所を挟む2つの区切り文字の組み合わせのパターンを特定する。情報処理装置100は、特定した区切り文字「#」と「:#」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「load,load,load,protocol」の先頭の文字列「load」を読み出す。そして、情報処理装置100は、読み出した文字列「load」を、特定した箇所にある文字「a」の代わりに、第1のデータ800に挿入する。
【0104】
情報処理装置100は、特定した区切り文字「#」と「:#」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「load,load,load,protocol」のうち、読み出し済みである先頭の文字列「load」を削除する。ここで、
図21の説明に移行する。
【0105】
図21において、情報処理装置100は、同様に、第1のデータ800のうち4番目に出現する文字「a」がある箇所であって、区切り文字「:#」と「#」とに挟まれた箇所を特定する。情報処理装置100は、特定した文字「a」がある箇所を挟む2つの区切り文字の組み合わせのパターンを特定する。情報処理装置100は、特定した区切り文字「:#」と「#」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「jerasure,lrc」の先頭の文字列「jerasure」を読み出す。そして、情報処理装置100は、読み出した文字列「jerasure」を、特定した箇所にある文字「a」の代わりに、第1のデータ800に挿入する。
【0106】
情報処理装置100は、特定した区切り文字「:#」と「#」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「jerasure,lrc」のうち、読み出し済みである先頭の文字列「jerasure」を削除する。ここで、
図22の説明に移行する。
【0107】
図22において、情報処理装置100は、同様に、第1のデータ800における文字「a」を置き換えていく。情報処理装置100は、第1のデータ800を「$11:03#load:#jerasure#load:#lrc#load:#isa$11:03#monmap$11:03#adding#auth#protocol:#none$」に変形する。ここで、
図23の説明に移行する。
【0108】
図23において、情報処理装置100は、第1のデータ800の先頭に付与した改行を示す制御文字を削除し、圧縮対象データ400を復元する。これにより、情報処理装置100は、圧縮効率を向上させて圧縮された圧縮ファイル1100からでも、圧縮対象データ400を元に戻すことができる。
【0109】
ここでは、圧縮対象データ400を圧縮する情報処理装置100と、圧縮対象データ400を復元する情報処理装置100とが、同じ装置である場合について説明したが、これに限らない。例えば、圧縮対象データ400を圧縮する情報処理装置100と、圧縮対象データ400を復元する情報処理装置100とは、別の装置であってもよい。この場合、圧縮対象データ400を圧縮する情報処理装置100と、圧縮対象データ400を復元する情報処理装置100とは、2つの区切り文字の組み合わせのパターンを特定する際には、同じ組み合わせルールを用いることになる。
【0110】
(圧縮処理手順の一例)
次に、
図24を用いて、圧縮処理手順の一例について説明する。
【0111】
図24は、圧縮処理手順の一例を示すフローチャートである。
図24において、情報処理装置100は、圧縮対象データ400となるテキストファイルの入力を受け付ける(ステップS2401)。
【0112】
次に、情報処理装置100は、テキストファイルを、区切り文字と、区切り文字以外の文字列とに分割する(ステップS2402)。そして、情報処理装置100は、区切り文字と区切り文字との間に所定の文字を挟むように、すべての区切り文字を並べて記録する(ステップS2403)。
【0113】
次に、情報処理装置100は、すべての文字列を、前後に出現する2つの区切り文字の組み合わせのパターンごとにソートする(ステップS2404)。そして、情報処理装置100は、ソート後のすべての文字列を、前後に出現する2つの区切り文字の組み合わせのパターンを特定可能に記録する(ステップS2405)。
【0114】
次に、情報処理装置100は、記録した区切り文字と、記録した文字列とに対してLZMAによる圧縮を行う(ステップS2406)。そして、情報処理装置100は、圧縮により得られた圧縮データを出力し(ステップS2407)、圧縮処理を終了する。これにより、情報処理装置100は、圧縮対象データ400を復元可能に圧縮することができる。
【0115】
(復元処理手順の一例)
次に、
図25を用いて、復元処理手順の一例について説明する。
【0116】
図25は、復元処理手順の一例を示すフローチャートである。
図25において、情報処理装置100は、文字列配列del[]、文字列配列data[][][]、整数配列ID[]、整数i、および整数配列j[][]を用意する(ステップS2501)。
【0117】
文字列配列del[]は、読み込んだ区切り文字が順に格納される配列である。文字列配列del[]のインデックスは、読み込んだ区切り文字に割り振られる通し番号であり、その区切り文字が復元データの先頭から何番目に存在するかを示す番号である。例えば、del[1]は、復元データの先頭から1番目に存在する区切り文字が格納される。
【0118】
文字列配列data[][][]は、読み込んだ文字列が順に格納される配列である。文字列配列data[][][]の1番目のインデックスは、読み込んだ文字列の直前に出現する区切り文字の種類に対して割り振られる番号である。文字列配列data[][][]の2番目のインデックスは、読み込んだ文字列の直後に出現する区切り文字の種類に対して割り振られる番号である。
【0119】
文字列配列data[][][]の3番目のインデックスは、1,2番目のインデックスに対応する種類の区切り文字の組み合わせに挟まれた文字列に、順に割り振られる通し番号である。例えば、区切り文字「$」の種類に対して割り振られた番号が「1」であれば、data[1][1][1]は、2つの区切り文字「$」の組み合わせに挟まれた文字列のうち、復元データの先頭から1番目に存在する文字列が格納される。
【0120】
整数配列ID[]は、区切り文字の種類に対して割り振られる番号が格納される配列である。整数配列ID[]のインデックスは、区切り文字に割り振られる通し番号であり、その区切り文字が復元データの先頭から何番目に存在するかを示す番号である。例えば、ID[1]は、復元データの先頭から1番目に存在する文字列の種類に対して割り振られた番号が格納される。
【0121】
整数iは、復元データの先頭から何番目に存在する区切り文字を指定するかを示す番号である。整数iは初期値1である。
【0122】
整数配列j[][]は、区切り文字の組み合わせごとに、その組み合わせに挟まれた文字列のうち、何番目の文字列を指定するかを示す番号が格納される配列である。整数配列j[][]の1番目のインデックスは、区切り文字の組み合わせの前側の区切り文字の種類に対して割り振られる番号である。整数配列j[][]の2番目のインデックスは、区切り文字の組み合わせの後ろ側の区切り文字の種類に対して割り振られる番号である。
【0123】
j[][]は、それぞれ、初期値1である。例えば、区切り文字「$」の種類に対して割り振られた番号が「1」であれば、j[1][1]は、2つの区切り文字「$」の組み合わせに挟まれた文字列のうち、何番目の文字列を指定するかを示す番号が格納される。
【0124】
次に、情報処理装置100は、圧縮データに対してLZMAによる復号を行い、すべての区切り文字と、すべての文字列とを並べた復元データを取得する(ステップS2502)。そして、情報処理装置100は、すべての区切り文字を、順番にdel[]に読み込む(ステップS2503)。
【0125】
次に、情報処理装置100は、すべての文字列を、前後に出現する2つの区切り文字の組み合わせのパターンごとに分類して、順番にdata[][][]に読み込む(ステップS2504)。そして、情報処理装置100は、del[i]を記録して、iに1を加算する(ステップS2505)。
【0126】
次に、情報処理装置100は、iが区切り文字の数を超えているか否かを判定する(ステップS2506)。ここで、区切り文字の数を超えている場合(ステップS2506:Yes)、情報処理装置100は、復元処理を終了する。
【0127】
一方で、区切り文字の数を超えていない場合(ステップS2506:No)、情報処理装置100は、data[ID[del[i−1]]][ID[del[i]]][j[ID[del[i−1]]][ID[del[i]]]]を記録して、j[ID[del[i−1]]][ID[del[i]]]に1を加算する(ステップS2507)。そして、情報処理装置100は、ステップS2505の処理に戻る。これにより、情報処理装置100は、圧縮対象データ400を復元することができる。
【0128】
以上説明したように、情報処理装置100によれば、圧縮対象データ400から、所定の区切り文字と、2つの所定の区切り文字に挟まれた文字列とを抽出することができる。また、情報処理装置100によれば、区切り文字が圧縮対象データ400に出現した順序を特定可能に区切り文字を並べた第1のデータ800を生成することができる。また、情報処理装置100によれば、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列が圧縮対象データ400に出現した順序を特定可能に文字列を並べた第2のデータ1000を生成することができる。また、情報処理装置100によれば、生成した第1のデータ800と第2のデータ1000とに対してスライド辞書法を用いた圧縮を行うことができる。これにより、情報処理装置100は、圧縮対象データ400に戻すことが可能である第1のデータ800と第2のデータ1000とを生成することができ、第2のデータ1000においては同じ文字列が比較的近い位置に連続して現れやすいようにすることができる。結果として、情報処理装置100は、開始位置を示すために用いるビット数を少なくしやすく、また、同じ文字列を見つけやすく圧縮しやすいようにして、圧縮効率の向上を図ることができる。
【0129】
また、情報処理装置100によれば、所定の区切り文字の指定を受け付けることができる。また、情報処理装置100によれば、圧縮対象データ400から、指定を受け付けた所定の区切り文字と、指定を受け付けた2つの区切り文字に挟まれた文字列を抽出することができる。これにより、情報処理装置100は、圧縮対象データ400の形式に沿った区切り文字を用いやすくなり、第2のデータ1000において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【0130】
また、情報処理装置100によれば、圧縮対象データ400に出現する区切り文字の種類数が閾値より大きい場合、圧縮対象データ400を、出現する区切り文字の種類数が閾値以下になる部分データに分割することができる。また、情報処理装置100によれば、区切り文字が部分データに出現した順序を特定可能に区切り文字を並べた第1のデータ800を生成することができる。また、情報処理装置100によれば、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列が部分データに出現した順序を特定可能に文字列を並べた第2のデータ1000を生成することができる。これにより、情報処理装置100は、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列を分類する際に用いられる記憶領域のサイズを抑制し、記憶領域を節約するとともに効率よく処理を行うことができる。
【0131】
また、情報処理装置100によれば、区切り文字を、圧縮対象データ400に出現した順序に沿って所定の文字と交互に並べた第1のデータ800を生成することができる。情報処理装置100によれば、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列を、圧縮対象データ400に出現した順序に沿って所定の文字と交互に並べた第2のデータ1000を生成することができる。これにより、情報処理装置100は、区切り文字が2文字以上であっても、区切り文字と区切り文字との境界を判別可能に第1のデータ800を生成することができる。また、情報処理装置100は、文字列と文字列との境界を判別可能に第2のデータ1000を生成することができる。
【0132】
また、情報処理装置100によれば、LZ77またはLZMAの圧縮アルゴリズムを用いた圧縮を行うことができる。これにより、情報処理装置100は、第2のデータ1000に対する圧縮に用いることが好ましいLZ77またはLZMAの圧縮アルゴリズムを用いることができ、圧縮データのサイズの低減化を図ることができる。
【0133】
また、情報処理装置100によれば、区切り文字に文字数が2以上の文字列を含むようにすることができる。これにより、情報処理装置100は、区切り文字の種類数を増大させやすくし、2つの区切り文字の組み合わせの種類数を増大させやすくすることができる。このため、情報処理装置100は、同じ種類の組み合わせの2つの区切り文字に挟まれた文字列が同じ属性の文字列になりやすくし、第2のデータ1000において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【0134】
また、情報処理装置100によれば、区切り文字の文字数は1であるとし、区切り文字に文字数が2以上の文字列を含まないようにすることができる。これにより、情報処理装置100は、区切り文字の種類数を増大しにくくし、2つの区切り文字の組み合わせの種類数を増大しにくくすることができる。このため、情報処理装置100は、2つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの2つの区切り文字に挟まれた文字列を分類する際に用いられる記憶領域のサイズを抑制し、記憶領域を節約するとともに効率よく処理を行うことができる。また、情報処理装置100は、区切り文字の文字数を1に固定するため、第1のデータ800において区切り文字と区切り文字との境界を明示しなくてもよくなり、第1のデータ800のサイズの低減化を図ることができる。
【0135】
また、情報処理装置100によれば、区切り文字に制御文字を含むようにすることができる。これにより、情報処理装置100は、2つの区切り文字の組み合わせの種類ごとに文字列を分類するときに、制御文字を含む組み合わせの2つの区切り文字に挟まれた文字列についても分類することができる。結果として、情報処理装置100は、第2のデータ1000において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【0136】
また、情報処理装置100によれば、圧縮対象データ400の先頭には改行を示す制御文字が出現するものとして扱い、第2のデータ1000を生成することができる。これにより、情報処理装置100は、2つの区切り文字の組み合わせの種類ごとに文字列を分類するときに、圧縮対象データ400の先頭の文字列についても分類することができる。
【0137】
また、情報処理装置100によれば、第1のデータ800と第2のデータ1000とにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号することができる。情報処理装置100によれば、復号によって得られた第2のデータ1000を参照し、復号によって得られた第1のデータ800における2つの区切り文字の間に、当該2つの区切り文字の組み合わせの種類に対応付けられた文字列を順次挿入することができる。これにより、情報処理装置100は、効率よく圧縮された圧縮データから、圧縮元である圧縮対象データ400を復元することができる。
【0138】
なお、本実施の形態で説明した圧縮方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本圧縮プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本圧縮プログラムは、インターネット等のネットワークを介して配布してもよい。
【0139】
上述した実施の形態に関し、さらに以下の付記を開示する。
【0140】
(付記1)コンピュータに、
圧縮対象データから、所定の区切り文字と、2つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第1のデータと、2つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの2つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第2のデータとを生成し、
生成した前記第1のデータと前記第2のデータとに対してスライド辞書法を用いた圧縮を行う、
処理を実行させることを特徴とする圧縮プログラム。
【0141】
(付記2)前記コンピュータに、
前記所定の区切り文字の指定を受け付ける、処理を実行させ、
前記抽出する処理は、
前記圧縮対象データから、指定を受け付けた前記所定の区切り文字と、2つの前記区切り文字に挟まれた文字列を抽出する、ことを特徴とする付記1に記載の圧縮プログラム。
【0142】
(付記3)前記コンピュータに、
前記圧縮対象データに出現する前記区切り文字の種類数が閾値より大きい場合、前記圧縮対象データを、出現する前記区切り文字の種類数が閾値以下になる部分データに分割する、処理を実行させ、
前記生成する処理は、
前記区切り文字が前記部分データに出現した順序を特定可能に前記区切り文字を並べた第1のデータと、前記部分データに出現する2つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの2つの前記区切り文字に挟まれた前記文字列が前記部分データに出現した順序を特定可能に前記文字列を並べた第2のデータとを生成する、ことを特徴とする付記1または2に記載の圧縮プログラム。
【0143】
(付記4)前記生成する処理は、
前記区切り文字を、前記圧縮対象データに出現した順序に沿って所定の文字と交互に並べた前記第1のデータと、2つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの2つの前記区切り文字に挟まれた前記文字列を、前記圧縮対象データに出現した順序に沿って所定の文字と交互に並べた前記第2のデータとを生成する、ことを特徴とする付記1〜3のいずれか一つに記載の圧縮プログラム。
【0144】
(付記5)前記圧縮は、LZ77またはLZMAの圧縮アルゴリズムを用いた圧縮である、ことを特徴とする付記1〜4のいずれか一つに記載の圧縮プログラム。
【0145】
(付記6)前記区切り文字は文字数が2以上の文字列を含む、ことを特徴とする付記1〜5のいずれか一つに記載の圧縮プログラム。
【0146】
(付記7)前記区切り文字の文字数は1である、ことを特徴とする付記1〜5のいずれか一つに記載の圧縮プログラム。
【0147】
(付記8)前記区切り文字は制御文字を含む、ことを特徴とする付記1〜7のいずれか一つに記載の圧縮プログラム。
【0148】
(付記9)前記生成する処理は、
前記圧縮対象データの先頭には改行を示す制御文字が出現するものとして扱い、前記第2のデータを生成する、ことを特徴とする付記1〜8のいずれか一つに記載の圧縮プログラム。
【0149】
(付記10)コンピュータが、
圧縮対象データから、所定の区切り文字と、2つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第1のデータと、2つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの2つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第2のデータとを生成し、
生成した前記第1のデータと前記第2のデータとに対してスライド辞書法を用いた圧縮を行う、
処理を実行することを特徴とする圧縮方法。
【0150】
(付記11)圧縮対象データから、所定の区切り文字と、2つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第1のデータと、2つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの2つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第2のデータとを生成し、
生成した前記第1のデータと前記第2のデータとに対してスライド辞書法を用いた圧縮を行う、
制御部を有することを特徴とする情報処理装置。
【0151】
(付記12)コンピュータに、
所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第1のデータと、2つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの2つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第2のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第2のデータを参照し、復号によって得られた前記第1のデータにおける2つの前記区切り文字の間に、当該2つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
処理を実行させることを特徴とする復元プログラム。
【0152】
(付記13)コンピュータが、
所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第1のデータと、2つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの2つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第2のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第2のデータを参照し、復号によって得られた前記第1のデータにおける2つの前記区切り文字の間に、当該2つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
処理を実行することを特徴とする復元方法。
【0153】
(付記14)所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第1のデータと、2つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの2つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第2のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第2のデータを参照し、復号によって得られた前記第1のデータにおける2つの前記区切り文字の間に、当該2つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
制御部を有することを特徴とする情報処理装置。