【実施例1】
【0012】
[全体構成]
まず、実施例1にかかる情報処理装置10(
図2を参照)が実行する処理について説明する。
図1は、実施例1にかかる復元処理を説明する図である。
図1に示すように、情報処理装置10は、圧縮符号に対応するビットマップ型転置インデックス(以下では、単にビットマップまたはハッシュ化ビットマップなどと記載する場合がある)を取得し、このビットマップ型転置インデックスを用いた圧縮符号の転置バッファリング処理を実行して、転置用バッファに圧縮符号を配置する。その後、情報処理装置10は、静的辞書および動的辞書を用いて、転置用バッファに圧縮符号を、格納されている順で変換することで、元のテキストデータを復元する。
【0013】
ここで、ビットマップ型転置インデックスは、符号化対象の文章データから生成されたインデックスであり、文章データに登場する各単語に対応する圧縮符号と文書データにおける出現位置とを対応付けたインデックスである。また、静的辞書は、出現頻度の高い単語について、当該単語に予め割当てられた圧縮符号を記載する辞書であり、高頻度の単語と圧縮符号とを対応付けた表である。動的辞書は、出現頻度の低い単語について、当該単語に割当てられた圧縮符号を記載する辞書であり、低頻度の単語と圧縮符号とを対応付けた表である。すなわち、動的辞書は、文章データに登場する単語のうち、静的辞書に登録されていない各未登録単語に対して、文章データに登場したときに動的に割当てられる圧縮符号と未登録単語との対応付けを記憶する。また、転置用バッファは、3バイトの固定長で区切ったバッファであり、ビットマップ型転置インデックスと同じバイト数分の長さを有するバッファである。
【0014】
このような状態において、情報処理装置10は、文書データに出現した単語1、単語2・・・単語nのそれぞれに対応する圧縮符号A、圧縮符号B・・・圧縮符号Nのそれぞれに対応する各ビットマップ型転置インデックスを取得する。続いて、情報処理装置10は、3バイトずつで区切った転置用バッファを用意する。
【0015】
そして、情報処理装置10は、各単語の圧縮符号に対応する各ビットマップ型転置インデックスにしたがって、対象文章データにおける出現位置に対応する転置用バッファに、出現した単語の圧縮符号を転置する。例えば、情報処理装置10は、単語1(圧縮符号A)が1番目と3番目に出現し、単語2(圧縮符号B)が2番目に出現する場合、転置用バッファの1番目に圧縮符号Aを格納し、2番目に圧縮符号Bを格納し、3番目に圧縮符号Aを格納する。
【0016】
その後、情報処理装置10は、静的辞書と動的辞書とを参照して、転置用バッファに格納される順で、格納される各圧縮符号を元の単語に変換する。上記例で説明すると、情報処理装置10は、転置バッファの1番目に格納される圧縮符号Aを単語1に変換し、2番目に格納される圧縮符号Bを単語2に変換し、3番目に格納される圧縮符号Aを単語1に変換し、これらを格納されている順で「単語1、単語2、単語1・・・」と配置することで、元の文章データを復元することができる。
【0017】
このように、情報処理装置10は、テキストデータである文書データ多より生成された、文書データに含まれる単語それぞれを文書データにおける位置と対応づけたインデックスを参照し、文書データにおける位置の順でインデックスで対応づけられた単語を配置する。したがって、情報処理装置10は、ビットマップ型転置インデックスから元データを生成することができる。なお、実施例では、単語の圧縮符号に対応するビットマップ型転置インデックスを例にして説明するが、これに限定されるものではなく、文書データから得られる形態素または単語そのものに対応するビットマップ型転置インデックスであっても、同様に処理することができる。なお、その場合は、転置バッファへの格納処理の前に、静的辞書や動的辞書を用いて形態素または単語を圧縮符号へ変換する。
【0018】
[機能構成]
図2は、実施例1にかかる情報処理装置10の機能構成を示す機能ブロック図である。
図2に示すように、情報処理装置10は、通信部11、記憶部12、制御部20を有する。
【0019】
通信部11は、他の装置の間の通信を制御する処理部であり、例えばネットワークインタフェースカードなどである。例えば、通信部11は、他の情報処理装置10からビットマップ型転置インデックスなどを受信する。
【0020】
記憶部12は、プログラムやデータを記憶する記憶装置の一例であり、例えばメモリやハードディスクなどである。この記憶部12は、転置インデックスDB13、静的辞書14、動的辞書15などを記憶する。
【0021】
転置インデックスDB13は、符号化対象の文章データから生成されたインデックスであり、文章データに登場する各単語に対応する圧縮符号と文書データにおける出現位置とを対応付けた、オフセット付きのビットマップ型転置インデックスを記憶するデータベースである。
【0022】
ここで、
図3を用いて、オフセット付きのビットマップ型転置インデックスの生成例について説明する。
図3は、ビットマップ型転置インデックスに関するサイズ縮小について説明する図である。なお、ここでは、ビットマップ型転置インデックスを生成する装置が、情報処理装置10とは異なるインデックス生成装置を例にして説明するが、情報処理装置10が生成することもできる。
【0023】
図3を用いて、オフセット付きのビットマップ型転置インデックスの生成例について説明する。
図3に示すように、オフセット付きのビットマップ型転置インデックスの生成処理は、ビットマップ型インデックスのサイズ縮小を実現するために、ビットマップ型インデックスからハッシュ化インデックスを生成する。すなわち、ビットマップ型転置インデックスは、隣接した複数のハッシュ値(底)を基に、2次元(単語の軸とファイルの軸)にハッシュ化を適用したハッシュ化インデックスを生成する。
【0024】
ここでいうビットマップ型インデックスとは、テキストデータに含まれる単語について、ファイルごとの存否をインデックス化したビットマップのことをいう。
図3に示すように、ビットマップ型インデックスのX軸はオフセットを表し、ビットマップ型インデックスのY軸は単語IDを表す。すなわち、ビットマップ型インデックスは、単語IDが示す単語のあるファイルにおける存否を表す。一例として、ある単語IDに対応するビットマップbi1が示されている。ある単語IDが示す単語がファイルに存在する場合には、当該単語のファイルの存否として2進数の「1」が設定され、当該単語がファイルに存在しない場合には、当該単語のファイルの存否として2進数の「0」が設定される。
【0025】
例えば、
図3に示すように、インデックス生成装置は、単語IDに対応するビットマップそれぞれについてハッシュ関数を適用した複数のハッシュ化ビットマップを生成する。ここでは、インデックス生成装置は、32ビットレジスタを想定し、一例として29と31のハッシュ値(底)を基に、各ビットマップをハッシュ化する。具体的には、インデックス生成装置は、1つの底のハッシュ化ビットマップについて、単語IDに対応するビットマップの各ビットの位置を底で割った余りの位置に、当該ビットマップの各ビットの値を設定する。
【0026】
一例として、インデックス生成装置は、底29のハッシュ化ビットマップh11について、ビットマップbi1の各ビットの位置を底29で割った余りの位置に、ビットマップbi1の各ビットの値を設定する。ビットマップbi1の35ビット目の位置のビット値「1」は、ハッシュ化ビットマップh11の6ビット目に設定される。ビットマップbi1の42ビット目の位置のビット値「1」は、ハッシュ化ビットマップh11の13ビット目に設定される。インデックス生成装置は、底31のハッシュ化ビットマップh12について、ビットマップbi1の各ビットの位置を底31で割った余りの位置に、ビットマップbi1の各ビットの値を設定する。ビットマップbi1の35ビット目の位置のビット値「1」は、ハッシュ化ビットマップh12の4ビット目に設定される。ビットマップbi1の42ビット目の位置のビット値「1」は、ハッシュ化ビットマップh12の11ビット目に設定される。すなわち、インデックス生成装置は、ビットマップの0ビット目からの各ビットを順番にハッシュ化ビットマップの0ビット目から設定し、(底−1)ビット目まで設定する。そして、インデックス生成装置は、再度折り返してハッシュ化ビットマップの0ビット目から既にハッシュ化ビットマップに設定された値とOR演算した値を設定する。
【0027】
より詳細に説明すると、一例として、インデックスにビットマップ50が含まれるものとし、かかるビットマップ50をハッシュ化する場合について説明する。インデックス生成装置は、ビットマップ50から、底29のビットマップ50aと、底31のビットマップ50bを生成する。ビットマップ50aは、ビットマップ50に対して、オフセット29毎に区切りを設定し、設定した区切りを先頭とするフラグ「1」のオフセットを、ビットマップ50aのオフセット0〜28のフラグで表現する。
【0028】
インデックス生成装置は、ビットマップ50のオフセット0〜28までの情報を、ビットマップ50aにコピーする。インデックス生成装置は、ビットマップ50aの29以降のオフセットの情報を下記の様に処理する。
【0029】
ビットマップ50のオフセット「35」にフラグ「1」が立っている。オフセット「35」は、オフセット「28+7」であるため、インデックス生成装置は、ビットマップ50aのオフセット「6」に「(1)」を立てる。なお、オフセットの1番目を0としている。ビットマップ50のオフセット「42」にフラグ「1」が立っている。オフセット「42」は、オフセット「28+14」であるため、インデックス生成装置は、ビットマップ50aのオフセット「11」にフラグ「(1)」を立てる。
【0030】
ビットマップ50bは、ビットマップ50に対して、オフセット31毎に区切りを設定し、設定した区切りを先頭とするフラグ「1」のオフセットを、ビットマップ50bのオフセット0〜30のフラグで表現する。
【0031】
ビットマップ50のオフセット「35」にフラグ「1」が立っている。オフセット「35」は、オフセット「30+5」であるため、インデックス生成装置は、ビットマップ50bのオフセット「4」に「(1)」を立てる。なお、オフセットの1番目を0としている。ビットマップ50のオフセット「42」にフラグ「1」が立っている。オフセット「42」は、オフセット「30+12」であるため、インデックス生成装置は、ビットマップ50bのオフセット「12」にフラグ「(1)」を立てる。
【0032】
インデックス生成装置は、上記処理を実行することで、ビットマップ50からビットマップ50a、50bを生成する。このビットマップ50a、50bが、ビットマップ50をハッシュ化した結果となる。ここでは、ビットマップ50の長さが0〜43である場合について説明したが、ビットマップ50の長さが43以上になる場合でも、ビットマップ50に設定されたフラグ「1」を、ビットマップ50aおよびビットマップ50bで表現することができる。
【0033】
このようにして、インデックス生成装置は、各単語について、上述した手法により生成されたハッシュ化ビットマップを生成する。そして、転置インデックスDB13は、単語ごとのハッシュ化ビットマップを記憶する。ただし、上述したように、サイズ縮小されたものではなく、通常のサイズのビットマップ型転置インデックスを用いることもできる。また、サイズ縮小の手法は、公知の手法を採用することができる。
【0034】
図2に戻り、静的辞書14は、出現頻度の高い単語と、当該単語に予め割当てられた圧縮符号との対応付けを記憶するデータベースなどである。動的辞書15は、静的辞書14に登録されていない出現頻度の低い単語であって、符号化対象の文書データに登場した単語と、当該単語に割当てられた圧縮符号との対応付けを記憶するデータベースである。
【0035】
図4は、静的辞書14および動的辞書15を説明する図である。
図4に示す辞書は、静的辞書14および動的辞書15をあわせた辞書であり、圧縮符号とビットマップ型転置インデックスのY軸は、1対1に対応付けられている。
図4に示す横軸の「0*h」から「9*h」までが静的辞書14に対応し、「A*h」から「F*h」までが動的辞書15に対応する。
【0036】
図4の上部の横方向の項目は、最初の1バイト目を0〜Fの16進表記で示しており、「*」は、2バイト目を示している。例えば、「1*h」は、1バイト目が2進数表記で「00000001」であることを示す。左側の縦方向の項目は、2バイト目を0〜Fの16進表記で示しており、「*」は、1バイト目を示している。例えば、「*2h」は、2バイト目が2進数表記で「00000010」であることを示す。
【0037】
「0*h」、「1*h」の符号については、1バイトの符号であり、各階層とも、共通の制御コードが対応付けられている。また、「2*h」〜「3*h」の符号については、1バイトの符号であり、高頻度に出現する単語の中でも特に頻度の高い超高頻度単語(英単語)が予め対応付けられており、「4*h」〜「5*h」の符号については、1バイトの符号であり、高頻度に出現する単語の中でも特に頻度の高い超高頻度単語(日本語)が予め対応付けられている。
【0038】
また、「6*h」〜「7*h」の符号については、2バイトの符号であり、高頻度に出現する単語(英単語)が予め対応付けられており、「8*h」〜「9*h」の符号については、2バイトの符号であり、高頻度に出現する単語(日本語)が予め対応付けられている。「A*h」〜「F*h」の符号については、2バイトまたは3バイトの符号であり、低頻度単語が出現した際に符号を動的に割り当てる。なお、「E*h」、「F*h」は、符号の不足に対応するため、3バイトの符号としている。
【0039】
制御部20は、情報処理装置10全体を司る処理部であり、例えばプロセッサなどである。制御部20は、取得部21と復元部22を実行する。なお、取得部21と復元部22は、プロセッサが有する電子回路の一例やプロセッサが実行するプロセスの一例である。
【0040】
取得部21は、インデックス生成装置などの他のコンピュータから、オフセット付きのビットマップ型転置インデックスを取得する処理部である。具体的には、取得部21は、
図3で説明した手法で生成された上記ビットマップ型転置インデックスを取得して、転置インデックスDB13に格納する。
【0041】
復元部22は、転置処理部23と復元処理部24を有し、転置インデックスDB13に格納されるビットマップ型転置インデックスから、元の文書データの復元を実行する処理部である。具体的には、復元部22によって、ハッシュ化されているビットマップ型転置インデックスを復元した後、転置処理部23と復元処理部24を用いて、元の文書データの復元が実行される。
【0042】
ここで、
図5と
図6を用いて、ハッシュ化されているビットマップ型転置インデックスの復元について説明する。
図5は、ハッシュ化ビットマップ型転置インデックスの展開について説明する図であり、
図6は、ハッシュ化ビットマップ型転置インデックスのAND演算について説明する図である。ここでは一例として、ビットマップ50aとビットマップ50bとを基にして、ビットマップ50を復元する処理について説明する。ビットマップ50、50a、50bは、
図3で説明したものに対応する。
【0043】
図5に示すように、復元部22は、底29のビットマップ50aを基にして、ビットマップ51aを生成する。ビットマップ51aのオフセット0〜28のフラグの情報は、ビットマップ50aのオフセット0〜28のフラグの情報と同様となる。ビットマップ51aのオフセット29以降のフラグの情報は、ビットマップ50aのオフセット0〜28のフラグの情報の繰り返しとなる。
【0044】
同様に、復元部22は、底31のビットマップ50bを基にして、ビットマップ51bを生成する。ビットマップ51bのオフセット0〜30のフラグの情報は、ビットマップ50bのオフセット0〜30のフラグの情報と同様となる。ビットマップ51bのオフセット31以降のフラグの情報は、ビットマップ50bのオフセット0〜30のフラグの情報の繰り返しとなる。
【0045】
その後、
図6に示すように、復元部22は、ビットマップ51aとビットマップ51bとのAND演算を実行することで、ビットマップ50を生成する。
図6に示す例では、オフセット「0、5、11、18、25、35、42」において、ビットマップ51aおよびビットマップ51bのフラグが「1」となっている。このため、ビットマップ50のオフセット「0、5、11、18、25、35、42」のフラグが「1」となる。このビットマップ50が、復元されたビットマップとなる。復元部22は、他のビットマップについても同様の処理を繰り返し実行することで、各ビットマップを復元し、インデックスを生成する。
【0046】
転置処理部23は、該当の単語の圧縮符号を、ビットマップ型転置インデックスのビットマップをもとに、転置バッファに転置する処理部である。転置処理部23は、動的辞書15で管理される符号の最大バイト数である3バイトで区切った転置バッファをメモリ等に確保し、単語が出現した位置に対応する転置バッファに、該当単語の圧縮符号を格納する。
【0047】
図7は、圧縮符号の転置を説明する図である。
図7に示すように、転置処理部23は、圧縮符号「20h」のオフセット(位置)が0と5に「1」が格納されているので、転置バッファの先頭である(0)と6番目である(5)に圧縮符号「20h」を格納する。なお、圧縮符号「20h」が格納された領域内で、使用されていない領域はNULLとなる。同様に、転置処理部23は、圧縮符号「A000h」のオフセット(位置)が1と6に「1」が格納されているので、転置バッファの2番目である(1)と7番目である(6)に圧縮符号「A000h」を格納する。なお、圧縮符号「A000h」が格納された領域内で、使用されていない領域はNULLとなる。
【0048】
このようにして、転置処理部23は、各圧縮符号のビットマップ型転置インデックスに基づいて、3バイト区切りの転置バッファの先頭から順に、文書データ内の出現順で該当単語の圧縮符号を格納することができる。そして、転置処理部23は、圧縮符号が格納された転置バッファを復元処理部24に出力する。
【0049】
復元処理部24は、圧縮符号が格納された転置バッファから、元の文書データを復元する処理部である。具体的には、復元処理部24は、転置バッファ内のNULLを削除して、圧縮符号だけを抽出した圧縮データを生成する。その後、復元処理部24は、各圧縮符号を、静的辞書14または動的辞書15を用いて元の単語に復元することで、文書データの復元を実行する。なお、圧縮データにNULLを挿入して、転置バッファの状態を復元することもできる。
【0050】
図8は、圧縮データの生成および元の文書データの復元を説明する図である。
図8に示すように、復元処理部24は、転置バッファの先頭である(0)のバッファから順に(n)のバッファまで、「NULL」を削除して、圧縮符号「20h」、「A000h」、「「B000h」・・・を順に抽出する。そして、復元処理部24は、抽出した圧縮符号を連結させた圧縮データ「20h,A000h,B000h,・・・」を生成する。
【0051】
その後、復元処理部24は、静的辞書14および動的辞書15を参照して、圧縮データ「20h,A000h,B000h,・・・」内の各圧縮符号に対応する単語を特定し、圧縮データを単語に変換した「単語1、単語2、単語3・・・」を生成する。そして、復元処理部24は、変換して得られた単語1、単語2、単語3・・を連結させて、元の文書データを復元する。
【0052】
[処理の流れ]
図9は、処理の流れを示すフローチャートである。ここでは、静的辞書と動的辞書は、すでに記憶されているものとする。
【0053】
図9に示すように、情報処理装置10の取得部21は、処理開始時が指示されると(S101:Yes)、単語ごとのビットマップ型転置インデックスを取得する(S102)。ここで、復元部22は、各ビットマップ型転置インデックスがハッシュ化されてサイズ縮小されている場合は、元のサイズに復元する。
【0054】
続いて、転置処理部23は、圧縮符号の転置用バッファを確保する(S103)。そして、復元処理部24は、取得されたビットマップ型転置インデックスを1つ選択し(S104)、当該ビットマップ型転置インデックスに格納されている情報にしたがって、転置用バッファに圧縮符号を格納する(S105)。
【0055】
ここで、転置処理部23は、未処理のビットマップ型転置インデックスが存在する場合(S106:Yes)、S104に戻って以降の処理を繰り返す。一方で、未処理のビットマップ型転置インデックスが存在しない場合(S106:No)、復元処理部24は、転置用バッファのNULLを削除して、圧縮データを生成する(S107)。
【0056】
そして、復元処理部24は、各辞書を用いて、圧縮データ内の各圧縮符号を単語に復元し(S108)、復元された各単語を用いて、元の文書データを復元する(S109)。
【0057】
[効果]
上述したように、情報処理装置10は、オフセット付きのビットマップ型転置インデックスをもとに、圧縮符号の転置と置換、およびテキストを復元する。具体的には、情報処理装置10は、オフセット付きのビットマップ型転置インデックスのビット列の1ビットと圧縮符号のバイト列の固定3バイトを対応付け、全単語の圧縮符号の転置を繰り返す。続いて、情報処理装置10は、各圧縮符号のNULLバイトをサプレスする。その後、情報処理装置10は、固定3バイトの圧縮符号のバイト列をもとに、静的辞書と動的辞書を用いて、テキスト(文書データ)を復元する。したがって、情報処理装置10は、オフセット付きのビットマップ型転置インデックスをもとに、圧縮符号を生成し、テキストを復元することができる。
【実施例2】
【0058】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下に異なる実施例を説明する。
【0059】
[システム]
上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0060】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0061】
[ハードウェア構成]
図10は、実施例1の情報処理装置10のハードウェア構成を示す図である。
図10の例に示すように、コンピュータ400は、各種演算処理を実行するCPU401と、ユーザからのデータ入力を受け付ける入力装置402と、モニタ403とを有する。また、コンピュータ400は、記憶媒体からプログラム等を読み取る媒体読取装置404と、他の装置と接続するためのインターフェース装置405と、他の装置と無線により接続するための無線通信装置406とを有する。また、コンピュータ400は、各種情報を一時記憶するRAM407と、ハードディスク装置408とを有する。また、各装置401〜408は、バス409に接続される。
【0062】
ハードディスク装置408には、例えば
図2に示した取得部21と復元部22の各処理部と同様の機能を有する情報処理プログラムが記憶される。また、ハードディスク装置408には、情報処理プログラムを実現するための各種データが記憶される。
【0063】
CPU401は、ハードディスク装置408に記憶された各プログラムを読み出して、RAM407に展開して実行することで各種の処理を行う。これらのプログラムは、コンピュータ400を、例えば
図2に示した取得部21と復元部22として機能させることができる。
【0064】
なお、上記の情報処理プログラムは、必ずしもハードディスク装置408に記憶されている必要はない。例えば、コンピュータ400が読み取り可能な記憶媒体に記憶されたプログラムを、コンピュータ400が読み出して実行するようにしてもよい。コンピュータ400が読み取り可能な記憶媒体は、例えば、CD−ROMやDVDディスク、USB(Universal Serial Bus)メモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリ、ハードディスクドライブ等が対応する。また、公衆回線、インターネット、LAN(Local Area Network)等に接続された装置にこのプログラムを記憶させておき、コンピュータ400がこれらからプログラムを読み出して実行するようにしてもよい。
【0065】
図11は、コンピュータ400で動作するプログラムの構成例を示す図である。コンピュータ400において、
図10に示すハードウェア群26(401〜409)の制御を行なうOS(オペレーティング・システム)27が動作する。OS27に従った手順でCPU401が動作して、ハードウェア群26の制御・管理が行なわれることにより、アプリケーションプログラム29やミドルウェア28に従った処理がハードウェア群26で実行される。さらに、コンピュータ400において、ミドルウェア28またはアプリケーションプログラム29が、RAM407に読み出されてCPU401により実行される。
【0066】
CPU401により検索機能が呼び出された場合、ミドルウェア28またはアプリケーションプログラム29の少なくとも一部に基づく処理を行なうことで、(それらの処理をOS27に基づいてハードウェア群26を制御して)、取得部21と復元部22の機能が実現される。取得部21と復元部22の各機能は、それぞれアプリケーションプログラム29自体に含まれてもよいし、アプリケーションプログラム29に従って呼び出されることで実行されるミドルウェア28の一部であってもよい。
【0067】
図12は、実施形態のシステムにおける装置の構成例を示す図である。
図12のシステムは、コンピュータ400a、コンピュータ400b、基地局30およびネットワーク40を含む。コンピュータ400aは、無線または有線の少なくとも一方により、コンピュータ400bと接続されたネットワーク40に接続している。