【実施例】
【0012】
[実施例に係る符号化処理]
図1および
図2は、実施例に係る符号化処理の流れの一例を示す図である。
図1に示すように、符号化処理は、符号化対象のテキストデータF1が日本語である場合に、CJK文字とCJK文字の出現位置に対応づけられたビットマップ型インデックスBIを生成するとともに、CJK文字の単位で符号化する。
図2に示すように、符号化処理は、符号化対象のテキストデータF1が英語である場合に、英単語と英単語の出現位置に対応づけられたビットマップ型インデックスBIを生成するとともに、英単語の単位で符号化する。なお、実施例では、CJK文字を単に「文字」というものとする。英単語を単に「単語」というものとする。
【0013】
ここでいうビットマップ型インデックスBIとは、符号化対象のテキストデータF1に含まれる文字または単語を指定するポインタと、文字または単語のテキストデータ内の各オフセット(出現位置)での存否を示すビットを連結したビット列である。すなわち、ビットマップ型インデックスBIとは、符号化対象のテキストデータF1に含まれる文字または単語について、オフセット(出現位置)ごとの存否をインデックス化したビットマップのことをいう。
【0014】
一例として、
図1および
図2に示すように、文字または単語がテキストデータF1内のある出現位置に存在する場合には、出現位置に対応するオフセット(出現位置)の存否としてON、すなわち2進数の「1」を示す出現ビットが設定される。文字または単語がテキストデータF1内のある出現位置に存在しない場合には、出現位置に対応するオフセット(出現位置)の存否としてOFF、すなわち2進数の「0」が設定される。文字または単語を指定するポインタとしては、例えば、文字または単語を一意に表す単語IDが採用される。単語IDは、文字または単語そのものであっても良いし、文字または単語の符号であっても良い。文字または単語の符号とは、符号化されたコード(符号化コード)のことをいい、後述する静的コードに対応する。
【0015】
図1および
図2に示すように、ビットマップ型インデックスBIのX軸はオフセット(出現位置)を表し、Y軸は単語IDを表す。つまり、ビットマップ型インデックスBIに含まれる各ビットマップは、単語IDが示す文字または単語の、オフセット(出現位置)ごとの存否を表す。
【0016】
図1に示すように、符号化対象のテキストデータF1が日本語である場合に、情報処理装置が行う符号化処理は、例えば、符号化対象のテキストデータF1を記憶領域にロードする。そして、符号化処理は、符号化対象のテキストデータF1を記憶領域から読み出し、読み出したテキストデータF1に対して字句解析を行う。ここでいう字句解析とは、符号化されていない状態のテキストデータF1を文字単位に分割することをいう。
【0017】
符号化処理は、字句解析された文字を先頭から順番に取り出し、取り出した文字に対応するビットマップの、出現位置に対するビットに出現ビットを設定する。そして、符号化処理は、静的辞書S0を用いて、取り出した文字を、文字に対応する静的コードに符号化する。
【0018】
ここでいう静的辞書S0とは、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する文字または単語の出現頻度を特定し、出現頻度のより高い文字または単語に対して、より短い符号を割り当てた辞書である。静的辞書S0には、それぞれの文字または単語に対応する符号である静的コードがあらかじめ登録されている。
【0019】
例えば、
図1には、符号化対象のテキストデータF1として「・・昨日と今日・・・明日や未来・・・」が表わされている。「昨」は、テキストデータF1内の10番目の位置に出現する。「日」は、テキストデータF1内の11番目の位置に出現する。「と」は、テキストデータF1内の12番目の位置に出現する。「今」は、テキストデータF1内の13番目の位置に出現する。「日」は、テキストデータF1内の14番目の位置に出現する。
【0020】
符号化処理は、このテキストデータF1に対して字句解析を行う。ここでは、「昨」「日」「と」「今」「日」・・・「明」「日」「や」「未」「来」・・・が字句解析結果となる。
【0021】
そして、符号化処理は、一例として、10番目の位置に出現する文字「昨」について、文字「昨」に対応するビットマップの、出現位置「10」に対するビットに出現ビット「1」を書き込む。そして、符号化処理は、静的辞書S0を用いて、文字「昨」を、文字「昨」に対応する静的コード「8xxx」に符号化し、符号化データに書き込む。
【0022】
そして、符号化処理は、一例として、11番目の位置に出現する文字「日」について、文字「日」に対応するビットマップの、出現位置「11」に対するビットに出現ビット「1」を書き込む。そして、符号化処理は、静的辞書S0を用いて、文字「日」を、文字「日」に対応する静的コード「8yyy」に符号化し、符号化データに書き込む。
【0023】
そして、符号化処理は、一例として、14番目の位置に出現する文字「日」について、文字「日」に対応するビットマップの、出現位置「14」に対するビットに出現ビット「1」を書き込む。そして、符号化処理は、静的辞書S0を用いて、文字「日」を、文字「日」に対応する静的コード「8yyy」に符号化し、符号化データに書き込む。
【0024】
また、
図2に示すように、符号化対象のテキストデータF1が英語である場合に、情報処理装置が行う符号化処理は、例えば、符号化対象のテキストデータF1を記憶領域にロードする。そして、符号化処理は、符号化対象のテキストデータF1を記憶領域から読み出し、読み出したテキストデータF1に対して字句解析を行う。ここでいう字句解析とは、符号化されていない状態のテキストデータF1を単語単位に分割することをいう。一例として、符号化処理は、終端記号(例えば、スペース)を区切りとして、テキストデータF1を単語に分割する。
【0025】
符号化処理は、字句解析された単語を先頭から順番に取り出し、取り出した単語に対応するビットマップの、出現位置に対するビットに出現ビットを設定する。そして、符号化処理は、静的辞書S0を用いて、取り出した単語を、単語に対応する静的コードに符号化する。
【0026】
例えば、
図2には、符号化対象のテキストデータF1として「・・in front of the・・・」が表わされている。「in」は、テキストデータF1内の100番目の位置に出現する。「front」は、テキストデータF1内の101番目の位置に出現する。「of」は、テキストデータF1内の102番目の位置に出現する。「the」は、テキストデータF1内の103番目の位置に出現する。
【0027】
符号化処理は、このテキストデータF1に対して字句解析を行う。ここでは、「in」「front」「of」「the」・・・が字句解析結果となる。
【0028】
そして、符号化処理は、一例として、100番目の位置に出現する単語「in」について、単語「in」に対応するビットマップの、出現位置「100」に対するビットに出現ビット「1」を書き込む。そして、符号化処理は、静的辞書S0を用いて、単語「in」を、単語「in」に対応する静的コード「27」に符号化し、符号化データに書き込む。
【0029】
そして、符号化処理は、一例として、101番目の位置に出現する単語「front」について、単語「front」に対応するビットマップの、出現位置「101」に対するビットに出現ビット「1」を書き込む。そして、符号化処理は、静的辞書S0を用いて、単語「front」を、単語「front」に対応する静的コード「aa」に符号化し、符号化データに書き込む。
【0030】
そして、符号化処理は、一例として、102番目の位置に出現する単語「of」について、単語「of」に対応するビットマップの、出現位置「102」に対するビットに出現ビット「1」を書き込む。そして、符号化処理は、静的辞書S0を用いて、単語「of」を、単語「of」に対応する静的コード「23」に符号化し、符号化データに書き込む。
【0031】
このようにして、符号化処理は、英単語について、英単語単位で符号化することで、符号化の高速化を図ることができる。また、符号化処理は、CJK文字について、単語と同様に、CJK文字単位に符号化することで、符号化の高速化を図ることができる。つまり、符号化処理は、テキストデータF1が日本語である場合には、テキストデータF1を形態素解析して符号化すると、時間を要するところ、形態素解析しないでCJK文字単位に符号化することで、符号化の高速化を図ることができる。ここでいう形態素解析とは、意味を持つ最小限の単位である文字列に分解することをいう。なお、英語と日本語の部分が混在する、英和辞典などの解説文のテキストデータに対しても、この符号化処理を適用することができる。
【0032】
[実施例に係る検索処理]
図3は、実施例に係る検索処理の流れの一例を示す図である。
図3に示すように、検索処理は、ビットマップ型インデックスBIに含まれるビットマップと、検索条件の文字列を構成する各文字の出現順序に対応づけて生成される検索ビットマップとの論理演算により、当該検索条件の文字列を検索する。なお、検索条件の文字列は、「検索文字列」と同義であるとする。また、以降の検索処理の説明は、
図1のビットマップ型インデックスBIを参照するものとする。
【0033】
図3に示すように、情報処理装置が行う検索処理は、検索文字列を受け付ける。ここでは、検索文字列は、「昨日と今日」である。
【0034】
検索処理は、ビットマップ型インデックスBIを参照し、検索文字列が存在するか否かを判定する。
【0035】
例えば、検索処理は、ビットマップ型インデックスBIから検索文字列に含まれる先行する文字に対応するビットマップを抽出し、抽出したビットマップを1ビットだけ左シフトする(s1)。ここでは、検索処理は、検索文字列「昨日と今日」に含まれる先行する文字「昨」に対応するビットマップをビットマップ型インデックスBIから抽出する。このビットマップの10ビット目に「1」が設定されている。検索処理は、このビットマップを1ビットだけ左シフトする。このビットマップの11ビット目に「1」が設定される。
【0036】
そして、検索処理は、ビットマップ型インデックスBIから検索文字列に含まれる後続する文字に対応するビットマップを抽出し、抽出したビットマップと、先行する文字に対応する、シフトした結果のビットマップとをAND演算する(s2)。ここでは、検索処理は、検索文字列「昨日と今日」に含まれる後続する2番目の文字「日」に対応するビットマップをビットマップ型インデックスBIから抽出する。このビットマップの11,14,21ビット目に「1」が設定されている。検索処理は、先行する文字「昨」に対応する、シフトした結果のビットマップと、後続する文字「日」に対応するビットマップとをAND演算する。このAND演算した結果のビットマップb1が、検索文字列を構成する「昨日」における出現順序に対応づけて生成される検索ビットマップに対応する。そして、検索処理は、演算の結果、ビットマップb1の全てのビットが「0」であるか否かを判定する。ここでは、ビットマップb1の11ビット目が「1」として算出されるので、全てのビットが「0」であるとはいえないと判定される。すなわち、検索処理は、今回の文字と次の文字とを含む文字列「昨日」が存在すると判定する。
【0037】
そして、検索処理は、検索文字列に未処理の文字が有るので、今回AND演算した結果のビットマップを1ビットだけ左シフトする(s3)。ここでは、検索処理は、文字列「昨日」に対応する演算結果を示すビットマップb1を1ビットだけ左シフトし、ビットマップb1´を生成する。このビットマップの12ビット目に「1」が設定される。
【0038】
そして、検索処理は、ビットマップ型インデックスBIから検索文字列に含まれる後続する文字に対応するビットマップを抽出し、抽出したビットマップと、先行する文字列に対応する、シフトした結果のビットマップとをAND演算する(s4)。ここでは、検索処理は、検索文字列「昨日と今日」に含まれる後続する3番目の文字「と」に対応するビットマップをビットマップ型インデックスBIから抽出する。このビットマップの12ビット目に「1」が設定されている。検索処理は、先行する文字列「昨日」に対応する、シフトした結果のビットマップb1´と、後続する文字「と」に対応するビットマップとをAND演算する。このAND演算した結果のビットマップb2が、検索文字列を構成する「昨日と」における出現順序に対応づけて生成される検索ビットマップに対応する。そして、検索処理は、演算の結果、ビットマップb2の全てのビットが「0」であるか否かを判定する。ここでは、ビットマップb2の12ビット目が「1」として算出されるので、全てのビットが「0」であるとはいえないと判定される。すなわち、検索処理は、今回の文字列と次の文字とを含む文字列「昨日と」が存在すると判定する。
【0039】
そして、検索処理は、検索文字列に未処理の文字が有るので、今回AND演算した結果のビットマップを1ビットだけ左シフトする(s5)。ここでは、検索処理は、文字列「昨日と」に対応する演算結果を示すビットマップb2を1ビットだけ左シフトし、ビットマップb2´を生成する。このビットマップの13ビット目に「1」が設定される。
【0040】
そして、検索処理は、ビットマップ型インデックスBIから検索文字列に含まれる後続する文字に対応するビットマップを抽出し、抽出したビットマップと、先行する文字列に対応する、シフトした結果のビットマップとをAND演算する(s6)。ここでは、検索処理は、検索文字列「昨日と今日」に含まれる後続する4番目の文字「今」に対応するビットマップをビットマップ型インデックスBIから抽出する。このビットマップの13ビット目に「1」が設定されている。検索処理は、先行する文字列「昨日と」に対応する、シフトした結果のビットマップb2´と、後続する文字「今」に対応するビットマップとをAND演算する。このAND演算した結果のビットマップb3が、検索文字列を構成する「昨日と今」における出現順序に対応づけて生成される検索ビットマップに対応する。そして、検索処理は、演算の結果、ビットマップb3の全てのビットが「0」であるか否かを判定する。ここでは、ビットマップb3の13ビット目が「1」として算出されるので、全てのビットが「0」であるとはいえないと判定される。すなわち、検索処理は、今回の文字列と次の文字とを含む文字列「昨日と今」が存在すると判定する。
【0041】
そして、検索処理は、検索文字列に未処理の文字が有るので、今回AND演算した結果のビットマップを1ビットだけ左シフトする(s7)。ここでは、検索処理は、文字列「昨日と今」に対応する演算結果を示すビットマップb3を1ビットだけ左シフトし、ビットマップb3´を生成する。このビットマップの14ビット目に「1」が設定される。
【0042】
そして、検索処理は、ビットマップ型インデックスBIから検索文字列に含まれる後続する文字に対応するビットマップを抽出し、抽出したビットマップと、先行する文字列に対応する、シフトした結果のビットマップとをAND演算する(s8)。ここでは、検索処理は、検索文字列「昨日と今日」に含まれる後続する5番目の文字「日」に対応するビットマップをビットマップ型インデックスBIから抽出する。このビットマップの11,14,21ビット目に「1」が設定されている。検索処理は、先行する文字列「昨日と今」に対応する、シフトした結果のビットマップb3´と、後続する文字「日」に対応するビットマップとをAND演算する。このAND演算した結果のビットマップb4が、検索文字列を構成する「昨日と今日」における出現順序に対応づけて生成される検索ビットマップに対応する。そして、検索処理は、演算の結果、ビットマップb4の全てのビットが「0」であるか否かを判定する。ここでは、ビットマップの14ビット目が「1」として算出されるので、全てのビットが「0」であるとはいえないと判定される。すなわち、検索処理は、今回の文字列と次の文字とを含む文字列「昨日と今日」が存在すると判定する。
【0043】
そして、検索処理は、検索文字列に未処理の文字が無いので、検索文字列が存在するか否かを判定する。ここでは、検索文字列「昨日と今日」が存在するので、検索処理は、検索文字列「昨日と今日」が存在する旨を検索結果として出力する。
【0044】
このようにして、検索処理は、実体照合をしないで、ビットマップ型インデックスBIを利用し、全文検索をすることで、検索の高速化を図ることができる。また、検索処理は、検索文字列を構成する各文字の位置の連続性を考慮しながら、ビットマップ型インデックスBIを利用して全文検索をすることで、検索の高速化を図ることができる。なお、検索処理は、検索条件を文字列として説明したが、検索条件を単語列としても同様の効果を得ることができる。また、検索処理は、検索条件を文字と単語とが混在した単語列としても同様の効果を得ることが可能となる。例えば、検索処理は、文字と単語との混在ルールに基づき、検索条件の単語列を文字と単語とに分解し、ビットマップ型インデックスBIを利用し、全文検索をすれば良い。例えば、文字と単語との混在ルールとして、文字と単語とが混在していても、単語は終端記号(例えば、スペース)で区切られるという混在ルールが挙げられる。
【0045】
[符号化ファイルの構成例]
図4は、実施例に係る符号化ファイルの構成例を示す図である。
図4に示すように、符号化ファイルF2は、ヘッダ部と、符号化データと、トレーラ部とを有する。符号化データは、テキストデータF1の符号化された符号化コード群を記憶する。テキストデータF1が複数のファイルを含む場合には、符号化データは、例えば、ファイル1用の符号化データ、ファイル2用の符号化データなどそれぞれのファイル用の符号化データを含む。トレーラ部は、各ファイルのアドレスや全文インデックスなどを記憶する。全文インデックスは、
図1および
図2で示したビットマップ型インデックスBIに対応する。各ファイルのアドレスは、テキストデータF1が複数のファイルを含む場合には、複数のファイルに対応する符号化データ内のアドレスを示す。各ファイルのアドレスは、一例として、符号化データの先頭からの相対アドレスである。ヘッダ部は、例えば、符号化ファイルF2の生成に用いられた符号化アルゴリズムを識別する情報や、符号化に用いられたパラメータなどの情報を記憶し、例えば、トレーラ部に格納された各情報へのポインタなどが格納される。
【0046】
[実施例に係る情報処理装置の構成]
図5は、実施例に係る情報処理装置の構成の一例を示す機能ブロック図である。
図5に示すように、情報処理装置100は、符号化部110、検索部120および記憶部130を有する。
【0047】
符号化部110は、
図1および
図2で示した符号化処理を実行する処理部である。符号化部110は、ファイルリード部111、文字/単語取得部112、インデックス生成部113、符号化処理部114およびファイルライト部115を有する。
【0048】
検索部120は、
図3で示した検索処理を実行する処理部である。検索部120は、検索条件受付部121、文字列/単語列検索部122および検索結果出力部123を有する。
【0049】
記憶部130は、例えばフラッシュメモリ(Flash Memory)やFRAM(登録商標)(Ferroelectric Random Access Memory)などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部130は、静的辞書131およびビットマップ型インデックス132を有する。
【0050】
静的辞書131は、一般的な英語辞典、国語辞典や教科書などを基にして、文書中に出現する文字または単語の出現頻度を特定し、出現頻度のより高い文字または単語に対して、より短い符号を割り当てた辞書である。静的辞書131には、それぞれの文字または単語に対応する符号である静的コードがあらかじめ登録されている。なお、静的辞書131は、静的辞書S0に対応する。
【0051】
ビットマップ型インデックス132は、テキストデータF1に含まれる単語または文字について、オフセット(出現位置)ごとの存否をインデックス化したビットマップの集合である。なお、ビットマップ型インデックス132は、ビットマップ型インデックスBIに対応する。ビットマップ型インデックス132の説明は、
図1および
図2と同様であるので、その説明を省略する。
【0052】
ファイルリード部111は、符号化対象のテキストデータF1を記憶領域に読み出す。
【0053】
文字/単語取得部112は、テキストデータF1から文字または単語を取得する。例えば、文字/単語取得部112は、記憶領域に読み出したテキストデータF1に対して字句解析を行う。文字/単語取得部112は、字句解析した結果の文字または単語を、テキストデータF1の先頭から順番に取得する。文字/単語取得部112は、取得した文字または単語と、それぞれのテキストデータF1内の出現位置とを対応づけてインデックス生成部113に出力する。文字/単語取得部112は、取得した文字または単語を符号化処理部114に出力する。
【0054】
インデックス生成部113は、ビットマップ型インデックス132を生成する。例えば、インデックス生成部113は、文字/単語取得部112から出力された文字について、当該文字に対応するビットマップを、ビットマップ型インデックス132から抽出する。インデックス生成部113は、抽出したビットマップに、テキストデータF1内の出現位置に対応する出現ビットを設定する。インデックス生成部113は、文字/単語取得部112から出力された単語について、当該単語に対応するビットマップを、ビットマップ型インデックス132から抽出する。インデックス生成部113は、抽出したビットマップに、テキストデータF1内の出現位置に対応する出現ビットを設定する。
【0055】
符号化処理部114は、文字または単語を符号化する。例えば、符号化処理部114は、文字/単語取得部112から出力された文字を、静的辞書131に登録されている静的コードに符号化する。符号化処理部114は、文字/単語取得部112から出力された単語を、静的辞書131に登録されている静的コードに符号化する。
【0056】
ファイルライト部115は、符号化処理部114によって符号化された符号化コードをファイル単位に符号化ファイルF2の符号化データに格納する。ファイルライト部115は、ビットマップ型インデックス132を符号化ファイルF2のトレーラ部に書き込む。ファイルライト部115は、符号化データ内の各ファイルのアドレスを符号化ファイルF2のトレーラ部に書き込む。
【0057】
検索条件受付部121は、検索条件を受け付ける。例えば、検索条件受付部121は、検索条件として検索対象の文字列または検索対象の単語列を受け付ける。なお、検索条件受付部121は、検索条件として文字と単語とが混在した単語列を受け付けても良い。
【0058】
文字列/単語列検索部122は、検索条件が検索対象の文字列である場合には、ビットマップ型インデックス132を参照し、テキストデータF1に検索対象の文字列が存在するか否かを判定する。文字列/単語列検索部122は、検索条件が検索対象の単語列である場合には、ビットマップ型インデックス132を参照し、テキストデータF1に検索対象の単語列が存在するか否かを判定する。なお、文字列/単語列検索部122は、検索条件が文字と単語とが混在した単語列である場合には、ビットマップ型インデックス132を参照し、テキストデータF1に検索対象の単語列が存在するか否かを判定する。
【0059】
例えば、文字列/単語列検索部122は、検索条件が検索対象の文字列である場合には、以下の処理を行う。文字列/単語列検索部122は、検索対象の文字列に含まれる各文字に対応するビットマップを、ビットマップ型インデックス132から抽出する。文字列/単語列検索部122は、検索対象の文字列に含まれる先行する文字に対応するビットマップを1ビットだけ左シフトする。文字列/単語列検索部122は、先行する文字に対応する、シフトした結果のビットマップと、検索対象の文字列に含まれる後続する文字に対応するビットマップとをAND演算する。このAND演算した結果のビットマップが、検索対象の文字列の中の連続する先行する文字と後続する文字とにおける出現順序に対応づけて生成された検索ビットマップである。文字列/単語列検索部122は、演算の結果、全てのビットが「0」であるか否かを判定する。文字列/単語列検索部122は、全てのビットが「0」であるとはいえない場合には、先行する文字と後続する文字との文字列が存在すると判定する。そして、文字列/単語列検索部122は、検索対象の文字列に未処理の文字が有る場合には、さらに、現に処理された文字列と後続する文字とを含む文字列の検索処理を繰り返す。文字列/単語列検索部122は、検索対象の文字列に未処理の文字が無い場合には、演算処理を終了し、演算の結果、全てのビットが「0」であるとはいえない場合には、検索対象の文字列が存在すると判定する。すなわち、文字列/単語列検索部122は、検索対象の文字列が存在すると判定する。文字列/単語列検索部122は、演算の結果、全てのビットが「0」である場合には、先行する文字(または文字列)と後続する文字との文字列が存在しないと判定する。すなわち、文字列/単語列検索部122は、検索対象の文字列が存在しないと判定する。
【0060】
検索結果出力部123は、検索結果を出力する。例えば、検索結果出力部123は、文字列/単語列検索部122によって検索対象が存在すると判定された場合には、検索結果として検索対象が存在する旨を出力する。検索結果出力部123は、文字列/単語列検索部122によって検索対象が存在しないと判定された場合には、検索結果として検索対象が存在しない旨を出力する。
【0061】
[実施例に係る符号化処理の処理手順]
図5に示した符号化部110の処理手順について、
図6を参照して説明する。
図6は、実施例に係る符号化処理のフローチャートの一例を示す図である。
【0062】
図6に示すように、符号化部110は、前処理を実行する(ステップS11)。例えば、符号化部110は、各種記憶領域を記憶部130に確保する。そして、符号化部110は、符号化対象のファイルを読み出し、読出用の記憶領域にテキストデータF1を格納する(ステップS12)。
【0063】
そして、符号化部110は、読出用の記憶領域から文字または単語を取得する(ステップS13)。例えば、符号化部110は、読出用の記憶領域に格納されたテキストデータF1を字句解析し、字句解析した結果の文字または単語を、テキストデータF1の先頭から順番に取得する。
【0064】
符号化部110は、取得対象は文字であるか否かを判定する(ステップS14)。取得対象は文字であると判定した場合には(ステップS14;Yes)、符号化部110は、取得した文字に対応するビットマップの、出現位置に対するビットに「1」を書き込む(ステップS15)。例えば、符号化部110は、取得した文字に対応するビットマップをビットマップ型インデックス132から抽出する。符号化部110は、抽出したビットマップに、テキストデータF1内の、取得した文字の出現位置に対応する出現ビットを設定する。
【0065】
符号化部110は、取得した文字を、静的辞書131に登録されている静的コードに符号化する(ステップS16)。そして、符号化部110は、ステップS19に移行する。
【0066】
一方、取得対象は文字でないと判定した場合には(ステップS14;No)、符号化部110は、取得対象は単語であると判定し、単語に対応するビットマップの、出現位置に対するビットに「1」を書き込む(ステップS17)。例えば、符号化部110は、取得した単語に対応するビットマップをビットマップ型インデックス132から抽出する。符号化部110は、抽出したビットマップに、テキストデータF1内の、取得した単語の出現位置に対応する出現ビットを設定する。
【0067】
符号化部110は、取得した単語を、静的辞書131に登録されている静的コードに符号化する(ステップS18)。そして、符号化部110は、ステップS19に移行する。
【0068】
ステップS19において、符号化部110は、ファイルの終点か否かを判定する(ステップS19)。ファイルの終点でないと判定した場合には(ステップS19;No)、符号化部110は、次の文字または単語を取得すべく、ステップS13に移行する。
【0069】
一方、ファイルの終点であると判定した場合には(ステップS19;Yes)、符号化部110は、符号化処理を終了する。
【0070】
[実施例に係る検索処理の処理手順]
図5に示した検索部120の処理手順について、
図7を参照して説明する。
図7は、実施例に係る検索処理のフローチャートの一例を示す図である。なお、検索部120の処理手順の一例として、文字列を検索条件とした場合を説明するものとする。
【0071】
図7に示すように、検索部120は、検索対象の文字列を受け付けたか否かを判定する(ステップS21)。検索対象の文字列を受け付けていないと判定した場合には(ステップS21;No)、検索部120は、検索対象の文字列を受け付けるまで、判定処理を繰り返す。
【0072】
一方、検索対象の文字列を受け付けたと判定した場合には(ステップS21;Yes)、検索部120は、検索対象の文字列の先頭の文字を対象文字とし、当該対象文字に対応するビットマップをビットマップ型インデックス132から抽出する(ステップS22)。
【0073】
検索部120は、対象文字または文字列と次の文字とを含む文字列の検索処理を実行する(ステップS23)。なお、文字列の検索処理のフローチャートは、後述する。
【0074】
文字列の検索処理を実行した結果、検索部120は、文字列が存在するか否かを判定する(ステップS24)。文字列が存在しないと判定した場合には(ステップS24;No)、検索部120は、ステップS29に移行する。
【0075】
一方、文字列が存在すると判定した場合には(ステップS24;Yes)、検索部120は、検索対象の文字列に未処理の文字が有るか否かを判定する(ステップS25)。検索対象の文字列に未処理の文字が有ると判定した場合には(ステップS25;Yes)、検索部120は、未処理の文字を次の文字とする(ステップS26)。そして、検索部120は、次の文字を含む文字列を検索すべく、ステップS23に移行する。
【0076】
一方、検索対象の文字列に未処理の文字が無いと判定した場合には(ステップS25;No)、検索部120は、検索対象の文字列が存在するか否かを判定する(ステップS27)。検索対象の文字列が存在すると判定した場合には(ステップS27;Yes)、検索部120は、検索対象が存在する旨を検索結果として出力する(ステップS28)。そして、検索部120は、検索処理を終了する。
【0077】
一方、検索対象の文字列が存在しないと判定した場合には(ステップS27;No)、検索部120は、ステップS29に移行する。ステップS29において、検索部120は、検索対象が存在しない旨を検索結果として出力する(ステップS29)。そして、検索部120は、検索処理を終了する。
【0078】
[実施例に係る文字列検索処理のフローチャート]
図8は、実施例に係る文字列検索処理のフローチャートの一例を示す図である。
【0079】
図8に示すように、検索部120は、対象文字または文字列に対するビットマップを1ビットだけ左シフトする(ステップS31)。そして、検索部120は、次の文字に対するビットマップをビットマップ型インデックス132から抽出する(ステップS32)。そして、検索部120は、対象文字または文字列に対するビットマップと次の文字に対するビットマップとをAND演算する(ステップS33)。そして、検索部120は、AND演算した結果を示すビットマップを、対象文字または文字列に次の文字を加えた対象文字列に対するビットマップとする(ステップS34)。すなわち、AND演算した結果を示すビットマップが、検索対象の文字列を構成する各文字の出現順序に対応づけて生成される検索ビットマップに対応する。
【0080】
検索部120は、AND演算した結果を示すビットマップの全てのビットが「0」であるか否かを判定する(ステップS35)。全てのビットが「0」であると判定した場合には(ステップS35;Yes)、検索部120は、対象文字列がテキストデータF1に存在しないと判定する(ステップS36)。そして、検索部120は、文字列検索処理を終了する。
【0081】
一方、全てのビットが「0」であるとはいえないと判定した場合には(ステップS35;No)、検索部120は、対象文字列がテキストデータF1に存在すると判定する(ステップS37)。そして、検索部120は、文字列検索処理を終了する。
【0082】
これにより、情報処理装置100は、対象テキストデータF1に対する検索文字列を受け付ける。情報処理装置100は、ビットマップ型インデックス132と、検索文字列を構成する各文字または各単語の当該検索文字列における出現順序に対応づけて生成される検索ビットマップデータとの論理演算により、当該検索文字列を検索する。ビットマップ型インデックス132は、対象テキストデータF1に出現する文字または単語それぞれについての当該対象テキストデータF1における出現位置をビットマップデータとして対応づける情報である。かかる構成によれば、情報処理装置100は、ビットマップ型インデックス132の文字または単語それぞれに対するビットマップデータと、検索文字列を構成する文字または単語に対応するビットマップデータとの論理演算により、高速、かつ、検索ノイズの少ない検索を行うことができる。また、情報処理装置100は、検索文字列を構成する各文字または各単語の位置の連続性を考慮しながら検索することで、検索の高速化を図ることができる。
【0083】
また、情報処理装置100は、受け付けた検索文字列に文字と単語とが混在する場合には、文字と単語との混在ルールに基づき、検索文字列を分解する。情報処理装置100は、ビットマップ型インデックス132と、該分解された各文字および各単語に対応するビットマップデータとの論理演算により、検索文字列を検索する。かかる構成によれば、情報処理装置100は、検索文字列に文字と単語とが混在する場合であっても、高速、かつ、検索ノイズの少ない検索を行うことができる。
【0084】
また、情報処理装置100は、対象のテキストデータF1を受け付ける。情報処理装置100は、対象のテキストデータF1に出現する文字または単語それぞれについてビットマップ型インデックス132を生成するとともに、文字の単位または単語の単位で符号化する。情報処理装置100は、符号化されたテキストデータF1に対する検索文字列を受け付けると、該生成されたビットマップ型インデックス132を用いて、検索文字列を検索する。かかる構成によれば、情報処理装置100は、ビットマップ型インデックス132を用いて検索文字列を検索することで、符号化されたテキストデータF1を復号化しなくても、検索文字列を検索することとなり、検索文字列を高速に検索できる。また、情報処理装置100は、意味を持つ最小現の単位である文字列の単位ではなく、文字の単位で符号化することで、符号化の高速化を図ることができる。
【0085】
また、情報処理装置100は、ビットマップ型インデックス132に対応づけられた、検索文字列を構成する第1の文字のビットマップデータを左シフトする。情報処理装置100は、左シフトした結果を示すビットマップデータと、ビットマップ型インデックス132に対応づけられた、検索文字列を構成する第1の文字に連続する第2の文字のビットマップデータとをAND演算する。そして、情報処理装置100は、AND演算した結果を示す、連続する第1の文字と第2の文字における出現順序に対応づけて生成された検索ビットマップデータに連続する第1の文字と第2の文字の出現位置が設定されていれば、検索ビットマップデータを左シフトする。情報処理装置100は、左シフトした結果を示す検索ビットマップデータと、検索文字列を構成する第2の文字に連続する第3の文字のビットマップデータとをAND演算することにより、検索文字列を検索する。かかる構成によれば、情報処理装置100は、検索文字列を構成する連続する文字に対応する検索ビットマップデータを生成し、生成した検索ビットマップデータと、さらに連続する文字の、ビットマップ型インデックス132に対応づけられたビットマップデータとをAND演算することで、検索文字列を高速に検索できる。
【0086】
[実施例に関連する他の態様]
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【0087】
また、実施例では、符号化部110は、インデックス生成部113によって生成されたビットマップ型インデックス132を符号化ファイルF2のトレーラ部に格納すると説明した。しかしながら、符号化部110は、ビットマップ型インデックス132の代わりにビットマップ型インデックス132をビットマップごとにハッシュ化したハッシュ化インデックスを符号化ファイルF2のトレーラ部に格納しても良い。かかる場合には、検索部120は、符号化ファイルF2のトレーラ部に格納されたハッシュ化インデックスから、検索対象の文字列に含まれる各文字に対応するハッシュ化ビットマップを抽出し、抽出したハッシュ化ビットマップを復元する。そして、検索部120は、復元したビットマップを用いて、文字列/単語列検索部122の検索方法で検索対象の文字列を検索すれば良い。すなわち、検索部120は、ビットマップのシフトとAND演算により、全文検索を実現すれば良い。これにより、情報処理装置100は、使用できる資源が少ない場合であっても、少ない資源でテキストファイルF1を符号化し、インデックス化することができ、このインデックス化された情報を用いて、高速に検索することができる。
【0088】
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0089】
[情報処理装置のハードウェア構成]
下記に、上述の実施形態に用いられるハードウェア及びソフトウェアについて説明する。
図9は、コンピュータのハードウェア構成例を示す図である。コンピュータ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を介して接続されている。
【0090】
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を設ける。
【0091】
入力インターフェース306は、入力デバイス307と接続されており、入力デバイス307から受信した入力信号をプロセッサ301に伝達する回路である。出力インターフェース308は、出力デバイス309と接続されており、出力デバイス309に、プロセッサ301の指示に応じた出力を実行させる回路である。通信インターフェース310はネットワーク3を介した通信の制御を行なう回路である。通信インターフェース310は、例えばネットワークインターフェースカード(NIC)などである。SANインターフェース311は、ストレージエリアネットワークによりコンピュータ1と接続された記憶装置との通信の制御を行なう回路である。SANインターフェース311は、例えばホストバスアダプタ(HBA)などである。
【0092】
入力デバイス307は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ1の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス309は、コンピュータ1の制御に応じて情報を出力する装置である。出力デバイス309は、例えば、ディスプレイなどの画像出力装置(表示デバイス)や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス307及び出力デバイス309として用いられる。また、入力デバイス307及び出力デバイス309は、コンピュータ1と一体になっていても良いし、コンピュータ1に含まれず、例えば、コンピュータ1に外部から接続する装置であっても良い。
【0093】
例えば、プロセッサ301は、ROM303や記憶媒体305に記憶されたプログラムをRAM302に読み出し、読み出されたプログラムの手順に従って符号化部110の処理および検索部120の処理を行なう。その際にRAM302はプロセッサ301のワークエリアとして用いられる。記憶部130の機能は、ROM303および記憶媒体305がプログラムファイル(後述のアプリケーションプログラム24、ミドルウェア23およびOS22など)やデータファイル(例えば、静的辞書131、ビットマップ型インデックス132など)を記憶し、RAM302がプロセッサ301のワークエリアとして用いられることによって実現される。プロセッサ301が読み出すプログラムについては、
図10を用いて説明する。
【0094】
図10は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ1において、
図10に示すハードウェア群(HW)21(301〜312)の制御を行なうOS(オペレーティング・システム)22が動作する。OS22に従った手順でプロセッサ301が動作して、ハードウェア群(HW)21の制御・管理が行なわれることにより、アプリケーションプログラム(AP)24やミドルウェア(MW)23に従った処理がハードウェア群(HW)21で実行される。さらに、コンピュータ1において、ミドルウェア(MW)23またはアプリケーションプログラム(AP)24が、RAM302に読み出されてプロセッサ301により実行される。
【0095】
プロセッサ301が、符号化機能が呼び出された場合に、ミドルウェア23またはアプリケーションプログラム24の少なくとも一部に基づく処理を行なうことにより、(それらの処理をOS22に基づいてハードウェア群21を制御して)符号化部110の機能が実現される。プロセッサ301が、検索機能が呼び出された場合に、ミドルウェア23またはアプリケーションプログラム24の少なくとも一部に基づく処理を行なうことにより、(それらの処理をOS22に基づいてハードウェア群21を制御して)検索部120の機能が実現される。符号化機能および検索機能は、アプリケーションプログラム24自体に含まれても良いし、アプリケーションプログラム24に従って呼び出されることで実行されるミドルウェア23の一部であっても良い。
【0096】
図11は、実施形態のシステムにおける装置の構成例を示す。
図11のシステムは、コンピュータ1a、コンピュータ1b、基地局2およびネットワーク3を含む。コンピュータ1aは、無線または有線の少なくとも一方により、コンピュータ1bと接続されたネットワーク3に接続している。
【0097】
図5に示す情報処理装置100の符号化部110と検索部120とは、
図11に示すコンピュータ1aとコンピュータ1bとのいずれに含まれても良い。コンピュータ1bが符号化部110の機能を含み、コンピュータ1aが検索部120の機能を含んでも良いし、コンピュータ1aが符号化部110の機能を含み、コンピュータ1bが検索部120の機能を含んでも良い。また、コンピュータ1aとコンピュータ1bとの双方が、符号化部110の機能および検索部120の機能を備えても良い。