(57)【特許請求の範囲】
【請求項１】
コンピュータに、
複数のファイルを特定の符号化形式で符号化した複数の符号化データを生成し、
前記複数の符号化データを結合した結合符号化データを複数の固定長のブロックに分割した、複数の符号化ブロックを生成し、
前記複数の符号化ブロックそれぞれに対するインデックスであって前記複数の符号化ブロックそれぞれについて、前記特定の符号化形式において用いられる複数の要素それぞれに対する存否情報を示すインデックスを生成し、
前記インデックスを用いて、２以上の文字より構成される要素を含む符号化ブロックおよびファイルを特定する
処理を実行させることを特徴とする符号化プログラム。
【請求項２】
前記符号化データ内における該分割した複数のブロックそれぞれの先頭符号の位置とブロックに対応する識別子とを対応付けた対応情報を生成し、
該生成する処理は、複数のブロックに対応する識別子それぞれについて、前記インデックスを生成する
ことを特徴とする請求項１に記載の符号化プログラム。
【請求項３】
前記インデックス、前記対応情報および前記複数のファイルそれぞれの符号化に関する情報を含むトレーラ情報を生成する
ことを特徴とする請求項２に記載の符号化プログラム。
【請求項４】
前記ブロックのサイズは、データを記憶する記憶装置におけるブロックのサイズと一致、または、整数倍に対応させる
ことを特徴とする請求項１から請求項３のいずれか１つに記載の符号化プログラム。
【請求項５】
前記複数の要素の単位は、単語単位である
ことを特徴とする請求項１に記載の符号化プログラム。
【請求項６】
前記複数の要素の単位は、Ｎグラム（Ｎは２以上）の文字単位である
ことを特徴とする請求項１に記載の符号化プログラム。
【請求項７】
複数のファイルを特定の符号化形式で符号化した複数の符号化データを生成する符号化部と、
前記符号化部によって生成された前記複数の符号化データを結合した結合符号化データを複数の固定長のブロックに分割した、複数の符号化ブロックを生成する符号化ブロック生成部と、
前記符号化ブロック生成部によって生成された複数の符号化ブロックそれぞれに対するインデックスであって前記複数の符号化ブロックそれぞれについて、前記特定の符号化形式において用いられる複数の要素それぞれに対する存否情報を示すインデックスを生成するインデックス生成部と、
前記インデックスを用いて、２以上の文字より構成される要素を含む符号化ブロックおよびファイルを特定する特定部と、
を有することを特徴とする符号化装置。
【請求項８】
コンピュータが、
複数のファイルを特定の符号化形式で符号化した複数の符号化データを生成し、
前記複数の符号化データを結合した結合符号化データを複数の固定長のブロックに分割した、複数の符号化ブロックを生成し、
前記複数の符号化ブロックそれぞれに対するインデックスであって前記複数の符号化ブロックそれぞれについて、前記特定の符号化形式において用いられる複数の要素それぞれに対する存否情報を示すインデックスを生成し、
前記インデックスを用いて、２以上の文字より構成される要素を含む符号化ブロックおよびファイルを特定する
処理を実行することを特徴とする符号化方法。
【請求項９】
コンピュータに、
２以上の文字より構成される要素を受け付けると、複数のファイルを特定の符号化形式で符号化した複数の符号化データを結合した結合符号化データを固定長で分割した、複数のブロックそれぞれについて複数の要素それぞれに対する存否情報を示すインデックスに基づき、受け付けた要素が存在するブロックを特定し、
該特定したブロックの符号化データを伸長し、
該伸長した伸長データと該受け付けた要素とを照合して、前記要素を含むブロックおよびファイルを特定する、
処理を実行させることを特徴とする復号化プログラム。
【請求項１０】
２以上の文字より構成される要素を受け付けると、複数のファイルを特定の符号化形式で符号化した複数の符号化データを結合した結合符号化データを固定長で分割した、複数のブロックそれぞれについて複数の要素それぞれに対する存否情報を示すインデックスに基づき、受け付けた要素が存在するブロックを特定する特定部と、
前記特定部によって特定されたブロックの符号化データを伸長する伸長部と、
前記伸長部によって伸長された伸長データと該受け付けた要素とを照合して、前記要素を含むブロックおよびファイルを特定する照合部と、
を有することを特徴とする復号化装置。
【請求項１１】
コンピュータが、
２以上の文字より構成される要素を受け付けると、複数のファイルを特定の符号化形式で符号化した複数の符号化データを結合した結合符号化データを固定長で分割した、複数のブロックそれぞれについて複数の要素それぞれに対する存否情報を示すインデックスに基づき、受け付けた要素が存在するブロックを特定し、
該特定したブロックの符号化データを伸長し、
該伸長した伸長データと該受け付けた要素とを照合して、前記要素を含むブロックおよびファイルを特定する
処理を実行することを特徴とする復号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号化プログラムなどに関する。
【背景技術】
【０００２】
圧縮では、ＺＩＰなどスライド窓を用いて最長一致文字列探索を行うＬＺ７７系が主流である。情報処理装置が複数のファイルをＺＩＰにより圧縮して結合する場合、それぞれファイルに対応したパラメータにより個別のファイルを圧縮する。このため、情報処理装置は、複数のファイルを圧縮して結合されたファイルに対して文字列を検索する場合、結合を解除し、個別のファイルを伸長してから照合する。文字列の検索を高速化するために用いられるインデックスは、圧縮とは別の工程で、ファイル単位に生成される。インデックスには、例えば、テキストデータに含まれる単語毎の、ファイル毎のアドレスをインデックス化した、ポインタ型転置インデックスが知られている。
【０００３】
圧縮対象のファイル（被圧縮データ）を複数のブロックに分割し、ブロック毎に圧縮処理を実行して圧縮データを生成する技術が知られている。かかる技術では、分割した複数ブロックのうち、圧縮対象となるブロックのデータを符号化する際に必要な辞書を、分割したブロックの被圧縮データを元に作成する（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−１１４５４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、複数のファイルを圧縮して結合されたファイルに対して文字列を検索する場合、高速に検索することができないという問題がある。すなわち、従来の技術では、複数のファイルを圧縮して結合されたファイルに対して文字列を検索する場合、結合を解除し、個別のファイルを先頭から全て伸長してから、伸長後の文字列を検索文字列と照合するので、高速に検索することができない。インデックスを用いて検索する場合であっても、個別のファイル単位に生成されたインデックスを用いて、伸長後の文字列をファイル単位に検索文字列と照合するので、高速に検索することができない。
【０００６】
１つの側面では、複数のファイルを圧縮して結合されたファイルに対して文字列を検索する場合、高速に検索することを目的とする。
【課題を解決するための手段】
【０００７】
第１の案では、コンピュータに、複数のファイルを特定の符号化形式で符号化した複数の符号化データを生成し、前記複数の符号化データを結合した結合符号化データを複数の固定長のブロックに分割した、複数の符号化ブロックを生成し、前記複数の符号化ブロックそれぞれに対するインデックスを生成する処理を実行させる。
【発明の効果】
【０００８】
１つの態様によれば、複数のファイルを圧縮して結合されたファイルに対して文字列を検索する場合、高速に検索することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施例に係る符号化処理の一例を示す図である。
【図２】図２は、本実施例に係るビットマップ型インデックスの一例を示す図である。
【図３】図３は、本実施例に係る符号化処理の流れの一例を示す図である。
【図４】図４は、本実施例に係る圧縮暗号化処理の流れの一例を示す図である。
【図５】図５は、圧縮ファイルの構成例を示す図である。
【図６】図６は、本実施例に係る部分復号化伸長処理の一例を示す図である。
【図７】図７は、ビットマップ型インデックスによる絞込みの一例を示す図である。
【図８】図８は、本実施例に係る情報処理装置の部分復号化伸長処理の流れの一例を示す図である。
【図９】図９は、本実施例に係る情報処理装置の構成の一例を示す機能ブロック図である。
【図１０】図１０は、本実施例に係る圧縮暗号化部の構成の一例を示す機能ブロック図である。
【図１１】図１１は、本実施例に係る部分復号化伸長部の構成の一例を示す機能ブロック図である。
【図１２Ａ】図１２Ａは、本実施例に係る圧縮暗号化部の処理手順を示すフローチャート（１）である。
【図１２Ｂ】図１２Ｂは、本実施例に係る圧縮暗号化部の処理手順を示すフローチャート（２）である。
【図１３】図１３は、本実施例に係る部分復号化伸長部の処理手順を示すフローチャートである。
【図１４】図１４は、コンピュータのハードウェア構成例を示す図である。
【図１５】図１５は、コンピュータで動作するプログラムの構成例を示す図である。
【図１６】図１６は、実施形態のシステムにおける装置の構成例を示す図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する符号化プログラム、符号化装置、符号化方法、復号化プログラム、復号化装置および復号化方法の実施例を図面に基づいて詳細に説明する。なお、実施例では、符号化を圧縮化として説明するが、これに限定されず、符号化を圧縮化と異なる符号化としても良い。また、この実施例によりこの発明が限定されるものではない。
【実施例】
【００１１】
図１は、本実施例に係る符号化処理の一例を示す図である。図１に示すように、情報処理装置は、複数のファイルが結合されたソースファイルのデータを、複数のファイルそれぞれについて特定の符号化形式で順次圧縮符号化する。すなわち、情報処理装置は、複数のファイルを、共通のパラメータである符号化辞書を用いて圧縮符号化する。
【００１２】
符号化辞書には、一例として、静的辞書および動的辞書がある。静的辞書とは、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書のことをいう。これに対して、動的辞書とは、静的辞書に登録されていない単語と動的に付された動的コードとを対応付けた辞書である。静的辞書に登録されていない単語には、一例として、出現頻度の低い単語（低頻度単語）、数値、時刻、タグなどがある。動的辞書には、静的辞書に登録されていない単語の出現順に、動的コードに対応付けられた単語が登録されている。
【００１３】
そして、情報処理装置は、圧縮符号化したデータを結合した符号化データを複数のブロックに分割する。ブロックは、固定長であり、ブロックの長さは、一例として、２ＫＢである。ブロックは、単一のセクタであっても、複数のセクタを纏めたものであっても良い。実施例では、１ブロック／１セクタであるとする。
【００１４】
例えば、情報処理装置は、ソースファイルから各ファイルを順次読み出し、読み出したファイルの先頭から順番に単語を抽出する。情報処理装置は、抽出した単語を圧縮符号化し、得られた圧縮符号を固定長のブロックへ格納する。情報処理装置は、圧縮符号数やパディングを用いてブロック間で分断しないように圧縮符号を固定長のブロックに格納する。圧縮符号数は、ブロック内に格納された圧縮符号の数である。パディングは、ブロック長に足りない分を補完することをいい、一例として、ビット単位に複数の０で補完する。
【００１５】
そして、情報処理装置は、圧縮符号化と並行して、複数のファイルそれぞれの圧縮符号化に関する情報を示すファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２を生成する。ファイルアドレステーブルＴ１は、ソースデータ内における各ファイルを圧縮符号化した場合の各ファイルの符号化データ内における位置と、ブロックアドレステーブルＴ２へのポインタとを対応付けて記憶する。一例として、各ファイルの符号化データ内における位置は、符号化データ内での相対位置である。ブロックアドレステーブルＴ２は、各ブロックの符号化データ内における位置と、ブロックを一意に識別するＩＤ（ブロックＩＤ）とを対応付けて記憶する。各ブロックの符号化データ内における位置は、符号化データ内での相対位置である。ブロックＩＤは、一例として、１から昇順の自然数である。
【００１６】
ここでは、ソースデータには、第１ファイル、第２ファイル、・・・および第ｎファイルが含まれている。ファイルアドレステーブルＴ１には、第１ファイルの符号化データ内における位置ｐ１と、ブロックアドレステーブルＴ２へのポインタとが対応付けて記憶されている。ブロックアドレステーブルＴ２へのポインタが示すブロックアドレステーブルＴ２には、ブロック数として「３」が記憶されている。第１ブロックの位置として「ｂ１１」、第１ブロックが示すブロックＩＤとして「１」が記憶される。第２ブロックの位置として「ｂ１２」、第２ブロックが示すブロックＩＤとして「２」が記憶される。第３ブロックの位置として「ｂ１３」、第３ブロックが示すブロックＩＤとして「３」が記憶される。なお、ブロックＩＤが「４」であるブロックは、第１ファイルに後続する第２ファイルの第１ブロックとなる。
【００１７】
また、情報処理装置は、圧縮符号化と並行して、分割された複数のブロックそれぞれに紐づいたビットマップ型インデックスＴ３を生成する。ビットマップ型インデックスＴ３は、各単語について、ブロック毎の存否をインデックス化したビットマップのことをいう。ビットマップ型インデックスＴ３のＸ軸はブロックＩＤを表し、ビットマップ型インデックスＴ３のＹ軸は単語の圧縮符号を表す。すなわち、ビットマップ型インデックスＴ３は、複数のブロックＩＤが示すブロック毎に、各単語が存在するか否かをビットの値で表す。一例として、ある単語がブロックに存在する場合には、当該単語のブロックの存否として２進数のビットの値「１」が設定され、ある単語がブロックに存在しない場合には、当該単語のブロックの存否として２進数のビットの値「０」が設定される。なお、情報処理装置は、ビットマップ型インデックスＴ３を圧縮符号化と並行して生成すると説明したが、これに限定されない。情報処理装置は、圧縮符号化を終了してから、複数のファイルそれぞれの圧縮符号化に関する情報を示すファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２を利用して、複数のブロックそれぞれに紐づいたビットマップ型インデックスＴ３を生成しても良い。ビットマップ型インデックスＴ３の詳細の説明は、後述する。
【００１８】
情報処理装置は、固定のブロック毎に、各ブロックに含まれる情報を暗号化する。例えば、暗号化は、ブロック毎に、ＣＢＣモードのＡＥＳによって行われる。ＣＢＣモードによる暗号化は、暗号化対象のブロックと前ブロックとのＥＯＲ演算により行われる。なお、暗号化は、ＣＢＣモードに限定されず、部分伸長が可能であるブロック毎の暗号化を行うモードであれば良い。
【００１９】
［ビットマップ型インデックスの一例］
次に、本実施例に係るビットマップ型インデックスの一例を、図２を参照して説明する。図２は、本実施例に係るビットマップ型インデックスの一例を示す図である。図２に示すように、ビットマップ型インデックスＴ３は、高頻度の単語、低頻度の単語および２グラムの単語（または文字）の圧縮付号毎にビットマップを対応付ける。ビットマップとは、高頻度の単語の圧縮符号、低頻度の単語の圧縮符号および２グラムの単語の圧縮符号がいずれのブロックに含まれるかを表す符号ビット列である。ビットマップの各ビットが、各ブロックに高頻度の単語の圧縮符号、低頻度の単語の圧縮符号および２グラムの単語の圧縮符号が含まれているか否かを表す。なお、各種単語や２グラムを含むＮグラムの単語（または文字）は、要素の一例である。
【００２０】
ビットマップ型インデックスＴ３は、例えば、８Ｋ種類の高頻度の単語、２４Ｋ種類の低頻度の単語、２グラムの単語の圧縮符号毎にビットマップを対応付ける。高頻度の単語とは、頻度集計用のテキストファイル群での出現頻度が上位８０００位までの単語である。また、低頻度の単語とは、頻度集計用のテキストファイル群での出現頻度の順位が８０００位以降であって、符号化するソースファイルから抽出された単語である。
【００２１】
例えば、ビットマップ型インデックスＴ３の有効行１行目は、圧縮符号が示す単語「あい」のビットマップが「１０１１・・・」となっている。ビットマップ型インデックスＴ３の有効行１行目のビットマップは、「あい」の圧縮符号が含まれるブロックを表す。ビットマップ「１０１１・・・」は、１ビット目に「１」が格納されているのでブロック１に「あい」が含まれ、２ビット目に「０」が格納されているのでブロック２に「あい」が含まれず、３ビット目に「１」が格納されているのでブロック３に「あい」が含まれることを表す。また、ビットマップ「１０１１・・・」は、４ビット目に「１」が格納されているのでブロック４に「あい」が含まれていることを表す。なお、ビットマップ「１０１１・・・」は、ブロック５以降の他の各ブロックに「あい」が含まれるか否かについても表す。
【００２２】
ビットマップ型インデックスＴ３を用いることで、入力文字列を構成する単語の圧縮符号が、どのブロックに存在するかを、高速に絞り込むことができる。例えば、入力文字列が「神奈川県川崎」である場合に、「神奈川県川崎」を構成する単語「神奈川」、「県」および「川崎」の各圧縮符号が、「ブロック１」に存在することを、高速に絞り込むことができる。
【００２３】
次に、図３は、本実施例に係る符号化処理の流れの一例を示す図である。図３では、情報処理装置が、符号化データを複数のブロックに分割し、分割された複数のブロックそれぞれに紐づいたビットマップ型インデックスＴ３を生成する処理について説明する。情報処理装置は、圧縮符号化処理のワークエリアとして、メモリに記憶領域Ａ１、記憶領域Ａ２、記憶領域Ａ３を設ける。
【００２４】
記憶領域Ａ１は、ソースファイルＦ１の大きさに応じて、データサイズが定められた記憶領域である。記憶領域Ａ１は、例えば６４キロバイトの記憶領域である。記憶領域Ａ２は、圧縮バッファであり、ブロック長の長さを有する。記憶領域Ａ３は、圧縮ファイルＦ２内の圧縮データを記憶する記憶領域である。
【００２５】
情報処理装置は、第１ファイルを記憶領域Ａ１に読み出す。情報処理装置は、記憶領域Ａ１の先頭の単語から順次圧縮符号化する。圧縮符号化は、複数のファイル共通の静的辞書や動的辞書を用いて実施される。情報処理装置は、圧縮符号を記憶領域Ａ２に格納する。ここでは、ブロックＩＤが２である場合について説明する。
【００２６】
情報処理装置は、仮に圧縮符号を記憶領域Ａ２に書き込むとブロック長を超えるか否かを判定する。情報処理装置は、仮に圧縮符号を記憶領域Ａ２に書き込むとブロック長を超えない場合には、圧縮符号をブロック２としての記憶領域Ａ２に書き込む。そして、情報処理装置は、ブロック２に紐づいたビットマップ型インデックスＴ３を生成する。一例として、ブロック２の先頭単語の圧縮符号が単語ａ１の圧縮符号であるとする。すると、情報処理装置は、ブロックＩＤが２を示す列と単語の圧縮符号が単語ａ１の圧縮符号を示す行とが交わるビットに「１」を設定する。
【００２７】
情報処理装置は、仮に圧縮符号を記憶領域Ａ２に書き込むとブロック長を超える場合には、当該圧縮符号を記憶領域Ａ２に書き込まない。情報処理装置は、記憶領域Ａ２に既に書き込まれた圧縮符号の数を示す圧縮符号数を記憶領域Ａ２の先頭に書き込む。情報処理装置は、ビット単位のパディングを用いて記憶領域Ａ２を補完する。そして、情報処理装置は、記憶領域Ａ２に格納されたブロック２のデータを、記憶領域Ａ３に格納する。なお、情報処理装置は、記憶領域Ａ２に書き込むとブロック長を超えると判定された圧縮符号を、ブロック２の処理を行った後に、次のブロック３として記憶領域Ａ２に書き込み、次の単語の処理に移行する。
【００２８】
情報処理装置は、ブロック２のデータを記憶領域Ａ３に格納すると、記憶領域Ａ３内のブロック２の位置をブロックアドレステーブルＴ２に追加する。ここでは、ブロック２の位置として「ｂ１２」が第１ファイルに対応付けられるブロックアドレステーブルＴ２に追加される。そして、情報処理装置は、第１ファイルの末尾単語を処理した後に、第１ファイルに関する情報をファイルアドレステーブルＴ１に追加する。すなわち、情報処理装置は、記憶領域Ａ３内の第１ファイルの先頭の位置および第１ファイルに対応付けられるブロックアドレステーブルＴ２へのポインタをファイルアドレステーブルＴ１に追加する。
【００２９】
このようにして、情報処理装置は、第１ファイルの符号化処理、第２ファイルの符号化処理、・・・、第ｎファイルの符号化処理を継続して実施する。この結果、情報処理装置は、符号化データを記憶領域Ａ３に格納することができる。
【００３０】
次に、図４は、本実施例に係る圧縮暗号化処理の流れの一例を示す図である。図４では、情報処理装置が、ブロックＩＤがαであるブロックαを暗号化する場合の処理について説明する。情報処理装置は、圧縮処理のワークエリアとして、メモリに記憶領域Ａ４、記憶領域Ａ５、記憶領域Ａ６、記憶領域Ａ７を設ける。記憶領域Ａ４は、圧縮バッファであり、ブロックαに対応するデータを記憶する。記憶領域Ａ５、記憶領域Ａ６、記憶領域Ａ７は、ブロックを暗号化するために用いられる。
【００３１】
情報処理装置は、記憶領域Ａ４に記憶された圧縮符号化されたブロックαのデータと記憶領域Ａ５に記憶された暗号化されたブロックα―１のデータとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ａ６に格納する。なお、ブロックが最初のブロックである場合には、ｎビットの初期値ＩＶとのＥＯＲ演算が行われ、ＥＯＲ演算結果が記憶領域Ａ６に格納される。記憶領域Ａ５は、例えば、暗号化バッファである。記憶領域Ａ６は、ＥＯＲ演算結果バッファである。情報処理装置は、ＥＯＲ演算結果をアフィン暗号化関数（Ｅｋ）で演算して、ブロックαの暗号化を行い、記憶領域Ａ７に格納する。記憶領域Ａ７は、暗号化（Ｅｋ）バッファである。情報処理装置は、記憶領域Ａ７に格納された圧縮暗号化ブロックのデータを、圧縮暗号化ファイルＦ３に格納する。すなわち、情報処理装置は、圧縮符号化されたブロックαを暗号化する。
【００３２】
図５は、圧縮ファイルの構成例を示す図である。図５に示すように、圧縮ファイルＦ２は、ヘッダ部と、圧縮データと、トレーラ部とを有する。トレーラ部は、圧縮処理が完了した後のファイルアドレステーブルＴ１、ブロックアドレステーブルＴ２、動的辞書Ｔ４およびビットマップ型インデックスＴ３の情報を記憶する。ビットマップ型インデックスＴ３は、図２に示したビットマップ型インデックスに対応する。ファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２は、図３に示した各テーブルの情報を記憶する。動的辞書Ｔ４は、圧縮符号化の際に用いられる動的辞書を記憶する。ヘッダ部には、圧縮データへのポインタが格納される。また、ヘッダ部には、トレーラ部へのポインタが格納される。トレーラ部へのポインタには、トレーラ部に格納されたファイルアドレステーブルＴ１、ブロックアドレステーブルＴ２、動的辞書Ｔ４およびビットマップ型インデックスＴ３への各ポインタが含まれる。情報処理装置は、後述する部分復号化伸長時において、ヘッダ部のトレーラ部へのポインタを利用し、ビットマップ型インデックスＴ３、ファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２を参照できる。なお、ファイルアドレステーブルＴ１、ブロックアドレステーブルＴ２、動的辞書Ｔ４およびビットマップ型インデックスＴ３は、トレーラ部内の独立したブロックの先頭から格納されることが望ましい。これにより、トレーラ部は、圧縮データと同様に暗号化されるため、情報処理装置は、部分復号化伸長時に、ビットマップ型インデックスＴ３などの情報を高速に復号化することで、部分復号化伸長を高速化することができる。
【００３３】
図６は、本実施例に係る部分復号化伸長処理の一例を示す図である。図６に示すように、情報処理装置は、「神奈川県川崎」の読み出し命令を取得した場合の部分復号化伸長処理について説明する。情報処理装置は、圧縮暗号化ファイルＦ３のヘッダ部に記憶されたビットマップ型インデックスＴ３へのポインタが指すブロックを復号化することで、ビットマップ型インデックスＴ３を復号化する。情報処理装置は、圧縮暗号化ファイルＦ３のヘッダ部に記憶されたファイルアドレステーブルＴ１へのポインタが指すブロックを復号化することで、ファイルアドレステーブルＴ１を復号化する。情報処理装置は、圧縮暗号化ファイルＦ３のヘッダ部に記憶されたブロックアドレステーブルＴ２へのポインタが指すブロックを復号化することで、ブロックアドレステーブルＴ２を復号化する。情報処理装置は、圧縮暗号化ファイルＦ３のヘッダ部に記憶された動的辞書へのポインタが指すブロックを復号化することで、動的辞書を復号化する。
【００３４】
情報処理装置は、ビットマップ型インデックスＴ３により、伸長対象のブロックを絞り込む。ビットマップ型インデックスＴ３による絞込み処理の詳細な説明は、後述する。ここでは、絞り込まれたブロックが示すブロックＩＤが「２」であるとする。すると、情報処理装置は、絞り込まれたブロックＩＤの位置を、ブロックアドレステーブルＴ２から読み出す。ここでは、絞り込まれた対象ブロックＩＤが「２」であるので、ブロックＩＤ２が示すブロックの位置として「ｂ１２」が読み出される。
【００３５】
情報処理装置は、絞り込まれた対象ブロックＩＤの位置「ｂ１２」にあるブロック２および復号化に必要なブロックを圧縮暗号化ファイルＦ３に記憶された圧縮暗号化データから読み出す。情報処理装置は、ブロック２に対して、部分復号化処理を実行する。この結果、情報処理装置は、ブロック２を復号化したブロックである圧縮ブロック２を生成する。なお、部分復号化処理の詳細は、後述する。
【００３６】
情報処理装置は、圧縮ブロック２に対して、部分伸長処理を実行し、伸長データを生成する。
【００３７】
情報処理装置は、生成された伸長データと、読み出し命令があった「神奈川県川崎」とを照合し、一致した「神奈川県川崎」を出力する。このとき、情報処理装置は、絞り込まれた対象ブロックのブロックＩＤを合わせて出力しても良い。また、情報処理装置は、対象ブロックを含むファイルの識別番号を合わせて出力しても良い。情報処理装置は、ファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２を用いて、ファイルの識別番号を特定して、出力すれば良い。
【００３８】
図７は、ビットマップ型インデックスによる絞込みの一例を示す図である。図７に示すように、情報処理装置は、「神奈川県川崎」の読み出し命令を取得した場合のビットマップ型インデックスＴ３による絞込み処理について説明する。情報処理装置は、ビットマップ型インデックスＴ３を用いて、「神奈川県川崎」を構成する単語「神奈川」、単語「県」および単語「川崎」の各圧縮符号に対応するビットマップが全て「１」を示すブロックＩＤを絞り込む。ここでは、情報処理装置は、「ブロック２」を絞り込むことができる。なお、情報処理装置は、ビットマップ型インデックスＴ３を用いて、「神奈川県川崎」を構成する２グラムの単語「神奈川県」および「県川崎」の各圧縮符号に対応するビットマップが全て「１」を示すブロックＩＤを絞り込んでも良い。このように、情報処理装置は、ビットマップ型インデックスＴ３を用いることで、入力文字列を構成する単語の圧縮符号が、どのブロックに存在するかを、高速に絞り込むことができる。
【００３９】
次に、図８は、本実施例に係る情報処理装置の部分復号化伸長処理の流れの一例を示す図である。図８に示すように、情報処理装置は、部分復号化処理のワークエリアとして、メモリに記憶領域Ｂ１、記憶領域Ｂ２、記憶領域Ｂ３を設ける。情報処理装置は、部分伸長処理のワークエリアとして、メモリに記憶領域Ｂ４を設ける。なお、図８では、情報処理装置は、ビットマップ型インデックスＴ３により、対象ブロックＩＤが示すブロックβを伸長対象として絞り込んだとする。
【００４０】
情報処理装置は、圧縮暗号化ファイルＦ３からブロックβを読み出し、ブロックβのデータを復号化関数（Ｄｋ）で演算して、ブロックβの復号化を行い、記憶領域Ｂ１に格納する。記憶領域Ｂ１は、復号化バッファ（Ｄｋ）である。情報処理装置は、圧縮暗号化ファイルＦ３からブロックβの１つ前のブロックβ―１を読み出し、記憶領域Ｂ２に格納する。ブロックβ―１は、ブロックβの復号化に必要なブロックである。そして、情報処理装置は、記憶領域Ｂ１に記憶された復号化されたブロックβのデータと記憶領域Ｂ２に記憶された圧縮暗号化されたブロックβ―１のデータとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ｂ３に格納する。すなわち、情報処理装置は、圧縮暗号化されたブロックβを復号化し、圧縮符号数、圧縮符号およびパディングを含む平文を生成する。
【００４１】
そして、情報処理装置は、復号化された平文から圧縮符号を順次読み出す。情報処理装置は、読み出した圧縮符号に基づいて、動的辞書または静的辞書に対応する伸長辞書を参照し、伸長データを生成する。このように、情報処理装置は、ブロックβに含まれる圧縮符号を順次伸長し、伸長した伸長データを記憶領域Ｂ４に格納する。
【００４２】
そして、情報処理装置は、記憶領域Ｂ４に格納された伸長データと、読み出し命令があった入力文字列とを照合し、一致したリード領域をアプリのバッファＢ５に出力する。
【００４３】
図９は、本実施例に係る情報処理装置の構成の一例を示す機能ブロック図である。図９に示すように、この情報処理装置１００は、圧縮暗号化部１００ａと、部分復号化伸長部１００ｂと、記憶部１００ｃとを有する。
【００４４】
圧縮暗号化部１００ａは、図１、図３および図４に示した符号化処理を実行する処理部である。部分復号化伸長部１００ｂは、図６、図７、図８に示した部分復号化伸長処理を実行する処理部である。記憶部１００ｃは、圧縮暗号化対象のソースファイルＦ１、圧縮処理により得られる圧縮ファイルＦ２、圧縮ファイルＦ２を暗号化して得られる圧縮暗号化ファイルＦ３などを格納する。
【００４５】
また、情報処理装置１００は、図３および図４に示した記憶領域Ａ１，Ａ２，Ａ３，Ａ４，Ａ５，Ａ６，Ａ７を、記憶部１００ｃに設定する。情報処理装置１００は、図６、図７、図８などに示した記憶領域Ｂ１，Ｂ２，Ｂ３，Ｂ４，Ｂ５を、記憶部１００ｃに設定する。
【００４６】
図１０は、本実施例に係る圧縮暗号化部の構成の一例を示す機能ブロック図である。図１０に示すように、この圧縮暗号化部１００ａは、ファイルリード部１０１、圧縮部１０２、ブロックライト部１０３、インデックス生成部１０４、インデックスライト部１０５、暗号化部１０６、ファイルライト部１０７を有する。
【００４７】
ファイルリード部１０１は、複数のファイルが結合されたソースファイルＦ１内のコンテンツ部分のデータを読み出す処理部である。ファイルリード部１０１は、ソースファイルＦ１に含まれるファイルを順次読み出す。ファイルリード部１０１は、読み出したファイルに含まれる単語を先頭から抽出し、抽出した単語を圧縮部１０２に順次出力する。例えば、ファイルリード部１０１は、ソースファイルＦ１内のファイルが第１ファイル、第２ファイルである場合には、第１ファイル、第２ファイルの順に読み出す。そして、ファイルリード部１０１は、読み出した第１ファイル内のコンテンツ部分のデータが単語α１、単語α２である場合には、単語α１、単語α２の順に、各単語を圧縮部１０２に出力する。
【００４８】
圧縮部１０２は、単語を圧縮する処理部である。圧縮部１０２は、静的辞書または動的辞書を参照し、ファイルリード部１０１から出力された単語を符号化する。例えば、圧縮部１０２は、単語の文字列とビットフィルタとを比較して、単語の文字列がビットフィルタにヒットするか否かを判定する。ビットフィルタとは、静的辞書を用いて圧縮する単語の文字列を特定するフィルタである。圧縮部１０２は、単語の文字列がビットフィルタにヒットする場合には、単語の文字列を静的辞書に基づいて符号化する。圧縮部１０２は、単語の文字列がビットフィルタにヒットしない場合には、単語の文字列を動的辞書に基づいて符号化する。そして、圧縮部１０２は、符号化された圧縮符号をブロックライト部１０３に出力する。
【００４９】
ブロックライト部１０３は、圧縮符号を固定長のブロックに格納する処理部である。ブロックライト部１０３は、仮に圧縮符号を記憶領域Ａ２に書き込むとブロック長を超えるか否かを判定する。ブロックライト部１０３は、仮に圧縮符号を記憶領域Ａ２に書き込むとブロック長を超えない場合には、当該圧縮符号を記憶領域Ａ２に書き込む。そして、ブロックライト部１０３は、圧縮符号および現在のブロックＩＤをインデックス生成部１０４に出力する。
【００５０】
ブロックライト部１０３は、仮に圧縮符号を記憶領域Ａ２に書き込むとブロック長を超える場合には、当該圧縮符号を記憶領域Ａ２に書き込まない。ブロックライト部１０３は、記憶領域Ａ２に既に書き込まれた圧縮符号の数を示す圧縮符号数を記憶領域Ａ２の先頭に書き込む。ブロックライト部１０３は、パディングを用いて記憶領域Ａ２の残りの領域を補完する。ブロックライト部１０３は、記憶領域Ａ２に記憶されたブロックを圧縮ブロックとして記憶領域Ａ３に書き込む。ブロックライト部１０３は、現に記憶領域Ａ３に書き込んだ圧縮ブロックの、記憶領域Ａ３内の位置およびブロックＩＤをブロックアドレステーブルＴ２に追加する。そして、ブロックライト部１０３は、ファイルの末尾単語を処理した後に、ファイルに関する情報をファイルアドレステーブルＴ１に追加する。すなわち、ブロックライト部１０３は、記憶領域Ａ３内のファイルの先頭の位置および当該ファイルに対応付けられるブロックアドレステーブルＴ２へのポインタをファイルアドレステーブルＴ１に追加する。
【００５１】
ブロックライト部１０３は、記憶領域Ａ２に書き込むとブロック長を超えると判定された圧縮符号を、初期化された記憶領域Ａ２に書き込む。すなわち、ブロックライト部１０３は、次のブロックの処理として記憶領域Ａ２に書き込む。そして、ブロックライト部１０３は、圧縮符号および現在のブロックＩＤをインデックス生成部１０４に出力する。なお、現在のブロックのブロックＩＤは、一例として、デフォルト値として「１」であり、ブロックが記憶領域Ａ３に書き込まれると、１加算された値となる。
【００５２】
インデックス生成部１０４は、符号化された圧縮符号について、現在のブロックＩＤに紐づいたビットマップ型インデックスＴ３を生成する。例えば、インデックス生成部１０４は、ビットマップ型インデックスＴ３の、現在のブロックＩＤの列と符号化された圧縮符号の行とが交わるビットに「１」を設定する。
【００５３】
インデックスライト部１０５は、ビットマップ型インデックスＴ３を圧縮ファイルＦ２のトレーラ部に格納する処理部である。インデックスライト部１０５は、ソースファイルＦ１内のデータの圧縮処理が完了した後、ビットマップ型インデックスＴ３を圧縮ファイルＦ２のトレーラ部に格納する。そして、インデックスライト部１０５は、トレーラ部に格納されたビットマップ型インデックスＴ３へのポインタを圧縮ファイルＦ２のヘッダ部に格納する。加えて、インデックスライト部１０５は、ファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２を圧縮ファイルＦ２のトレーラ部に格納する。そして、インデックスライト部１０５は、トレーラ部に格納されたファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２へのそれぞれのポインタを圧縮ファイルＦ２のヘッダ部に格納する。
【００５４】
暗号化部１０６は、ブロックを暗号化する処理部である。暗号化部１０６は、圧縮ファイルＦ２のブロックを先頭から抽出し、抽出したブロックを暗号化する。例えば、暗号化部１０６は、先頭のブロックを抽出した場合には、先頭の圧縮符号化されたブロックのデータと初期値ＩＶとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ａ６に格納する。暗号化部１０６は、先頭のブロック以降のブロックを抽出した場合には、圧縮符号化されたブロックのデータと１つ前の暗号化されたブロックのデータとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ａ６に格納する。暗号化部１０６は、ＥＯＲ演算結果をアフィン暗号化関数（Ｅｋ）で演算し、得られたブロックを圧縮暗号化ブロックとして記憶領域Ａ７に格納する。暗号化部１０６は、記憶領域Ａ７に格納された圧縮暗号化ブロックのデータを、ファイルライト部１０７に出力する。なお、暗号化部１０６は、圧縮ファイルＦ２の圧縮データおよびトレーラ部を暗号化する。
【００５５】
ファイルライト部１０７は、暗号化部１０６から圧縮暗号化ブロックを取得し、取得した圧縮暗号化ブロックを圧縮暗号化ファイルＦ３に書き込む処理部である。
【００５６】
図１１は、本実施例に係る部分復号化伸長部の構成の一例を示す機能ブロック図である。図１１に示すように、この部分復号化伸長部１００ｂは、ブロック特定部１１０、部分復号化部１１１、部分伸長部１１２、照合部１１３を有する。
【００５７】
ブロック特定部１１０は、圧縮暗号化ファイルＦ３内の、部分復号化伸長する圧縮暗号化ブロックを特定する処理部である。
【００５８】
ブロック特定部１１０は、入力文字列を指定した読み出し命令を取得すると、ビットマップ型インデックスＴ３を復号化する。例えば、ブロック特定部１１０は、圧縮ファイルＦ２内のヘッダ部に記憶されたビットマップ型インデックスＴ３へのポインタが指す位置のブロックを復号化する。加えて、ブロック特定部１１０は、ファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２を復号化する。ブロック特定部１１０は、動的辞書Ｔ４を復号化する。
【００５９】
ブロック特定部１１０は、入力文字列を形態素解析する。形態素解析とは、入力文字列を単語に分割することをいう。ブロック特定部１１０は、入力文字列を構成する単語の数が単数である場合には、ビットマップ型インデックスＴ３により、単語が示す圧縮符号に対応するビットマップが「１」を示すブロックＩＤを特定する。ブロック特定部１１０は、入力文字列を構成する単語の数が複数である場合には、ビットマップ型インデックスＴ３により、複数の単語がそれぞれ示す圧縮符号に対応するそれぞれのビットマップが全て「１」を示すブロックＩＤを特定する。そして、ブロック特定部１１０は、特定されたブロックＩＤを部分復号化部１１１に出力する。
【００６０】
部分復号化部１１１は、伸長対象として特定されたブロックＩＤのブロック（圧縮暗号化ブロック）を復号化する処理部である。部分復号化部１１１は、ブロックアドレステーブルＴ２を参照して、伸長対象として特定されたブロックＩＤの圧縮暗号化ブロックを圧縮暗号化ファイルＦ３から読み出す。部分復号化部１１１は、伸長対象として特定されたブロックＩＤの１つ前のブロックＩＤの圧縮暗号化ブロックを圧縮暗号化ファイルＦ３から読み出す。部分復号化部１１１は、伸長対象として特定されたブロックＩＤの圧縮暗号化ブロックのデータを復号化関数（Ｄｋ）で演算する。部分復号化部１１１は、演算した結果を記憶領域Ｂ１に格納する。部分復号化部１１１は、伸長対象として特定されたブロックＩＤの１つ前の圧縮暗号化ブロックのデータを記憶領域Ｂ２に格納する。部分復号化部１１１は、記憶領域Ｂ１に記憶されたデータと、記憶領域Ｂ２に記憶されたデータとのＥＯＲ演算を行い、ＥＯＲ演算結果を記憶領域Ｂ３に格納する。この結果、部分復号化部１１１は、伸長対象として特定されたブロックＩＤの圧縮暗号化ブロックについて、圧縮符号数、圧縮符号およびパディングを含む圧縮ブロックを生成する。部分復号化部１１１は、圧縮ブロックを部分伸長部１１２に出力する。
【００６１】
部分伸長部１１２は、復号化した圧縮ブロックを伸長する処理部である。部分伸長部１１２は、圧縮部１０２で圧縮した圧縮形式に対応する伸長形式で圧縮符号を伸長する。例えば、部分伸長部１１２は、復号化した圧縮ブロック内の圧縮符号を先頭から読み出し、読み出した圧縮符号を、動的辞書または静的辞書に対応する伸長辞書を用いて伸長する。部分伸長部１１２は、伸長した伸長データを記憶領域Ｂ４に格納する。
【００６２】
照合部１１３は、伸長データと、読み出し命令があった入力文字列とを照合する。例えば、照合部１１３は、記憶領域Ｂ４に格納された伸長データと読み出し命令があった入力文字列とを照合し、一致した領域のデータを出力する。照合部１１３は、一致した領域のデータを出力する際、ブロック特定部１１０によって特定されたブロックＩＤを出力しても良いし、当該ブロックＩＤのブロックを含むファイルの識別番号を出力しても良い。
【００６３】
次に、圧縮暗号化部１００ａの処理手順について、図１２Ａおよび図１２Ｂを参照して説明する。図１２Ａおよび図１２Ｂは、本実施例に係る圧縮暗号化部の処理手順を示すフローチャートである。
【００６４】
図１２Ａに示すように、圧縮暗号化部１００ａは、前処理を実行する（ステップＳ１０１）。ステップＳ１０１の前処理において、圧縮暗号化部１００ａは、例えば、記憶領域Ａ１〜Ａ７を記憶部１００ｃに確保する。
【００６５】
圧縮暗号化部１００ａは、ブロックＩＤをデフォルト値の１に設定する（ステップＳ１０２）。圧縮暗号化部１００ａは、複数のファイルが結合された圧縮暗号化対象のソースファイルＦ１から１つのファイルを記憶領域Ａ１に読み出し（ステップＳ１０３）、単語を読み出す（ステップＳ１０４）。圧縮暗号化部１００ａは、読み出した単語の圧縮処理を実行する（ステップＳ１０５）。圧縮暗号化部１００ａは、ビットマップ型インデックスＴ３について、読み出した単語が示す圧縮符号および設定されたブロックＩＤに対応するビットマップを１に更新する（ステップＳ１０６）。一例として、ブロックＩＤが１であり、単語が単語ａ１である場合とする。すると、圧縮暗号化部１００ａは、ブロックＩＤが１を示す列と単語ａ１の圧縮符号を示す行とが交わるビットに１を設定する。
【００６６】
圧縮暗号化部１００ａは、圧縮符号を圧縮バッファＡ２に書き込むと、ブロック長を超えるか否かを判定する（ステップＳ１０７）。圧縮符号を圧縮バッファＡ２に書き込むと、ブロック長を超えないと判定した場合には（ステップＳ１０７；Ｎｏ）、圧縮暗号化部１００ａは、圧縮符号を圧縮バッファＡ２に書き込む（ステップＳ１０８）。そして、圧縮暗号化部１００ａは、ステップＳ１１４に移行する。
【００６７】
一方、圧縮符号を圧縮バッファＡ２に書き込むと、ブロック長を超えると判定した場合には（ステップＳ１０７；Ｙｅｓ）、圧縮暗号化部１００ａは、圧縮符号を圧縮バッファＡ２に書き込む処理をしない。そして、圧縮暗号化部１００ａは、圧縮バッファＡ２に圧縮符号数およびパディングを設定する（ステップＳ１０９）。例えば、圧縮暗号化部１００ａは、圧縮バッファＡ２に既に書き込まれた圧縮データの数を示す圧縮符号数を圧縮バッファの先頭に書き込む。圧縮暗号化部１００ａは、パディングを用いて圧縮バッファの残りの領域を補完する。この結果、ブロックのデータが圧縮バッファＡ２に生成される。
【００６８】
圧縮暗号化部１００ａは、圧縮バッファＡ２のデータを圧縮ファイルＦ２に書き込む（ステップＳ１１０）。例えば、圧縮暗号化部１００ａは、圧縮バッファＡ２のデータを圧縮ブロックとして記憶領域Ａ３に書き込む。記憶領域Ａ３は、圧縮ファイルＦ２内の圧縮データを示す記憶領域である。
【００６９】
圧縮暗号化部１００ａは、ブロックアドレステーブルＴ２に、ブロックＩＤが示すブロックの位置およびブロックＩＤを更新する（ステップＳ１１１）。すなわち、圧縮暗号化部１００ａは、現に記憶領域Ａ３に書き込んだ圧縮ブロックの、記憶領域Ａ３内の位置およびブロックＩＤをブロックアドレステーブルＴ２に追加する。
【００７０】
圧縮暗号化部１００ａは、ブロックＩＤを１加算し（ステップＳ１１２）、圧縮バッファＡ２を初期化し、書き込む処理をしなかった圧縮符号を圧縮バッファに書き込む（ステップＳ１１３）。そして、圧縮暗号化部１００ａは、ステップＳ１１４に移行する。
【００７１】
ステップＳ１１４において、圧縮暗号化部１００ａは、ファイルの終点か否かを判定する（ステップＳ１１４）。ファイルの終点でない場合には（ステップＳ１１４；Ｎｏ）、圧縮暗号化部１００ａは、次の単語を読み出すべく、ステップＳ１０４に移行する。
【００７２】
一方、ファイルの終点である場合には（ステップＳ１１４；Ｙｅｓ）、圧縮暗号化部１００ａは、圧縮バッファＡ２に圧縮符号数およびパディングを設定する（ステップＳ１１５）。例えば、圧縮暗号化部１００ａは、圧縮バッファＡ２に既に書き込まれた圧縮データの数を示す圧縮符号数を圧縮バッファの先頭に書き込む。圧縮暗号化部１００ａは、パディングを用いて圧縮バッファの残りの領域を補完する。この結果、ブロックのデータが圧縮バッファＡ２に生成される。
【００７３】
圧縮暗号化部１００ａは、圧縮バッファＡ２のデータを圧縮ファイルＦ２に書き込む（ステップＳ１１６）。例えば、圧縮暗号化部１００ａは、圧縮バッファＡ２のデータを圧縮ブロックとして記憶領域Ａ３に書き込む。
【００７４】
圧縮暗号化部１００ａは、ブロックアドレステーブルＴ２に、ブロックＩＤが示すブロックの位置およびブロックＩＤを更新する（ステップＳ１１７）。すなわち、圧縮暗号化部１００ａは、現に記憶領域Ａ３に書き込んだ圧縮ブロックの、記憶領域Ａ３内の位置およびブロックＩＤをブロックアドレステーブルＴ２に追加する。そして、圧縮暗号化部１００ａは、ファイルアドレステーブルＴ１に、現ファイルの対応する位置およびブロックアドレステーブルＴ２へのポインタを更新する（ステップＳ１１８）。すなわち、圧縮暗号化部１００ａは、現ファイルにおける記憶領域Ａ３内の先頭の圧縮ブロックの位置および現ファイルにおけるブロックアドレステーブルＴ２へのポインタを追加する。
【００７５】
圧縮暗号化部１００ａは、未処理のファイルがあるか否かを判定する（ステップＳ１１９）。未処理のファイルがあると判定した場合には（ステップＳ１１９；Ｙｅｓ）、圧縮暗号化部１００ａは、ブロックＩＤを１加算する（ステップＳ１２０）。そして、圧縮暗号化部１００ａは、次のファイルを読み出すべく、ステップＳ１０３に移行する。
【００７６】
一方、未処理のファイルがないと判定した場合には（ステップＳ１１９；Ｎｏ）、圧縮暗号化部１００ａは、圧縮ファイルＦ２のトレーラ部を生成する（ステップＳ１２１）。例えば、圧縮暗号化部１００ａは、ビットマップ型インデックスＴ３、ファイルアドレステーブルＴ１およびブロックアドレステーブルＴ２を圧縮ファイルＦ２のトレーラ部に格納する。そして、圧縮暗号化部１００ａは、圧縮ファイルＦ２のヘッダ部に、トレーラ部へのポインタおよび圧縮データへのポインタを設定する。トレーラ部へのポインタには、ビットマップ型インデックスＴ３へのポインタ、ファイルアドレステーブルＴ１へのポインタおよびブロックアドレステーブルＴ２へのポインタが含まれる。
【００７７】
圧縮暗号化部１００ａは、圧縮ファイルＦ２の暗号化処理を実行し（ステップＳ１２２）、圧縮暗号化処理を終了する。なお、暗号化処理の処理手順は、後述する。
【００７８】
図１２Ｂは、圧縮暗号化部１００ａの処理手順のうち暗号化処理の処理手順を示すフローチャートである。図１２Ｂに示すように、圧縮暗号化部１００ａは、圧縮ファイルＦ２を読み出し（ステップＳ１３１）、ブロック（圧縮ブロック）を読み出す（ステップＳ１３２）。
【００７９】
圧縮暗号化部１００ａは、読み出したブロックが先頭であるか否かを判定する（ステップＳ１３３）。圧縮暗号化部１００ａは、読み出したブロックが先頭である場合には（ステップＳ１３３；Ｙｅｓ）、当該ブロックのデータと初期値ＩＶとのＥＯＲ演算を行う（ステップＳ１３４）。一方、圧縮暗号化部１００ａは、読み出したブロックが先頭でない場合には（ステップＳ１３３；Ｎｏ）、当該ブロックのデータと１つ前の暗号化されたブロックのデータとのＥＯＲ演算を行う（ステップＳ１３５）。
【００８０】
続いて、圧縮暗号化部１００ａは、ＥＯＲ演算結果をアフィン暗号化関数（Ｅｋ）で演算し、暗号化する（ステップＳ１３６）。この結果、圧縮暗号化部１００ａは、読み出したブロックを暗号化したブロック（圧縮暗号化ブロック）を生成する。そして、圧縮暗号化部１００ａは、圧縮暗号化ファイルＦ３に、圧縮暗号化ブロックのデータを書き込む（ステップＳ１３７）。
【００８１】
圧縮暗号化部１００ａは、圧縮ファイルＦ２の終点か否かを判定する（ステップＳ１３８）。圧縮暗号化部１００ａは、圧縮ファイルＦ２の終点でない場合には（ステップＳ１３８；Ｎｏ）、次のブロックを読み出すべく、ステップＳ１３２に移行する。圧縮暗号化部１００ａは、圧縮ファイルＦ２の終点の場合には（ステップＳ１３８，Ｙｅｓ）、暗号化処理を終了する。
【００８２】
図１３は、本実施例に係る部分復号化伸長部の処理手順を示すフローチャートである。図１３に示すように、部分復号化伸長部１００ｂは、文字列を指定したリード（読み出し）要求があったか否かを判定する（ステップＳ１４１）。部分復号化伸長部１００ｂは、読み出し要求がなかった場合には（ステップＳ１４１；Ｎｏ）、当該読み出し要求があるまで、判定処理を繰り返す。
【００８３】
一方、部分復号化伸長部１００ｂは、読み出し要求があった場合には（ステップＳ１４１；Ｙｅｓ）、前処理を実行する（ステップＳ１４２）。ステップＳ１４２の前処理において、部分復号化伸長部１００ｂは、例えば、記憶領域Ｂ１〜Ｂ５を記憶部１００ｃに確保する。
【００８４】
部分復号化伸長部１００ｂは、トレーラ部を復号化する（ステップＳ１４３）。例えば、部分復号化伸長部１００ｂは、ヘッダ部に記憶されたビットマップ型インデックスＴ３へのポインタが指す位置のブロックを復号化する。部分復号化伸長部１００ｂは、ヘッダ部に記憶されたファイルアドレステーブルＴ１へのポインタが指す位置のブロックを復号化する。部分復号化伸長部１００ｂは、ヘッダ部に記憶されたブロックアドレステーブルＴ２へのポインタが指す位置のブロックを復号化する。
【００８５】
部分復号化伸長部１００ｂは、指定された文字列を形態素解析する（ステップＳ１４４）。すなわち、部分復号化伸長部１００ｂは、指定された文字列を単語に分割する。そして、部分復号化伸長部１００ｂは、ビットマップ型インデックスＴ３による対象ブロックＩＤを絞り込む（ステップＳ１４５）。例えば、部分復号化伸長部１００ｂは、指定された文字列を構成する単語がそれぞれ示す圧縮符号に対応するそれぞれのビットマップが全て「１」を示すブロックＩＤを対象ブロックＩＤとして特定する。すなわち、部分復号化伸長部１００ｂは、特定された位置のブロックを伸長対象として特定する。
【００８６】
部分復号化伸長部１００ｂは、ブロックアドレステーブルＴ２から対象ブロックＩＤに対応するブロック（圧縮暗号化ブロック）の位置を特定する（ステップＳ１４６）。すなわち、部分復号化伸長部１００ｂは、対象ブロックＩＤが示すブロック（圧縮暗号化ブロック）を伸長対象として特定する。
【００８７】
部分復号化伸長部１００ｂは、圧縮暗号化ファイルＦ３から、特定された位置のブロックと１つ前のブロックを読み出す（ステップＳ１４７）。部分復号化伸長部１００ｂは、前ブロックを用いて伸長対象として特定されたブロックを復号化する（ステップＳ１４８）。そして、部分復号化伸長部１００ｂは、復号化したブロックの伸長処理を実行する（ステップＳ１４９）。
【００８８】
部分復号化伸長部１００ｂは、復号化したブロックの伸長処理を実行し（ステップＳ１４９）、伸長処理の結果を記憶領域Ｂ４（伸長バッファ）に書き込む。部分復号化伸長部１００ｂは、伸長バッファから、指定された文字列を抽出する（ステップＳ１５０）。例えば、部分復号化伸長部１００ｂは、記憶領域Ｂ４に格納された伸長データと、指定された文字列とを照合し、一致した領域のデータを抽出する。
【００８９】
そして、部分復号化伸長部１００ｂは、抽出された文字列をアプリのバッファＢ５に出力する（ステップＳ１５１）。そして、部分復号化伸長部１００ｂは、部分復号化伸長処理を終了する。
【００９０】
なお、実施例では、部分復号化伸長部１００ｂは、入力文字列を形態素解析し、入力文字列を構成する単語の圧縮符号が全て存在するブロックＩＤを圧縮暗号化ファイルＦ３内のビットマップ型インデックスＴ３により絞り込む。部分復号化伸長部１００ｂは、絞り込んだブロックＩＤが示すブロック（暗号化ブロック）を圧縮暗号化ファイルＦ３から読み出し、復号化し、伸長し、伸長した伸長データと入力文字列とを照合する。ここで、入力文字列が複数存在する場合がある。かかる場合には、部分復号化伸長部１００ｂは、複数の入力文字列をそれぞれ形態素解析し、各入力文字列に対応するブロックＩＤを圧縮暗号化ファイルＦ３内のビットマップ型インデックスＴ３により絞り込む。そして、部分復号化伸長部１００ｂは、各入力文字列における照合処理をマルチスレッドで行っても良い。すなわち、部分復号化伸長部１００ｂは、１つの入力文字列Ａについて、絞り込んだブロックＩＤが示すブロック（暗号化ブロック）を圧縮暗号化ファイルＦ３から読み出し、復号化し、伸長し、入力文字列と照合する。部分復号化伸長部１００ｂは、この入力文字列Ａの復号化以降の照合処理を行うタイミングで、次の入力文字列Ｂについて絞り込んだブロックＩＤが示すブロック（暗号化ブロック）を圧縮暗号化ファイルＦ３から読み出す。部分復号化伸長部１００ｂは、この入力文字列Ｂの復号化以降の照合処理を行うタイミングで、次の入力文字列Ｃについて絞り込んだブロックＩＤが示すブロック（暗号化ブロック）を圧縮暗号化ファイルＦ３から読み出す。このようにマルチスレッドを利用することで、部分復号化伸長部１００ｂは、入力文字列が複数ある場合であっても、照合処理を並行することで、照合処理の短縮をはかることができる。
【００９１】
また、実施例では、圧縮暗号化部１００ａは、圧縮化処理と暗号化処理とを含むものとして説明した。しかしながら、部分復号化伸長部１００ｂは、これに限定されず、暗号化処理を含まない圧縮化処理だけの場合であっても良い。かかる場合には、部分復号化伸長部１００ｂは、複数のファイルを特定の符号化形式で順次符号化し、符号化したデータを結合した符号化データを複数のブロックに分割し、分割した複数のブロックそれぞれに対するビットマップ型インデックスＴ３を生成し、圧縮ファイルＦ２を生成する。そして、部分復号化伸長部１００ｂは、入力文字列を形態素解析し、入力文字列を構成する単語が全て存在するブロックＩＤを圧縮ファイルＦ２内のビットマップ型インデックスＴ３により絞り込む。部分復号化伸長部１００ｂは、絞り込んだブロックＩＤが示すブロック（圧縮ブロック）を伸長し、伸長した伸長データと入力文字列とを照合すれば良い。
【００９２】
次に、本実施例に係る情報処理装置１００の効果について説明する。情報処理装置１００は、複数のファイルを特定の符号化形式で符号化した複数の符号化データを生成する。情報処理装置１００は、複数の符号化データを結合した結合符号化データを複数の固定長のブロックに分割した、複数の符号化ブロックを生成する。情報処理装置１００は、複数の符号化ブロックそれぞれに対するインデックスを生成する。このため、情報処理装置１００は、複数のファイルを共通に符号化して結合された符号化データに対して文字列を検索する場合、ブロック毎に生成されたインデックスを用いることで、検索対象のブロックを伸長して照合することが可能となり、高速に照合できる。
【００９３】
また、本実施例に係る情報処理装置１００は、複数の符号化ブロックそれぞれについて、特定の符号化形式において用いられる複数の要素それぞれに対する存否情報を示すインデックスを生成する。このため、情報処理装置１００は、インデックスをブロック毎に生成することで、ファイル毎に生成する場合と比較して、ファイルサイズに依ってインデックスの効率が低下することを抑止できる。
【００９４】
また、本実施例に係る情報処理装置１００は、符号化データ内における、分割した複数の固定長のブロックそれぞれの先頭符号の位置とブロックに対応する識別子とを対応付けた対応情報を生成する。情報処理装置１００は、複数のブロックに対応する識別子それぞれについて、インデックスを生成する。このため、情報処理装置１００は、生成されたインデックスから所定のブロックに対応する識別子を特定すれば、対応情報を用いることで特定された識別子に対応付けられたブロックを高速に把握することができる。この結果、情報処理装置１００は、高速にブロックを伸長することが可能となる。
【００９５】
また、本実施例に係る情報処理装置１００は、インデックス、対応情報および複数のファイルそれぞれの符号化に関する情報を含むトレーラ情報を生成する。このため、情報処理装置１００は、トレーラ情報を用いて符号化データを復号化し、文字列を検索することが可能となる。
【００９６】
また、本実施例に係る情報処理装置１００は、ブロックのサイズを、データを記憶する記憶装置におけるブロックのサイズと一致、または、整数倍に対応させる。このため、情報処理装置１００は、ブロックに係るデータの読み出しを高速に行うことができる。
【００９７】
下記に、本実施形態に用いられるハードウェア及びソフトウェアについて説明する。図１４は、コンピュータ１のハードウェア構成例を示す図である。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）３０２、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Ｓｔｏｒａｇｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【００９８】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  ＲＡＭ）やＤＲＡＭ（Ｄｙｎａｍｉｃ  ＲＡＭ）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）などのフラッシュメモリ、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｃ）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【００９９】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【０１００】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていても良いし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であっても良い。
【０１０１】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って圧縮暗号化部１００ａの処理または部分復号化伸長部１００ｂの処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１００ｃの機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（圧縮対象のソースファイルＦ１、圧縮ファイルＦ２、圧縮暗号化ファイルＦ３など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図１５を用いて説明する。
【０１０２】
図１５は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ１において、図１５に示すハードウェア群２１（３０１〜３１２）の制御を行なうＯＳ（オペレーティング・システム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ハードウェア群２１の制御・管理が行なわれることにより、アプリケーションプログラム２４やミドルウェア２３に従った処理がハードウェア群２１で実行される。さらに、コンピュータ１において、ミドルウェア２３またはアプリケーションプログラム２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【０１０３】
プロセッサ３０１が、圧縮暗号化機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）圧縮暗号化部１００ａの機能が実現される。また、プロセッサ３０１が、部分復号化伸張機能が呼び出された場合に、ミドルウェア２３またはアプリケーションプログラム２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてハードウェア群２１を制御して）部分復号化伸長部１００ｂの機能が実現される。圧縮暗号化機能および部分復号化伸張機能は、それぞれアプリケーションプログラム２４自体に含まれても良いし、アプリケーションプログラム２４に従って呼び出されることで実行されるミドルウェア２３の一部であっても良い。
【０１０４】
図１６は、実施形態のシステムにおける装置の構成例を示す。図１６のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【０１０５】
図９に示す圧縮暗号化部１００ａと部分復号化伸張部１００ｂとは、図１６に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれても良い。コンピュータ１ｂが圧縮暗号化部１００ａを含み、コンピュータ１ａが部分復号化伸張部１００ｂを含んでも良いし、コンピュータ１ａが圧縮暗号化部１００ａを含み、コンピュータ１ｂが部分復号化伸張部１００ｂを含んでも良い。また、コンピュータ１ａとコンピュータ１ｂとの双方が、圧縮暗号化部１００ａおよび部分復号化伸張部１００ｂを備えても良い。
【０１０６】
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。圧縮暗号化処理の対象は、ファイル内のデータ以外にも、システムから出力される監視メッセージなどでも良い。例えば、バッファに順次格納される監視メッセージを上述の圧縮暗号化処理により圧縮および暗号化し、ログファイルとして格納するなどの処理が行なわれる。また、例えば、データベース内のページ単位に圧縮および暗号化が行なわれても良いし、複数のページをまとめた単位で圧縮および暗号化が行なわれても良い。
【０１０７】
また、上述の圧縮暗号化処理の対象となるデータは、上述の通り、文字情報に限定されるものでない。数値のみの情報であっても良いし、画像・音声などのデータに対して上述の圧縮暗号化処理を用いても良い。例えば、音声合成により得られるデータを多量に含むファイルなどは、データ内に繰り返しを多く含むため動的辞書により圧縮率が向上することが見込まれる。当然その一部のみが利用される場合には、部分復号化伸張により余分な伸張処理が抑制される。また、固定カメラにより撮影された動画像についても各フレームの画像が似たものになることから繰り返しが多く含まれる。そのため、上述の圧縮暗号化処理を適用することにより、文書データや音声データと同様の効果を得ることができる。
【符号の説明】
【０１０８】
１００  情報処理装置
１００ａ  圧縮暗号化部
１００ｂ  部分復号化伸長部
１００ｃ  記憶部
１０１  ファイルリード部
１０２  圧縮部
１０３  ブロックライト部
１０４  インデックス生成部
１０５  インデックスライト部
１０６  暗号化部
１０７  ファイルライト部
１１０  ブロック特定部
１１１  部分復号化部
１１２  部分伸長部
１１３  照合部
【図１】
0006679874.tif 000002
【図２】
0006679874.tif 000003
【図３】
0006679874.tif 000004
【図４】
0006679874.tif 000005
【図５】
0006679874.tif 000006
【図６】
0006679874.tif 000007
【図７】
0006679874.tif 000008
【図８】
0006679874.tif 000009
【図９】
0006679874.tif 000010
【図１０】
0006679874.tif 000011
【図１１】
0006679874.tif 000012
【図１２Ａ】
0006679874.tif 000013
【図１２Ｂ】
0006679874.tif 000014
【図１３】
0006679874.tif 000015
【図１４】
0006679874.tif 000016
【図１５】
0006679874.tif 000017
【図１６】
0006679874.tif 000018