(57)【要約】【課題】圧縮効率の向上を図ること。【解決手段】情報処理装置１００は、圧縮対象データ１１０から、所定の区切り文字と、２つの所定の区切り文字に挟まれた文字列とを抽出する。情報処理装置１００は、抽出した区切り文字が圧縮対象データ１１０に出現した順序を特定可能に、抽出した区切り文字を並べた第１のデータ１２１を生成する。情報処理装置１００は、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列が圧縮対象データ１１０に出現した順序を特定可能に、抽出した文字列を並べた第２のデータ１２２を生成する。情報処理装置１００は、生成した第１のデータ１２１と第２のデータ１２２とに対してスライド辞書法を用いた圧縮を行う。【選択図】図１
2018007236.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
圧縮対象データから、所定の区切り文字と、２つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成し、
生成した前記第１のデータと前記第２のデータとに対してスライド辞書法を用いた圧縮を行う、
処理を実行させることを特徴とする圧縮プログラム。
【請求項２】
前記コンピュータに、
前記所定の区切り文字の指定を受け付ける、処理を実行させ、
前記抽出する処理は、
前記圧縮対象データから、指定を受け付けた前記所定の区切り文字と、２つの前記区切り文字に挟まれた文字列を抽出する、ことを特徴とする請求項１に記載の圧縮プログラム。
【請求項３】
前記コンピュータに、
前記圧縮対象データに出現する前記区切り文字の種類数が閾値より大きい場合、前記圧縮対象データを、出現する前記区切り文字の種類数が閾値以下になる部分データに分割する、処理を実行させ、
前記生成する処理は、
前記区切り文字が前記部分データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、前記部分データに出現する２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記部分データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成する、ことを特徴とする請求項１または２に記載の圧縮プログラム。
【請求項４】
前記区切り文字は文字数が２以上の文字列を含む、ことを特徴とする請求項１〜３のいずれか一つに記載の圧縮プログラム。
【請求項５】
前記区切り文字の文字数は１である、ことを特徴とする請求項１〜４のいずれか一つに記載の圧縮プログラム。
【請求項６】
コンピュータが、
圧縮対象データから、所定の区切り文字と、２つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成し、
生成した前記第１のデータと前記第２のデータとに対してスライド辞書法を用いた圧縮を行う、
処理を実行することを特徴とする圧縮方法。
【請求項７】
圧縮対象データから、所定の区切り文字と、２つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成し、
生成した前記第１のデータと前記第２のデータとに対してスライド辞書法を用いた圧縮を行う、
制御部を有することを特徴とする情報処理装置。
【請求項８】
コンピュータに、
所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第２のデータを参照し、復号によって得られた前記第１のデータにおける２つの前記区切り文字の間に、当該２つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
処理を実行させることを特徴とする復元プログラム。
【請求項９】
コンピュータが、
所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第２のデータを参照し、復号によって得られた前記第１のデータにおける２つの前記区切り文字の間に、当該２つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
処理を実行することを特徴とする復元方法。
【請求項１０】
所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第２のデータを参照し、復号によって得られた前記第１のデータにおける２つの前記区切り文字の間に、当該２つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
制御部を有することを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、圧縮プログラム、復元プログラム、圧縮方法、復元方法、および情報処理装置に関する。
【背景技術】
【０００２】
従来、データを圧縮してデータのサイズを低減する圧縮技術がある。圧縮技術には、例えば、圧縮後のデータを圧縮前のデータに復元することができる可逆圧縮（ロスレス圧縮）技術がある。可逆圧縮技術には、例えば、「ＬＺ７７（Ｌｅｍｐｅｌ−Ｚｉｖ  ７７）」という圧縮アルゴリズムや「ＬＺＭＡ（Ｌｅｍｐｅｌ−Ｚｉｖ−Ｍａｒｋｏｖ  ｃｈａｉｎ−Ａｌｇｏｒｉｔｈｍ）」という圧縮アルゴリズムを使用する圧縮技術などがある。
【０００３】
関連する先行技術としては、例えば、情報ファイルの複数のレコードを区分データが共通する集合に分類し、１つのレコードを構成する複数の区分データを区分の種類ごとに並び換えることにより圧縮を行うものがある。また、例えば、ログデータを取得し、時刻情報を抽出し、時刻情報を所定のデータ幅ごとに分割することで、複数のバイト群を生成し、バイト群ごとに前後の値を比較して、差分値を算出することで差分値情報を生成し、差分値情報を、ＬＺ７７方式によって圧縮する技術がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−６５９０２号公報
【特許文献２】特開２０１２−２３５２８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、圧縮効率が悪くなる場合がある。例えば、圧縮対象データにおいて同じ文字列が比較的近い位置に連続して現れる場合に比べて、同じ文字列が比較的離れた位置に連続して現れる場合には、圧縮後のデータのサイズが大きくなってしまう傾向がある。
【０００６】
１つの側面では、本発明は、圧縮効率の向上を図ることができる圧縮プログラム、復元プログラム、圧縮方法、復元方法、および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、圧縮対象データから、所定の区切り文字と、２つの前記区切り文字に挟まれた文字列とを抽出し、前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成し、生成した前記第１のデータと前記第２のデータとに対してスライド辞書法を用いた圧縮を行う圧縮プログラム、圧縮方法、および情報処理装置が提案される。
【０００８】
また、本発明の一側面によれば、所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、復号によって得られた前記第２のデータを参照し、復号によって得られた前記第１のデータにおける２つの前記区切り文字の間に、当該２つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する復元プログラム、復元方法、および情報処理装置が提案される。
【発明の効果】
【０００９】
本発明の一態様によれば、圧縮効率の向上を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態にかかる圧縮方法の一実施例を示す説明図である。
【図２】図２は、情報処理装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、情報処理装置１００の機能的構成例を示すブロック図である。
【図４】図４は、圧縮対象データ４００を圧縮する一例を示す説明図（その１）である。
【図５】図５は、圧縮対象データ４００を圧縮する一例を示す説明図（その２）である。
【図６】図６は、圧縮対象データ４００を圧縮する一例を示す説明図（その３）である。
【図７】図７は、圧縮対象データ４００を圧縮する一例を示す説明図（その４）である。
【図８】図８は、圧縮対象データ４００を圧縮する一例を示す説明図（その５）である。
【図９】図９は、圧縮対象データ４００を圧縮する一例を示す説明図（その６）である。
【図１０】図１０は、圧縮対象データ４００を圧縮する一例を示す説明図（その７）である。
【図１１】図１１は、圧縮対象データ４００を圧縮する一例を示す説明図（その８）である。
【図１２】図１２は、圧縮対象データ４００を復元する一例を示す説明図（その１）である。
【図１３】図１３は、圧縮対象データ４００を復元する一例を示す説明図（その２）である。
【図１４】図１４は、圧縮対象データ４００を復元する一例を示す説明図（その３）である。
【図１５】図１５は、圧縮対象データ４００を復元する一例を示す説明図（その４）である。
【図１６】図１６は、圧縮対象データ４００を復元する一例を示す説明図（その５）である。
【図１７】図１７は、圧縮対象データ４００を復元する一例を示す説明図（その６）である。
【図１８】図１８は、圧縮対象データ４００を復元する一例を示す説明図（その７）である。
【図１９】図１９は、圧縮対象データ４００を復元する一例を示す説明図（その８）である。
【図２０】図２０は、圧縮対象データ４００を復元する一例を示す説明図（その９）である。
【図２１】図２１は、圧縮対象データ４００を復元する一例を示す説明図（その１０）である。
【図２２】図２２は、圧縮対象データ４００を復元する一例を示す説明図（その１１）である。
【図２３】図２３は、圧縮対象データ４００を復元する一例を示す説明図（その１２）である。
【図２４】図２４は、圧縮処理手順の一例を示すフローチャートである。
【図２５】図２５は、復元処理手順の一例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下に、図面を参照して、本発明にかかる圧縮プログラム、復元プログラム、圧縮方法、復元方法、および情報処理装置の実施の形態を詳細に説明する。
【００１２】
（実施の形態にかかる圧縮方法の一実施例）
図１は、実施の形態にかかる圧縮方法の一実施例を示す説明図である。情報処理装置１００は、スライド辞書法を用いた圧縮を行うコンピュータである。スライド辞書法を用いた圧縮は、例えば、「ＬＺ７７」による圧縮や、「ＬＺＭＡ」による圧縮などである。
【００１３】
例えば、スライド辞書法を用いた圧縮では、圧縮対象データ１１０の中に同じ文字列が複数出現する場合に、後に出現する文字列を、先に出現する同じ文字列の開始位置と長さとを示すデータに変換して、圧縮対象データ１１０を圧縮することが考えられる。
【００１４】
しかしながら、この場合、圧縮対象データ１１０の内容によって圧縮効率が大きく変化してしまう傾向がある。例えば、圧縮対象データ１１０において同じ文字列が比較的近い位置に連続して現れる場合に比べて、同じ文字列が比較的離れた位置に連続して現れる場合には、圧縮後のデータのサイズが小さくなりにくく、圧縮効率が悪くなってしまう傾向がある。
【００１５】
具体的には、スライド辞書法を用いた圧縮では、後に出現する文字列より前にあるスライド窓と呼ばれる参照範囲に同じ文字列があれば、後に出現する文字列を先に出現する同じ文字列の開始位置と長さとを示すデータに変換する。このとき、同じ文字列が比較的離れた位置に出現すると、後に出現する文字列より前にある参照範囲に同じ文字列がなく、後に出現する文字列を先に出現する同じ文字列の開始位置と長さとを示すデータに変換することができない場合がある。このため、圧縮後のデータのサイズが小さくなりにくく、圧縮効率が悪くなってしまう傾向がある。
【００１６】
これに対し、後に出現する文字列を、参照範囲を広げて、比較的離れた位置に先に出現する同じ文字列の開始位置と長さとを示すデータに変換しようとすると、開始位置を示すために用いるビット数の増大化を招いてしまう。このため、後に出現する文字列を、先に出現する同じ文字列の開始位置と長さとを示すデータに変換しても、圧縮後のデータのサイズが小さくなりにくく、圧縮効率が悪くなってしまう傾向がある。
【００１７】
一方で、同じ文字列が比較的近い位置に出現すると、後に出現する文字列より前にある参照範囲に同じ文字列があり、後に出現する文字列を先に出現する同じ文字列の開始位置と長さとを示すデータに変換することができる可能性がある。このため、圧縮効率が悪くなりにくい傾向がある。
【００１８】
また、同じ文字列が比較的近い位置に出現すれば、後に出現する文字列を、参照範囲を比較的狭くしても、先に出現する同じ文字列の開始位置と長さとを示すデータに変換することができる可能性があり、開始位置を示すために用いるビット数は比較的小さくなる。このため、後に出現する文字列を、先に出現する文字列の開始位置と長さとを示すデータに変換しても、圧縮効率が悪くなりにくい傾向がある。
【００１９】
そこで、本実施の形態では、圧縮対象データ１１０を基に、同じ文字列が比較的近い位置に連続して現れやすく、かつ、圧縮対象データ１１０に戻すことが可能なデータを生成してから、スライド辞書法を用いた圧縮を行うことができる圧縮方法について説明する。
【００２０】
具体的には、圧縮対象データ１１０が所定の区切り文字で区切られた一定の形式に沿ったデータの集まりである場合、圧縮対象データ１１０において同じ種類の組み合わせの２つの区切り文字で挟まれる複数の文字列は、同じ文字列になる可能性がある。そこで、本実施の形態では、圧縮対象データ１１０を基に、２つの区切り文字の組み合わせの種類を用いて、同じ文字列が比較的近い位置に連続して現れやすいデータを生成することにより、圧縮効率の向上を図ることになる。
【００２１】
図１の例では、情報処理装置１００は、圧縮対象データ１１０を受け付ける。圧縮対象データ１１０とは、所定の区切り文字を含むデータである。圧縮対象データ１１０は、例えば、所定の区切り文字で区切られた一定の形式に沿ったログが集約され、同じ文字列が繰り返し出現するログデータであることが好ましい。図１の例では、圧縮対象データ１１０は、「＄１１：０３＃ｌｏａｄ：＃ｊｅｒａｓｕｒｅ＃ｌｏａｄ：＃ｌｒｃ＃ｌｏａｄ：＃ｉｓａ＄１１：０３＃ｍｏｎｍａｐ＄１１：０３＃ａｄｄｉｎｇ＃ａｕｔｈ＃ｐｒｏｔｏｃｏｌ：＃ｎｏｎｅ＄」である。
【００２２】
区切り文字とは、圧縮対象データ１１０に含まれる文字列を便宜上区切るために用いられる文字である。区切り文字は、例えば、数字やアルファベット以外の文字である。区切り文字は、ユーザからの操作入力によって設定されてもよい。区切り文字は、例えば、１文字である。区切り文字は、例えば、文字数が２以上の文字列を含んでもよい。区切り文字は、例えば、制御文字を含んでもよい。
【００２３】
（１−１）情報処理装置１００は、圧縮対象データ１１０から、所定の区切り文字と、２つの所定の区切り文字に挟まれた文字列とを抽出する。２つの所定の区切り文字に挟まれた文字列は、例えば、区切り文字を含まない文字列であるとする。情報処理装置１００は、例えば、所定の区切り文字「＄  ：  ＃  ：＃  ＃  ：＃  ＃  ：＃  ＄  ：  ＃  ＄  ：  ＃  ＃  ＃  ：＃  ＄」を抽出する。情報処理装置１００は、例えば、文字列「１１  １１  １１  ０３  ０３  ０３  ｍｏｎｍａｐ  ａｄｄｉｎｇ  ａｕｔｈ  ｌｏａｄ  ｌｏａｄ  ｌｏａｄ  ｐｒｏｔｏｃｏｌ  ｉｓａ  ｎｏｎｅ  ｊｅｒａｓｕｒｅ  ｌｒｃ」などを抽出する。
【００２４】
（１−２）情報処理装置１００は、抽出した区切り文字が圧縮対象データ１１０に出現した順序を特定可能に、抽出した区切り文字を並べた第１のデータ１２１を生成する。情報処理装置１００は、例えば、抽出した区切り文字を出現順に並べたデータを、第１のデータ１２１として生成する。第１のデータ１２１は、区切り文字が圧縮対象データ１１０に出現した順序を特定可能であればよく、抽出した区切り文字を出現順の逆に並べたデータであってもよい。
【００２５】
（１−３）情報処理装置１００は、２つの区切り文字の組み合わせの種類ごとに、抽出した当該種類の組み合わせの２つの区切り文字に挟まれた文字列が圧縮対象データ１１０に出現した順序を特定可能に、抽出した文字列を並べた第２のデータ１２２を生成する。組み合わせは、区切り文字を組み合わせる順番を考慮した組み合わせである。組み合わせは、例えば、区切り文字「：」と「＃」との組み合わせと、区切り文字「＃」と「：」との組み合わせとを、異なる組み合わせとして含んでもよい。また、組み合わせは、区切り文字を組み合わせる順番を考慮しない組み合わせであってもよい。
【００２６】
種類は、２つの区切り文字を組み合わせたパターンである。種類は、複数のパターンをまとめたものであってもよい。情報処理装置１００は、例えば、区切り文字「：」と「＃」との組み合わせのパターンと、区切り文字「＃」と「：」との組み合わせのパターンとを、同じ種類の組み合わせとして扱ってもよい。
【００２７】
情報処理装置１００は、例えば、２つの区切り文字の組み合わせの種類ごとに区切って、抽出した文字列を出現順に並べたデータを、第２のデータ１２２として生成する。第２のデータ１２２は、文字列が圧縮対象データ１１０に出現した順序を特定可能であればよく、抽出した文字列を出現順の逆に並べたデータであってもよい。また、第２のデータ１２２は、２つの区切り文字の組み合わせの種類自体を示す情報を含んでいなくてもよい。第２のデータ１２２は、例えば、第１のデータ１２１から特定可能な２つの区切り文字の組み合わせの種類を利用することにより、各種類の組み合わせの２つの区切り文字に挟まれた文字列が圧縮対象データ１１０に出現した順序を特定可能であってもよい。
【００２８】
（１−４）情報処理装置１００は、生成した第１のデータ１２１と第２のデータ１２２とに対してスライド辞書法を用いた圧縮を行う。情報処理装置１００は、例えば、生成した第１のデータ１２１に第２のデータ１２２を連結し、ＬＺＭＡによる圧縮を行う。そして、情報処理装置１００は、圧縮により得られた圧縮データ１３０を出力する。情報処理装置１００は、第１のデータ１２１と第２のデータ１２２とを連結し、第１のデータ１２１については符号化されないように、ＬＺＭＡによる圧縮を行ってもよい。
【００２９】
これによれば、情報処理装置１００は、圧縮対象データ１１０に戻すことが可能である第１のデータ１２１と第２のデータ１２２とを生成することができ、第２のデータ１２２においては同じ文字列が比較的近い位置に連続して現れやすいようにすることができる。これにより、情報処理装置１００は、開始位置を示すために用いるビット数を少なくしやすく、また、同じ文字列を見つけやすく圧縮しやすいようにして、圧縮効率の向上を図ることができる。
【００３０】
情報処理装置１００は、具体的には、所定の区切り文字で区切られた一定の形式に沿ったデータが集約されている圧縮対象データ１１０について圧縮効率の向上を図りやすくすることができる。このため、情報処理装置１００は、表計算ソフトウェアから出力される表データや、ログ収集ソフトウェアから出力されるログデータなどを圧縮対象データ１１０として用いる場合には、圧縮効率をより向上させることができる。
【００３１】
（情報処理装置１００のハードウェア構成例）
次に、図２を用いて、情報処理装置１００のハードウェア構成例について説明する。
【００３２】
図２は、情報処理装置１００のハードウェア構成例を示すブロック図である。図２において、情報処理装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、メモリ２０２と、ネットワークＩ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０３と、ディスクドライブ２０４と、ディスク２０５と、記録媒体Ｉ／Ｆ２０６とを有する。また、各構成部は、バス２００によってそれぞれ接続される。
【００３３】
ここで、ＣＰＵ２０１は、情報処理装置１００の全体の制御を司る。メモリ２０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有する。具体的には、例えば、フラッシュＲＯＭやＲＯＭが各種プログラムを記憶し、ＲＡＭがＣＰＵ２０１のワークエリアとして使用される。各種プログラムは、例えば、実施の形態にかかる圧縮プログラムや復元プログラムを含んでもよい。メモリ２０２に記憶されるプログラムは、ＣＰＵ２０１にロードされることで、コーディングされている処理をＣＰＵ２０１に実行させる。
【００３４】
ネットワークＩ／Ｆ２０３は、通信回線を通じてネットワーク２１０に接続され、ネットワーク２１０を介して他のコンピュータに接続される。そして、ネットワークＩ／Ｆ２０３は、ネットワーク２１０と内部のインターフェースを司り、他のコンピュータからのデータの入出力を制御する。ネットワークＩ／Ｆ２０３には、例えば、モデムやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）アダプタなどを採用することができる。
【００３５】
ディスクドライブ２０４は、ＣＰＵ２０１の制御に従ってディスク２０５に対するデータのリード／ライトを制御する。ディスクドライブ２０４は、例えば、磁気ディスクドライブである。ディスク２０５は、ディスクドライブ２０４の制御で書き込まれたデータを記憶する不揮発メモリである。ディスク２０５は、例えば、磁気ディスク、光ディスクなどである。
【００３６】
記録媒体Ｉ／Ｆ２０６は、外部の記録媒体２０７に接続され、外部の記録媒体２０７と内部のインターフェースを司り、外部の記録媒体２０７に対するデータの入出力を制御する。記録媒体Ｉ／Ｆ２０６は、例えば、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ポートである。記録媒体２０７は、例えば、ＵＳＢメモリである。記録媒体２０７は、実施の形態にかかる圧縮プログラムや復元プログラムを記憶してもよい。
【００３７】
情報処理装置１００は、上述した構成部のほか、例えば、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、半導体メモリ、キーボード、マウス、ディスプレイなどを有することにしてもよい。また、情報処理装置１００は、ディスクドライブ２０４およびディスク２０５の代わりに、ＳＳＤおよび半導体メモリなどを有していてもよい。情報処理装置１００は、具体的には、携帯電話、スマートフォン、タブレット端末、ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）やサーバなどである。
【００３８】
（情報処理装置１００の機能的構成例）
次に、図３を用いて、情報処理装置１００の機能的構成例について説明する。
【００３９】
図３は、情報処理装置１００の機能的構成例を示すブロック図である。情報処理装置１００は、抽出部３０１と、生成部３０２と、圧縮部３０３と、復号部３０４と、復元部３０５とを含む。抽出部３０１〜復元部３０５は、制御部となる機能であり、具体的には、図２に示したメモリ２０２、ディスク２０５などの記憶領域に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、ネットワークＩ／Ｆ２０３により、その機能を実現する。各機能部の処理結果は、例えば、メモリ２０２、ディスク２０５などの記憶領域に記憶される。
【００４０】
抽出部３０１は、圧縮対象データ１１０から、所定の区切り文字と、２つの所定の区切り文字に挟まれた文字列とを抽出する。圧縮対象データ１１０とは、所定の区切り文字を含むデータである。圧縮対象データ１１０は、例えば、所定の区切り文字で区切られた一定の形式に沿ったログが集約され、同じ文字列が繰り返し出現するログデータであることが好ましい。圧縮対象データ１１０は、具体的には、ユーザからの操作入力によって作成されたデータであってもよい。圧縮対象データ１１０は、具体的には、他のコンピュータから情報処理装置１００に送信され、圧縮を依頼されたデータであってもよい。
【００４１】
区切り文字とは、圧縮対象データ１１０に含まれる文字列を便宜上区切るために用いられる文字である。区切り文字は、例えば、数字やアルファベット以外の文字である。組み合わせは、区切り文字を組み合わせる順番を考慮した組み合わせである。また、組み合わせは、区切り文字を組み合わせる順番を考慮しない組み合わせであってもよい。
【００４２】
抽出部３０１は、例えば、圧縮対象データ１１０から、数字やアルファベット以外の文字を区切り文字として抽出し、数字やアルファベット以外の２つの文字に挟まれた文字列を抽出する。これにより、抽出部３０１は、区切り文字と、区切り文字以外の文字列とを分類することができる。
【００４３】
抽出部３０１は、区切り文字として、文字数が２以上の文字列を用いるようにしてもよい。抽出部３０１は、例えば、区切り文字として「：＃」を用いるようにする。これにより、抽出部３０１は、区切り文字の種類数を増大させやすくし、２つの区切り文字の組み合わせの種類数を増大させやすくすることができる。このため、抽出部３０１は、同じ種類の組み合わせの２つの区切り文字に挟まれた文字列が同じ属性の文字列になりやすくし、第２のデータ１２２において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【００４４】
抽出部３０１は、区切り文字の文字数が１であるとして、区切り文字として文字数が２以上の文字列を用いないようにしてもよい。抽出部３０１は、例えば、区切り文字として「：＃」を用いないようにし、「：＃」を区切り文字「：」と「＃」とが連続して出現したとして扱う。また、抽出部３０１は、例えば、区切り文字として「：＃」を用いないようにし、「：＃」を区切り文字「：」が出現したとして扱ってもよい。これにより、抽出部３０１は、区切り文字の種類数を増大しにくくし、２つの区切り文字の組み合わせの種類数を増大しにくくすることができる。このため、抽出部３０１は、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列を分類する際に用いられる記憶領域のサイズを抑制し、記憶領域を節約するとともに効率よく処理を行うことができる。
【００４５】
抽出部３０１は、区切り文字として制御文字を用いてもよい。抽出部３０１は、例えば、区切り文字として、改行を示す制御文字を用いる。これにより、抽出部３０１は、２つの区切り文字の組み合わせの種類ごとに文字列を分類するときに、制御文字を含む組み合わせの２つの区切り文字に挟まれた文字列についても分類することができる。結果として、抽出部３０１は、第２のデータ１２２において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【００４６】
抽出部３０１は、所定の区切り文字の指定を受け付け、圧縮対象データ１１０から、指定を受け付けた所定の区切り文字と、指定を受け付けた２つの区切り文字に挟まれた文字列を抽出してもよい。抽出部３０１は、例えば、ユーザからの操作入力によって所定の区切り文字の指定を受け付け、圧縮対象データ１１０から、指定を受け付けた所定の区切り文字と、指定を受け付けた２つの区切り文字に挟まれた文字列を抽出する。これにより、抽出部３０１は、圧縮対象データ１１０の形式に沿った区切り文字を用いやすくなり、第２のデータ１２２において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【００４７】
抽出部３０１は、圧縮対象データ１１０の先頭には改行を示す制御文字が出現するものとして扱うことができる。これにより、抽出部３０１は、２つの区切り文字の組み合わせの種類ごとに文字列を分類するときに、圧縮対象データ１１０の先頭の文字列についても分類することができる。
【００４８】
生成部３０２は、第１のデータ１２１と第２のデータ１２２とを生成する。第１のデータ１２１とは、圧縮対象データ１１０において区切り文字が出現した順序を特定可能に区切り文字を並べたデータである。第２のデータ１２２とは、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列が圧縮対象データ１１０に出現した順序を特定可能に文字列を並べたデータである。種類は、２つの区切り文字を組み合わせたパターンである。種類は、複数のパターンをまとめたものであってもよい。例えば、区切り文字「：」と「＃」との組み合わせと、区切り文字「＃」と「：」との組み合わせとは、同じ種類の組み合わせと扱われてもよい。
【００４９】
生成部３０２は、例えば、圧縮対象データ１１０から区切り文字以外の文字を削除し、区切り文字と区切り文字との境界を判別可能なように、区切り文字と区切り文字との間に所定の文字「ａ」を挿入し、圧縮対象データ１１０を第１のデータ１２１に変形する。また、生成部３０２は、区切り文字の文字数が固定である場合、区切り文字と区切り文字との境界を明示しなくてもよいため、区切り文字と区切り文字との間に所定の文字「ａ」を挿入しなくてもよい。
【００５０】
生成部３０２は、例えば、２つの区切り文字の組み合わせの種類のそれぞれに対応するドットを並べる。そして、生成部３０２は、２つの区切り文字の組み合わせの種類のそれぞれに対応するドットの直前に、当該種類の組み合わせの２つの区切り文字に挟まれた文字列を「，」で区切って挿入し、第２のデータ１２２を生成する。これにより、生成部３０２は、圧縮対象データ１１０に戻すことが可能である第１のデータ１２１と第２のデータ１２２とを生成することができ、第２のデータ１２２においては同じ文字列が比較的近い位置に連続して現れやすいようにすることができる。
【００５１】
生成部３０２は、圧縮対象データ１１０に出現する区切り文字の種類数が閾値より大きい場合、圧縮対象データ１１０を、出現する区切り文字の種類数が閾値以下になる部分データに分割する場合があってもよい。この場合、生成部３０２は、部分データごとに、第１のデータ１２１と第２のデータ１２２とを生成する。この場合、第１のデータ１２１は、例えば、区切り文字が部分データに出現した順序を特定可能に区切り文字を並べたデータである。この場合、第２のデータ１２２は、例えば、部分データに出現する２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列が部分データに出現した順序を特定可能に文字列を並べたデータである。これにより、生成部３０２は、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列を分類する際に用いられる記憶領域のサイズを抑制し、記憶領域を節約するとともに効率よく処理を行うことができる。
【００５２】
生成部３０２は、具体的には、区切り文字を、圧縮対象データ１１０に出現した順序に沿って所定の文字と交互に並べた第１のデータ１２１を生成する。生成部３０２は、具体的には、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列を、圧縮対象データ１１０に出現した順序に沿って所定の文字と交互に並べた第２のデータ１２２を生成する。これにより、生成部３０２は、圧縮対象データ１１０に戻すことが可能である第１のデータ１２１と第２のデータ１２２とを生成することができ、第２のデータ１２２においては同じ文字列が比較的近い位置に連続して現れやすいようにすることができる。
【００５３】
圧縮部３０３は、生成した第１のデータ１２１と第２のデータ１２２とに対してスライド辞書法を用いた圧縮を行う。圧縮は、例えば、「ＬＺ７７」の圧縮アルゴリズムによる圧縮である。圧縮は、例えば、「ＬＺ７７」の圧縮アルゴリズムを改良した各種アルゴリズムによる圧縮であってもよく、具体的には、「ＬＺＭＡ」の圧縮アルゴリズムによる圧縮などである。
【００５４】
圧縮部３０３は、例えば、生成した第１のデータ１２１と第２のデータ１２２とに対してＬＺ７７またはＬＺＭＡの圧縮アルゴリズムを用いた圧縮を行う。圧縮部３０３は、具体的には、生成した第１のデータ１２１と第２のデータ１２２とを連結し、連結したデータの先頭に第１のデータ１２１と第２のデータ１２２との境界を示すメタデータを付与してから、ＬＺＭＡの圧縮アルゴリズムを用いた圧縮を行う。
【００５５】
メタデータは圧縮されなくてもよい。メタデータは、例えば、第２のデータ１２２の先頭の位置を示す値であり、具体的には、第１のデータ１２１のサイズである。メタデータは、第１のデータ１２１と第２のデータ１２２との間に挿入されてもよい。メタデータは、例えば、第１のデータ１２１と第２のデータ１２２との間に挿入される場合、第１のデータ１２１にも第２のデータ１２２にも出現しない文字によって表現される。
【００５６】
また、圧縮部３０３は、具体的には、第１のデータ１２１と第２のデータ１２２とを連結し、メタデータを付与した後、メタデータと第１のデータ１２１とについては圧縮せず、第２のデータ１２２を圧縮してもよい。これにより、圧縮部３０３は、同じ文字列が比較的近い位置に連続して現れやすいようにした第２のデータ１２２について、スライド辞書法を用いた圧縮における圧縮効率の向上を図ることができる。また、圧縮部３０３は、第２のデータ１２２に対する圧縮に用いることが好ましいＬＺ７７またはＬＺＭＡの圧縮アルゴリズムを用いることができ、さらに圧縮データのサイズの低減化を図ることができる。
【００５７】
復号部３０４は、第１のデータ１２１と第２のデータ１２２とにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号する。復号部３０４は、圧縮データに対して、ＬＺ７７またはＬＺＭＡの圧縮アルゴリズムに対応する復号アルゴリズムを用いた復号を行う。これにより、復号部３０４は、圧縮対象データ１１０に戻すことが可能である第１のデータ１２１と第２のデータ１２２とを取得することができる。
【００５８】
復元部３０５は、復号によって得られた第２のデータ１２２を参照し、復号によって得られた第１のデータ１２１における２つの区切り文字の間に、当該２つの区切り文字の組み合わせの種類に対応付けられた文字列を順次挿入する。これにより、情報処理装置１００は、効率よく圧縮された圧縮データから、圧縮元である圧縮対象データ１１０を復元することができる。
【００５９】
ここでは、情報処理装置１００が、圧縮対象データ１１０を圧縮する機能と、圧縮対象データ１１０を復元する機能との両方を有する場合について説明したが、これに限らない。例えば、情報処理装置１００は、圧縮対象データ１１０を圧縮する機能と、圧縮対象データ１１０を復元する機能とのいずれかを有さなくてもよい。
【００６０】
（圧縮対象データ４００を圧縮する一例）
次に、図４〜図１１を用いて、情報処理装置１００が圧縮対象データ４００を圧縮する一例について説明する。
【００６１】
図４〜図１１は、圧縮対象データ４００を圧縮する一例を示す説明図である。図４において、情報処理装置１００は、圧縮対象データ４００の入力を受け付ける。図４の例では、圧縮対象データ４００は、数字やアルファベット以外の文字を、所定の区切り文字として含むデータである。所定の区切り文字は、文字数が２以上の文字列を含んでよい。所定の区切り文字は、制御文字を含んでよい。
【００６２】
具体的には、圧縮対象データ４００の１行目は、「１１：０３  ｌｏａｄ：  ｊｅｒａｓｕｒｅ  ｌｏａｄ：  ｌｒｃ  ｌｏａｄ：  ｉｓａ」であり、末尾で改行されている。圧縮対象データ４００の２行目は、「１１：０３  ｍｏｎｍａｐ」であり、末尾で改行されている。圧縮対象データ４００の３行目は、「１１：０３  ａｄｄｉｎｇ  ａｕｔｈ  ｐｒｏｔｏｃｏｌ：  ｎｏｎｅ」であり、末尾で改行されている。改行を示す制御文字は非表示である。
【００６３】
以下の説明では、便宜上、空白を「＃」と表記し、改行を示す制御文字を「＄」と表記する場合がある。このため、以下の説明では、圧縮対象データ４００は、「１１：０３＃ｌｏａｄ：＃ｊｅｒａｓｕｒｅ＃ｌｏａｄ：＃ｌｒｃ＃ｌｏａｄ：＃ｉｓａ＄１１：０３＃ｍｏｎｍａｐ＄１１：０３＃ａｄｄｉｎｇ＃ａｕｔｈ＃ｐｒｏｔｏｃｏｌ：＃ｎｏｎｅ＄」である。ここで、図５の説明に移行する。
【００６４】
図５において、情報処理装置１００は、入力を受け付けた圧縮対象データ４００に基づいて、圧縮用テーブル５００を用意する。圧縮用テーブル５００は、圧縮対象データ４００に出現する２つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせの２つの区切り文字に挟まれた文字列を分類するために用いられるテーブルである。圧縮用テーブル５００は、圧縮対象データ４００に出現する２つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせに対応する記憶領域を有する。
【００６５】
情報処理装置１００は、例えば、圧縮対象データ４００に基づいて区切り文字の種類数「４」を計数し、区切り文字の種類数「４」の二乗「１６」個の記憶領域を有する圧縮用テーブル５００を用意する。ここで、図６の説明に移行する。
【００６６】
図６において、情報処理装置１００は、圧縮対象データ４００の先頭が区切り文字ではない場合、圧縮対象データ４００の先頭に所定の区切り文字を付与しておく。図６の例では、情報処理装置１００は、圧縮対象データ４００の先頭に、改行を示す制御文字「＄」を付与しておく。また、情報処理装置１００は、圧縮対象データ４００の末尾が区切り文字ではない場合、圧縮対象データ４００の末尾に所定の区切り文字を付与しておいてもよい。
【００６７】
次に、情報処理装置１００は、圧縮対象データ４００に基づいて、所定の組み合わせルールにしたがって２つの区切り文字の組み合わせのパターンを特定する。所定の組み合わせルールは、例えば、先に出現した区切り文字から順に選択し、選択した区切り文字に対して、先に出現した区切り文字から順に組み合わせていくルールである。
【００６８】
図６の例では、情報処理装置１００は、最初に出現した区切り文字「＄」を選択し、選択した区切り文字「＄」に対して、最初に出現した区切り文字「＄」を組み合わせたパターンを特定する。同様に、情報処理装置１００は、選択した区切り文字「＄」に対して、２番目に出現した区切り文字「：」、３番目に出現した区切り文字「＃」、最後に出現した区切り文字「：＃」それぞれを組み合わせたパターンを特定する。情報処理装置１００は、同様に、２番目に出現した区切り文字「：」、３番目に出現した区切り文字「＃」、最後に出現した区切り文字「：＃」それぞれを選択して、２つの区切り文字の組み合わせのパターンを特定する。
【００６９】
そして、情報処理装置１００は、用意した記憶領域のそれぞれに、特定した２つの区切り文字の組み合わせのパターンのそれぞれを記憶し、特定した２つの区切り文字の組み合わせのパターンのそれぞれに対応付ける。図６の例では、情報処理装置１００は、用意した記憶領域を、区切り文字「＄」と「＄」との組み合わせのパターンに対応付ける。また、情報処理装置１００は、例えば、用意した記憶領域を、区切り文字「＄」と「：」との組み合わせのパターンに対応付ける。また、情報処理装置１００は、例えば、用意した記憶領域を、区切り文字「＄」と「＃」との組み合わせのパターンに対応付ける。また、情報処理装置１００は、例えば、用意した記憶領域を、区切り文字「＄」と「：＃」との組み合わせのパターンに対応付ける。
【００７０】
ここでは、情報処理装置１００が、２つの区切り文字の組み合わせのパターンのうち、圧縮対象データ４００において文字列を挟むために用いられていないパターンについても特定する場合について説明したが、これに限らない。例えば、情報処理装置１００は、圧縮対象データ４００において文字列を挟むために用いられていないパターンについて特定しなくてもよい。この場合、情報処理装置１００は、区切り文字の種類数の二乗個の記憶領域を用意しなくても、圧縮対象データ４００において文字列を挟むために用いられているパターンに対応する記憶領域を用意すればよい。ここで、図７の説明に移行する。
【００７１】
図７において、情報処理装置１００は、２つの区切り文字の組み合わせのパターンごとに、圧縮対象データ４００において当該パターンの組み合わせの２つの区切り文字に挟まれた文字列を抽出する。そして、情報処理装置１００は、２つの区切り文字の組み合わせのパターンのそれぞれに対応付けた記憶領域に、圧縮対象データ４００において当該２つの区切り文字に挟まれた文字列を、圧縮対象データ４００に出現した順序を特定可能に並べて記憶する。
【００７２】
情報処理装置１００は、例えば、区切り文字「＄」と「：」との組み合わせのパターンに対応付けた記憶領域に、当該組み合わせの２つの区切り文字に挟まれた文字列「１１」「１１」「１１」を、「，」で区切って出現順に並べて記憶する。同様に、情報処理装置１００は、区切り文字「：」と「＃」との組み合わせのパターンに対応付けた記憶領域に、当該組み合わせの２つの区切り文字に挟まれた文字列「０３」「０３」「０３」を、「，」で区切って出現順に並べて記憶する。また、情報処理装置１００は、区切り文字「＄」と「＄」との組み合わせのパターンに対応付けた記憶領域には、当該組み合わせの２つの区切り文字に挟まれた文字列がないため、文字列を記憶しない。ここで、図８の説明に移行する。
【００７３】
図８において、情報処理装置１００は、圧縮対象データ４００の先頭に付与しておいた所定の区切り文字を削除する。図８の例では、情報処理装置１００は、圧縮対象データ４００の先頭に付与しておいた改行を示す制御文字「＄」を削除する。また、情報処理装置１００は、圧縮対象データ４００の末尾に所定の区切り文字を付与していれば、圧縮対象データ４００の末尾に付与しておいた所定の区切り文字についても削除する。
【００７４】
そして、情報処理装置１００は、第１のデータ８００を生成する。第１のデータ８００とは、圧縮対象データ４００において区切り文字が出現した順序を特定可能に区切り文字を並べたデータである。情報処理装置１００は、例えば、圧縮対象データ４００から区切り文字以外の文字を削除し、区切り文字と区切り文字との間に所定の文字「ａ」を挿入することにより、圧縮対象データ４００を第１のデータ８００に変形する。
【００７５】
図８の例では、情報処理装置１００は、圧縮対象データ４００から区切り文字以外の文字を削除して、圧縮対象データ４００を「：＃：＃＃：＃＃：＃＄：＃＄：＃＃＃：＃＄」に変形する。そして、情報処理装置１００は、区切り文字と区切り文字との間に所定の文字「ａ」を挿入し、第１のデータ８００「ａ：ａ＃ａ：＃ａ＃ａ：＃ａ＃ａ：＃ａ＄ａ：ａ＃ａ＄ａ：ａ＃ａ＃ａ＃ａ：＃ａ＄」に変形する。
【００７６】
ここでは、情報処理装置１００が、圧縮対象データ４００の先頭に付与しておいた所定の区切り文字を削除する場合について説明したが、これに限らない。例えば、情報処理装置１００は、圧縮対象データ４００の先頭に付与しておいた所定の区切り文字をそのまま残しておき、圧縮対象データ４００が復元される際に削除されるようにしておいてもよい。ここで、図９の説明に移行する。
【００７７】
図９において、情報処理装置１００は、２つの区切り文字の組み合わせのパターンのそれぞれに対応するドットを並べたデータ９００を作成する。そして、情報処理装置１００は、２つの区切り文字の組み合わせのパターンのそれぞれに対応するドットの直前に、当該パターンの組み合わせの２つの区切り文字に挟まれた文字列を「，」で区切って挿入する。
【００７８】
図９の例では、情報処理装置１００は、２つの区切り文字の組み合わせの１６個のパターンのそれぞれに対応する１６個のドットを並べたデータ「．．．．．．．．．．．．．．．．」を作成する。ここで、先頭のドットから順に、特定された順が早い組み合わせのパターンに対応する。換言すれば、先頭のドットは、最初に特定された区切り文字「＄」と「＄」との組み合わせのパターンに対応する。２番目のドットは、２番目に特定された区切り文字「＄」と「：」との組み合わせのパターンに対応する。
【００７９】
そして、情報処理装置１００は、区切り文字「＄」と「：」との組み合わせのパターンに対応するドットの直前に、当該組み合わせの２つの区切り文字に挟まれた文字列「１１」「１１」「１１」を「，」で区切って出現順に並べて挿入する。このように、情報処理装置１００は、１６個のドットを並べたデータ「．．．．．．．．．．．．．．．．」を、「．１１，１１，１１．．．．．．．．．．．．．．．」に変形する。
【００８０】
同様に、情報処理装置１００は、区切り文字「：」と「＃」との組み合わせのパターンに対応するドットの直前に、当該組み合わせの２つの区切り文字に挟まれた文字列「０３」「０３」「０３」を、「，」で区切って出現順に並べて挿入する。また、情報処理装置１００は、区切り文字「＄」と「＄」との組み合わせのパターンに対応するドットの直前には、当該組み合わせの２つの区切り文字に挟まれた文字列がないため、文字列を挿入しない。ここで、図１０の説明に移行する。
【００８１】
図１０において、情報処理装置１００は、それぞれのパターンの２つの区切り文字に挟まれた文字列を「，」で区切って挿入することにより変形されたデータを、第２のデータ１０００とする。第２のデータ１０００とは、２つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせの２つの区切り文字に挟まれた文字列が圧縮対象データ４００に出現した順序を特定可能に文字列を並べたデータである。
【００８２】
図１０の例では、第２のデータ１０００は、「．１１，１１，１１．．．．．０３，０３，０３．．ｍｏｎｍａｐ．．ａｄｄｉｎｇ，ａｕｔｈ．ｌｏａｄ，ｌｏａｄ，ｌｏａｄ，ｐｒｏｔｏｃｏｌ．ｉｓａ，ｎｏｎｅ．．ｊｅｒａｓｕｒｅ，ｌｒｃ．」である。
【００８３】
ここで、情報処理装置１００は、圧縮対象データ４００を復元する際に、所定の組み合わせルールを用いれば第１のデータ８００から、図６において特定された２つの区切り文字の組み合わせと、順番も一致したパターンを特定可能である。このため、第２のデータ１０００は、第１のデータ８００から特定可能な２つの区切り文字の組み合わせの種類を利用することにより、各種類の組み合わせの２つの区切り文字に挟まれた文字列が圧縮対象データ４００に出現した順序を特定可能であればよい。結果として、第２のデータ１０００は、２つの区切り文字の組み合わせのパターン自体を示す情報を含んでいない。また、第２のデータ１０００は、２つの区切り文字の組み合わせのパターン自体を示す情報を含んでもよい。ここで、図１１の説明に移行する。
【００８４】
図１１において、情報処理装置１００は、第１のデータ８００と第２のデータ１０００とを連結して、ＬＺＭＡの圧縮アルゴリズムを用いて圧縮を行うことにより、圧縮ファイル１１００を生成する。情報処理装置１００は、例えば、第１のデータ８００の末尾に第２のデータ１０００を連結する場合、第１のデータ８００と第２のデータ１０００との境界を示すメタデータを第１のデータ８００の先頭に付与しておく。そして、情報処理装置１００は、連結した第１のデータ８００と第２のデータ１０００とをまとめて、ＬＺＭＡの圧縮アルゴリズムを用いて圧縮を行う。メタデータは圧縮されなくてもよい。
【００８５】
（圧縮対象データ４００を復元する一例）
次に、図１２〜図２３を用いて、図１１において生成された圧縮ファイル１１００から、情報処理装置１００が圧縮対象データ４００を復元する一例について説明する。
【００８６】
図１２〜図２３は、圧縮対象データ４００を復元する一例を示す説明図である。図１２において、情報処理装置１００は、ＬＺＭＡの圧縮アルゴリズムに対応する復号アルゴリズムを用いて圧縮ファイル１１００を復号し、第１のデータ８００と第２のデータ１０００とを取得する。
【００８７】
情報処理装置１００は、例えば、ＬＺＭＡの圧縮アルゴリズムに対応する復号アルゴリズムを用いて圧縮ファイル１１００を復号する。そして、情報処理装置１００は、先頭のメタデータに基づいて第１のデータ８００と第２のデータ１０００との境界を特定し、第１のデータ８００と第２のデータ１０００とを分割して取得する。ここで、図１３の説明に移行する。
【００８８】
図１３において、情報処理装置１００は、取得した第１のデータ８００に基づいて、復元用テーブル１３００を用意する。復元用テーブル１３００は、第１のデータ８００に出現する２つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせの２つの区切り文字に挟まれた文字列を分類するために用いられるテーブルである。復元用テーブル１３００は、第１のデータ８００に出現する２つの区切り文字の組み合わせのパターンごとに、当該パターンの組み合わせに対応する記憶領域を有する。以下、復元用テーブル１３００は、圧縮用テーブル５００と同じ記憶内容になるように作成されていく。
【００８９】
情報処理装置１００は、例えば、第１のデータ８００に基づいて区切り文字の種類数「４」を計数し、区切り文字の種類数「４」の二乗「１６」個の記憶領域を有する復元用テーブル１３００を用意する。ここで、図１４の説明に移行する。
【００９０】
図１４において、情報処理装置１００は、第１のデータ８００の先頭が区切り文字ではない場合、第１のデータ８００の先頭に所定の区切り文字を付与しておく。図１４の例では、情報処理装置１００は、第１のデータ８００の先頭に、改行を示す制御文字「＄」を付与しておく。また、情報処理装置１００は、第１のデータ８００の末尾が区切り文字ではない場合、第１のデータ８００の末尾に所定の区切り文字を付与しておいてもよい。
【００９１】
次に、情報処理装置１００は、第１のデータ８００に基づいて、所定の組み合わせルールにしたがって２つの区切り文字の組み合わせのパターンを特定する。所定の組み合わせルールは、例えば、先に出現した区切り文字から順に選択し、選択した区切り文字に対して、先に出現した区切り文字から順に組み合わせていくルールである。所定の組み合わせルールは、図６において情報処理装置１００が２つの区切り文字の組み合わせのパターンを特定した際の組み合わせルールと同一である。
【００９２】
図１４の例では、情報処理装置１００は、最初に出現した区切り文字「＄」を選択し、選択した区切り文字「＄」に対して、最初に出現した区切り文字「＄」を組み合わせたパターンを特定する。同様に、情報処理装置１００は、選択した区切り文字「＄」に対して、２番目に出現した区切り文字「：」、３番目に出現した区切り文字「＃」、最後に出現した区切り文字「：＃」それぞれを組み合わせたパターンを特定する。情報処理装置１００は、同様に、２番目に出現した区切り文字「：」、３番目に出現した区切り文字「＃」、最後に出現した区切り文字「：＃」それぞれを選択して、２つの区切り文字の組み合わせのパターンを特定する。
【００９３】
そして、情報処理装置１００は、用意した記憶領域のそれぞれに、特定した２つの区切り文字の組み合わせのパターンのそれぞれを記憶し、特定した２つの区切り文字の組み合わせのパターンのそれぞれに対応付ける。図１４の例では、情報処理装置１００は、用意した記憶領域を、区切り文字「＄」と「＄」との組み合わせのパターンに対応付ける。また、情報処理装置１００は、例えば、用意した記憶領域を、区切り文字「＄」と「：」との組み合わせのパターンに対応付ける。また、情報処理装置１００は、例えば、用意した記憶領域を、区切り文字「＄」と「＃」との組み合わせのパターンに対応付ける。また、情報処理装置１００は、例えば、用意した記憶領域を、区切り文字「＄」と「：＃」との組み合わせのパターンに対応付ける。
【００９４】
ここでは、情報処理装置１００が、２つの区切り文字の組み合わせのパターンのうち、第１のデータ８００において所定の文字「ａ」を挟むために用いられていないパターンについても特定する場合について説明したが、これに限らない。例えば、情報処理装置１００は、第１のデータ８００において所定の文字「ａ」を挟むために用いられていないパターンについて特定しなくてもよい。この場合、情報処理装置１００は、区切り文字の種類数の二乗個の記憶領域を用意しなくても、第１のデータ８００において所定の文字「ａ」を挟むために用いられているパターンに対応する記憶領域を用意すればよい。ここで、図１５の説明に移行する。
【００９５】
図１５において、情報処理装置１００は、第２のデータ１０００を参照して、２つの区切り文字の組み合わせのパターンごとに、当該パターンに対応付けて並べられた文字列を抽出する。そして、情報処理装置１００は、２つの区切り文字の組み合わせのパターンごとに、当該パターンに対応付けられた記憶領域に、第２のデータ１０００において当該パターンの組み合わせに対応付けて並べられた文字列を記憶する。
【００９６】
情報処理装置１００は、例えば、区切り文字「＄」と「：」との組み合わせのパターンに対応付けられた記憶領域に、第２のデータ１０００において当該パターンに対応付けて並べられた文字列「１１，１１，１１」を記憶する。同様に、情報処理装置１００は、区切り文字「：」と「＃」との組み合わせのパターンに対応付けられた記憶領域に、第２のデータ１０００において当該パターンに対応付けて並べられた文字列「０３，０３，０３」を記憶する。また、情報処理装置１００は、区切り文字「＄」と「＄」との組み合わせのパターンに対応付けた記憶領域には、第２のデータ１０００において当該パターンに対応付けて並べられた文字列がないため、文字列を記憶しない。ここで、図１６の説明に移行する。
【００９７】
図１６において、情報処理装置１００は、２つの区切り文字の組み合わせのパターンに対応する記憶領域に記憶された文字列のいずれかの挿入先となる、第１のデータ８００において当該パターンの組み合わせの２つの区切り文字に挟まれた箇所を特定する。
【００９８】
図１６の例では、情報処理装置１００は、例えば、第１のデータ８００のうち所定の文字「ａ」がある箇所を探索する。情報処理装置１００は、具体的には、第１のデータ８００のうち１番目に出現する文字「ａ」がある箇所であって、区切り文字「＄」と「：」とに挟まれた箇所を特定する。ここで、図１７の説明に移行する。
【００９９】
図１７において、情報処理装置１００は、特定した文字「ａ」がある箇所を挟む２つの区切り文字の組み合わせのパターンを特定する。情報処理装置１００は、区切り文字「＄」と「：」との組み合わせのパターンを特定すると、特定した区切り文字「＄」と「：」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「１１，１１，１１」の先頭の文字列「１１」を読み出す。そして、情報処理装置１００は、読み出した文字列「１１」を、特定した箇所にある文字「ａ」の代わりに、第１のデータ８００に挿入する。ここで、図１８の説明に移行する。
【０１００】
図１８において、情報処理装置１００は、特定した区切り文字「＄」と「：」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「１１，１１，１１」のうち、読み出し済みである先頭の文字列「１１」を削除する。ここで、図１９の説明に移行する。
【０１０１】
図１９において、情報処理装置１００は、同様に、第１のデータ８００のうち２番目に出現する文字「ａ」がある箇所であって、区切り文字「：」と「＃」とに挟まれた箇所を特定する。情報処理装置１００は、特定した文字「ａ」がある箇所を挟む２つの区切り文字の組み合わせのパターンを特定する。情報処理装置１００は、区切り文字「：」と「＃」との組み合わせのパターンを特定すると、特定した区切り文字「：」と「＃」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「０３，０３，０３」の先頭の文字列「０３」を読み出す。そして、情報処理装置１００は、読み出した文字列「０３」を、特定した箇所にある文字「ａ」の代わりに、第１のデータ８００に挿入する。
【０１０２】
情報処理装置１００は、特定した区切り文字「：」と「＃」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「０３，０３，０３」のうち、読み出し済みである先頭の文字列「０３」を削除する。ここで、図２０の説明に移行する。
【０１０３】
図２０において、情報処理装置１００は、同様に、第１のデータ８００のうち３番目に出現する文字「ａ」がある箇所であって、区切り文字「＃」と「：＃」とに挟まれた箇所を特定する。情報処理装置１００は、特定した文字「ａ」がある箇所を挟む２つの区切り文字の組み合わせのパターンを特定する。情報処理装置１００は、特定した区切り文字「＃」と「：＃」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「ｌｏａｄ，ｌｏａｄ，ｌｏａｄ，ｐｒｏｔｏｃｏｌ」の先頭の文字列「ｌｏａｄ」を読み出す。そして、情報処理装置１００は、読み出した文字列「ｌｏａｄ」を、特定した箇所にある文字「ａ」の代わりに、第１のデータ８００に挿入する。
【０１０４】
情報処理装置１００は、特定した区切り文字「＃」と「：＃」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「ｌｏａｄ，ｌｏａｄ，ｌｏａｄ，ｐｒｏｔｏｃｏｌ」のうち、読み出し済みである先頭の文字列「ｌｏａｄ」を削除する。ここで、図２１の説明に移行する。
【０１０５】
図２１において、情報処理装置１００は、同様に、第１のデータ８００のうち４番目に出現する文字「ａ」がある箇所であって、区切り文字「：＃」と「＃」とに挟まれた箇所を特定する。情報処理装置１００は、特定した文字「ａ」がある箇所を挟む２つの区切り文字の組み合わせのパターンを特定する。情報処理装置１００は、特定した区切り文字「：＃」と「＃」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「ｊｅｒａｓｕｒｅ，ｌｒｃ」の先頭の文字列「ｊｅｒａｓｕｒｅ」を読み出す。そして、情報処理装置１００は、読み出した文字列「ｊｅｒａｓｕｒｅ」を、特定した箇所にある文字「ａ」の代わりに、第１のデータ８００に挿入する。
【０１０６】
情報処理装置１００は、特定した区切り文字「：＃」と「＃」との組み合わせのパターンに対応付けた記憶領域に記憶された文字列「ｊｅｒａｓｕｒｅ，ｌｒｃ」のうち、読み出し済みである先頭の文字列「ｊｅｒａｓｕｒｅ」を削除する。ここで、図２２の説明に移行する。
【０１０７】
図２２において、情報処理装置１００は、同様に、第１のデータ８００における文字「ａ」を置き換えていく。情報処理装置１００は、第１のデータ８００を「＄１１：０３＃ｌｏａｄ：＃ｊｅｒａｓｕｒｅ＃ｌｏａｄ：＃ｌｒｃ＃ｌｏａｄ：＃ｉｓａ＄１１：０３＃ｍｏｎｍａｐ＄１１：０３＃ａｄｄｉｎｇ＃ａｕｔｈ＃ｐｒｏｔｏｃｏｌ：＃ｎｏｎｅ＄」に変形する。ここで、図２３の説明に移行する。
【０１０８】
図２３において、情報処理装置１００は、第１のデータ８００の先頭に付与した改行を示す制御文字を削除し、圧縮対象データ４００を復元する。これにより、情報処理装置１００は、圧縮効率を向上させて圧縮された圧縮ファイル１１００からでも、圧縮対象データ４００を元に戻すことができる。
【０１０９】
ここでは、圧縮対象データ４００を圧縮する情報処理装置１００と、圧縮対象データ４００を復元する情報処理装置１００とが、同じ装置である場合について説明したが、これに限らない。例えば、圧縮対象データ４００を圧縮する情報処理装置１００と、圧縮対象データ４００を復元する情報処理装置１００とは、別の装置であってもよい。この場合、圧縮対象データ４００を圧縮する情報処理装置１００と、圧縮対象データ４００を復元する情報処理装置１００とは、２つの区切り文字の組み合わせのパターンを特定する際には、同じ組み合わせルールを用いることになる。
【０１１０】
（圧縮処理手順の一例）
次に、図２４を用いて、圧縮処理手順の一例について説明する。
【０１１１】
図２４は、圧縮処理手順の一例を示すフローチャートである。図２４において、情報処理装置１００は、圧縮対象データ４００となるテキストファイルの入力を受け付ける（ステップＳ２４０１）。
【０１１２】
次に、情報処理装置１００は、テキストファイルを、区切り文字と、区切り文字以外の文字列とに分割する（ステップＳ２４０２）。そして、情報処理装置１００は、区切り文字と区切り文字との間に所定の文字を挟むように、すべての区切り文字を並べて記録する（ステップＳ２４０３）。
【０１１３】
次に、情報処理装置１００は、すべての文字列を、前後に出現する２つの区切り文字の組み合わせのパターンごとにソートする（ステップＳ２４０４）。そして、情報処理装置１００は、ソート後のすべての文字列を、前後に出現する２つの区切り文字の組み合わせのパターンを特定可能に記録する（ステップＳ２４０５）。
【０１１４】
次に、情報処理装置１００は、記録した区切り文字と、記録した文字列とに対してＬＺＭＡによる圧縮を行う（ステップＳ２４０６）。そして、情報処理装置１００は、圧縮により得られた圧縮データを出力し（ステップＳ２４０７）、圧縮処理を終了する。これにより、情報処理装置１００は、圧縮対象データ４００を復元可能に圧縮することができる。
【０１１５】
（復元処理手順の一例）
次に、図２５を用いて、復元処理手順の一例について説明する。
【０１１６】
図２５は、復元処理手順の一例を示すフローチャートである。図２５において、情報処理装置１００は、文字列配列ｄｅｌ［］、文字列配列ｄａｔａ［］［］［］、整数配列ＩＤ［］、整数ｉ、および整数配列ｊ［］［］を用意する（ステップＳ２５０１）。
【０１１７】
文字列配列ｄｅｌ［］は、読み込んだ区切り文字が順に格納される配列である。文字列配列ｄｅｌ［］のインデックスは、読み込んだ区切り文字に割り振られる通し番号であり、その区切り文字が復元データの先頭から何番目に存在するかを示す番号である。例えば、ｄｅｌ［１］は、復元データの先頭から１番目に存在する区切り文字が格納される。
【０１１８】
文字列配列ｄａｔａ［］［］［］は、読み込んだ文字列が順に格納される配列である。文字列配列ｄａｔａ［］［］［］の１番目のインデックスは、読み込んだ文字列の直前に出現する区切り文字の種類に対して割り振られる番号である。文字列配列ｄａｔａ［］［］［］の２番目のインデックスは、読み込んだ文字列の直後に出現する区切り文字の種類に対して割り振られる番号である。
【０１１９】
文字列配列ｄａｔａ［］［］［］の３番目のインデックスは、１，２番目のインデックスに対応する種類の区切り文字の組み合わせに挟まれた文字列に、順に割り振られる通し番号である。例えば、区切り文字「＄」の種類に対して割り振られた番号が「１」であれば、ｄａｔａ［１］［１］［１］は、２つの区切り文字「＄」の組み合わせに挟まれた文字列のうち、復元データの先頭から１番目に存在する文字列が格納される。
【０１２０】
整数配列ＩＤ［］は、区切り文字の種類に対して割り振られる番号が格納される配列である。整数配列ＩＤ［］のインデックスは、区切り文字に割り振られる通し番号であり、その区切り文字が復元データの先頭から何番目に存在するかを示す番号である。例えば、ＩＤ［１］は、復元データの先頭から１番目に存在する文字列の種類に対して割り振られた番号が格納される。
【０１２１】
整数ｉは、復元データの先頭から何番目に存在する区切り文字を指定するかを示す番号である。整数ｉは初期値１である。
【０１２２】
整数配列ｊ［］［］は、区切り文字の組み合わせごとに、その組み合わせに挟まれた文字列のうち、何番目の文字列を指定するかを示す番号が格納される配列である。整数配列ｊ［］［］の１番目のインデックスは、区切り文字の組み合わせの前側の区切り文字の種類に対して割り振られる番号である。整数配列ｊ［］［］の２番目のインデックスは、区切り文字の組み合わせの後ろ側の区切り文字の種類に対して割り振られる番号である。
【０１２３】
ｊ［］［］は、それぞれ、初期値１である。例えば、区切り文字「＄」の種類に対して割り振られた番号が「１」であれば、ｊ［１］［１］は、２つの区切り文字「＄」の組み合わせに挟まれた文字列のうち、何番目の文字列を指定するかを示す番号が格納される。
【０１２４】
次に、情報処理装置１００は、圧縮データに対してＬＺＭＡによる復号を行い、すべての区切り文字と、すべての文字列とを並べた復元データを取得する（ステップＳ２５０２）。そして、情報処理装置１００は、すべての区切り文字を、順番にｄｅｌ［］に読み込む（ステップＳ２５０３）。
【０１２５】
次に、情報処理装置１００は、すべての文字列を、前後に出現する２つの区切り文字の組み合わせのパターンごとに分類して、順番にｄａｔａ［］［］［］に読み込む（ステップＳ２５０４）。そして、情報処理装置１００は、ｄｅｌ［ｉ］を記録して、ｉに１を加算する（ステップＳ２５０５）。
【０１２６】
次に、情報処理装置１００は、ｉが区切り文字の数を超えているか否かを判定する（ステップＳ２５０６）。ここで、区切り文字の数を超えている場合（ステップＳ２５０６：Ｙｅｓ）、情報処理装置１００は、復元処理を終了する。
【０１２７】
一方で、区切り文字の数を超えていない場合（ステップＳ２５０６：Ｎｏ）、情報処理装置１００は、ｄａｔａ［ＩＤ［ｄｅｌ［ｉ−１］］］［ＩＤ［ｄｅｌ［ｉ］］］［ｊ［ＩＤ［ｄｅｌ［ｉ−１］］］［ＩＤ［ｄｅｌ［ｉ］］］］を記録して、ｊ［ＩＤ［ｄｅｌ［ｉ−１］］］［ＩＤ［ｄｅｌ［ｉ］］］に１を加算する（ステップＳ２５０７）。そして、情報処理装置１００は、ステップＳ２５０５の処理に戻る。これにより、情報処理装置１００は、圧縮対象データ４００を復元することができる。
【０１２８】
以上説明したように、情報処理装置１００によれば、圧縮対象データ４００から、所定の区切り文字と、２つの所定の区切り文字に挟まれた文字列とを抽出することができる。また、情報処理装置１００によれば、区切り文字が圧縮対象データ４００に出現した順序を特定可能に区切り文字を並べた第１のデータ８００を生成することができる。また、情報処理装置１００によれば、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列が圧縮対象データ４００に出現した順序を特定可能に文字列を並べた第２のデータ１０００を生成することができる。また、情報処理装置１００によれば、生成した第１のデータ８００と第２のデータ１０００とに対してスライド辞書法を用いた圧縮を行うことができる。これにより、情報処理装置１００は、圧縮対象データ４００に戻すことが可能である第１のデータ８００と第２のデータ１０００とを生成することができ、第２のデータ１０００においては同じ文字列が比較的近い位置に連続して現れやすいようにすることができる。結果として、情報処理装置１００は、開始位置を示すために用いるビット数を少なくしやすく、また、同じ文字列を見つけやすく圧縮しやすいようにして、圧縮効率の向上を図ることができる。
【０１２９】
また、情報処理装置１００によれば、所定の区切り文字の指定を受け付けることができる。また、情報処理装置１００によれば、圧縮対象データ４００から、指定を受け付けた所定の区切り文字と、指定を受け付けた２つの区切り文字に挟まれた文字列を抽出することができる。これにより、情報処理装置１００は、圧縮対象データ４００の形式に沿った区切り文字を用いやすくなり、第２のデータ１０００において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【０１３０】
また、情報処理装置１００によれば、圧縮対象データ４００に出現する区切り文字の種類数が閾値より大きい場合、圧縮対象データ４００を、出現する区切り文字の種類数が閾値以下になる部分データに分割することができる。また、情報処理装置１００によれば、区切り文字が部分データに出現した順序を特定可能に区切り文字を並べた第１のデータ８００を生成することができる。また、情報処理装置１００によれば、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列が部分データに出現した順序を特定可能に文字列を並べた第２のデータ１０００を生成することができる。これにより、情報処理装置１００は、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列を分類する際に用いられる記憶領域のサイズを抑制し、記憶領域を節約するとともに効率よく処理を行うことができる。
【０１３１】
また、情報処理装置１００によれば、区切り文字を、圧縮対象データ４００に出現した順序に沿って所定の文字と交互に並べた第１のデータ８００を生成することができる。情報処理装置１００によれば、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列を、圧縮対象データ４００に出現した順序に沿って所定の文字と交互に並べた第２のデータ１０００を生成することができる。これにより、情報処理装置１００は、区切り文字が２文字以上であっても、区切り文字と区切り文字との境界を判別可能に第１のデータ８００を生成することができる。また、情報処理装置１００は、文字列と文字列との境界を判別可能に第２のデータ１０００を生成することができる。
【０１３２】
また、情報処理装置１００によれば、ＬＺ７７またはＬＺＭＡの圧縮アルゴリズムを用いた圧縮を行うことができる。これにより、情報処理装置１００は、第２のデータ１０００に対する圧縮に用いることが好ましいＬＺ７７またはＬＺＭＡの圧縮アルゴリズムを用いることができ、圧縮データのサイズの低減化を図ることができる。
【０１３３】
また、情報処理装置１００によれば、区切り文字に文字数が２以上の文字列を含むようにすることができる。これにより、情報処理装置１００は、区切り文字の種類数を増大させやすくし、２つの区切り文字の組み合わせの種類数を増大させやすくすることができる。このため、情報処理装置１００は、同じ種類の組み合わせの２つの区切り文字に挟まれた文字列が同じ属性の文字列になりやすくし、第２のデータ１０００において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【０１３４】
また、情報処理装置１００によれば、区切り文字の文字数は１であるとし、区切り文字に文字数が２以上の文字列を含まないようにすることができる。これにより、情報処理装置１００は、区切り文字の種類数を増大しにくくし、２つの区切り文字の組み合わせの種類数を増大しにくくすることができる。このため、情報処理装置１００は、２つの区切り文字の組み合わせの種類ごとに、当該種類の組み合わせの２つの区切り文字に挟まれた文字列を分類する際に用いられる記憶領域のサイズを抑制し、記憶領域を節約するとともに効率よく処理を行うことができる。また、情報処理装置１００は、区切り文字の文字数を１に固定するため、第１のデータ８００において区切り文字と区切り文字との境界を明示しなくてもよくなり、第１のデータ８００のサイズの低減化を図ることができる。
【０１３５】
また、情報処理装置１００によれば、区切り文字に制御文字を含むようにすることができる。これにより、情報処理装置１００は、２つの区切り文字の組み合わせの種類ごとに文字列を分類するときに、制御文字を含む組み合わせの２つの区切り文字に挟まれた文字列についても分類することができる。結果として、情報処理装置１００は、第２のデータ１０００において同じ文字列が比較的近くに集まりやすくすることができ、圧縮効率の向上を図ることができる。
【０１３６】
また、情報処理装置１００によれば、圧縮対象データ４００の先頭には改行を示す制御文字が出現するものとして扱い、第２のデータ１０００を生成することができる。これにより、情報処理装置１００は、２つの区切り文字の組み合わせの種類ごとに文字列を分類するときに、圧縮対象データ４００の先頭の文字列についても分類することができる。
【０１３７】
また、情報処理装置１００によれば、第１のデータ８００と第２のデータ１０００とにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号することができる。情報処理装置１００によれば、復号によって得られた第２のデータ１０００を参照し、復号によって得られた第１のデータ８００における２つの区切り文字の間に、当該２つの区切り文字の組み合わせの種類に対応付けられた文字列を順次挿入することができる。これにより、情報処理装置１００は、効率よく圧縮された圧縮データから、圧縮元である圧縮対象データ４００を復元することができる。
【０１３８】
なお、本実施の形態で説明した圧縮方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本圧縮プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本圧縮プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１３９】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１４０】
（付記１）コンピュータに、
圧縮対象データから、所定の区切り文字と、２つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成し、
生成した前記第１のデータと前記第２のデータとに対してスライド辞書法を用いた圧縮を行う、
処理を実行させることを特徴とする圧縮プログラム。
【０１４１】
（付記２）前記コンピュータに、
前記所定の区切り文字の指定を受け付ける、処理を実行させ、
前記抽出する処理は、
前記圧縮対象データから、指定を受け付けた前記所定の区切り文字と、２つの前記区切り文字に挟まれた文字列を抽出する、ことを特徴とする付記１に記載の圧縮プログラム。
【０１４２】
（付記３）前記コンピュータに、
前記圧縮対象データに出現する前記区切り文字の種類数が閾値より大きい場合、前記圧縮対象データを、出現する前記区切り文字の種類数が閾値以下になる部分データに分割する、処理を実行させ、
前記生成する処理は、
前記区切り文字が前記部分データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、前記部分データに出現する２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記部分データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成する、ことを特徴とする付記１または２に記載の圧縮プログラム。
【０１４３】
（付記４）前記生成する処理は、
前記区切り文字を、前記圧縮対象データに出現した順序に沿って所定の文字と交互に並べた前記第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列を、前記圧縮対象データに出現した順序に沿って所定の文字と交互に並べた前記第２のデータとを生成する、ことを特徴とする付記１〜３のいずれか一つに記載の圧縮プログラム。
【０１４４】
（付記５）前記圧縮は、ＬＺ７７またはＬＺＭＡの圧縮アルゴリズムを用いた圧縮である、ことを特徴とする付記１〜４のいずれか一つに記載の圧縮プログラム。
【０１４５】
（付記６）前記区切り文字は文字数が２以上の文字列を含む、ことを特徴とする付記１〜５のいずれか一つに記載の圧縮プログラム。
【０１４６】
（付記７）前記区切り文字の文字数は１である、ことを特徴とする付記１〜５のいずれか一つに記載の圧縮プログラム。
【０１４７】
（付記８）前記区切り文字は制御文字を含む、ことを特徴とする付記１〜７のいずれか一つに記載の圧縮プログラム。
【０１４８】
（付記９）前記生成する処理は、
前記圧縮対象データの先頭には改行を示す制御文字が出現するものとして扱い、前記第２のデータを生成する、ことを特徴とする付記１〜８のいずれか一つに記載の圧縮プログラム。
【０１４９】
（付記１０）コンピュータが、
圧縮対象データから、所定の区切り文字と、２つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成し、
生成した前記第１のデータと前記第２のデータとに対してスライド辞書法を用いた圧縮を行う、
処理を実行することを特徴とする圧縮方法。
【０１５０】
（付記１１）圧縮対象データから、所定の区切り文字と、２つの前記区切り文字に挟まれた文字列とを抽出し、
前記区切り文字が前記圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた前記文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとを生成し、
生成した前記第１のデータと前記第２のデータとに対してスライド辞書法を用いた圧縮を行う、
制御部を有することを特徴とする情報処理装置。
【０１５１】
（付記１２）コンピュータに、
所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第２のデータを参照し、復号によって得られた前記第１のデータにおける２つの前記区切り文字の間に、当該２つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
処理を実行させることを特徴とする復元プログラム。
【０１５２】
（付記１３）コンピュータが、
所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第２のデータを参照し、復号によって得られた前記第１のデータにおける２つの前記区切り文字の間に、当該２つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
処理を実行することを特徴とする復元方法。
【０１５３】
（付記１４）所定の区切り文字が圧縮対象データに出現した順序を特定可能に前記区切り文字を並べた第１のデータと、２つの前記区切り文字の組み合わせの種類ごとに、当該種類の前記組み合わせの２つの前記区切り文字に挟まれた文字列が前記圧縮対象データに出現した順序を特定可能に前記文字列を並べた第２のデータとにスライド辞書法を用いた圧縮を行って得られた圧縮データを復号し、
復号によって得られた前記第２のデータを参照し、復号によって得られた前記第１のデータにおける２つの前記区切り文字の間に、当該２つの前記区切り文字の前記組み合わせの種類に対応付けられた前記文字列を順次挿入することにより、前記圧縮対象データを生成する、
制御部を有することを特徴とする情報処理装置。
【符号の説明】
【０１５４】
１００  情報処理装置
１１０，４００  圧縮対象データ
１２１，１２２，８００，９００，１０００  データ
１３０  圧縮データ
２００  バス
２０１  ＣＰＵ
２０２  メモリ
２０３  ネットワークＩ／Ｆ
２０４  ディスクドライブ
２０５  ディスク
２０６  記録媒体Ｉ／Ｆ
２０７  記録媒体
２１０  ネットワーク
３０１  抽出部
３０２  生成部
３０３  圧縮部
３０４  復号部
３０５  復元部
５００  圧縮用テーブル
１１００  圧縮ファイル
１３００  復元用テーブル
【図１】
2018007236.tif 000003
【図２】
2018007236.tif 000004
【図３】
2018007236.tif 000005
【図４】
2018007236.tif 000006
【図５】
2018007236.tif 000007
【図６】
2018007236.tif 000008
【図７】
2018007236.tif 000009
【図８】
2018007236.tif 000010
【図９】
2018007236.tif 000011
【図１０】
2018007236.tif 000012
【図１１】
2018007236.tif 000013
【図１２】
2018007236.tif 000014
【図１３】
2018007236.tif 000015
【図１４】
2018007236.tif 000016
【図１５】
2018007236.tif 000017
【図１６】
2018007236.tif 000018
【図１７】
2018007236.tif 000019
【図１８】
2018007236.tif 000020
【図１９】
2018007236.tif 000021
【図２０】
2018007236.tif 000022
【図２１】
2018007236.tif 000023
【図２２】
2018007236.tif 000024
【図２３】
2018007236.tif 000025
【図２４】
2018007236.tif 000026
【図２５】
2018007236.tif 000027