以下に、本願の開示する検索プログラム、情報処理装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
[実施例1に係る検索処理]
図2は、実施例1に係る検索処理を示す模式図である。図2に示すように、検索処理は、符号化データに対する検索要求を受け付ける。検索要求の内容は、例えば、文字列または単語列である。そして、検索処理は、文字または単語の符号化データの元データでの出現位置を第1の軸とした第1のインデックス情報、および検索条件の内容に基づき、以下の処理を行う。すなわち、検索処理は、第1のインデックス情報の第1の軸を上位化した第2の軸を有する第2のインデックス情報を生成する。第2の軸は、第1の軸の項目ごとのビット列をそれぞれ1ビットに上位化(集約)するために用いられる軸である。ここでいう項目とは、符号化データの元データの区切り単位のことをいい、例えば64ビットや128ビットなどのレジスタの容量に対応するが、実施例1では項目を64ビットのレジスタ容量に対応するものとして説明する。ここでいう第2のインデックス情報は、例えば、検索要求の第1キーワードに対して生成される。ここでいう第1キーワードとは、例えば、検索要求の内容の最初のキーワード(文字または単語)のことをいう。そして、検索処理は、第2のインデックス情報を用いて、検索要求に対応した符号化テキストデータに対する検索を行う。
ここでは、検索要求として単語列「abc」が受け付けられたとする。また、第1のインデックス情報には、単語が示す単語IDに対して、符号化テキストデータの元データでの出現位置に出現ビットとして「1」が設定されている。一例として、単語「a」の単語IDに対して、符号化テキストデータの元データでの出現位置「70」、「95」および「mk」などに出現ビットとして「1」が設定されている。単語「b」の単語IDに対して、符号化テキストデータの元データでの出現位置「71」などに出現ビットとして「1」が設定されている。単語「c」の単語IDに対して、符号化テキストデータの元データでの出現位置「72」などに出現ビットとして「1」が設定されている。
そして、検索処理は、第1のインデックス情報、および検索要求の内容に基づき、第1のインデックス情報の第1の軸を上位化した第2の軸を有する第2のインデックス情報を生成する。ここでは、検索処理は、検索要求の第1キーワード「a」に対して、第1のインデックス情報の第1の軸の項目(64ビット)ごとのビット列をそれぞれ1ビットに上位化(集約)した第2の軸を有する第2のインデックス情報を生成する。一例として、検索処理は、第1キーワード「a」に対して、項目1(64ビット~127ビット)に対応するいずれかのビットに「1」が設定されているので、第2のインデックス情報の項目1に対応する出現位置「1」に出現ビットとして「1」を設定する。ここでは、第1のインデックス情報の第1の軸の項目1は、64ビット~127ビットのビット列を示す。第2のインデックス情報の第2の軸の項目1に対応する出現位置は、64ビットに対応するビット位置を示す。64ビットに対応するビット位置は、1ビット目としても良いし、64ビット目としても良い。検索処理は、第1キーワード「a」に対して、項目m(64mビット~64m+63ビット)に対応するいずれかのビットに「1」が設定されているので、第2のインデックス情報の項目mに対応する出現位置「m」に出現ビットとして「1」を設定する。ここでは、第1のインデックス情報の第1の軸の項目mは、64mビット~64m+63ビットのビット列を示す。第2のインデックス情報の第2の軸の項目mに対応する出現位置は、64mビットに対応するビット位置を示す。64mビットに対応するビット位置は、mビット目としても良いし、64mビット目としても良い。
そして、検索処理は、第2のインデックス情報を用いて、検索要求に対応した符号化テキストデータに対する検索を行う。ここでは、検索処理は、第2のインデックス情報を用いて、検索要求の第1キーワード「a」に対して「1」が設定された出現位置(項目No)を取得する。取得した出現位置(項目No)は、「1」および「m」である。そして、検索処理は、第1のインデックス情報から、取得した項目Noに対応する領域を抽出し、抽出した領域から検索要求が示す単語列「abc」を検索する。一例として、項目1に対応する領域では、単語「a」に対する出現ビットが出現位置「70」に設定され、単語「b」に対する出現ビットが出現位置「71」に設定され、単語「c」に対する出現ビットが出現位置「72」に設定されている。したがって、項目1に対応する領域で、検索要求が示す単語列「abc」が検索される。これに対して、項目mに対応する領域では、単語aに対する出現ビットが出現位置「mk」に設定されているが、単語bに対する出現ビットが出現位置「mk+1」に設定されていない。したがって、項目mに対応する領域で、検索要求が示す単語列「abc」が検索されない。
このようにして、検索処理は、上位階層のインデックス情報により検索領域を絞り込むことで、符号化テキストデータから検索要求が示す単語列または文字列を高速に検索することができる。
[実施例1に係る符号化処理]
図3は、実施例1に係る符号化処理の流れの一例を示す図である。図3に示すように、符号化処理は、符号化対象のテキストデータF1に含まれる文字または単語を、順次、静的辞書S0を用いて符号化し、符号化されたコード(符号化コード)を符号化データに出力する。そして、符号化処理は、文字または単語のテキストデータF1での出現位置を第1の軸とした第1のインデックス情報を生成する。
ここでいう静的辞書S0とは、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書である。静的辞書S0には、それぞれの単語に対応する符号である静的コードがあらかじめ登録されている。
ここでいう第1のインデックス情報は、「ビットマップ型インデックス」といい、符号BIで表わす。ここでいう文字とは、例えば、CJK文字のことをいう。ここでいう単語とは、例えば、英単語のことをいう。なお、以降では、テキストデータF1が単語により構成されている場合について説明するが、これに限定されず、テキストデータF1は、文字により構成されている場合であっても良い。
ここで、ビットマップ型インデックスBIについて説明する。ビットマップ型インデックスBIは、符号化対象のテキストデータF1に含まれる単語を指定するポインタと単語のテキストデータF1内のオフセット(出現位置)での存否を示すビットを連結したビット列からなる。すなわち、ビットマップ型インデックスBIとは、符号化対象のテキストデータF1に含まれる単語について、オフセット(出現位置)ごとの存否をインデックス化したビットマップのことをいう。一例として、単語がテキストデータF1内のある出現位置に存在する場合には、出現位置に対応するオフセット(出現位置)の存否としてON、例えば2進数の「1」を示す出現ビットが設定される。単語がテキストデータ内のある出現位置に存在しない場合には、出現位置に対応するオフセット(出現位置)の存否としてOFF、例えば2進数の「0」が設定される。単語を指定するポインタとしては、例えば、単語の単語IDが採用される。単語IDは、単語そのものであっても良いし、単語の符号であっても良い。単語の符号は、符号化されたコード(符号化コード)のことをいい、一例として、静的コードに対応する。
例えば、図3に示すように、ビットマップ型インデックスBIのX軸はオフセット(出現位置)を表し、Y軸は単語IDを表す。つまり、ビットマップ型インデックスBIに含まれる各ビットマップは、単語IDが示す単語の、オフセット(出現位置)ごとの存否を表す。なお、ビットマップ型インデックスBIに含まれる各ビットマップは、それぞれ「基本ビットマップ」というものとする。
ここでは、符号化対象のテキストデータF1の10番目の位置に単語「in」が出現するので、単語「in」に対応する基本ビットマップの10ビット目の出現位置にON、すなわち2進数の「1」を示す出現ビットが設定される。符号化対象のテキストデータF1の11番目の位置に単語「my」が出現するので、単語「my」に対応する基本ビットマップの11ビット目の出現位置にON、すなわち2進数の「1」を示す出現ビットが設定される。符号化対象のテキストデータF1の70番目の位置に単語「in」が出現するので、単語「in」に対応する基本ビットマップの70ビット目の出現位置にON、すなわち2進数の「1」を示す出現ビットが設定される。なお、ビットマップ型インデックスBIへの出現ビットは、テキストデータF1内の単語が符号化される都度、単語に対応する基本ビットマップの出現位置に設定される。
[符号化ファイルの構成例]
図4は、実施例1に係る符号化ファイルの構成例を示す図である。図4に示すように、符号化ファイルF2は、ヘッダ部と、符号化データと、トレーラ部とを有する。符号化データは、テキストデータF1の符号化された符号化コード群を記憶する。トレーラ部は、符号化処理が完了した後の情報やビットマップ型インデックスBIなどを記憶する。ヘッダ部は、例えば、符号化ファイルF2の生成に用いられた符号化アルゴリズムを識別する情報や、符号化に用いられたパラメータなどの情報を記憶し、例えば、トレーラ部に格納された各情報へのポインタなどが格納される。
[実施例1に係る検索処理]
図5Aおよび図5Bは、実施例1に係る検索処理の流れの一例を示す図である。図5Aおよび図5Bに示すように、検索処理は、文字または単語の符号化データの元データであるテキストデータF1の出現位置を第1の軸としたビットマップ型インデックスBI、および検索クエリの内容に基づき、以下の処理を行う。すなわち、検索処理は、検索クエリの第1キーワードについて、ビットマップ型インデックスBIの第1の軸を上位化した第2の軸を有する上位階層のビットマップ(上位階層ビットマップ)を生成する。第2の軸は、第1の軸の64ビットごとのビット列をそれぞれ1ビットに上位化(集約)した軸である。第1キーワードは、検索クエリの最初のキーワード(単語)である。そして、検索処理は、第1キーワードに対する上位階層ビットマップを用いて、検索クエリに対応した符号化データに対する検索を行う。
図5Aに示すように、検索処理は、符号化データに対する検索クエリを受け付ける。ここでは、検索クエリの内容は、単語列「in front of」である。
検索処理は、ビットマップ型インデックスBIを参照し、検索クエリが示す単語列の第1キーワードに対する上位階層ビットマップを生成する。
例えば、検索処理は、ビットマップ型インデックスBIから、第1キーワードに対する基本ビットマップの中の第1の64ビット区間を抽出する。そして、検索処理は、抽出した第1の64ビット区間のいずれかのビットに出現ビットが設定されている場合には、第1キーワードに対する上位階層ビットマップの第1の64ビット区間を生成する。すなわち、検索処理は、第1キーワードに対する上位階層ビットマップの0ビット目の出現位置に出現ビットである「1」を設定する(s1)。ここでは、第1キーワードは、「in」である。「in」に対する基本ビットマップの中の第1の64ビット区間には、10ビット目に出現ビットである「1」が設定されているので、「in」に対する上位階層ビットマップの0ビット目に「1」が設定される。なお、検索処理は、抽出した第1の64ビット区間のいずれのビットにも出現ビットが設定されていない場合には、第1キーワードに対する上位階層ビットマップの0ビット目の出現位置に「0」を設定する。
次に、検索処理は、ビットマップ型インデックスBIから、第1キーワードに対する基本ビットマップの中の第2の64ビット区間を抽出する。そして、検索処理は、抽出した第2の64ビット区間のいずれかのビットに出現ビットが設定されている場合には、第1キーワードに対する上位階層ビットマップの第2の64ビット区間を生成する。すなわち、検索処理は、第1キーワードに対する上位階層ビットマップの1ビット目の出現位置に出現ビットである「1」を設定する(s2)。ここでは、「in」に対する基本ビットマップの中の第2の64ビット区間には、70ビット目に出現ビットである「1」が設定されているので、「in」に対する上位階層ビットマップの1ビット目に出現ビットである「1」が設定される。なお、検索処理は、抽出した第2の64ビット区間のいずれのビットにも出現ビットが設定されていない場合には、第1キーワードに対する上位階層ビットマップの1ビット目の出現位置に「0」を設定する。
このようにして、検索処理は、第1キーワードに対する基本ビットマップの64ビット区間がなくなるまで、第1キーワードに対する上位階層ビットマップの64ビット区間を生成する。
図5Bに示すように、検索処理は、第1キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスBIから、取得した出現位置に対応する、第1キーワードに対する基本ビットマップの対象区間を抽出する(s3)。ここでは、第1キーワードである「in」に対する上位階層ビットマップの「0」ビット目に「1」が設定されているので、「0」ビット目に対応する64ビット区間であって「in」に対する基本ビットマップの中の第1の64ビット区間が抽出される。また、第1キーワードである「in」に対する上位階層ビットマップの「1」ビット目に「1」が設定されているので、「1」ビット目に対応する64ビット区間であって「in」に対する基本ビットマップの中の第2の64ビット区間が抽出される。
そして、検索処理は、抽出した対象区間ごとに、各対象区間を1ビットだけ左シフトする(s4)。ここでは、第1の64ビット区間の11ビット目に「1」が設定される。また、第2の64ビット区間の71ビット目に「1」が設定される。
そして、検索処理は、第1キーワードに対する上位階層ビットマップを補正する(s5)。これは、対象区間の左シフトによりオーバーフローが発生した場合に対処する必要があるからである。すなわち、対象区間の最上位ビットに「1」が設定されている場合、対象区間の左シフトによりオーバーフローが発生する。このとき、オーバーフローにより「1」が設定されなくなったビットの出現位置に対する上位階層ビットマップの出現位置と、新たに「1」が設定されるビットの出現位置に対する上位階層ビットマップの出現位置を補正する。ここでは、対象区間の左シフトによりオーバーフローが発生しないので、「in」に対する上位階層ビットマップは、補正されない。
そして、検索処理は、第1キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスBIから、取得した出現位置に対応する、検索クエリの次のキーワードに対する基本ビットマップの対象区間を抽出する(s6)。ここでは、検索クエリの次のキーワードは、「front」である。「in」に対する上位階層ビットマップの「0」ビット目に「1」が設定されているので、「0」ビット目に対応する64ビット区間であって「front」に対する基本ビットマップの中の第1の64ビット区間が抽出される。また、「in」に対する上位階層ビットマップの「1」ビット目に「1」が設定されているので、「1」ビット目に対応する64ビット区間であって「front」に対する基本ビットマップの中の第2の64ビット区間が抽出される。
そして、検索処理は、抽出した対象区間ごとに、第1キーワードに対する基本ビットマップと検索クエリの次のキーワードに対する基本ビットマップとをAND演算する(s7)。ここでは、検索処理は、第1の64ビット区間について、「in」に対する基本ビットマップと検索クエリの次のキーワード「front」に対する基本ビットマップとをAND演算する。このAND演算した結果が、「in front」に対する基本ビットマップの中の第1の64ビット区間である。「in front」に対する基本ビットマップの中の第1の64ビット区間では、全てのビットが「0」である。また、検索処理は、第2の64ビット区間について、「in」に対する基本ビットマップと検索クエリの次のキーワード「front」に対する基本ビットマップとをAND演算する。このAND演算した結果が、「in front」に対する基本ビットマップの中の第2の64ビット区間である。「in front」に対する基本ビットマップの中の第2の64ビット区間では、71ビット目が「1」である。
そして、検索処理は、AND演算した対象区間のうち、いずれかのビットが「1」を示す対象区間が有るか否かを判定する。ここでは、AND演算した対象区間は、「in front」に対する基本ビットマップの中の第1の64ビット区間および第2の64ビット区間である。第1の64ビット区間では、全てのビットが「0」である。第2の64ビット区間では、71ビット目が「1」である。したがって、検索処理は、いずれかのビットが「1」を示す対象区間として第2の64ビット区間が有ると判定する。
そして、検索処理は、AND演算した対象区間のうち、いずれかのビットが「1」を示す対象区間を1ビットだけ左シフトする(s8)。ここでは、検索処理は、「in front」に対する基本ビットマップの中の第2の64ビット区間を1ビットだけ左シフトする。この「in front」に対する基本ビットマップの中の第2の64ビット区間では、72ビット目に「1」が設定される。
そして、検索処理は、第1キーワードと次のキーワードとの単語列に対する上位階層ビットマップを補正する(s9)。これは、対象区間の左シフトによりオーバーフローが発生した場合に対処する必要があるからである。すなわち、対象区間の最上位ビットに「1」が設定されている場合、対象区間の左シフトによりオーバーフローが発生する。このとき、オーバーフローにより「1」が設定されなくなったビットの出現位置に対する上位階層ビットマップの出現位置と、新たに「1」が設定されるビットの出現位置に対する上位階層ビットマップの出現位置を補正する。ここでは、対象区間の左シフトによりオーバーフローが発生しないので、「in front」に対する上位階層ビットマップは、補正されない。
そして、検索処理は、第1キーワードと次のキーワードとの単語列に対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスBIから、取得した出現位置に対応する、検索クエリのさらに次のキーワードに対する基本ビットマップの対象区間を抽出する(s10)。ここでは、検索クエリのさらに次のキーワードは、「of」である。「in front」に対する上位階層ビットマップの「1」ビット目に「1」が設定されているので、「1」ビット目に対応する64ビット区間であって「of」に対する基本ビットマップの中の第2の64ビット区間が抽出される。
そして、検索処理は、抽出した対象区間ごとに、第1キーワードと次のキーワードとの単語列に対する基本ビットマップと検索クエリのさらに次のキーワードに対する基本ビットマップとをAND演算する(s11)。ここでは、検索処理は、第2の64ビット区間について、「in front」に対する基本ビットマップと検索クエリのさらに次のキーワード「of」に対する基本ビットマップとをAND演算する。このAND演算した結果が、「in front of」に対する基本ビットマップの中の第2の64ビット区間である。「in front of」に対する基本ビットマップの中の第2の64ビット区間では、72ビット目が「1」である。
そして、検索処理は、AND演算した対象区間のうち、いずれかのビットが「1」を示す対象区間が有るか否かを判定する。ここでは、AND演算した対象区間は、「in front of」に対する基本ビットマップの中の第2の64ビット区間である。第2の64ビット区間では、72ビット目が「1」である。したがって、検索処理は、いずれかのビットが「1」を示す対象区間として第2の64ビット区間が有ると判定する。すなわち、検索処理は、検索クエリ「in front of」が存在する旨を検索結果として出力する。なお、検索処理は、どの64ビット区間のどの出現位置に検索クエリが存在するかを検索結果として出力しても良い。ここでは、検索処理は、第2の64ビット区間の72ビット目に「in front of」が存在する旨を検索結果として出力しても良い。
[実施例1に係る情報処理装置の構成]
図6は、実施例1に係る情報処理装置の構成の一例を示す機能ブロック図である。図6に示すように、情報処理装置100は、符号化部110、検索部120および記憶部130を有する。
符号化部110は、図3で示した符号化処理を実行する処理部である。符号化部110は、ファイルリード部111、文字/単語取得部112、インデックス生成部113、符号化処理部114およびファイルライト部115を有する。
検索部120は、図5Aおよび図5Bで示した検索処理を実行する処理部である。検索部120は、検索要求受付部121、上位階層ビットマップ生成部122、文字列/単語列検索部123および検索結果出力部124を有する。検索要求受付部121は、検索部の一例である。上位階層ビットマップ生成部122は、生成部の一例である。文字列/単語列検索部123は、検索部の一例である。
記憶部130は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部130は、静的辞書131およびビットマップ型インデックス132を有する。
静的辞書131は、一般的な英語辞典、国語辞典や教科書などを基にして、テキストデータF1中に出現する文字または単語の出現頻度を特定し、出現頻度のより高い文字または単語に対して、より短い符号を割り当てた辞書である。静的辞書131には、それぞれの文字または単語に対応する符号である静的コードがあらかじめ登録されている。なお、静的辞書131は、静的辞書S0に対応する。
ビットマップ型インデックス132は、テキストデータF1に含まれる単語または文字について、オフセット(出現位置)ごとの存否をインデックス化した基本ビットマップの集合である。なお、ビットマップ型インデックス132は、ビットマップ型インデックスBIに対応する。ビットマップ型インデックス132の説明は、図3と同様であるので、その説明を省略する。
ファイルリード部111は、符号化対象のテキストデータF1を記憶領域に読み出す。
文字/単語取得部112は、テキストデータF1から文字または単語を取得する。例えば、文字/単語取得部112は、記憶領域に読み出したテキストデータF1に対して字句解析を行う。文字/単語取得部112は、字句解析した結果の文字または単語を、テキストデータF1の先頭から順番に取得する。文字/単語取得部112は、取得した文字または単語と、それぞれのテキストデータF1内の出現位置とを対応づけてインデックス生成部113に出力する。文字/単語取得部112は、取得した文字または単語を符号化処理部114に出力する。
インデックス生成部113は、ビットマップ型インデックス132を生成する。例えば、インデックス生成部113は、文字/単語取得部112から出力された文字について、当該文字に対応する基本ビットマップを、ビットマップ型インデックス132から抽出する。インデックス生成部113は、抽出した基本ビットマップに、テキストデータF1内の出現位置に対応するビットに出現ビットを設定する。また、インデックス生成部113は、文字/単語取得部112から出力された単語について、当該単語に対応する基本ビットマップを、ビットマップ型インデックス132から抽出する。インデックス生成部113は、抽出した基本ビットマップに、テキストデータF1内の出現位置に対応するビットに出現ビットを設定する。
符号化処理部114は、文字または単語を符号化する。例えば、符号化処理部114は、文字/単語取得部112から出力された文字を、静的辞書131に登録されている静的コードに符号化する。また、符号化処理部114は、文字/単語取得部112から出力された単語を、静的辞書131に登録されている静的コードに符号化する。
ファイルライト部115は、符号化処理部114によって符号化された符号化コードを符号化ファイルF2の符号化データに格納する。ファイルライト部115は、ビットマップ型インデックス132を符号化ファイルF2のトレーラ部に書き込む。
検索要求受付部121は、符号化データに対する検索要求を受け付ける。例えば、検索要件受付部121は、検索要求として検索対象の文字列または検索対象の単語列を受け付ける。なお、検索クエリは、検索要求の一例である。検索要求受付部121は、検索要求として文字と単語とが混在した単語列を受け付けても良い。
上位階層ビットマップ生成部122は、ビットマップ型インデックス132、および検索要求の内容に基づき、第1の軸を上位化した第2の軸を有する上位階層ビットマップを生成する。なお、第2の軸は、第1の軸の64ビットごとのビット列をそれぞれ1ビットに上位化(集約)した軸である。例えば、上位階層ビットマップ生成部122は、ビットマップ型インデックス132から、検索要求の第1キーワードに対する基本ビットマップの中の第nの64ビット区間を抽出する。なお、nは、1以上の自然数である。上位階層ビットマップ生成部122は、抽出した第nの64ビット区間のいずれかのビットに出現ビットが設定されている場合には、第1キーワードに対する上位階層ビットマップの中の第nの64ビット区間を集約したビットに出現ビット「1」を設定する。上位階層ビットマップ生成部122は、抽出した第nの64ビット区間のいずれのビットにも出現ビットが設定されていない場合には、第1キーワードに対する上位階層ビットマップの第nの64ビット区間を集約したビットに「0」を設定する。そして、上位階層ビットマップ生成部122は、nが64ビット区間の最終区間になるまで、生成処理を繰り返す。
文字列/単語列検索部123は、第1キーワードに対する上位階層ビットマップを用いて、検索要求としての検索対象の文字列または検索要求としての検索対象の単語列に対応した、符号化データに対する検索を行う。
例えば、文字列/単語列検索部123は、上位階層ビットマップ生成部122によって生成された、検索対象の第1キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。文字列/単語列検索部123は、ビットマップ型インデックス132から、取得した出現位置に対応する、第1キーワードに対する基本ビットマップの64ビット区間を抽出する。
そして、文字列/単語列検索部123は、抽出した第1キーワードに対する基本ビットマップの64ビット区間を1ビットだけ左シフトする。文字列/単語列検索部123は、第1キーワードに対する上位階層ビットマップを補正する。これは、64ビット区間の左シフトによりオーバーフローが発生した場合に上位階層ビットマップを補正する必要があるからである。そして、文字列/単語列検索部123は、補正された、第1キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。文字列/単語列検索部123は、ビットマップ型インデックス132から、取得した出現位置に対応する、次のキーワードに対する基本ビットマップの64ビット区間を抽出する。文字列/単語列検索部123は、抽出した64ビット区間ごとに、第1キーワードに対する基本ビットマップと次のキーワードに対する基本ビットマップとをAND演算する。
そして、文字列/単語列検索部123は、AND演算した64ビット区間のうち、いずれかのビットが出現ビットを示す64ビット区間が有るか否かを判定する。そして、文字列/単語列検索部123は、該当する64ビット区間が無い場合には、検索対象が存在しないと判定する。文字列/単語列検索部123は、該当する64ビット区間が有る場合には、さらに、現に処理されたキーワードと次のキーワードとを含む単語列または文字列の検索処理を繰り返す。そして、文字列/単語列検索部123は、検索対象の次のキーワード(単語または文字)がなくなると、検索対象が存在すると判定する。
検索結果出力部124は、検索結果を出力する。例えば、検索結果出力部124は、文字列/単語列検索部123によって検索対象が存在すると判定された場合には、検索結果として検索対象が存在する旨を出力する。検索結果出力部124は、文字列/単語列検索部123によって検索対象が存在しないと判定された場合には、検索結果として検索対象が存在しない旨を出力する。
[実施例1に係る符号化処理の処理手順]
図6に示した符号化部110の処理手順について、図7を参照して説明する。図7は、実施例1に係る符号化処理のフローチャートの一例を示す図である。
図7に示すように、符号化部110は、前処理を実行する(ステップS11)。例えば、符号化部110は、各種記憶領域を記憶部130に確保する。そして、符号化部110は、符号化対象のファイルを読み出し、読出用の記憶領域にテキストデータF1を格納する(ステップS12)。
そして、符号化部110は、読出用の記憶領域から文字または単語を取得する(ステップS13)。例えば、符号化部110は、読出用の記憶領域に格納されたテキストデータF1を字句解析し、字句解析した結果の文字または単語を、テキストデータF1の先頭から順番に取得する。
符号化部110は、取得対象は文字であるか否かを判定する(ステップS14)。取得対象は文字であると判定した場合には(ステップS14;Yes)、符号化部110は、取得した文字に対応する基本ビットマップの、出現位置に対するビットに出現ビットを設定する(ステップS15)。例えば、符号化部110は、取得した文字に対応する基本ビットマップをビットマップ型インデックス132から抽出する。符号化部110は、抽出した基本ビットマップに、テキストデータF1内の、取得した文字の出現位置に対応するビットに出現ビットを設定する。
符号化部110は、取得した文字を、静的辞書131に登録されている静的コードに符号化する(ステップS16)。そして、符号化部110は、ステップS19に移行する。
一方、取得対象は文字でないと判定した場合には(ステップS14;No)、符号化部110は、取得対象は単語であると判定し、単語に対応する基本ビットマップの、出現位置に対するビットに出現ビットを設定する(ステップS17)。例えば、符号化部110は、取得した単語に対応する基本ビットマップをビットマップ型インデックス132から抽出する。符号化部110は、抽出した基本ビットマップに、テキストデータF1内の、取得した単語の出現位置に対応するビットに出現ビットを設定する。
符号化部110は、取得した単語を、静的辞書131に登録されている静的コードに符号化する(ステップS18)。そして、符号化部110は、ステップS19に移行する。
ステップS19において、符号化部110は、ファイルの終点か否かを判定する(ステップS19)。ファイルの終点でないと判定した場合には(ステップS19;No)、符号化部110は、次の文字または単語を取得すべく、ステップS13に移行する。
一方、ファイルの終点であると判定した場合には(ステップS19;Yes)、符号化部110は、符号化処理を終了する。
[実施例1に係る検索処理の処理手順]
図6に示した検索部120の処理手順について、図8を参照して説明する。図8は、実施例1に係る検索処理のフローチャートの一例を示す図である。なお、検索部120の処理手順の一例として、検索クエリが単語列である場合を説明するものとする。
図8に示すように、検索部120は、検索クエリを受け付けたか否かを判定する(ステップS21)。検索クエリを受け付けていないと判定した場合には(ステップS21;No)、検索部120は、検索クエリを受け付けるまで、判定処理を繰り返す。
一方、検索クエリを受け付けたと判定した場合には(ステップS21;Yes)、検索部120は、検索クエリの第1キーワード(今回の対象)に対する上位階層ビットマップ生成処理を実行する(ステップS22)。なお、上位階層ビットマップ生成処理のフローチャートは、後述する。
検索部120は、上位階層ビットマップ生成処理によって生成された上位階層ビットマップに設定された出現ビットに対応する対象区間であって第1キーワード(今回の対象)に対する基本ビットマップの対象区間を抽出する(ステップS23)。64ビット区間は、対象区間の一例である。
検索部120は、今回の対象に対する基本ビットマップの対象区間を1ビットだけ左シフトする(ステップS24)。そして、検索部120は、今回の対象に対する上位階層ビットマップを補正する(ステップS25)。これは、対象区間の左シフトによりオーバーフローが発生した場合に上位階層ビットマップを補正する必要があるからである。
検索部120は、補正された上位階層ビットマップに設定された出現ビットに対応する対象区間であって次のキーワードに対する基本ビットマップの対象区間を抽出する(ステップS26)。
そして、検索部120は、対象区間ごとに、今回の対象と次のキーワードとの基本ビットマップをAND演算する(ステップS27)。検索部120は、演算結果の対象区間のうち、出現ビットが設定された対象区間が有るか否かを判定する(ステップS28)。出現ビットを持つ対象区間が無いと判定した場合には(ステップS28;No)、検索部120は、今回の対象と次のキーワードとの単語列が無い旨を検索結果として出力する(ステップS29)。そして、検索部120は、検索処理を終了する。
一方、出現ビットを持つ対象区間が有ると判定した場合には(ステップS28;Yes)、検索部120は、今回の対象と次のキーワードとの単語列が有ると判断し、検索クエリの終点であるか否かを判定する(ステップS30)。検索クエリの終点でないと判定した場合には(ステップS30;No)、検索部120は、今回の対象と次のキーワードとの単語列を今回の対象とする(ステップS31)。そして、検索部120は、今回の対象と次のキーワードとの単語列を検索すべく、ステップS24に移行する。
一方、検索クエリの終点であると判定した場合には(ステップS30;Yes)、検索部120は、今回の対象と次のキーワードとの単語列が有る旨を検索結果として出力する(ステップS32)。そして、検索部120は、検索処理を終了する。
[実施例1に係る上位階層ビットマップ生成処理の処理手順]
図9は、実施例1に係る上位階層ビットマップ生成処理のフローチャートの一例を示す図である。
図9に示すように、検索部120は、インデックスiに1を設定する(ステップS41)。検索部120は、ビットマップ型インデックス132から、第1キーワードに対する基本ビットマップの中の第iの区間を抽出する(ステップS42)。
検索部120は、いずれかのビットに出現ビットが設定されているか否かを判定する(ステップS43)。いずれかのビットに出現ビットが設定されていないと判定した場合には(ステップS43;No)、検索部120は、ステップS45に移行する。
一方、いずれかのビットに出現ビットが設定されていると判定した場合には(ステップS43;Yes)、検索部120は、第1キーワードに対する上位階層ビットマップのi―1ビット目に出現ビットを設定する(ステップS44)。つまり、検索部120は、第1キーワードに対する上位階層ビットマップの第iの区間を設定する。そして、検索部120は、ステップS45に移行する。
ステップS45において、検索部120は、インデックスiが最終区間のNであるか否かを判定する(ステップS45)。インデックスiが最終区間のNでないと判定した場合には(ステップS45;No)、検索部120は、インデックスiに1を加算する(ステップS46)。そして、検索部120は、次の区間の処理をすべく、ステップS42に移行する。
一方、インデックスiが最終区間のNであると判定した場合には(ステップS45;Yes)、検索部120は、上位階層ビットマップ生成処理を終了する。
[実施例1の効果]
このようにして、上記実施例1では、検索部120は、符号化データに対する検索要求を受け付ける。検索部120は、符号化データのインデックス情報であって、文字または単語の符号化データの元データ内での出現位置を第1の軸とした第1のインデックス情報、および検索要求の内容に基づき、第1の軸を上位化した第2の軸を有する第2のインデックス情報を生成する。そして、検索部120は、第2のインデックス情報を用いて、検索要求に対応した符号化データに対する検索を行う。かかる構成によれば、検索部120は、検索要求の内容に応じた第2のインデックス情報を生成してから検索を行うことにより、検索要求の内容に応じた検索の絞り込みを高速に行うことができる。さらに、検索部120は、出現位置を軸とした第1のインデックス情報を用いることで、検索要求が単語列または文字列を示す場合には、検索要求が示す単語列または文字列を高速に検索することができる。さらに、検索部120は、レジスタの容量単位などの粒度での検索を、演算量を抑えて行うことができる。
また、上記実施例1では、検索部120は、検索要求の第1のキーワードについて、第1のインデックス情報を用いて、第1の軸を上位化した第2の軸を有する第2のインデックス情報を生成する。かかる構成によれば、検索部120は、検索要求の第1のキーワードに応じた第2のインデックス情報を生成してから検索を行うことにより、検索要求の検索の範囲を高速に絞り込むことができる。この結果、検索部120は、検索の演算量を抑えることができる。
ところで、実施例1では、検索部120は、第1のインデックス情報のレジスタ容量に基づき、第1の軸を上位化して第2のインデックス情報を生成すると説明した。しかしながら、検索部120は、これに限定されず、第1のインデックス情報の所定の区切り単位に基づき、第1の軸を上位化して第2のインデックス情報を生成しても良い。所定の区切り単位は、符号化データの元データであるテキストデータF1の区切り単位であり、例えば、ファイル、ブロック、章や文章が挙げられる。なお、以降、所定の区切りを「項目」というものとする。
そこで、実施例2では、第1のインデックス情報の項目単位に基づき、第1の軸を上位化して第2のインデックス情報を生成する場合を説明する。
[実施例2に係る検索処理]
図10は、実施例2に係る検索処理を示す模式図である。図10に示すように、検索処理は、符号化データに対する検索要求を受け付ける。検索要求の内容は、例えば、文字列または単語列である。そして、検索処理は、文字または単語の符号化データの元データでの出現位置を第1の軸とした第1のインデックス情報、および検索条件の内容に基づき、以下の処理を行う。すなわち、検索処理は、第1のインデックス情報の第1の軸を項目ごとに上位化した第2の軸を有する第2のインデックス情報を生成する。第1のインデックス情報には、項目に対して、符号化テキストデータの元データでの先頭位置に出現ビットとして「1」が設定されている。したがって、検索処理は、出現ビットが設定された位置から次の出現ビットの1ビット前までを1つの項目と判断し、第1の軸を項目ごとに上位化した第2の軸を有する第2のインデックス情報を生成する。第2の軸は、第1の軸の項目ごとのビット列をそれぞれ1ビットに上位化(集約)するために用いられる軸である。ここでいう第2のインデックス情報は、例えば、検索要求の第1キーワードに対して生成される。ここでいう第1キーワードとは、例えば、検索要求の内容の最初のキーワード(文字または単語)のことをいう。そして、検索処理は、第2のインデックス情報を用いて、検索要求に対応した符号化テキストデータに対する検索を行う。
ここでは、検索要求として単語列「abc」が受け付けられたとする。また、第1のインデックス情報には、単語が示す単語IDに対して、符号化テキストデータの元データでの出現位置に出現ビットとして「1」が設定されている。一例として、単語「a」の単語IDに対して、符号化テキストデータの元データでの出現位置「70」、「95」および「mk」などに出現ビットとして「1」が設定されている。単語「b」の単語IDに対して、符号化テキストデータの元データでの出現位置「71」などに出現ビットとして「1」が設定されている。単語「c」の単語IDに対して、符号化テキストデータの元データでの出現位置「72」などに出現ビットとして「1」が設定されている。
そして、検索処理は、第1のインデックス情報、および検索要求の内容に基づき、第1のインデックス情報の第1の軸を上位化した第2の軸を有する第2のインデックス情報を生成する。ここでは、検索処理は、第1のインデックス情報の項目に対する出現ビットを参照して、検索要求の第1キーワード「a」に対して、第1のインデックス情報の第1の軸の項目ごとのビット列をそれぞれ1ビットに上位化(集約)した第2の軸を有する第2のインデックス情報を生成する。一例として、検索処理は、第1キーワード「a」に対して、項目1に対応するいずれかのビットに「1」が設定されているので、第2のインデックス情報の項目1に対応する出現位置「1」に出現ビットとして「1」を設定する。検索処理は、第1キーワード「a」に対して、項目mに対応するいずれかのビットに「1」が設定されているので、第2のインデックス情報の項目mに対応する出現位置「m」に出現ビットとして「1」を設定する。
そして、検索処理は、第2のインデックス情報を用いて、検索要求に対応した符号化テキストデータに対する検索を行う。ここでは、検索処理は、第2のインデックス情報を用いて、検索要求の第1キーワード「a」に対して「1」が設定された出現位置(項目No)を取得する。取得した出現位置(項目No)は、「1」および「m」である。そして、検索処理は、第1のインデックス情報から、取得した項目Noに対応する領域を抽出し、抽出した領域から検索要求が示す単語列「abc」を検索する。一例として、項目1に対応する領域では、単語「a」に対する出現ビットが出現位置「70」に設定され、単語「b」に対する出現ビットが出現位置「71」に設定され、単語「c」に対する出現ビットが出現位置「72」に設定されている。したがって、項目1に対応する領域で、検索要求が示す単語列「abc」が検索される。これに対して、項目mに対応する領域では、単語aに対する出現ビットが出現位置「mk」に設定されているが、単語bに対する出現ビットが出現位置「mk+1」に設定されていない。したがって、項目mに対応する領域で、検索要求が示す単語列「abc」が検索されない。
このようにして、検索処理は、第1のインデックス情報の項目単位に基づく上位階層の第2のインデックス情報により検索領域を絞り込むことで、符号化テキストデータから検索要求が示す単語列または文字列を高速に検索することができる。
[実施例2に係る符号化処理]
図11は、実施例2に係る符号化処理の流れの一例を示す図である。図11に示すように、符号化処理は、符号化対象のテキストデータF1に含まれる文字または単語を、順次、静的辞書S0を用いて符号化し、符号化されたコード(符号化コード)を符号化データに出力する。そして、符号化処理は、文字または単語のテキストデータF1での出現位置を第1の軸とした第1のインデックス情報を生成する。そして、符号化処理は、第1のインデックス情報を生成する際、項目に対する第1の軸について、各項目の先頭位置を示す出現位置に出現ビットを設定する。
ここでいう静的辞書S0とは、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する単語の出現頻度を特定し、出現頻度のより高い単語に対して、より短い符号を割り当てた辞書である。静的辞書S0には、それぞれの単語に対応する符号である静的コードがあらかじめ登録されている。
ここでいう第1のインデックス情報は、「ビットマップ型インデックス」といい、符号BIで表わす。ここでいう文字とは、例えば、CJK文字のことをいう。ここでいう単語とは、例えば、英単語のことをいう。なお、以降では、テキストデータF1が単語により構成されている場合について説明するが、これに限定されず、テキストデータF1は、文字により構成されている場合であっても良い。
ここで、ビットマップ型インデックスBIについて説明する。ビットマップ型インデックスBIは、符号化対象のテキストデータF1に含まれる単語を指定するポインタと単語のテキストデータF1内のオフセット(出現位置)での存否を示すビットを連結したビット列からなる。すなわち、ビットマップ型インデックスBIとは、符号化対象のテキストデータF1に含まれる単語について、オフセット(出現位置)ごとの存否をインデックス化したビットマップのことをいう。一例として、単語がテキストデータF1内のある出現位置に存在する場合には、出現位置に対応するオフセット(出現位置)の存否としてON、例えば2進数の「1」を示す出現ビットが設定される。単語がテキストデータ内のある出現位置に存在しない場合には、出現位置に対応するオフセット(出現位置)の存否としてOFF、例えば2進数の「0」が設定される。単語を指定するポインタとしては、例えば、単語の単語IDが採用される。単語IDは、単語そのものであっても良いし、単語の符号であっても良い。単語の符号は、符号化されたコード(符号化コード)のことをいい、一例として、静的コードに対応する。
例えば、図11に示すように、ビットマップ型インデックスBIのX軸はオフセット(出現位置)を表し、Y軸は単語IDを表す。つまり、ビットマップ型インデックスBIに含まれる各ビットマップは、単語IDが示す単語の、オフセット(出現位置)ごとの存否を表す。なお、ビットマップ型インデックスBIに含まれる各ビットマップは、それぞれ「基本ビットマップ」というものとする。
ここでは、符号化対象のテキストデータF1の10番目の位置に単語「in」が出現するので、単語「in」に対応する基本ビットマップの10ビット目の出現位置にON、すなわち2進数の「1」を示す出現ビットが設定される。符号化対象のテキストデータF1の11番目の位置に単語「my」が出現するので、単語「my」に対応する基本ビットマップの11ビット目の出現位置にON、すなわち2進数の「1」を示す出現ビットが設定される。符号化対象のテキストデータF1の70番目の位置に単語「in」が出現するので、単語「in」に対応する基本ビットマップの70ビット目の出現位置にON、すなわち2進数の「1」を示す出現ビットが設定される。そして、70ビット目から「項目1」となるので、項目に対応する基本ビットマップの70ビット目の出現位置にON、すなわち2進数の「1」を示す出現ビットが設定される。なお、ビットマップ型インデックスBIへの出現ビットは、テキストデータF1内の単語が符号化される都度、単語に対応する基本ビットマップの出現位置に設定される。また、ビットマップ型インデックスBIへの出現ビットは、テキストデータF1内の単語が項目の先頭である場合に、項目に対応する基本ビットマップの出現位置に設定される。
[実施例2に係る検索処理]
図12Aおよび図12Bは、実施例2に係る検索処理の流れの一例を示す図である。図12Aおよび図12Bに示すように、検索処理は、ビットマップ型インデックスBI、および、検索クエリの、テキストデータF1の区切り単位を含む内容に基づき、以下の処理を行う。すなわち、検索処理は、ビットマップ型インデックスBIの第1の軸を上位化(集約)した第2の軸を有する上位階層ビットマップを生成する。第2の軸は、第1の軸の、区切り単位ごとのビット列をそれぞれ1ビットに上位化(集約)した軸である。第1キーワードは、検索クエリの最初のキーワード(単語)である。そして、検索処理は、第1キーワードに対する上位階層ビットマップを用いて、検索クエリに対応した符号化データに対する検索を行う。
なお、以降、第2の軸は、第1の軸の、ファイルまたはブロックごとのビット列をそれぞれ1ビットに上位化(集約)したものとして説明する。
図12Aに示すように、検索処理は、符号化データに対する検索クエリを受け付ける。ここでは、検索クエリの内容は、単語列「in front of」である。
検索処理は、ビットマップ型インデックスBIを参照し、検索クエリが示す単語列の第1キーワードに対する上位階層ビットマップを生成する。
例えば、検索処理は、ビットマップ型インデックスBIから、第1キーワードに対する基本ビットマップの中の第1の64ビット区間を抽出する。そして、検索処理は、抽出した第1の64ビット区間のいずれかのビットに出現ビットが設定されている場合には、オフセットテーブルT0に基づいて、出現ビットが設定されている位置(オフセット位置)に対応付けられるファイルまたはブロックNoを特定する(s21)。ここでいうオフセットテーブルT0とは、テキストデータT1内の区切りを、ファイルまたはブロックNoとテキストデータT1内のオフセット位置とで表わしたテーブルである。ここでは、第1キーワードは、「in」である。「in」に対する基本ビットマップの中の第1の64ビット区間には、10ビット目に出現ビットである「1」が設定されている。検索処理は、オフセットテーブルT0に基づいて、出現ビットが設定されている10ビット目に対応付けられるファイルまたはブロックNo「1」を特定する。
そして、検索処理は、第1キーワードに対する上位階層ビットマップの、特定したファイルまたはブロックNoの区間を生成する。すなわち、検索処理は、第1キーワードに対する上位階層ビットマップの、特定したファイルまたはブロックNoに対応する出現位置に出現ビットである「1」を設定する(s22)。ここでは、ファイルまたはブロックNo「1」が特定されたので、「in」に対する上位階層ビットマップの1ビット目に出現ビットである「1」が設定される。
同様に、検索処理は、第1キーワードに対する基本ビットマップの64ビット区間がなくなるまで、順次64ビット区間を抽出する。そして、検索処理は、抽出した64ビット区間のいずれかのビットに出現ビットが設定されている場合には、オフセットテーブルT0に基づいて、出現ビットが設定されているオフセット位置に対応付けられるファイルまたはブロックNoを特定する。そして、検索処理は、第1キーワードに対する上位階層ビットマップの、特定したファイルまたはブロックNoの区間を生成する。すなわち、検索処理は、第1キーワードに対する上位階層ビットマップの、特定したファイルまたはブロックNoに対応する出現位置に出現ビットである「1」を設定する。
図12Bに示すように、検索処理は、第1キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、オフセットテーブルT0に基づいて、出現ビットの出現位置に対応付けられるファイルまたはブロックNoを特定し(s23)、特定したファイルまたはブロックNoに対応付けられたオフセット位置を特定する。そして、検索処理は、ビットマップ型インデックスBIから、特定したオフセット位置に対応する、第1キーワードに対する基本ビットマップの対象区間を抽出する(s24)。ここでは、「in」に対する上位階層ビットマップの「1」ビット目に「1」が設定されているので、検索処理は、「1」ビット目に対応するファイルまたはブロックNo「1」を特定する。そして、検索処理は、特定したファイルまたはブロックNo「1」に対応付けられたオフセット位置「201」を特定する。そして、検索処理は、ビットマップ型インデックスBIから特定したオフセット位置「201」に対応するファイルまたはブロックNo「1」の対象区間を抽出する。なお、ファイルまたはブロックNo「1」の対象区間は、「in」に対する基本ビットマップの0~201に対応し、10ビット目と70ビット目に出現ビットが設定されている。
そして、検索処理は、抽出した対象区間ごとに、各対象区間を1ビットだけ左シフトする(s25)。ここでは、ファイルまたはブロックNo「1」の対象区間の11ビット目と71ビット目にそれぞれ「1」が設定される。
そして、検索処理は、第1キーワードに対する上位階層ビットマップを補正する(s26)。これは、対象区間の左シフトによりオーバーフローが発生した場合に対処する必要があるからである。すなわち、対象区間の最上位ビットに「1」が設定されている場合、対象区間の左シフトによりオーバーフローが発生する。このとき、オーバーフローにより「1」が設定されなくなったビットの出現位置に対する上位階層ビットマップの出現位置と、新たに「1」が設定されるビットの出現位置に対する上位階層ビットマップの出現位置を補正する。ここでは、対象区間の左シフトによりオーバーフローが発生しないので、「in」に対する上位階層ビットマップは、補正されない。
そして、検索処理は、第1キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスBIから、取得した出現位置に対応する、検索クエリの次のキーワードに対する基本ビットマップの対象区間を抽出する(s27)。ここでは、検索クエリの次のキーワードは、「front」である。「in」に対する上位階層ビットマップの「1」ビット目に「1」が設定されているので、検索処理は、「1」ビット目に対応する対象区間であって「front」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間を抽出する。なお、「front」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間は、「front」に対する基本ビットマップの0~201に対応し、71ビット目に出現ビットが設定されている。
そして、検索処理は、抽出した対象区間ごとに、第1キーワードに対する基本ビットマップと検索クエリの次のキーワードに対する基本ビットマップとをAND演算する(s28)。ここでは、検索処理は、ファイルまたはブロックNo「1」の対象区間について、「in」に対する基本ビットマップと検索クエリの次のキーワード「front」に対する基本ビットマップとをAND演算する。このAND演算した結果が、「in front」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間である。ファイルまたはブロックNo「1」の対象区間では、11ビット目が「0」であり、71ビット目が「1」である。
そして、検索処理は、AND演算した対象区間のうち、いずれかのビットが「1」を示す対象区間が有るか否かを判定する。ここでは、AND演算した対象区間は、「in front」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間である。ファイルまたはブロックNo「1」の対象区間では、71ビット目が「1」である。したがって、検索処理は、いずれかのビットが「1」を示す対象区間としてファイルまたはブロックNo「1」の対象区間が有ると判定する。
そして、検索処理は、AND演算した対象区間のうち、いずれかのビットが「1」を示す対象区間を1ビットだけ左シフトする(s29)。ここでは、検索処理は、「in front」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間を1ビットだけ左シフトする。この「in front」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間では、72ビット目に「1」が設定される。
そして、検索処理は、第1キーワードと次のキーワードとの単語列に対する上位階層ビットマップを補正する(s30)。これは、対象区間の左シフトによりオーバーフローが発生した場合に対処する必要があるからである。すなわち、対象区間の最上位ビットに「1」が設定されている場合、対象区間の左シフトによりオーバーフローが発生する。このとき、オーバーフローにより「1」が設定されなくなったビットの出現位置に対する上位階層ビットマップの出現位置と、新たに「1」が設定されるビットの出現位置に対する上位階層ビットマップの出現位置を補正する。ここでは、対象区間の左シフトによりオーバーフローが発生しないので、「in front」に対する上位階層ビットマップは、補正されない。
そして、検索処理は、第1キーワードと次のキーワードとの単語列に対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、検索処理は、ビットマップ型インデックスBIから、取得した出現位置に対応する、検索クエリのさらに次のキーワードに対する基本ビットマップの対象区間を抽出する(s31)。ここでは、検索クエリのさらに次のキーワードは、「of」である。「in front」に対する上位階層ビットマップの「1」ビット目に「1」が設定されているので、検索処理は、「1」ビット目に対応する対象区間であって「front」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間を抽出する。なお、「of」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間は、「of」に対する基本ビットマップの0~201に対応し、72ビット目に出現ビットが設定されている。
そして、検索処理は、抽出した対象区間ごとに、第1キーワードと次のキーワードとの単語列に対する基本ビットマップと検索クエリのさらに次のキーワードに対する基本ビットマップとをAND演算する(s32)。ここでは、検索処理は、ファイルまたはブロックNo「1」の対象区間について、「in front」に対する基本ビットマップと検索クエリのさらに次のキーワード「of」に対する基本ビットマップとをAND演算する。このAND演算した結果が、「in front of」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間である。ファイルまたはブロックNo「1」の対象区間では、72ビット目が「1」である。
そして、検索処理は、AND演算した対象区間のうち、いずれかのビットが「1」を示す対象区間が有るか否かを判定する。ここでは、AND演算した対象区間は、「in front of」に対する基本ビットマップの中のファイルまたはブロックNo「1」の対象区間である。ファイルまたはブロックNo「1」の対象区間では、72ビット目が「1」である。したがって、検索処理は、いずれかのビットが「1」を示す対象区間としてファイルまたはブロックNo「1」の対象区間が有ると判定する。すなわち、検索処理は、検索クエリ「in front of」が存在する旨を検索結果として出力する。なお、検索処理は、どのファイルまたはブロックNoの対象区間のどの出現位置に検索クエリが存在するかを検索結果として出力しても良い。ここでは、検索処理は、ファイルまたはブロックNo「1」の対象区間の72ビット目に「in front of」が存在する旨を検索結果として出力しても良い。
[情報処理装置の構成]
図13は、実施例2に係る情報処理装置の機能構成を示すブロック図である。なお、実施例1に係る図6に示す情報処理装置100と同一の構成については同一符号を付すことで、その重複する構成および動作の説明については省略する。実施例1と実施例2とが異なるところは、検索部120の上位階層ビットマップ生成部122を上位階層ビットマップ生成部122Aに変更し、文字列/単語列検索部123を文字列/単語列検索部123Aに変更した点にある。また、実施例1と実施例2とが異なるところは、オフセットテーブル201を追加した点にある。上位階層ビットマップ生成部122Aは、生成部の一例である。文字列/単語列検索部123Aは、検索部の一例である。
オフセットテーブル201は、図12Aおよび図12BのオフセットテーブルT0に対応する。ここで、オフセットテーブル201のデータ構造の一例を、図14を参照して説明する。図14は、実施例2に係るオフセットテーブルのデータ構造の一例を示す図である。図14に示すように、オフセットテーブル201は、オフセット位置201bを項目No201aと対応付けて記憶する。項目No201aは、項目で区切られた識別番号である。項目には、ファイル、ブロック、章や文章が挙げられる。なお、オフセットテーブル201は、項目ごとに、分けられていても良い。すなわち、オフセットテーブル201は、項目がファイルである場合のオフセットテーブル201A、項目がブロックである場合のオフセットテーブル201B、項目が章である場合のオフセットテーブル201C、項目が文章である場合のオフセットテーブル201Dに、分けられても良い。かかる場合には、検索要求に検索対象の項目種別を含むようにすれば良い。
一例として、項目No201aが「0」である場合に、オフセット位置201bとして「0」を記憶している。項目No201aが「1」である場合に、オフセット位置201bとして「201」を記憶している。項目No201aが「2」である場合に、オフセット位置201bとして「355」を記憶している。
上位階層ビットマップ生成部122Aは、ビットマップ型インデックス132、および検索要求の内容に基づき、第1の軸を上位化した第2の軸を有する上位階層ビットマップを生成する。なお、検索要求の内容には、符号化データの元データであるテキストデータF1の区切り単位を示す項目種別が含まれていても良い。第2の軸は、第1の軸の区切り単位ごとのビット列をそれぞれ1ビットに上位化(集約)した軸である。例えば、上位階層ビットマップ生成部122Aは、ビットマップ型インデックス132から、検索要求の第1キーワードに対する基本ビットマップの中の第nの64ビット区間を抽出する。なお、nは、1以上の自然数である。上位階層ビットマップ生成部122Aは、抽出した第nの64ビット区間のいずれかのビットに出現ビットが設定されている場合には、オフセットテーブル201に基づいて、出現ビットが設定されている出現位置に対応付けられる項目No201aを特定する。そして、上位階層ビットマップ生成部122Aは、第1キーワードに対する上位階層ビットマップの中のビットであって特定した項目No201aの区間を集約したビットに出現ビット「1」を設定する。そして、上位階層ビットマップ生成部122Aは、nが64ビット区間の最終区間になるまで、生成処理を繰り返す。
文字列/単語列検索部123Aは、第1キーワードに対する上位階層ビットマップを用いて、検索要求としての検索対象の文字列または単語列に対応した、符号化データに対する検索を行う。
例えば、文字列/単語列検索部123Aは、上位階層ビットマップ生成部122Aによって生成された、検索対象の第1キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。そして、文字列/単語列検索部123Aは、オフセットテーブル201に基づいて、取得した出現ビットの出現位置に対応付けられる項目No201aを特定し、特定した項目No201aに対応付けられたオフセット位置201bを特定する。そして、文字列/単語列検索部123Aは、ビットマップ型インデックス132から、特定したオフセット位置201bに対応する対象区間であって第1キーワードに対する基本ビットマップの中の対象区間を抽出する。
そして、文字列/単語列検索部123Aは、抽出した第1キーワードに対する基本ビットマップの対象区間を1ビットだけ左シフトする。文字列/単語列検索部123Aは、第1キーワードに対する上位階層ビットマップを補正する。これは、対象区間の左シフトによりオーバーフローが発生した場合に上位階層ビットマップを補正する必要があるからである。そして、文字列/単語列検索部123Aは、補正された、第1キーワードに対する上位階層ビットマップを参照し、出現ビットの出現位置を取得する。文字列/単語列検索部123Aは、ビットマップ型インデックス132から、取得した出現位置に対応する対象区間であって次のキーワードに対する基本ビットマップの対象区間を抽出する。文字列/単語列検索部123Aは、抽出した対象区間ごとに、第1キーワードに対する基本ビットマップと次のキーワードに対する基本ビットマップとをAND演算する。
そして、文字列/単語列検索部123Aは、AND演算した対象区間のうち、いずれかのビットが出現ビットを示す対象区間が有るか否かを判定する。そして、文字列/単語列検索部123Aは、該当する対象区間が無い場合には、検索対象が存在しないと判定する。文字列/単語列検索部123Aは、該当する対象区間が有る場合には、さらに、現に処理されたキーワードと次のキーワードとを含む単語列または文字列の検索処理を繰り返す。そして、文字列/単語列検索部123Aは、検索対象の次のキーワード(単語または文字)がなくなると、検索対象が存在すると判定する。
[実施例2に係る検索処理の処理手順]
図13に示した検索部120の処理手順について、図15を参照して説明する。図15は、実施例2に係る検索処理のフローチャートの一例を示す図である。なお、検索部120の処理手順の一例として、検索クエリが単語列である場合を説明するものとする。また、図8に示す検索処理のフローチャートと同一の処理については同一符号を付すことで、その重複する処理の説明については簡略する。実施例1と実施例2とが異なる点は、S22A、S23A、S23B、S26A、S26Bである。
図15に示すように、検索部120は、検索クエリを受け付けたか否かを判定する(ステップS21)。検索クエリを受け付けていないと判定した場合には(ステップS21;No)、検索部120は、検索クエリを受け付けるまで、判定処理を繰り返す。
一方、検索クエリを受け付けたと判定した場合には(ステップS21;Yes)、検索部120は、検索クエリの第1キーワード(今回の対象)に対する上位階層ビットマップ生成処理を実行する(ステップS22A)。なお、上位階層ビットマップ生成処理のフローチャートは、後述する。
そして、検索部120は、オフセットテーブル201に基づいて、生成された上位階層ビットマップの出現ビットに対応する項目No201aを特定し、特定した項目No201aに対応付けられる対象区間を特定する(ステップS23A)。例えば、検索部120は、オフセットテーブル201に基づいて、生成された上位階層ビットマップの出現ビットの出現位置に対応付けられる項目No201aを特定する。検索部120は、ビットマップ型インデックス132から、特定した項目No201aに対応付けられたオフセット位置201bを特定する。そして、検索部120は、現に特定したオフセット位置201bの1つ前のオフセット位置201bから、現に特定したオフセット位置201bまでの対象区間を特定する。
そして、検索部120は、ビットマップ型インデックス132から、特定した対象区間であって第1キーワード(今回の対象)に対する基本ビットマップの対象区間を抽出する(ステップS23B)。
検索部120は、今回の対象に対する基本ビットマップの対象区間を1ビットだけ左シフトする(ステップS24)。そして、検索部120は、今回の対象に対する上位階層ビットマップを補正する(ステップS25)。これは、対象区間の左シフトによりオーバーフローが発生した場合に上位階層ビットマップを補正する必要があるからである。
そして、検索部120は、オフセットテーブル201に基づいて、補正された上位階層ビットマップの出現ビットに対応する項目No201aを特定し、特定した項目No201aに対応付けられる対象区間を特定する(ステップS26A)。例えば、検索部120は、オフセットテーブル201に基づいて、補正された上位階層ビットマップの出現ビットの出現位置に対応付けられる項目No201aを特定する。検索部120は、ビットマップ型インデックス132から、特定した項目No201aに対応付けられたオフセット位置201bを特定する。そして、検索部120は、現に特定したオフセット位置201bの1つ前のオフセット位置201bから、現に特定したオフセット位置201bまでの対象区間を特定する。
そして、検索部120は、ビットマップ型インデックス132から、特定した対象区間であって検索クエリの次のキーワードに対する基本ビットマップの対象区間を抽出する(ステップS26B)。
そして、検索部120は、対象区間ごとに、今回の対象と次のキーワードとの基本ビットマップをAND演算する(ステップS27)。検索部120は、演算結果の対象区間のうち、出現ビットが設定された対象区間が有るか否かを判定する(ステップS28)。出現ビットを持つ対象区間が無いと判定した場合には(ステップS28;No)、検索部120は、今回の対象と次のキーワードとの単語列が無い旨を検索結果として出力する(ステップS29)。そして、検索部120は、検索処理を終了する。
一方、出現ビットを持つ対象区間が有ると判定した場合には(ステップS28;Yes)、検索部120は、今回の対象と次のキーワードとの単語列が有ると判断し、検索クエリの終点であるか否かを判定する(ステップS30)。検索クエリの終点でないと判定した場合には(ステップS30;No)、検索部120は、今回の対象と次のキーワードとの単語列を今回の対象とする(ステップS31)。そして、検索部120は、今回の対象と次のキーワードとの単語列を検索すべく、ステップS24に移行する。
一方、検索クエリの終点であると判定した場合には(ステップS30;Yes)、検索部120は、今回の対象と次のキーワードとの単語列が有る旨を検索結果として出力する(ステップS32)。そして、検索部120は、検索処理を終了する。
[実施例2に係る上位階層ビットマップ生成処理の処理手順]
図16は、実施例2に係る上位階層ビットマップ生成処理のフローチャートの一例を示す図である。なお、図9に示す上位階層ビットマップ生成処理のフローチャートと同一の処理については同一符号を付すことで、その重複する処理の説明については簡略する。実施例1と実施例2とが異なる点は、S44A、S44Bである。
図16に示すように、検索部120は、インデックスiに1を設定する(ステップS41)。検索部120は、ビットマップ型インデックス132から、第1キーワードに対する基本ビットマップの中の第iの区間を抽出する(ステップS42)。第iの区間は、例えば第iの64ビット区間に対応する。
検索部120は、抽出した第iの区間のいずれかのビットに出現ビットが設定されているか否かを判定する(ステップS43)。いずれかのビットに出現ビットが設定されていないと判定した場合には(ステップS43;No)、検索部120は、ステップS45に移行する。
一方、いずれかのビットに出現ビットが設定されていると判定した場合には(ステップS43;Yes)、検索部120は、オフセットテーブル201に基づいて、出現ビットの出現位置に対応付けられる項目No201aを特定する(ステップS44A)。そして、検索部120は、第1キーワードに対する上位階層ビットマップの項目Noに対応するビットに出現ビットを設定する(ステップS44B)。つまり、検索部120は、第1キーワードに対する上位階層ビットマップの第iの区間を設定する。そして、検索部120は、ステップS45に移行する。
ステップS45において、検索部120は、インデックスiが最終区間のNであるか否かを判定する(ステップS45)。インデックスiが最終区間のNでないと判定した場合には(ステップS45;No)、検索部120は、インデックスiに1を加算する(ステップS46)。そして、検索部120は、次の区間の処理をすべく、ステップS42に移行する。
一方、インデックスiが最終区間のNであると判定した場合には(ステップS45;Yes)、検索部120は、上位階層ビットマップ生成処理を終了する。
なお、インデックス生成部113は、文字/単語取得部112から出力された単語について、当該単語に対応する基本ビットマップを、ビットマップ型インデックス132から抽出する。インデックス生成部113は、抽出した基本ビットマップに、テキストデータF1内の出現位置に対応するビットに出現ビットを設定する。
[実施例2の効果]
このようにして、上記実施例2では、検索部120は、符号化データに対する元データの区切り単位を含む内容に基づき、第1の軸を上位化して第2のインデックス情報を生成する。そして、検索部120は、第2のインデックス情報を用いて、検索要求に対応した符号化データに対する検索を行う。かかる構成によれば、検索部120は、第1の軸を用いた第1のインデックス情報を生成した後に、ファイルやブロック、項目、文などの、元データの区切り単位に合わせた第2のインデックス情報を動的に生成することで、検索の演算量を抑えることができる。言い換えれば、検索部120は、第1のインデックス情報を生成した後に、目的の粒度に合わせた第2のインデックス情報を動的に生成することで、目的の粒度の第1のインデックス情報を再生成する演算量や出現ビットの頻度が低い単語列や文字列を検索する演算量を抑えることができる。
なお、実施例1、2では、符号化部110が、テキストデータF1を符号化する際に、それぞれの単語について出現位置を取得し、ビットマップ型インデックス132の基本ビットマップの、取得した出現位置に対するビットに出現ビットを設定すると説明した。そして、検索部120は、符号化データに対する検索クエリを受け付けると、受け付けた検索クエリを以下のように検索すると説明した。すなわち、検索部120は、検索クエリの第1キーワードに対する基本ビットマップを64ビット区間ごとに抽出し、抽出した64ビット区間ごとにビット列をそれぞれ1ビットに上位化(集約)した上位階層ビットマップを生成する。さらに、検索部120は、上位階層ビットマップを参照し、出現ビットに対応する出現位置を取得し、取得した出現位置に対応する64ビット区間であって基本ビットマップの中の64ビット区間を検索対象として検索クエリを検索すると説明した。しかしながら、符号化部110は、ビットマップ型インデックス132の(例えばX軸方向の)サイズ縮小を実現するために、ビットマップ型インデックス132のそれぞれの基本ビットマップをハッシュ化し、ハッシュ化インデックスを生成しても良い。すなわち、ハッシュ化処理は、隣接した2つの素数であるハッシュ値(底)を基に、それぞれの基本ビットマップについて、64ビット区間ごとにハッシュ化したハッシュ化ビットマップを生成しても良い。
ここで、基本ビットマップのハッシュ化について、図17を参照して説明する。図17は、基本ビットマップのハッシュ化を説明する図である。図17に示すように、ハッシュ化処理は、単語の単語IDに対応する基本ビットマップの64ビット区間ごとに、ハッシュ関数を適用した2つのハッシュ化ビットマップを生成する。ここでは、ハッシュ化処理は、64ビットのレジスタを想定し、例えば隣接した29と31のハッシュ値(底)を基に、基本ビットマップをハッシュ化する。具体的には、ハッシュ化処理は、1つの底のハッシュ化ビットマップを生成するために、単語IDに対応する基本ビットマップの各ビットの位置を底で割った余りの位置に、当該基本ビットマップの各ビットの値を設定する。一例として、ハッシュ化処理は、底29のハッシュ化ビットマップについて、「in」に対する基本ビットマップの各ビットの位置を底29で割った余りの位置に、基本ビットマップの各ビットの値を設定する(s51)。基本ビットマップの35ビット目の位置のビット値「1」は、底29のハッシュ化ビットマップの6ビット目に設定される。基本ビットマップの42ビット目の位置のビット値「1」は、底29のハッシュ化ビットマップの13ビット目に設定される。ハッシュ化処理は、底31のハッシュ化ビットマップについて、「in」に対する基本ビットマップの各ビットの位置を底31で割った余りの位置に、基本ビットマップの各ビットの値を設定する(s52)。基本ビットマップの35ビット目の位置のビット値「1」は、底31のハッシュ化ビットマップの4ビット目に設定される。基本ビットマップの42ビット目の位置のビット値「1」は、底31のハッシュ化ビットマップの11ビット目に設定される。すなわち、ハッシュ化処理は、基本ビットマップの0ビット目からの各ビットを順番にハッシュ化ビットマップの0ビット目から設定し、(底-1)ビット目まで設定する。そして、ハッシュ化処理は、再度折り返してハッシュ化ビットマップの0ビット目から既にハッシュ化ビットマップに設定された値とOR演算した値を設定する。
このような基本ビットマップをハッシュ化したハッシュ化ビットマップから、検索部120は、検索クエリを検索すれば良い。すなわち、検索部120は、符号化データに対する検索クエリを受け付けると、検索クエリの第1キーワードに対するハッシュ化ビットマップを、64ビット区間をハッシュ化した区間ごとに復元する。検索部120は、復元した64ビット区間ごとにビット列をそれぞれ1ビットに上位化(集約)した上位階層ビットマップを生成する。さらに、検索部120は、上位階層ビットマップを参照し、出現ビットに対応する出現位置を取得し、取得した出現位置に対応するハッシュ化ビットマップを復元する。検索部120は、復元した64ビット区間を検索対象として検索クエリを検索すれば良い。
ここで、ハッシュ化された基本ビットマップの復元について、図18を参照して説明する。図18は、ハッシュ化された基本ビットマップの復元を説明する図である。なお、ハッシュ化された1つの64ビット区間を復元する処理を説明する。図18に示すように、復元処理は、2つのハッシュ化ビットマップをそれぞれビットマップに展開する(第1の復元処理)。ここでは、復元処理は、1つの底のハッシュ化ビットマップの復元先のビットマップについて、底に整数(0~)を乗算して得られた値にハッシュ化ビットマップの各ビットの位置を加算した位置に、ハッシュ化ビットマップの各ビットの値を設定する(s53、s54)。一例として、復元処理は、底29のハッシュ化ビットマップの復元先のビットマップについて、底29に「0」を乗算した値にハッシュ化ビットマップの各ビットの位置を加算した位置に、底29のハッシュ化ビットマップの各ビットの値を設定する。復元処理は、底29のハッシュ化ビットマップの復元先のビットマップについて、底29に「1」を乗算した値にハッシュ化ビットマップの各ビットの位置を加算した位置に、底29のハッシュ化ビットマップの各ビットの値を設定する。復元処理は、復元先の底29のビットマップの最大ビットの位置のビットの値が設定されるまで繰り返す。復元処理は、底31のハッシュ化ビットマップも、同様に、復元先のビットマップに展開する。そして、復元処理は、第1の復元処理で復元された2つのビットマップの対応する位置のビットをAND演算する(第2の復元処理)。ここでは、復元処理は、底29のハッシュ化ビットマップから復元されたビットマップと、底31のハッシュ化ビットマップから復元されたビットマップとをAND演算する(s55)。復元処理は、AND結果のビットマップを基本ビットマップとして出力する。
[実施例に関連する他の態様]
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
また、実施例では、符号化装置100は、テキストデータF1の字句解析に基づいて得られる文字または単語それぞれに対して、テキストデータF1内での出現位置を第1の軸とした基本ビットマップのビットマップ型インデックス123を生成する。符号化装置100は、文字または単語それぞれに対して、第1の軸を上位化した上位階層ビットマップのビットマップ型インデックス123を生成する。符号化装置100は、上位階層ビットマップのビットマップ型インデックス123を用いて、最長一致探索の候補対象となるサブ領域を特定し、サブ領域それぞれにおける最長一致探索に基づき、符号化を行う。しかしながら、符号化装置100は、文字または単語それぞれに対して生成される基本ビットマップおよび上位階層ビットマップを含むビットマップ型インデックス123の代わりに、文字または単語それぞれに対するビットマップごとにハッシュ化したハッシュ化インデックスを生成しても良い。そして、符号化装置100は、最長一致探索の際に、該当する文字または単語に対するハッシュ化インデックスを復元し、復元した基本ビットマップおよび上位階層ビットマップを用いて、最長一致探索の候補対象となるサブ領域を特定し、サブ領域それぞれにおける最長一致探索に基づき、符号化を行えば良い。これにより、符号化装置100は、符号化する際に、使用できる資源が少ない場合であっても、少ない資源で符号化することができる。
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
[情報処理装置のハードウェア構成]
下記に、上述の実施形態に用いられるハードウェア及びソフトウェアについて説明する。図19は、コンピュータ1のハードウェア構成例を示す図である。コンピュータ1は、例えば、プロセッサ301、RAM(Random Access Memory)302、ROM(Read Only Memory)303、ドライブ装置304、記憶媒体305、入力インターフェース(I/F)306、入力デバイス307、出力インターフェース(I/F)308、出力デバイス309、通信インターフェース(I/F)310、SAN(Storage Area Network)インターフェース(I/F)311およびバス312などを含む。それぞれのハードウェアはバス312を介して接続されている。
RAM302は読み書き可能なメモリ装置であって、例えば、SRAM(Static RAM)やDRAM(Dynamic RAM)などの半導体メモリ、またはRAMでなくてもフラッシュメモリなどが用いられる。ROM303は、PROM(Programmable ROM)なども含む。ドライブ装置304は、記憶媒体305に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体305は、ドライブ装置304によって書き込まれた情報を記憶する。記憶媒体305は、例えば、ハードディスク、SSD(Solid State Drive)などのフラッシュメモリ、CD(Compact Disc)、DVD(Digital Versatile Disc)、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ1は、複数種類の記憶媒体それぞれについて、ドライブ装置304及び記憶媒体305を設ける。
入力インターフェース306は、入力デバイス307と接続されており、入力デバイス307から受信した入力信号をプロセッサ301に伝達する回路である。出力インターフェース308は、出力デバイス309と接続されており、出力デバイス309に、プロセッサ301の指示に応じた出力を実行させる回路である。通信インターフェース310はネットワーク3を介した通信の制御を行なう回路である。通信インターフェース310は、例えばネットワークインターフェースカード(NIC)などである。SANインターフェース311は、ストレージエリアネットワークによりコンピュータ1と接続された記憶装置との通信の制御を行なう回路である。SANインターフェース311は、例えばホストバスアダプタ(HBA)などである。
入力デバイス307は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ1の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス309は、コンピュータ1の制御に応じて情報を出力する装置である。出力デバイス309は、例えば、ディスプレイなどの画像出力装置(表示デバイス)や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス307及び出力デバイス309として用いられる。また、入力デバイス307及び出力デバイス309は、コンピュータ1と一体になっていても良いし、コンピュータ1に含まれず、例えば、コンピュータ1に外部から接続する装置であっても良い。
例えば、プロセッサ301は、ROM303や記憶媒体305に記憶されたプログラムをRAM302に読み出し、読み出されたプログラムの手順に従って符号化部110および検索部120の処理を行なう。その際にRAM302はプロセッサ301のワークエリアとして用いられる。記憶部130の機能は、ROM303および記憶媒体305がプログラムファイル(後述のアプリケーションプログラム24、ミドルウェア23およびOS22など)やデータファイル(例えば、静的辞書131、ビットマップ型インデックス132など)を記憶し、RAM302がプロセッサ301のワークエリアとして用いられることによって実現される。プロセッサ301が読み出すプログラムについては、図20を用いて説明する。
図20は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ1において、図19に示すハードウェア群(HW)21(301~312)の制御を行なうOS(オペレーティング・システム)22が動作する。OS22に従った手順でプロセッサ301が動作して、ハードウェア群(HW)21の制御・管理が行なわれることにより、アプリケーションプログラム(AP)24やミドルウェア(MW)23に従った処理がハードウェア群21で実行される。さらに、コンピュータ1において、ミドルウェア(MW)23またはアプリケーションプログラム(AP)24が、RAM302に読み出されてプロセッサ301により実行される。
プロセッサ301が、符号化機能が呼び出された場合に、ミドルウェア23またはアプリケーションプログラム24の少なくとも一部に基づく処理を行なうことにより、(それらの処理をOS22に基づいてハードウェア群21を制御して)符号化部110および検索部120の機能が実現される。符号化機能および検索機能は、アプリケーションプログラム24自体に含まれても良いし、アプリケーションプログラム24に従って呼び出されることで実行されるミドルウェア23の一部であっても良い。
図21は、実施形態のシステムにおける装置の構成例を示す図である。図21のシステムは、コンピュータ1a、コンピュータ1b、基地局2およびネットワーク3を含む。コンピュータ1aは、無線または有線の少なくとも一方により、コンピュータ1bと接続されたネットワーク3に接続している。
図6に示す符号化部110と検索部120とは、図21に示すコンピュータ1aとコンピュータ1bとのいずれに含まれても良い。コンピュータ1bが符号化部110の機能を含み、コンピュータ1aが検索部120の機能を含んでも良いし、コンピュータ1aが符号化部110の機能を含み、コンピュータ1bが検索部120の機能を含んでも良い。また、コンピュータ1aとコンピュータ1bとの双方が、符号化部110の機能および検索部120の機能を備えても良い。