(57)【要約】【課題】特定のタグなどに囲まれた文字列を高速に検索する。【解決手段】インデックス生成装置１００は、対象のテキストデータを読み込み、対象のテキストデータに出現する文字または単語、およびタグそれぞれについて、テキストデータにおける文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたビットマップ型インデックス１２１を生成する。【選択図】図３
2018060424.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
対象のテキストデータを読み込み、
前記対象のテキストデータに出現する文字または単語、およびタグそれぞれについて、前記テキストデータにおける前記文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたインデックス情報を生成する
処理を実行させるインデックス生成プログラム。
【請求項２】
前記生成する処理は、前記インデックス情報に含まれるタグの出現位置に基づき、前記文字または単語それぞれが、どのタグに属するのかを示す情報を付加する
ことを特徴とする請求項１に記載のインデックス生成プログラム。
【請求項３】
対象のテキストデータを読み込む読込部と、
前記対象のテキストデータに出現する文字または単語、およびタグそれぞれについて、前記テキストデータにおける前記文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたインデックス情報を生成する生成部と、
を有することを特徴とするインデックス生成装置。
【請求項４】
コンピュータが、
対象のテキストデータを読み込み、
前記対象のテキストデータに出現する文字または単語、およびタグそれぞれについて、前記テキストデータにおける前記文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたインデックス情報を生成する
処理を実行することを特徴とするインデックス生成方法。
【請求項５】
コンピュータに、
所定の文字または単語、および所定のタグを含む検索要求を受け付け、
対象のテキストデータに出現する文字または単語、およびタグそれぞれについて、前記テキストデータにおける前記文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたインデックス情報に含まれるタグの出現位置に基づき、前記所定の文字または単語それぞれが、前記所定のタグのタグ区間に含まれるか否かを判定する
処理を実行させる検索プログラム。
【請求項６】
所定の文字または単語、および所定のタグを含む検索要求を受け付ける受付部と、
対象のテキストデータに出現する文字または単語、およびタグそれぞれについて、前記テキストデータにおける前記文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたインデックス情報に含まれるタグの出現位置に基づき、前記所定の文字または単語それぞれが、前記所定のタグのタグ区間に含まれるか否かを判定する判定部と、
を有することを特徴とする検索装置。
【請求項７】
コンピュータが、
所定の文字または単語、および所定のタグを含む検索要求を受け付け、
対象のテキストデータに出現する文字または単語、およびタグそれぞれについて、前記テキストデータにおける前記文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたインデックス情報に含まれるタグの出現位置に基づき、前記所定の文字または単語それぞれが、前記所定のタグのタグ区間に含まれるか否かを判定する
処理を実行することを特徴とする検索方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、インデックス生成プログラムなどに関する。
【背景技術】
【０００２】
テキストデータの検索を高速化するために、テキストデータに含まれる文字ごとの、ファイルごとの存否をインデックス化した、ビットマップ型インデックスが知られている（例えば、特許文献１参照）。
【０００３】
また、文字やｎグラムに対して生成された、ファイルやブロックに対する存否を示すビットマップ型インデックスを用いて、文字列を検索する技術が存在する。
【０００４】
一方、文字列を単に検索するのではなく、特定のタグなどに囲まれた文字列を検索するという用途が存在する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１３／０３８５２７号
【特許文献２】特開２００９−２７１８１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の技術では、特定のタグなどに囲まれた文字や単語列を高速に検索することができないという問題がある。
【０００７】
すなわち、文字やｎグラムに対して生成されたビットマップ型インデックスを用いると、検索文字列が、特定のファイルやブロックに存在することはわかる。ところが、ヒットした検索文字列が、検索条件にある特定のタグに囲まれた文字や単語列であるか否かは、ヒットした検索文字列が存在するファイルやブロックをリードして照合しなければ、判断できない。したがって、特定のタグなどに囲まれた文字や単語列を高速に検索することができない。
【０００８】
１つの側面では、特定のタグなどに囲まれた文字や単語列を高速に検索することを目的とする。
【課題を解決するための手段】
【０００９】
第１の案では、インデックス生成プログラムは、コンピュータに、対象のテキストデータを読み込み、前記対象のテキストデータに出現する文字または単語、およびタグそれぞれについて、前記テキストデータにおける前記文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたインデックス情報を生成する処理を実行させる。
【発明の効果】
【００１０】
１つの態様によれば、特定のタグなどに囲まれた文字や単語列を高速に検索できる。
【図面の簡単な説明】
【００１１】
【図１】図１は、実施例に係るビットマップ型インデックスの生成処理の流れの一例を示す図である。
【図２】図２は、実施例に係る検索処理の流れの一例を示す図である。
【図３】図３は、実施例に係るインデックス生成装置の構成の一例を示す機能ブロック図である。
【図４】図４は、実施例に係るインデックス生成処理のフローチャートの一例を示す図である。
【図５】図５は、実施例に係る検索装置の構成の一例を示す機能ブロック図である。
【図６】図６は、実施例に係る検索処理のフローチャートの一例を示す図である。
【図７】図７は、実施例に係る単語列検索処理のフローチャートの一例を示す図である。
【図８】図８は、実施例に係るタグ条件検索処理のフローチャートの一例を示す図である。
【図９】図９は、コンピュータのハードウェア構成例を示す図である。
【図１０】図１０は、コンピュータで動作するプログラムの構成例を示す図である。
【図１１】図１１は、実施形態のシステムにおける装置の構成例を示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願の開示するインデックス生成プログラム、インデックス生成装置、インデックス生成方法、検索プログラム、検索装置および検索方法の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【００１３】
［実施例に係るビットマップ型インデックス生成処理の一例］
図１は、実施例に係るビットマップ型インデックスの生成処理の流れの一例を示す図である。図１に示すように、テキストデータＦ１は、タグとタグ以外の地の文の文字や単語列とが混在した文書である。ビットマップ型インデックス生成処理は、テキストデータに出現する文字や単語、およびタグそれぞれについて、出現位置をビットマップとして対応付けたビットマップ型インデックスを生成する。ここでいう文字とは、ＣＪＫ文字のことをいう。ここでいう単語とは、英単語のことをいう。なお、以降では、ビットマップ型インデックス生成処理を「インデックス生成処理」というものとする。
【００１４】
ここで、タグとは、開始記号‘＜’から始まり、終了記号‘＞’で終わる文字列を指す。例えば、テキストデータＦ１には、「＜副作用＞発熱＜／副作用＞」というデータが含まれる。このデータの中で、＜副作用＞と＜／副作用＞がタグである。そして、＜副作用＞が開始タグであり、＜／副作用＞が終了タグである。このデータの中で、「発熱」がタグ以外の地の文の文字や単語列に対応する。
【００１５】
インデックス生成装置は、テキストデータＦ１を記憶領域から読み出し、読み出したテキストデータＦ１に対して字句解析を行う。ここでいう字句解析とは、テキストデータＦ１を単語やタグなどに分割することをいう。なお、日本語や中国語などのテキストにおいては、単語単位の分割だけでなく、カナや漢字の文字単位での分割であっても良い。
【００１６】
インデックス生成装置は、字句解析された文字や単語、およびタグごとに、テキストデータＦ１内のそれぞれの出現位置をビットマップとして対応付けたビットマップ型インデックスＢＩを生成する。例えば、インデックス生成装置は、字句解析された文字や単語、およびタグの出現順に、それぞれの文字や単語、タグについて、それぞれの文字や単語、タグに対応するビットマップに、テキストデータＦ１内の出現位置に対応する出現ビットを設定する。
【００１７】
ここで、ビットマップ型インデックスＢＩについて説明する。ビットマップ型インデックスＢＩは、対象のテキストデータＦ１に含まれる文字や単語、またはタグを指定するポインタと、文字や単語、またはタグのテキストデータＦ１内のオフセット（出現位置）での存否を示すビットを連結したビット列である。すなわち、ビットマップ型インデックスＢＩとは、対象のテキストデータＦ１に含まれる文字や単語、またはタグについて、オフセット（出現位置）ごとの存否をインデックス化したビットマップのことをいう。一例として、文字や単語、またはタグがテキストデータＦ１内のある出現位置に存在する場合には、出現位置に対応するオフセット（出現位置）の存否としてＯＮ、すなわち２進数の「１」を示す出現ビットが設定される。文字や単語、またはタグがテキストデータＦ１内のある出現位置に存在しない場合には、出現位置に対応するオフセット（出現位置）の存否としてＯＦＦ、すなわち２進数の「０」が設定される。文字や単語、またはタグを指定するポインタとしては、例えば、文字や単語、またはタグのＩＤ（単語ＩＤというものとする）が採用される。単語ＩＤは、文字や単語、またはタグそのものであっても良いし、文字や単語、またはタグの圧縮符号などの何らかの符号であっても良い。実施例では、単語ＩＤとは、文字や単語、またはタグそのものであるとして説明する。
【００１８】
例えば、図１に示すように、ビットマップ型インデックスＢＩのＸ軸はオフセット（出現位置）を表し、Ｙ軸は単語ＩＤを表す。つまり、ビットマップ型インデックスＢＩに含まれる各ビットマップは、各単語ＩＤが示す文字や単語、またはタグの、オフセット（出現位置）ごとの存否を表す。ここでは、ｎが３９であるとして説明する。
【００１９】
ここで、インデックス生成装置がテキストデータＦ１に対してビットマップ型インデックスＢＩを生成する場合の処理について説明する。テキストデータＦ１には、「・・・＜副作用＞発熱＜／副作用＞・・・」が記憶されている。
【００２０】
インデックス生成装置は、テキストデータＦ１に対して字句解析を行い、「＜副作用＞」、「発」、「熱」、「＜／副作用＞」を取得する。
【００２１】
インデックス生成装置は、タグ「＜副作用＞」について、タグ「＜副作用＞」に対応するビットマップに、テキストデータＦ１内の出現位置に対応する出現ビットを設定する。ここでは、タグ「＜副作用＞」は、テキストデータＦ１の６番目の位置に出現する。そこで、インデックス生成装置は、タグ「＜副作用＞」に対応するビットマップの、６ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットを設定する。
【００２２】
次に、インデックス生成装置は、文字「発」について、文字「発」に対応するビットマップに、テキストデータＦ１内の出現位置に対応する出現ビットを設定する。ここでは、文字「発」は、テキストデータＦ１の７番目の位置に出現する。そこで、インデックス生成装置は、文字「発」に対応するビットマップの、７ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットを設定する。
【００２３】
次に、インデックス生成装置は、文字「熱」について、文字「熱」に対応するビットマップに、テキストデータＦ１内の出現位置に対応する出現ビットを設定する。ここでは、文字「熱」は、テキストデータＦ１の８番目の位置に出現する。そこで、インデックス生成装置は、文字「熱」に対応するビットマップの、８ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットを設定する。
【００２４】
次に、インデックス生成装置は、タグ「＜／副作用＞」について、タグ「＜／副作用＞」に対応するビットマップに、テキストデータＦ１内の出現位置に対応する出現ビットを設定する。ここでは、タグ「＜／副作用＞」は、テキストデータＦ１の９番目の位置に出現する。そこで、インデックス生成装置は、タグ「＜／副作用＞」に対応するビットマップの、９ビット目の出現位置にＯＮ、すなわち２進数の「１」を示す出現ビットを設定する。
【００２５】
このようにして、インデックス生成装置は、テキストデータＦ１に出現する文字や単語およびタグそれぞれについて、出現位置をビットマップとして対応付けたビットマップ型インデックスＢＩを生成する。
【００２６】
［実施例に係る検索処理の一例］
図２は、実施例に係る検索処理の流れの一例を示す図である。図２に示すように、検索処理は、ビットマップ型インデックスＢＩに基づき、検索対象のタグで囲まれた地の文に、検索対象の文字や単語列が存在するかどうかを判定する。なお、以降の検索処理の説明は、図１のビットマップ型インデックスＢＩを参照するものとする。
【００２７】
検索装置は、検索対象の文字や単語列および検索対象のタグを受け付ける。ここでは、検索対象の文字や単語列は「発熱」であり、検索対象のタグは「副作用」である。
【００２８】
検索装置は、ビットマップ型インデックスＢＩを参照し、検索対象の文字や単語列が存在するか否かを判定する。例えば、検索装置は、検索対象の文字や単語列に含まれる先行する文字や単語に対応するビットマップを１ビットだけ左シフトする（ｓ１）。ここでは、検索装置は、検索対象の文字列「発熱」に含まれる先行する文字「発」に対応するビットマップをビットマップ型インデックスＢＩから抽出する。このビットマップの７ビット目に「１」が設定されている。検索装置は、このビットマップを１ビットだけ左シフトする。このビットマップの８ビット目に「１」が設定される。
【００２９】
そして、検索装置は、先行する文字や単語に対応する、シフトした結果のビットマップと、検索対象の文字や単語列に含まれる後続する文字や単語に対応するビットマップとをＡＮＤ演算する（ｓ２）。ここでは、検索装置は、検索対象の文字列「発熱」に含まれる後続する文字「熱」に対応するビットマップをビットマップ型インデックスＢＩから抽出する。このビットマップの８ビット目に「１」が設定されている。検索装置は、先行する文字「発」に対応する、シフトした結果のビットマップと、後続する文字「熱」に対応するビットマップとをＡＮＤ演算する。そして、検索装置は、演算の結果、全てのビットが「０」であるか否かを判定する。ここでは、ビットマップの８ビット目が「１」として算出されるので、全てのビットが「０」であるとはいえないと判定される。すなわち、検索装置は、テキストデータＦ１に検索対象の文字列「発熱」が存在すると判定する。
【００３０】
次に、検索装置は、ビットマップ型インデックスＢＩを参照し、検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在するか否かを判定する。例えば、検索装置は、検索対象のタグの開始タグ「＜副作用＞」および終了タグ「＜／副作用＞」に対応するそれぞれのビットマップを抽出する。ここでは、開始タグ「＜副作用＞」のビットマップの６ビット目に「１」が設定されている。終了タグ「＜／副作用＞」のビットマップの９ビット目に「１」が設定されている。検索装置は、「＜副作用＞」のタグの区間を検出する（ｓ３）。ここでは、開始タグ「＜副作用＞」の出現位置を示す６ビット目と終了タグ「＜／副作用＞」の出現位置を示す９ビット目との間の区間が検出される。
【００３１】
区間の検出方法の一例として、検索装置は、終了タグ「＜／副作用＞」のビットマップを１ビットだけ左シフトし、シフトした結果のビットマップから開始タグ「＜副作用＞」のビットマップを減算すれば良い。具体的には、終了タグ「／副作用」のビットマップを１ビットだけ左シフトした結果として、１０ビット目から６ビット目までのビット列が「１００００」となる。開始タグ「＜副作用＞」の１０ビット目から６ビット目までのビット列は、「００００１」である。そして、検索装置は、終了タグ「＜／副作用＞」のビット列から開始タグ「＜副作用＞」のビット列を減算し、１０ビット目から６ビット目までのビット列として「０１１１１」を検出する。つまり、９ビット目から６ビット目までのビット列「１１１１」が「＜副作用＞」のタグの区間として検出される。
【００３２】
そして、検索装置は、「＜副作用＞」のタグの区間に対応するビットマップと検索対象の文字列「発熱」に対応するビットマップとをＡＮＤ演算する（ｓ４）。そして、検索装置は、演算の結果、全てのビットが「０」であるか否かを判定する。ここでは、ビットマップの８ビット目が「１」として算出されるので、全てのビットが「０」であるとはいえないと判定される。すなわち、検索装置は、テキストデータＦ１に検索対象のタグ「＜副作用＞」で囲まれた地の文に、検索対象の文字列「発熱」が存在すると判定する。そして、検索装置は、「＜副作用＞発熱＜／副作用＞  存在する」を出力する。
【００３３】
［実施例に係るインデックス生成装置の構成］
図３は、実施例に係るインデックス生成装置の構成の一例を示す機能ブロック図である。図３に示すように、インデックス生成装置１００は、制御部１１０および記憶部１２０を有する。
【００３４】
制御部１１０は、図１に示したビットマップ型インデックスＢＩの生成処理を実行する処理部である。制御部１１０は、ファイルリード部１１１、単語／タグ取得部１１２およびインデックス生成部１１３を有する。
【００３５】
記憶部１２０は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部１２０は、ビットマップ型インデックス１２１を有する。
【００３６】
ビットマップ型インデックス１２１は、テキストデータＦ１に含まれる文字や単語、またはタグについて、オフセット（出現位置）ごとの存否をインデックス化したビットマップの集合である。なお、ビットマップ型インデックス１２１は、ビットマップ型インデックスＢＩに対応する。ビットマップ型インデックス１２１は、図１と同様であるので、その説明を省略する。
【００３７】
ファイルリード部１１１は、対象のファイルを記憶領域に読み出す。
【００３８】
単語／タグ取得部１１２は、記憶領域からテキストデータＦ１を読み出し、読み出したテキストデータＦ１に対して字句解析を行う。単語／タグ取得部１１２は、字句解析した結果の文字や単語、およびタグをテキストデータＦ１の先頭から順番に取得する。単語／タグ取得部１１２は、取得した文字や単語、およびタグと、それぞれのテキストデータＦ１内の出現位置とを対応付けてインデックス生成部１１３に出力する。
【００３９】
インデックス生成部１１３は、ビットマップ型インデックス１２１を生成する。例えば、インデックス生成部１１３は、単語／タグ取得部１１２から出力された文字や単語について、当該文字や単語に対応するビットマップを、ビットマップ型インデックス１２１から抽出する。インデックス生成部１１３は、抽出したビットマップに、テキストデータＦ１内の出現位置に対応する出現ビットを設定する。インデックス生成部１１３は、単語／タグ取得部１１２から出力されたタグについて、当該タグに対応するビットマップを、ビットマップ型インデックス１２１から抽出する。インデックス生成部１１３は、抽出したビットマップに、テキストデータＦ１内の出現位置に対応する出現ビットを設定する。
【００４０】
［実施例に係るインデックス生成処理のフローチャート］
図４は、実施例に係るインデックス生成処理のフローチャートの一例を示す図である。
【００４１】
図４に示すように、制御部１１０は、前処理を実行する（ステップＳ１１）。例えば、制御部１１０は、各種記憶領域を記憶部１２０に確保する。そして、制御部１１０は、対象のファイルを読出し、読出用の記憶領域にテキストデータＦ１を格納する（ステップＳ１２）。
【００４２】
そして、制御部１１０は、読出用の記憶領域の先頭から順番に文字や単語、またはタグを取得する（ステップＳ１３）。例えば、制御部１１０は、読出用の記憶領域に記憶されたテキストデータＦ１に対して字句解析を行って、先頭から順番に文字や単語またはタグを取得する。
【００４３】
そして、制御部１１０は、取得した文字や単語、またはタグに対応するビットマップの、出現位置に対するビットに「１」を書き込む（ステップＳ１４）。例えば、制御部１１０は、取得した対象が単語である場合には、当該単語に対応するビットマップを、ビットマップ型インデックス１２１から抽出する。そして、制御部１１０は、抽出したビットマップに、テキストデータＦ１内の当該単語の出現位置に対応する出現ビットを設定する。制御部１１０は、取得した対象が文字である場合には、当該文字に対応するビットマップを、ビットマップ型インデックス１２１から抽出する。そして、制御部１１０は、抽出したビットマップに、テキストデータＦ１内の当該文字の出現位置に対応する出現ビットを設定する。制御部１１０は、取得した対象がタグである場合には、当該タグに対応するビットマップを、ビットマップ型インデックス１２１から抽出する。そして、制御部１１０は、抽出したビットマップに、テキストデータＦ１内の当該タグの出現位置に対応する出現ビットを設定する。
【００４４】
そして、制御部１１０は、ファイルの終点か否かを判定する（ステップＳ１５）。ファイルの終点でないと判定した場合には（ステップＳ１５；Ｎｏ）、制御部１１０は、次の文字や単語、またはタグを読み出すべく、ステップＳ１３に移行する。
【００４５】
一方、ファイルの終点であると判定した場合には（ステップＳ１５；Ｙｅｓ）、制御部１１０は、ビットマップ型インデックス１２１を記憶部１２０に格納する（ステップＳ１６）。そして、制御部１１０は、インデックス生成処理を終了する。
【００４６】
［実施例に係る検索装置の構成］
図５は、実施例に係る検索装置の構成の一例を示す機能ブロック図である。図５に示すように、検索装置２００は、制御部２１０および記憶部２２０を有する。
【００４７】
制御部２１０は、図２に示した検索処理を実行する処理部である。制御部２１０は、検索条件受付部２１１、単語列検索部２１２、タグ条件検索部２１３および検索結果出力部２１４を有する。
【００４８】
記憶部２２０は、例えばフラッシュメモリ（Flash  Memory）やＦＲＡＭ（登録商標）（Ferroelectric  Random  Access  Memory）などの不揮発性の半導体メモリ素子などの記憶装置に対応する。記憶部２２０は、ビットマップ型インデックス２２１を有する。
【００４９】
ビットマップ型インデックス２２１は、図１と同様であるので、その説明を省略する。
【００５０】
検索条件受付部２１１は、検索条件を受け付ける。例えば、検索条件受付部２１１は、検索条件として検索対象の文字や単語列および検索対象のタグを受け付ける。
【００５１】
単語列検索部２１２は、ビットマップ型インデックス２２１を参照し、テキストデータＦ１に検索対象の文字や単語列が存在するか否かを判定する。例えば、単語列検索部２１２は、検索対象の文字や単語列に含まれる各文字や各単語に対応するビットマップを、ビットマップ型インデックス２２１から抽出する。単語列検索部２１２は、先行する文字や単語に対するビットマップを１ビットだけ左シフトする。単語列検索部２１２は、先行する文字や単語に対応する、シフトした結果のビットマップと、後続する文字や単語に対応するビットマップとをＡＮＤ演算する。単語列検索部２１２は、演算の結果、全てのビットが「０」であるか否かを判定する。単語列検索部２１２は、全てのビットが「０」であるとはいえない場合には、先行する文字や単語と後続する文字や単語との文字や単語列が存在すると判定する。そして、単語列検索部２１２は、検索対象の文字や単語列に未処理の文字や単語が有る場合には、さらに、現在の文字や単語列と後続する文字や単語とを含む文字や単語列の検索処理を繰り返す。単語列検索部２１２は、検索対象の文字や単語列に未処理の文字や単語が無い場合には、検索対象の文字や単語列が存在すると判定する。単語列検索部２１２は、全てのビットが「０」である場合には、先行する文字や単語と後続する文字や単語との文字や単語列が存在しないと判定する。すなわち、単語列検索部２１２は、検索対象の文字や単語列が存在しないと判定する。
【００５２】
タグ条件検索部２１３は、ビットマップ型インデックス２２１を参照し、検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在するか否かを判定する。例えば、タグ条件検索部２１３は、検索対象のタグの開始タグおよび終了タグに対応するそれぞれのビットマップをビットマップ型インデックス２２１から抽出する。タグ条件検索部２１３は、開始タグのビットマップおよび終了タグのビットマップを用いて、検索対象のタグの区間に対応するビットマップを生成する。そして、タグ条件検索部２１３は、検索対象のタグの区間に対応するビットマップと検索対象の文字や単語列に対応するビットマップとをＡＮＤ演算する。タグ条件検索部２１３は、全てのビットが「０」であるか否かを判定する。タグ条件検索部２１３は、全てのビットが「０」であるとはいえない場合には、検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在すると判定する。タグ条件検索部２１３は、全てのビットが「０」である場合には、検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在しないと判定する。
【００５３】
検索結果出力部２１４は、検索結果を出力する。例えば、検索結果出力部２１４は、タグ条件検索部２１３によって検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在すると判定された場合には、検索結果として検索対象が存在する旨を出力する。検索結果出力部２１４は、タグ条件検索部２１３によって検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在しないと判定した場合には、検索結果として検索対象が存在しない旨を出力する。
【００５４】
［実施例に係る検索処理のフローチャート］
図６は、実施例に係る検索処理のフローチャートの一例を示す図である。
【００５５】
図６に示すように、制御部２１０は、検索対象の文字や単語列およびタグを受け付けたか否かを判定する（ステップＳ２１）。検索対象の文字や単語列およびタグを受け付けていないと判定した場合には（ステップＳ２１；Ｎｏ）、制御部２１０は、検索対象の文字や単語列およびタグを受け付けるまで、判定処理を繰り返す。
【００５６】
一方、検索対象の文字や単語列およびタグを受け付けたと判定した場合には（ステップＳ２１；Ｙｅｓ）、制御部２１０は、検索対象の文字や単語列に含まれる各文字や各単語に対応するビットマップを一時領域に保持する（ステップＳ２２）。例えば、制御部２１０は、検索対象の文字や単語列に含まれる各文字や各単語に対応するビットマップを、ビットマップ型インデックス２２１から抽出し、抽出した各ビットマップを一時的な記憶領域に保持する。
【００５７】
制御部２１０は、今回の対象（文字や単語、または文字や単語列）と次の文字や単語とを含む文字や単語列の検索処理を実行する（ステップＳ２３）。なお、単語列の検索処理のフローチャートは、後述する。
【００５８】
文字や単語列の検索処理を実行した結果、制御部２１０は、文字や単語列が存在するか否かを判定する（ステップＳ２４）。文字や単語列が存在しないと判定した場合には（ステップＳ２４；Ｎｏ）、制御部２１０は、ステップＳ３０に移行する。
【００５９】
一方、文字や単語列が存在すると判定した場合には（ステップＳ２４；Ｙｅｓ）、制御部２１０は、検索対象の文字や単語列に未処理の文字や単語が有るか否かを判定する（ステップＳ２５）。検索対象の文字や単語列に未処理の文字や単語が有ると判定した場合には（ステップＳ２５；Ｙｅｓ）、制御部２１０は、次の文字や単語を含む文字や単語列を検索すべく、ステップＳ２３に移行する。
【００６０】
一方、検索対象の文字や単語列に未処理の文字や単語が無いと判定した場合には（ステップＳ２５；Ｎｏ）、制御部２１０は、検索対象のタグについて、開始タグおよび終了タグに対応するビットマップを一時領域に保持する（ステップＳ２６）。例えば、制御部２１０は、検索対象のタグにおける開始タグおよび終了タグに対応する各ビットマップを、ビットマップ型インデックス２２１から抽出し、抽出した各ビットマップを一時的な記憶領域に保持する。
【００６１】
制御部２１０は、タグ条件を検索する（ステップＳ２７）。すなわち、制御部２１０は、検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在するか否かを判定する。なお、タグ条件の検索処理のフローチャートは、後述する。
【００６２】
タグ条件の検索処理を実行した結果、制御部２１０は、検索対象の文字や単語列、およびタグが存在するか否かを判定する（ステップＳ２８）。検索対象の文字や単語列、およびタグが存在すると判定した場合には（ステップＳ２８；Ｙｅｓ）、制御部２１０は、検索対象が存在する旨を検索結果とする（ステップＳ２９）。一方、検索対象の文字や単語列、およびタグが存在しないと判定した場合には（ステップＳ２８；Ｎｏ）、制御部２１０は、ステップＳ３０に移行する。
【００６３】
ステップＳ３０において、制御部２１０は、検索対象が存在しない旨を検索結果とする（ステップＳ３０）。そして、制御部２１０は、検索処理を終了する。
【００６４】
［実施例に係る単語列検索処理のフローチャート］
図７は、実施例に係る単語列検索処理のフローチャートの一例を示す図である。
【００６５】
図７に示すように、制御部２１０は、今回の対象（文字や単語、または文字や単語列）に対するビットマップを１ビットだけ左シフトする（ステップＳ４１）。そして、制御部２１０は、今回の対象に対するビットマップと次の文字や単語に対するビットマップとをＡＮＤ演算する（ステップＳ４２）。
【００６６】
制御部２１０は、ＡＮＤ演算した結果を示すビットマップの全てのビットが「０」であるか否かを判定する（ステップＳ４３）。全てのビットが「０」であると判定した場合には（ステップＳ４３；Ｙｅｓ）、制御部２１０は、今回の対象と次の文字や単語とを含む文字や単語列がテキストデータＦ１に存在しないと判定する（ステップＳ４４）。そして、制御部２１０は、単語列検索処理を終了する。
【００６７】
一方、全てのビットが「０」であるとはいえないと判定した場合には（ステップＳ４３；Ｎｏ）、制御部２１０は、今回の対象と次の文字や単語とを含む文字や単語列がテキストデータＦ１に存在すると判定する（ステップＳ４５）。そして、制御部２１０は、単語列検索処理を終了する。
【００６８】
［実施例に係るタグ条件検索処理のフローチャート］
図８は、実施例に係るタグ条件検索処理のフローチャートの一例を示す図である。
【００６９】
図８に示すように、制御部２１０は、開始タグ〜終了タグの区間に「１」を設定する（ステップＳ５１）。例えば、制御部２１０は、終了タグに対応するビットマップを１ビットだけ左シフトし、シフトした結果のビットマップから開始タグに対応するビットマップを減算する。そして、制御部２１０は、開始タグ〜終了タグの区間に対するビットマップと検索対象の文字や単語列に対するビットマップとをＡＮＤ演算する（ステップＳ５２）。
【００７０】
制御部２１０は、ＡＮＤ演算した結果を示すビットマップの全てのビットが「０」であるか否かを判定する（ステップＳ５３）。全てのビットが「０」であると判定した場合には（ステップＳ５３；Ｙｅｓ）、制御部２１０は、検索対象の文字や単語列およびタグがテキストデータＦ１に存在しないと判定する（ステップＳ５４）。すなわち、制御部２１０は、検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在しないと判定する。そして、制御部２１０は、タグ条件検索処理を終了する。
【００７１】
一方、全てのビットが「０」であるとはいえないと判定した場合には（ステップＳ５３；Ｎｏ）、制御部２１０は、検索対象の文字や単語列およびタグがテキストデータＦ１に存在すると判定する（ステップＳ５５）。すなわち、制御部２１０は、検索対象のタグで囲まれた地の文に検索対象の文字や単語列が存在すると判定する。そして、制御部２１０は、タグ条件検索処理を終了する。
【００７２】
［実施例の効果］
上記実施例によれば、インデックス生成装置１００は、対象のテキストデータＦ１を読み込む。インデックス生成装置１００は、対象のテキストデータＦ１に出現する文字または単語、およびタグそれぞれについて、テキストデータにおける文字または単語、およびタグそれぞれの出現位置をビットマップデータとして対応付けたビットマップ型インデックス１２１を生成する。かかる構成によれば、インデックス生成装置１００は、ビットマップ型インデックス１２１を用いることで、タグおよび、文字または単語を含む検索文字列の検索を高速化できる。また、インデックス生成装置１００は、ビットマップ型インデックス１２１を参照するだけで、対象のテキストデータＦ１を参照することなく、検索文字列の存在の有無、検索文字列の複数存在の有無、検索文字列の存在件数についても、検索することが可能となる。
【００７３】
また、上記実施例によれば、検索装置２００は、所定の文字または単語、および所定のタグを含む検索要求を受け付ける。検索装置２００は、ビットマップ型インデックス２２１に含まれるタグの出現位置に基づき、所定の文字または単語それぞれが、所定のタグのタグ区間に含まれるか否かを判定する。かかる構成によれば、検索装置２００は、ビットマップ型インデックス２２１を用いることで、高速、かつ、検索ノイズの少ない検索を行うことができる。
【００７４】
［実施例に関連する他の態様］
以下、上述の実施形態における変形例の一部を説明する。下記の変形例のみでなく、本発明の本旨を逸脱しない範囲の設計変更は適宜行われうる。
【００７５】
また、インデックス生成装置１００は、テキストデータＦ１に出現する文字または単語、およびタグそれぞれについて、出現位置をビットマップとして対応付けたビットマップ型インデックス１２１を生成する。しかしながら、インデックス生成装置１００は、これに限定されず、ビットマップ型インデックス１２１から、さらに、ビットマップごとにハッシュ化したハッシュ化インデックスを生成しても良い。これにより、インデックス生成装置１００は、保持するインデックス情報のサイズを抑制することができる。かかる場合には、検索装置２００は、ハッシュ化インデックス内の、対象となる単語または文字、およびタグに対応するハッシュ化ビットマップを復元して、復元したビットマップに対して検索処理を実行すれば良い。
【００７６】
また、インデックス生成装置１００は、テキストデータＦ１に出現する文字または単語、およびタグそれぞれについて、出現位置をビットマップとして対応付けたビットマップ型インデックス１２１を生成する。しかしながら、インデックス生成装置１００は、これに限定されず、ビットマップ型インデックス１２１に含まれるタグの出現位置に基づき、文字または単語それぞれが、どのタグに属するのかを示すタグ属性の情報をビットマップ型インデックス１２１に付加しても良い。かかる場合には、検索装置２００は、所定の文字または単語、および所定のタグを含む検索要求を受け付けると、ビットマップ型インデックス１２１に付加されたタグ属性の情報を用いて、所定の文字または単語それぞれが、所定のタグに属するのか否かを判定する。これにより、検索装置２００は、さらに、高速、且つ、検索ノイズの少ない検索を行うことができる。
【００７７】
また、実施例に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００７８】
［ハードウェア構成］
下記に、上述の実施形態に用いられるハードウェア及びソフトウェアについて説明する。図９は、コンピュータ１のハードウェア構成例を示す図である。コンピュータ１は、例えば、プロセッサ３０１、ＲＡＭ（Random  Access  Memory）３０２、ＲＯＭ（Read  Only  Memory）３０３、ドライブ装置３０４、記憶媒体３０５、入力インターフェース（Ｉ／Ｆ）３０６、入力デバイス３０７、出力インターフェース（Ｉ／Ｆ）３０８、出力デバイス３０９、通信インターフェース（Ｉ／Ｆ）３１０、ＳＡＮ（Storage  Area  Network）インターフェース（Ｉ／Ｆ）３１１およびバス３１２などを含む。それぞれのハードウェアはバス３１２を介して接続されている。
【００７９】
ＲＡＭ３０２は読み書き可能なメモリ装置であって、例えば、ＳＲＡＭ（Static  RAM）やＤＲＡＭ（Dynamic  RAM）などの半導体メモリ、またはＲＡＭでなくてもフラッシュメモリなどが用いられる。ＲＯＭ３０３は、ＰＲＯＭ（Programmable  ROM）なども含む。ドライブ装置３０４は、記憶媒体３０５に記録された情報の読み出しか書き込みかの少なくともいずれか一方を行なう装置である。記憶媒体３０５は、ドライブ装置３０４によって書き込まれた情報を記憶する。記憶媒体３０５は、例えば、ハードディスク、ＳＳＤ（Solid  State  Drive）などのフラッシュメモリ、ＣＤ（Compact  Disk）、ＤＶＤ（Digital  Versatile  Disc）、ブルーレイディスクなどの記憶媒体である。また、例えば、コンピュータ１は、複数種類の記憶媒体それぞれについて、ドライブ装置３０４及び記憶媒体３０５を設ける。
【００８０】
入力インターフェース３０６は、入力デバイス３０７と接続されており、入力デバイス３０７から受信した入力信号をプロセッサ３０１に伝達する回路である。出力インターフェース３０８は、出力デバイス３０９と接続されており、出力デバイス３０９に、プロセッサ３０１の指示に応じた出力を実行させる回路である。通信インターフェース３１０はネットワーク３を介した通信の制御を行なう回路である。通信インターフェース３１０は、例えばネットワークインターフェースカード（ＮＩＣ）などである。ＳＡＮインターフェース３１１は、ストレージエリアネットワークによりコンピュータ１と接続された記憶装置との通信の制御を行なう回路である。ＳＡＮインターフェース３１１は、例えばホストバスアダプタ（ＨＢＡ）などである。
【００８１】
入力デバイス３０７は、操作に応じて入力信号を送信する装置である。入力信号は、例えば、キーボードやコンピュータ１の本体に取り付けられたボタンなどのキー装置や、マウスやタッチパネルなどのポインティングデバイスである。出力デバイス３０９は、コンピュータ１の制御に応じて情報を出力する装置である。出力デバイス３０９は、例えば、ディスプレイなどの画像出力装置（表示デバイス）や、スピーカーなどの音声出力装置などである。また、例えば、タッチスクリーンなどの入出力装置が、入力デバイス３０７及び出力デバイス３０９として用いられる。また、入力デバイス３０７及び出力デバイス３０９は、コンピュータ１と一体になっていても良いし、コンピュータ１に含まれず、例えば、コンピュータ１に外部から接続する装置であっても良い。
【００８２】
例えば、プロセッサ３０１は、ＲＯＭ３０３や記憶媒体３０５に記憶されたプログラムをＲＡＭ３０２に読み出し、読み出されたプログラムの手順に従って制御部１１０，２１０の処理を行なう。その際にＲＡＭ３０２はプロセッサ３０１のワークエリアとして用いられる。記憶部１２０，２２０の機能は、ＲＯＭ３０３および記憶媒体３０５がプログラムファイル（後述のアプリケーションプログラム２４、ミドルウェア２３およびＯＳ２２など）やデータファイル（例えば、ビットマップ型インデックス１２１，２２１など）を記憶し、ＲＡＭ３０２がプロセッサ３０１のワークエリアとして用いられることによって実現される。プロセッサ３０１が読み出すプログラムについては、図１０を用いて説明する。
【００８３】
図１０は、コンピュータで動作するプログラムの構成例を示す図である。コンピュータ１において、図１０に示すハードウェア群（ＨＷ）２１（３０１〜３１１）の制御を行なうＯＳ（オペレーティング・システム）２２が動作する。ＯＳ２２に従った手順でプロセッサ３０１が動作して、ＨＷ２１の制御・管理が行なわれることにより、アプリケーションプログラム（ＡＰ）２４やミドルウェア（ＭＷ）２３に従った処理がＨＷ２１で実行される。さらに、コンピュータ１において、ＭＷ２３またはＡＰ２４が、ＲＡＭ３０２に読み出されてプロセッサ３０１により実行される。
【００８４】
プロセッサ３０１が、インデックス生成機能が呼び出された場合に、ＭＷ２３またはＡＰ２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてＨＷ２１を制御して）制御部１１０の機能が実現される。プロセッサ３０１が、検索機能が呼び出された場合に、ＭＷ２３またはＡＰ２４の少なくとも一部に基づく処理を行なうことにより、（それらの処理をＯＳ２２に基づいてＨＷ２１を制御して）制御部２１０の機能が実現される。インデックス生成機能および検索機能は、ＡＰ２４自体に含まれても良いし、ＡＰ２４に従って呼び出されることで実行されるＭＷ２３の一部であっても良い。
【００８５】
図１１は、実施形態のシステムにおける装置の構成例を示す図である。図１１のシステムは、コンピュータ１ａ、コンピュータ１ｂ、基地局２およびネットワーク３を含む。コンピュータ１ａは、無線または有線の少なくとも一方により、コンピュータ１ｂと接続されたネットワーク３に接続している。
【００８６】
インデックス生成装置１００と検索装置２００とは、図１１に示すコンピュータ１ａとコンピュータ１ｂとのいずれに含まれても良い。コンピュータ１ｂがインデックス生成装置１００の機能を含み、コンピュータ１ａが検索装置２００の機能を含んでも良いし、コンピュータ１ａがインデックス生成装置１００の機能を含み、コンピュータ１ｂが検索装置２００の機能を含んでも良い。また、コンピュータ１ａとコンピュータ１ｂとの双方が、インデックス生成装置１００の機能および検索装置２００の機能を備えても良い。
【符号の説明】
【００８７】
１００  インデックス生成装置
１１０  制御部
１１１  ファイルリード部
１１２  単語／タグ取得部
１１３  インデックス生成部
１２０  記憶部
１２１  ビットマップ型インデックス
２００  検索装置
２１０  制御部
２１１  検索条件受付部
２１２  単語列検索部
２１３  タグ条件検索部
２１４  検索結果出力部
２２０  記憶部
２２１  ビットマップ型インデックス
【図１】
2018060424.tif 000003
【図２】
2018060424.tif 000004
【図３】
2018060424.tif 000005
【図４】
2018060424.tif 000006
【図５】
2018060424.tif 000007
【図６】
2018060424.tif 000008
【図７】
2018060424.tif 000009
【図８】
2018060424.tif 000010
【図９】
2018060424.tif 000011
【図１０】
2018060424.tif 000012
【図１１】
2018060424.tif 000013