以下に、本願の開示する検索方法、検索プログラムおよび検索装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
図1は、本実施例に係る検索装置の構成を示す機能ブロック図である。図1に示すように、この検索装置100は、通信部110と、入力部120と、表示部130と、記憶部140と、制御部150とを有する。
通信部110は、ネットワークを介してサーバとデータ通信を実行する処理部である。通信部110は、通信装置に対応する。たとえば、検索装置100は、後述するテキストDB140aや、インデックステーブル140cのデータをサーバから受信して、記憶部140に格納してもよい。また、通信部110は、ネットワークを介して利用者の端末装置等から、クエリのデータを受信してもよい。
入力部120は、検索装置100に各種の情報を入力するための入力装置である。たとえば、入力部120は、キーボードやマウス、タッチパネル等に対応する。ユーザは、入力部120を操作して、クエリのデータを入力してもよい。
表示部130は、制御部150から出力される各種のデータを表示する表示装置である。たとえば、表示部130は、液晶モニタやタッチパネル等に対応する。表示部130は、制御部150により実行されるクエリの検索結果等を表示する。
記憶部140は、テキストDB140a、クエリ140b、インデックステーブル140c、意味属性付与クエリ140d、辞書情報140eを有する。記憶部140は、RAM(Random Access Memory)、ROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子や、HDD(Hard Disk Drive)などの記憶装置に対応する。
テキストDB140aは、クエリ140bの検索対象となる複数のテキストのデータを保持するDB(Data Base)である。図2は、テキストDBのデータ構造の一例を示す図である。図2に示すように、このテキストDB140aには、テキストIDと、テキストデータとを対応付ける。テキストIDは、テキストを一意に識別する情報である。テキストは、複数のセンテンスを含む情報である。
クエリ140bは、利用者によって指定されるクエリの情報である。後述するように、検索装置100は、クエリ140bに含まれる文字列(複合語等)と同じ意味の文字列を含むテキストを、テキストDB140aから検索する。
インデックステーブル140cは、テキストDB140aの各テキストに対応するインデックスをそれぞれ保持するテーブルである。図3は、インデックステーブルのデータ構造の一例を示す図である。図3に示すように、このインデックステーブルは、テキストIDと、インデックスとを対応付ける。テキストIDは、図2で説明したテキストIDに対応するものである。インデックスは、テキストIDに対応するテキストから生成されるインデックスの情報である。インデックスは、テキストに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含む情報である。インデックスに関する具体的な説明は後述する。
意味属性付与クエリ140dは、クエリ140bに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とをクエリ140bに付与した情報である。意味属性付与クエリ140dに関する具体的な説明は後述する。
辞書情報140eは、各複合語に対応する文字列を定義する情報である。たとえば、辞書情報140eには、「自然言語処理」、「言語処理」、「処理言語」、「機械翻訳」等の文字列が含まれる。テキストに含まれる文字列(形態素)のうち、辞書情報140eの文字列と一致する文字列が、複合語として特定される。また、辞書情報140eは、複合語に類する文字列を含んでいてもよい。
制御部150は、取得部150aと、インデックス生成部150bと、意味属性付与部150cと、検索部150dとを有する。制御部150は、CPU(Central Processing Unit)やMPU(Micro Processing Unit)などによって実現できる。また、制御部150は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などのハードワイヤードロジックによっても実現できる。
取得部150aは、各種の情報を取得し、取得した情報を記憶部140に格納する処理部である。たとえば、取得部150aは、ネットワーク上のサーバ等から、テキストDB140aを取得し、取得したテキストDB140aを、記憶部140に格納する。また、取得部150aは、ネットワーク上の利用者の端末装置、または、入力部120から、クエリ140bを取得し、取得したクエリ140bを、記憶部140に格納する。
インデックス生成部150bは、テキストDB140aに格納されたテキストに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成する処理部である。インデックス生成部150bは、テキストに対応するインデックスを生成すると、テキストIDとインデックスとを対応付けて、インデックステーブル140cに格納する。
以下において、インデックス生成部150bの処理の一例について説明する。インデックス生成部150bは、複合語および複合語に類する表現の同定処理、係り受け情報設定処理、インデックス生成処理を順に実行する。
複合語に類する表現の同定処理について説明する。インデックス生成部150bは、テキストDBから、テキストを取得し、取得したテキストに対して形態素解析を行うことで、テキストの文字列を複数の形態素に分割する。インデックス生成部150bは、各形態素に対して、標本化を実行することで、テキストから得られた形態素のうち、単語に対応する形態素を特定する。
インデックス生成部150bは、標本化により、単語に対応する形態素と、辞書情報140eとを比較することで、複合語に対応する形態素を特定し、特定した複合語に対応する形態素を、単語単位に分解する。たとえば、インデックス生成部150bは、複合語に対応する1つの形態素「自然言語処理」を、3つの形態素「自然」、「言語」、「処理」に分割する。
また、インデックス生成部150bは「複合語に類する表現」の同定を行う。たとえば、インデックス生成部150bは「統計を使った機械翻訳」等の表現に関しては、構文解析・意味解析を実行することで、どこからどこまでが複合語に類する表現であるかを同定する。インデックス生成部150bは、構文解析・意味解析の結果得られる構文木・意味構造において、複合語の形態素のノードと直接つながるノードのうち、3つまでのノードに対応する形態素の組を、複合語に類する表現として同定する。なお、複合語に限らない場合には、直接つながるノードの数に制約を設けなくてもよい。
たとえば、インデックス生成部150bは、テキスト「今から示すのは、これまでに様々な研究機関により評価が進められた統計を使った機械翻訳に関する論文です」に含まれる「統計を使った機械翻訳」を、複合語に類する表現として同定する。これに対して、インデックス生成部150bは、テキスト「今から示すのは、これまでに様々な研究機関により評価が進められた統計を使った機械翻訳に関する論文です」全体を、複合語に類する表現として同定しない。また、インデックス生成部150bは、「これまでに様々な研究機関により評価が進められた統計」を、複合語に類する表現として同定しない。インデックス生成部150bは、「統計を使った機械」を、複合語に類する表現として同定しない。
係り受け情報設定処理について説明する。インデックス生成部150bは、複合語に対応する形態素の組、複合語に類する表現に対応する形態素の組について、意味解析を実行し、係り元および係り先の情報を形態素のノードに付与する。
図4および図5は、意味解析結果で得られる係り受けの関係を示す図である。図4に示すように、文字列「自然言語処理」の意味解析結果は、結果30となる。「自然」に対応するノードを、ノード30aとする。「言語」に対応するノードを、ノード30bとする。「処理」に対応するノードを、ノード30cとする。ノード30aおよびノード30bは、ノード30bからノード30aに向かうアーク<mod>により接続される。ノード30bおよびノード30cは、ノード30cからノード30bに向かうアーク<mod>により接続される。
文字列「自然な処理」の意味解析結果は、結果31となる。結果31に示すように、ノード30aおよびノード30bは、ノード30bからノード30aに向かうアーク<mod.a>により接続される。
ここで、結果30と結果31とを比較すると、アークが接続するノードの種別が異なり、また、アークの種別も異なるので、「自然言語処理」と「自然な処理」は意味が異なる。結果31では、ノード30aとノード30cとが直接接続されているが、結果30では、ノード30aとノード30cとが直接接続されていない。
文字列「言語処理」の意味解析結果は、結果32となる。結果32に示すように、ノード30bおよびノード30cは、ノード30cからノード32bに向かうアーク<mod>により接続される。
文字列「処理言語」の意味解析結果は、結果33となる。結果33に示すように、ノード33bおよびノード33cは、ノード33bからノード33cに向かうアーク<mod>により接続される。
結果32と結果33とを比較すると、アークの種別、アークによって接続されるノードの種別は一致しているが、アークの向きが異なるので、「言語処理」と「処理言語」とは意味が異なる。
図5の説明に移行する。文字列「統計による翻訳」の意味解析結果は、結果34となる。「翻訳」に対応するノードを、ノード30dとする。「統計」に対応するノードを、ノード30eとする。ノード30dおよびノード30eは、ノード30dからノード30eに向かうアーク<tool>により接続される。
文字列「統計を使った機械翻訳」の意味解析結果は、結果35となる。「機械」に対応するノードを、ノード30fとする。ノード30dおよびノード30eは、ノード30dからノード30eに向かうアーク<tool>により接続される。ノード30dおよびノード30fは、ノード30dからノード30fに向かうアーク<mod>により接続される。
文字列「統計を使わない人間翻訳」の意味解析結果は、結果36となる。「人間」に対応するノードを、ノード30gとする。「使う」に対応するノードを、ノード30hとする。ノード30dおよびノード30gは、ノード30dからノード30gに向かうアーク<mod>により接続される。ノード30dおよびノード30hは、ノード30hからノード30dに向かうアーク<agent>により接続される。ノード30hは、ノード30hを係り元とするアーク<not>が接続される。ノード30hおよびノード30eは、ノード30hからノード30eに向かうアーク<obj>により接続される。
文字列「翻訳の統計」の意味解析結果は、結果37となる。ノード30dおよびノード30eは、ノード30eからノード30dに向かうアーク<mod>により接続される。
文字列「翻訳を使った統計」の意味解析結果は、結果38となる。ノード30eおよびノード30dは、ノード30eからノード30dに向かうアーク<tool>により接続される。
図5において、結果34と結果35とを比較すると、ノード30dおよびノード30eを接続するアークの種別およびアークの向きが一致しているため、文字列「統計による翻訳」と、「統計を使った機械翻訳」とは、意味が一致することを示す。これに対して、結果34と、結果36、37、38とは、アークの種別、アークの向き、あるいは、アークに接続されるノードの種別が異なる。このため、文字列「統計による翻訳」と、「統計を使わない人間翻訳」とは意味が異なる。文字列「統計による翻訳」と、「翻訳の統計」とは意味が異なる。文字列「統計による翻訳」と、「翻訳を使った統計」とは意味が異なる。
インデックス生成処理について説明する。インデックス生成部150bは、上述した同定処理、係り受け情報設定処理の結果を基にして、インデックスを生成する。
図6~図11は、インデックスを生成する処理を説明するための図である。図6について説明する。図6では、文字列「統計を使った機械翻訳」に対応するインデックス35aを生成する場合について説明する。インデックスは、横軸にオフセットをとり、縦軸に属性をとる。縦軸の属性は、形態素の属性と、アークの属性と、spanの属性を含む。縦軸に設定される属性の順番は、予め設定された順番となる。
インデックスで示される形態素の属性には、文字列に含まれる各形態素がそれぞれ設定される。形態素の属性に配置される各形態素は、上から順に所定の順番に配置される。たとえば、各形態素は辞書順に配置される。インデックスで示されるアークの属性には、形態素のノードに設定されるアークの始点および終点が、アークの種別毎に設定される。spanの属性には、アークで接続された各ノードに対応する形態素間の、文字列上の距離を示す情報が設定される。なお、オフセットは、文字列に含まれる各形態素に設定される情報であり、先頭の形態素から順に、1、2、3、・・・nが割り振られる。
インデックス生成部150bは、上述したように、文字列「統計を使った機械翻訳」に対して、意味解析を実行することで、結果35を得る。また、文字列「統計を使った機械翻訳」は、形態素「統計」、「を」、「使っ」、「た」、「機械」、「翻訳」に分割され、各形態素のオフセットは、順に「1、2、3、4、5、6」となる。インデックス生成部150bは、かかる内容に基づいて、文字列「統計を使った機械翻訳」に対応するインデックス35aを生成する。インデックス35aの各位置における初期値を「0」とする。
インデックス生成部150bが、インデックス35aにおいて、形態素の属性の行にフラグ(ビット)を設定する処理について説明する。インデックス生成部150bは、形態素「統計」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「機械」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「翻訳」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「使う(使っ)」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「を」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「た」の行と、オフセット「4」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス35aにおいて、アークの属性の行にフラグを設定する処理について説明する。結果35において、ノード30dおよびノード30fは、ノード30dからノード30fに向かうアーク<mod>により接続される。ノード30dは、オフセット6の形態素「翻訳」に対応するノードである。ノード30fは、オフセット5の形態素「機械」に対応するノードである。このため、インデックス生成部150bは、「mod始点」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「mod終点」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。
結果35において、ノード30dおよびノード30eは、ノード30dからノード30eに向かうアーク<tool>により接続される。ノード30dは、オフセット6の形態素「翻訳」に対応するノードである。ノード30eは、オフセット1の形態素「統計」に対応するノードである。このため、インデックス生成部150bは、「tool始点」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「tool終点」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス35aにおいて、spanの属性の行にフラグを設定する処理について説明する。アーク<mod>で接続されたノード30d,30fに対応する文字列上の形態素「翻訳」、「機械」の距離(span)は「1」である。このため、インデックス生成部150bは、span1の行と、オフセット5、6の各列とが交差する各位置に、フラグ「1」を設定する。
アーク<tool>で接続されたノード30d,30eに対応する文字列上の形態素「翻訳」、「統計」の距離(span)は「5」である。このため、インデックス生成部150bは、span5の行と、オフセット1、6の各列とが交差する各位置に、フラグ「1」を設定する。
spanの属性を設けることで、アークの属性を曖昧性なく設定することができる。また、他の文の単語の関係を除外することが可能となる。たとえば、インデックス35aのspanの属性を参照すると、アークで接続されている形態素のノードは、機械のノードと、翻訳のノードとの組、統計のノードと、翻訳のノードとの組であることが明確になり、統計のノードと機械のノードとが直接接続されていないことが明確となる。
インデックス生成部150bは、上記処理を行うことで、文字列「統計を使った機械翻訳」に対応するインデックス35aを生成する。
続いて、図7について説明する。図7では、文字列「統計による翻訳」に対応するインデックス34aを生成する場合について説明する。インデックス34aは、インデックス35aと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
インデックス生成部150bは、上述したように、文字列「統計による翻訳」に対して、意味解析を実行することで、結果34を得る。また、文字列「統計による翻訳」は、形態素「統計」、「による」、「翻訳」に分割され、各形態素のオフセットは、順に「1,2、3」となる。インデックス生成部150bは、かかる内容に基づいて、文字列「統計による翻訳」に対応するインデックス34aを生成する。インデックス34aの各位置における初期値を「0」とする。
インデックス生成部150bが、インデックス34aにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、形態素「統計」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「翻訳」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「による」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス34aにおいて、アークの属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、結果34において、ノード30dおよびノード30eは、ノード30dからノード30eに向かうアーク<tool>により接続される。ノード30dは、オフセット3の形態素「翻訳」に対応するノードである。ノード30eは、オフセット1の形態素「統計」に対応するノードである。このため、インデックス生成部150bは、「tool始点」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「tool終点」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス34aにおいて、spanの属性の行にフラグを設定する処理について説明する。アーク<tool>で接続されたノード30d,30eに対応する文字列上の形態素「翻訳」、「統計」の距離(span)は「2」である。このため、インデックス生成部150bは、span2の行と、オフセット1、3の各列とが交差する各位置に、フラグ「1」を設定する。
続いて、図8について説明する。図8では、文字列「統計を使わない機械翻訳」に対応するインデックス36aを生成する場合について説明する。インデックス36aは、インデックス35aと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
インデックス生成部150bは、上述したように、文字列「統計を使わない機械翻訳」に対して、意味解析を実行することで、結果36を得る。また、文字列「統計を使わない機械翻訳」は、形態素「統計」、「を」、「使う(使わ)」、「ない」、「機械」、「翻訳」に分割され、各形態素のオフセットは、順に「1,2、3、4、5、6」となる。インデックス生成部150bは、かかる内容に基づいて、文字列「統計を使わない機械翻訳」に対応するインデックス36aを生成する。インデックス36aの各位置における初期値を「0」とする。
インデックス生成部150bが、インデックス36aにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、形態素「統計」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「機械」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「翻訳」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「使う」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「を」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「ない」の行と、オフセット「4」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス36aにおいて、アークの属性の行にフラグを設定する処理について説明する。結果36において、ノード30dおよびノード30gは、ノード30dからノード30gに向かうアーク<mod>により接続される。ノード30dは、オフセット6の形態素「翻訳」に対応するノードである。ノード30gは、オフセット5の形態素「人間」に対応するノードである。このため、インデックス生成部150bは、「mod始点」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「mod終点」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。
結果36において、ノード30hおよびノード30eは、ノード30hからノード30eに向かうアーク<obj>により接続される。ノード30hは、オフセット3の形態素「使う」に対応するノードである。ノード30eは、オフセット1の形態素「統計」に対応するノードである。このため、インデックス生成部150bは、「obj始点」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「obj終点」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
結果36において、ノード30dおよびノード30hは、ノード30hからノード30dに向かうアーク<agent>により接続される。ノード30dは、オフセット6の形態素「翻訳」に対応するノードである。ノード30hは、オフセット3の形態素「使う」に対応するノードである。このため、インデックス生成部150bは、「agent始点」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「agent終点」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。
結果36において、ノード30hにアーク<not>が接続されている。ノード30hは、オフセット3の形態素「使う」に対応するノードである。このため、インデックス生成部150bは、「NOT始点」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス36aにおいて、spanの属性の行にフラグを設定する処理について説明する。アーク<mod>で接続されたノード30d,30gに対応する文字列上の形態素「翻訳」、「人間」の距離(span)は「1」である。このため、インデックス生成部150bは、span1の行と、オフセット5、6の各列とが交差する各位置に、フラグ「1」を設定する。
アーク<obj>で接続されたノード30d,30hに対応する文字列上の形態素「統計」、「使う」の距離(span)は「2」である。このため、インデックス生成部150bは、span2の行と、オフセット1、3の各列とが交差する各位置に、フラグ「1」を設定する。
アーク<agent>で接続されたノード30d,30hに対応する文字列上の形態素「使う」、「翻訳」の距離(span)は「3」である。このため、インデックス生成部150bは、span2の行と、オフセット3、6の各列とが交差する各位置に、フラグ「1」を設定する。
続いて、図9について説明する。図9では、文字列「翻訳の統計」に対応するインデックス37aを生成する場合について説明する。インデックス37aは、インデックス35aと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
インデックス生成部150bは、上述したように、文字列「翻訳の統計」に対して、意味解析を実行することで、結果37を得る。また、文字列「翻訳の統計」は、形態素「翻訳」、「の」、「統計」に分割され、各形態素のオフセットは、順に「1,2、3」となる。インデックス生成部150bは、かかる内容に基づいて、文字列「翻訳の統計」に対応するインデックス37aを生成する。インデックス37aの各位置における初期値を「0」とする。
インデックス生成部150bが、インデックス37aにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、形態素「統計」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「翻訳」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「の」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス37aにおいて、アークの属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、結果37において、ノード30dおよびノード30eは、ノード30eからノード30dに向かうアーク<mod>により接続される。ノード30dは、オフセット1の形態素「翻訳」に対応するノードである。ノード30eは、オフセット3の形態素「統計」に対応するノードである。このため、インデックス生成部150bは、「mod始点」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「mod終点」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス37aにおいて、spanの属性の行にフラグを設定する処理について説明する。アーク<mod>で接続されたノード30d,30eに対応する文字列上の形態素「翻訳」、「統計」の距離(span)は「2」である。このため、インデックス生成部150bは、span2の行と、オフセット1、3の各列とが交差する各位置に、フラグ「1」を設定する。
続いて、図10について説明する。図10では、文字列「翻訳を使った統計」に対応するインデックス38aを生成する場合について説明する。インデックス38aは、インデックス35aと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
インデックス生成部150bは、上述したように、文字列「翻訳を使った統計」に対して、意味解析を実行することで、結果38を得る。また、文字列「翻訳を使った統計」は、形態素「翻訳」、「を」、「使う(使っ)」、「た」、「統計」に分割され、各形態素のオフセットは、順に「1,2、3、4、5」となる。インデックス生成部150bは、かかる内容に基づいて、文字列「翻訳を使った統計」に対応するインデックス38aを生成する。インデックス38aの各位置における初期値を「0」とする。
インデックス生成部150bが、インデックス38aにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、形態素「統計」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「翻訳」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「使う」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「た」の行と、オフセット「4」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス38aにおいて、アークの属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、結果38において、ノード30dおよびノード30eは、ノード30eからノード30dに向かうアーク<tool>により接続される。ノード30dは、オフセット1の形態素「翻訳」に対応するノードである。ノード30eは、オフセット5の形態素「統計」に対応するノードである。このため、インデックス生成部150bは、「tool始点」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「tool終点」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス38aにおいて、spanの属性の行にフラグを設定する処理について説明する。アーク<tool>で接続されたノード30d,30eに対応する文字列上の形態素「翻訳」、「統計」の距離(span)は「4」である。このため、インデックス生成部150bは、span4の行と、オフセット1、5の各列とが交差する各位置に、フラグ「1」を設定する。
続いて、図11について説明する。図11では、文字列「自然言語処理において・・・処理言語の・・・」に対応するインデックス40aを生成する場合について説明する。インデックス40aは、インデックス35aと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
インデックス生成部150bは、「自然言語処理」に対して、意味解析を実行することで、結果30を得る。また、インデックス生成部150bは、「処理言語」に対して、意味解析を実行することで、結果33を得る。また、文字列「自然言語処理において・・・処理言語の・・・」は、形態素「自然」、「言語」、「処理」、「において」、「・・・(中略)」、「処理」、「言語」、「の」に分割される。例えば、「自然」、「言語」、「処理」、「において」のオフセットを「1、2、3、4」とする。続く、「処理」、「言語」、「の」のオフセットを「52、53、54」とする。
インデックス生成部150bが、結果30、33に基づき、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、形態素「言語」の行と、オフセット「2」および「53」の各列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「自然」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「処理」の行と、オフセット「3」、「52」の各列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「において」の行と、オフセット「4」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「の」の行と、オフセット「54」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、結果30、33に基づき、アークの属性の行にフラグを設定する処理について説明する。結果30において、ノード30aおよびノード30bは、ノード30bからノード30aに向かうアーク<mod>により接続される。ノード30aは、オフセット1の形態素「自然」に対応するノードである。ノード30bは、オフセット2の形態素「言語」に対応するノードである。このため、インデックス生成部150bは、「mod始点」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「mod終点」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
結果30において、ノード30bおよびノード30cは、ノード30cからノード30bに向かうアーク<mod>により接続される。ノード30bは、オフセット2の形態素「言語」に対応するノードである。ノード30cは、オフセット3の形態素「処理」に対応するノードである。このため、インデックス生成部150bは、「mod始点」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「mod終点」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。
結果33において、ノード30bおよびノード30cは、ノード30bからノード30cに向かうアーク<mod>により接続される。ノード30bは、オフセット53の形態素「言語」に対応するノードである。ノード30cは、オフセット52の形態素「処理」に対応するノードである。このため、インデックス生成部150bは、「mod始点」の行と、オフセット「52」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「mod終点」の行と、オフセット「53」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、結果30、33に基づき、spanの属性の行にフラグを設定する処理について説明する。結果30において、アーク<mod>で接続されたノード30a,30bに対応する文字列上の形態素「自然」、「言語」の距離(span)は「1」である。このため、インデックス生成部150bは、span1の行と、オフセット1、2の各列とが交差する各位置に、フラグ「1」を設定する。アーク<mod>で接続されたノード30b,30cに対応する文字列上の形態素「言語」、「処理」の距離(span)は「1」である。このため、インデックス生成部150bは、span1の行と、オフセット2、3の各列とが交差する各位置に、フラグ「1」を設定する。
結果33において、アーク<mod>で接続されたノード30b,30cに対応する文字列上の形態素「言語」、「処理」の距離(span)は「1」である。このため、インデックス生成部150bは、span1の行と、オフセット52、53の各列とが交差する各位置に、フラグ「1」を設定する。
インデックス生成部150bは、テキストDB140aに格納されたテキストを取得し、取得したテキストのインデックスを、図6~図11で説明した処理を実行することで生成する。インデックス生成部150bは、テキストIDと、テキストのインデックスとを対応付けて、インデックステーブル140cに格納する。インデックス生成部150bは、各テキストについて、上記処理を繰り返し実行して、インデックスを生成する。
図1の説明に戻る。意味属性付与部150cは、利用者に指定されたクエリ140bに意味属性を付与することで、意味属性付与クエリ140dを生成する処理部である。たとえば、クエリ140bに付与される意味属性は、クエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とに対応する。意味属性付与部150cは、意味属性付与クエリ140dを、記憶部140に格納する。
以下において、意味属性付与部150cの処理の一例について説明する。意味属性付与部150cは、複合語および複合語に類する表現の同定処理、係り受け情報設定処理、意味属性付与処理を順に実行する。
複合語に類する表現の同定処理について説明する。意味属性付与部150cは、クエリ140bに対して形態素解析を行うことで、クエリ140bの文字列を複数の形態素に分割する。意味属性付与部150cは、各形態素に対して、標本化を実行することで、クエリ140bから得られた形態素のうち、単語に対応する形態素を特定する。
意味属性付与部150cは、標本化により特定した単語に対応する形態素と、辞書情報140eとを比較することで、複合語に対応する形態素を特定し、特定した複合語に対応する形態素を、単語単位に分解する。たとえば、意味属性付与部150cは、複合語に対応する1つの形態素「自然言語処理」を、3つの形態素「自然」、「言語」、「処理」に分割する。
また、意味属性付与部150cは、インデックス生成部150bと同様にして、クエリ140bに含まれる「複合語に類する表現」の同定を行ってもよい。
係り受け情報設定処理について説明する。意味属性付与部150cは、複合語に対応する形態素の組、複合語に類する表現に対応する形態素の組について、意味解析を実行し、係り元および係り先の情報を形態素のノードに付与する。たとえば、意味属性付与部150cによる、意味解析結果で得られる係り受けの関係は、図4、図5で説明したものと同様である。
意味属性付与処理について説明する。意味属性付与部150cは、上述した同定処理、係り受け情報設定処理の結果を基にして、クエリ140bに意味属性を付与する。クエリに付与される意味属性は、インデックスに相当する情報である。
意味属性付与部150cは、図6~図11で説明したものと同様に、インデックスを作成する要領で、クエリに付与する意味属性を生成する。たとえば、クエリ140bで指定された文字列が「統計による翻訳」とする。この場合には、意味属性付与部150cは、図7で説明した処理を実行することで、インデックス34aを生成し、このインデックス34aを、意味属性として、クエリ140bに付与することで、意味属性付与クエリ140dを生成する。
図1の説明に戻る。検索部150dは、インデックステーブル140cのインデックスと、意味属性付与クエリ140dとを基にして、検索対象となるテキストの検索を行う処理部である。検索部150dは、検索結果となるテキストの情報を、表示部130に出力する。なお、検索部150dは、クエリ140bが、外部の端末装置から送信されたものである場合には、外部の端末装置に、検索結果となるテキストの情報を送信する。
以下において、検索部150dの処理の一例について説明する。検索部150dは、自立語部分を抽出する処理、演算用に変換する処理、AND演算を順に実行する。検索部150dの説明においては、意味属性付与クエリ140dに付与された意味属性の情報を「クエリビットマップ」と表記する。テキストから生成されたインデックスを「インデックスビットマップ」と表記する。
自立語部分を抽出する処理について説明する。図12および図13は、自立語部分を抽出する処理を説明するための図である。図12について説明する。図12に示すクエリビットマップ50は、クエリに含まれる「統計による翻訳」から生成されるビットマップ(インデックス)である。
自立語は、予め指定される複数の形態素のうち、属性部分にフラグ「1」が立っている形態素を示す。たとえば、クエリビットマップ50において、形態素「統計」、「翻訳」の属性部分にフラグ「1」が立っている。この統計、翻訳を、予め指定される形態素とする。形態素「による」が、予め指定される複数の形態素に含まれないとする。検索部150dは、クエリビットマップ50のオフセット「2」の列を取り除くことで、自立語部分を抽出したクエリビットマップ50aを生成する。
図13について説明する。図13に示すインデックスビットマップ60は、テキストに含まれる文字列「統計を使った機械翻訳」から生成されるビットマップ(インデックス)である。インデックスビットマップ60において、形態素「統計」、「機械」、「翻訳」の属性部分にフラグ「1」が立っている。形態素「を」、「使う」、「た」が、予め指定される複数の形態素に含まれていないとする。検索部150dは、インデックスビットマップ60のオフセット「2~4」の列を取り除くことで、自立語部分を抽出したインデックスビットマップ60aを生成する。
続いて、演算用に変換する処理について説明する。図14および図15は、演算用に変換する処理を説明するための図である。図14について説明する。検索部150dは、自立語部分を抽出したクエリビットマップ50aの形態素の属性の行において、辞書順に、フラグが「1」となるように列を入れ替える。クエリビットマップ50aのフラグは、辞書順に「1」となっているため、そのままとなる。
検索部150dは、クエリビットマップ50aのspanの属性を更新する。クエリの「統計による翻訳」から「による」に対応する情報が削除されたため、形態素「統計」と「翻訳」とのspan(オフセットの距離)は、「span2」から、「span1」となる。このため、検索部150dは、span1の行と、オフセット1、3の各列とが交差する位置のフラグを「1」に変換する。検索部150dは、span2の行と、オフセット1、3の各列とが交差する位置のフラグを「0」に変換する。
検索部150dは、上記処理を行うことで、クエリビットマップ50aを、演算用のクエリビットマップ50bに変換する。
図15について説明する。検索部150dは、自立語部分を抽出したインデックスビットマップ60aの縦軸の単語(形態素)の順序を、辞書順にソートする。インデックスビットマップ60aの形態素の属性の行において、辞書順に、フラグが「1」となるように列を入れ替える。インデックスビットマップ60aのフラグは、辞書順に「1」となっているため、そのままとなる。また、検索部150dは、比較対象のクエリビットマップ50bに、形態素「機械」に対するフラグ「1」が立っていないため、インデックスビットマップのオフセット「5」の列を取り除く処理を行う。
検索部150dは、インデックスビットマップ60aのspanの属性を更新する。テキストの「統計を使った機械翻訳」から「を使った機械」に対応する情報が削除されたため、形態素「統計」と「翻訳」とのspan(オフセットの距離)は、「span5」から、「span1」となる。このため、検索部150dは、span1の行と、オフセット1、6の各列とが交差する位置のフラグを「1」に変換する。検索部150dは、span2の行と、オフセット1、6の各列とが交差する位置のフラグを「0」に変換する。
検索部150dは、上記処理を行うことで、インデックスビットマップ60aを、演算用のインデックスビットマップ60bに変換する。
続いて、AND演算について説明する。検索部150dは、演算用のクエリビットマップと、演算用のインデックスビットマップとをAND演算する。検索部150dは、AND演算結果において、クエリビットマップの属性のフラグが「1」となっていた位置が、全て「1」となる場合に、インデックスビットマップの作成元となるテキストに、クエリがヒットしたと判定する。
図16は、AND演算を説明するための図である。図16に示すように、検索部150dは、クエリビットマップ50bと、インデックスビットマップ60bとのAND演算を行うと、AND演算結果70が得られる。検索部150dは、属性の行および列をそれぞれ対応させて、AND演算を行うものとする。
たとえば、検索部150dは、クエリビットマップ50bの「統計の行および1列目」と、インデックスビットマップ60bの「統計の行および1列目」とをAND演算することで、AND演算結果70の「統計の行および1列目」の値「1」を算出する。検索部150dは、クエリビットマップ50bの「翻訳の行および2列目」と、インデックスビットマップ60bの「翻訳の行および2列目」とをAND演算することで、AND演算結果70の「翻訳の行および2列目」の値「1」を算出する。
検索部150dは、クエリビットマップ50bの「tool始点の行および2列目」と、インデックスビットマップ60bの「tool始点の行および2列目」とをAND演算することで、AND演算結果70の「tool始点の行および2列目」の値「1」を算出する。検索部150dは、クエリビットマップ50bの「tool終点の行および1列目」と、インデックスビットマップ60bの「tool終点の行および1列目」とをAND演算することで、AND演算結果70の「tool終点の行および1列目」の値「1」を算出する。
検索部150dは、クエリビットマップ50bの「span1の行および1列目」と、インデックスビットマップ60bの「span1の行および1列目」とをAND演算することで、AND演算結果70の「span1の行および1列目」の値「1」を算出する。検索部150dは、クエリビットマップ50bの「span1の行および2列目」と、インデックスビットマップ60bの「span1の行および2列目」とをAND演算することで、AND演算結果70の「span1の行および2列目」の値「1」を算出する。
クエリビットマップ50bと、AND演算結果70とを比較すると、AND演算結果70において、クエリビットマップ50bの属性のフラグが「1」となっていた位置が、全て「1」となっている。このため、検索部150dは、クエリ「統計による翻訳」が、テキスト「統計を使った機械翻訳」にヒットしたと判定する。検索部150dは、インデックスビットマップ60bの作成元となったテキストの情報を、検索結果として出力する。
続いて、検索部150dによる他の検索例について説明する。ここでは、クエリの文字列を上記のクエリと同様とする。すなわち、クエリビットマップを、図12に示したクエリビットマップ50とする。検索部150dは、クエリビットマップ50に対して、自立語部分を抽出する処理、演算用に変換する処理を行うことで、図14に示した、クエリビットマップ50bを生成する。
一方、テキストから生成されたインデックスビットマップを、図17に示すインデックスビットマップ55とする。このインデックスビットマップ55は、テキストに含まれる文字列「翻訳を使った統計」から生成されるビットマップ(インデックス)である。
図17は、自立語部分を抽出する処理を説明するための図である。図17に示すように、インデックスビットマップ55において、形態素「統計」、「翻訳」の属性部分にフラグ「1」が立っている。この統計、翻訳を、予め指定される形態素とする。形態素「を」、「使う」、「た」が、予め指定される複数の形態素に含まれていないとする。検索部150dは、インデックスビットマップ60のオフセット「2~4」の列を取り除くことで、自立語部分を抽出したインデックスビットマップ61aを生成する。
図18は、演算用に変換する処理を説明するための図である。検索部150dは、自立語部分を抽出したインデックスビットマップ61aの形態素の属性の行において、辞書順に、フラグが「1」となるように列を入れ替える。たとえば、検索部150dは、形態素の属性の行において、右側の列ほど、フラグ「1」が下側に配置されるように列を入れ替える。図18に示す例では、インデックスビットマップ61aの1列目の「翻訳」においてフラグが「1」となり、2列目の「統計」においてフラグが「1」となっている。このため、検索部150dは、インデックスビットマップ61aの1列目と2列目とを入れ替える。
検索部150dは、インデックスビットマップ61aのspanの属性を更新する。テキストの「翻訳を使った統計」から「を使った」に対応する情報が削除されたため、形態素「翻訳」と「統計」とのspan(オフセットの距離)は、「span4」から、「span1」となる。このため、検索部150dは、span1の行と、オフセット1、5の各列とが交差する位置のフラグを「1」に変換する。検索部150dは、span4の行と、オフセット1、5の各列とが交差する位置のフラグを「0」に変換する。
検索部150dは、上記処理を行うことで、インデックスビットマップ61aを、演算用のインデックスビットマップ61bに変換する。
図19は、AND演算を説明するための図である。図19に示すように、検索部150dは、クエリビットマップ50bと、インデックスビットマップ61bとのAND演算を行うと、AND演算結果71が得られる。検索部150dは、属性の行および列をそれぞれ対応させて、AND演算を行うものとする。
たとえば、検索部150dは、クエリビットマップ50bの「統計の行および1列目」と、インデックスビットマップ61bの「統計の行および1列目」とをAND演算することで、AND演算結果71の「統計の行および1列目」の値「1」を算出する。検索部150dは、クエリビットマップ50bの「翻訳の行および2列目」と、インデックスビットマップ61bの「翻訳の行および2列目」とをAND演算することで、AND演算結果71の「翻訳の行および2列目」の値「1」を算出する。
検索部150dは、クエリビットマップ50bの「tool始点の行および2列目」と、インデックスビットマップ61bの「tool始点の行および2列目」とをAND演算することで、AND演算結果701「tool始点の行および2列目」の値「0」を算出する。検索部150dは、クエリビットマップ50bの「tool終点の行および1列目」と、インデックスビットマップ61bの「tool終点の行および1列目」とをAND演算することで、AND演算結果71の「tool終点の行および1列目」の値「0」を算出する。
検索部150dは、クエリビットマップ50bの「span1の行および1列目」と、インデックスビットマップ61bの「span1の行および1列目」とをAND演算することで、AND演算結果71の「span1の行および1列目」の値「1」を算出する。検索部150dは、クエリビットマップ50bの「span1の行および2列目」と、インデックスビットマップ61bの「span1の行および2列目」とをAND演算することで、AND演算結果71の「span1の行および2列目」の値「1」を算出する。
クエリビットマップ50bと、AND演算結果71とを比較すると、AND演算結果71において、クエリビットマップ50bの属性のフラグが「1」となっていた位置が、全て「1」となっていない。クエリビットマップ50bでは、「tool始点の行および2列目」と、「tool終点の行および1列目」とが「1」となっている。これに対して、AND演算結果71では、「tool始点の行および2列目」と、「tool終点の行および1列目」とが「0」となっている。このため、検索部150dは、クエリ「統計による翻訳」が、テキスト「翻訳を使った統計」にヒットしていないと判定する。
図33で説明した近傍検索では、クエリ「統計による翻訳」25の近傍度を「5」に変更し、検索を行うと、検索すべきではない、「翻訳を使った統計」を含むテキスト26cがヒットしてしまい、検索精度が低下する。これに対して、上述した検索部150dの処理では、クエリ「統計による翻訳」を指定された場合に、テキスト「統計を使った機械翻訳」を検索でき、かつ、テキスト「翻訳を使った統計」を検索することを抑止できるので、検索精度を向上させることができる。
ここでは詳細な説明を省略するが、検索部150dが、クエリ「統計による翻訳」のクエリビットマップと、テキスト「翻訳の統計」のインデックスビットマップとのAND演算を行うと、アークの属性が「0」となり、ヒットしない。検索部150dが、クエリ「統計による翻訳」のクエリビットマップと、テキスト「統計を使わない人間翻訳」のインデクスビットマップとのAND演算を行うと、アークの属性が「0」となり、ヒットしない。このため、検索すべきでないテキストが検索されることを抑止することができる。
次に、本実施例に係る検索装置100の処理手順の一例について説明する。図20は、インデックスを生成する処理手順を示すフローチャートである。図20に示すように、検索装置100のインデックス生成部150bは、テキストDB140aからテキストを取得する(ステップS101)。
インデックス生成部150bは、テキストに対して形態素解析を実行する(ステップS102)。インデックス生成部150bは、標本化を実行することで、複合語に対応する形態素を特定する(ステップS103)。インデックス生成部150bは、形態素間の部分文字列の同定処理を実行する(ステップS104)。
インデックス生成部150bは、意味解析(または構文解析)を実行する(ステップS105)。インデックス生成部150bは、意味解析結果を基にして、インデックスを生成する(ステップS106)。
インデックス生成部150bは、インデックスの生成を終了する場合には(ステップS107,Yes)、処理を終了する。一方、インデックス生成部150bは、インデックスの生成を終了しない場合には(ステップS107,No)、ステップS101に再度移行する。
図21は、検索処理の処理手順を示すフローチャートである。図21に示すように、検索装置100の取得部150aは、クエリ140bを受け付ける(ステップS201)。検索装置100の意味属性付与部150cは、クエリ140bに対して形態素解析を実行する(ステップS202)。意味属性付与部150cは、標本化を実行することで、複合語に対応する形態素を特定する(ステップS203)。
意味属性付与部150cは、形態素間の部分文字列の同定処理を実行する(ステップS204)。意味属性付与部150cは、意味解析を実行し(ステップS205)、意味属性付与部150cは、意味属性付与クエリ140dを生成する(ステップS206)。
検索装置100の検索部150dは、AND演算処理を実行する(ステップS207)。検索部150dは、検索結果を表示部130に出力する(ステップS208)。
次に、図21のステップS207に示したAND演算処理の処理手順について説明する。図22は、AND演算処理の処理手順を示すフローチャートである。図22に示すように、検索装置100の検索部150dは、クエリビットマップおよびインデックスビットマップの自立語部分のみを抽出する(ステップS301)。
検索部150dは、フラグが「1」となる単語の順序が辞書順となるように、ビットマップの列をソートする(ステップS302)。検索部150dは、span属性の情報を更新する(ステップS303)。検索部150dは、クエリビットマップと、インデックスビットマップとをAND演算する(ステップS304)。
検索部150dは、クエリビットマップのフラグが「1」となる位置に対応する、AND演算結果の位置が「1」のままであるか否かを判定する(ステップS305)。検索部150dは、クエリビットマップのフラグが「1」となる位置に対応する、AND演算結果の位置が「1」のままである場合には(ステップS305,Yes)、クエリにマッチするテキストのインデックスであると判定する(ステップS306)。
一方、検索部150dは、クエリビットマップのフラグが「1」となる位置に対応する、AND演算結果の位置が「1」のままでない場合には(ステップS305,No)、クエリにマッチするテキストのインデックスでないと判定する(ステップS307)。
次に、本実施例に係る検索装置100の効果について説明する。検索装置100は、テキストに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成する。検索装置100は、クエリ140bが指定されると、クエリ140bに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とをクエリ140bに付与することで、意味属性付与クエリ140dを生成する。検索装置100は、インデックスと、意味属性付与クエリ140dとのAND演算を行うことで、テキストDB140aから、クエリ140bにヒットするテキストの検索を行う。たとえば、意味解析を行う過程で、意味属性付与クエリ140dと、インデックスとが生成され、ANND演算を行うだけで、ヒットするか否かを判定できるため、意味属性を考慮した検索を、インデックスのサイズを過剰に大きくすることなく、かつ1パスで行うことができる。
上述した検索装置100の処理は一例であり、検索装置100はその他の処理を実行してもよい。以下において、本実施例に係る検索装置100のその他の処理1~4について説明する。
検索装置100の「その他の処理1」について説明する。検索装置100のインデックス生成部150bは、折り返し技術を利用することで、インデックスを圧縮(ハッシュ化)し、インデックステーブル140cのデータ量を削減することができる。
図23は、インデックスのハッシュ化の一例を説明するための図である。ここでは、32ビットレジスタを想定し、一例として29と31のハッシュ値(底)を基に、各ビットマップをハッシュ化する。ビットマップb1から、ハッシュ化ビットマップh11およびハッシュ化ビットマップh12を生成する場合について説明する。ビットマップb1は、あるインデックスビットマップの列を抽出したビットマップを示すものとする。ハッシュ化ビットマップh11は、底「29」によりハッシュ化されたビットマップである。ハッシュ化ビットマップh12は、底「31」によりハッシュ化されたビットマップである。
インデックス生成部150bは、ビットマップb1の各ビットの位置を、1つの低で割った余りの値を、ハッシュ化ビットマップの位置と対応付ける。インデックス生成部150bは、該当するビットマップb1のビットの位置に「1」が設定されている場合には、対応付けられたハッシュ化ビットマップの位置に「1」を設定する処理を行う。
ビットマップb1から、底「29」のハッシュ化ビットマップh11を生成する処理の一例について説明する。はじめに、インデックス生成部150bは、ビットマップb1の位置「0~28」の情報を、ハッシュ化ビットマップh11にコピーする。続いて、ビットマップb1のビットの位置「35」を、低「29」で割った余りは「6」となるので、ビットマップb1の位置「35」は、ハッシュ化ビットマップh11の位置「6」と対応付けられる。インデックス生成部150bは、ビットマップb1の位置「35」に「1」が設定されているため、ハッシュ化ビットマップh11の位置「6」に「1」を設定する。
ビットマップb1のビットの位置「42」を、低「29」で割った余りは「13」となるので、ビットマップb1の位置「42」は、ハッシュ化ビットマップh11の位置「13」と対応付けられる。インデックス生成部150bは、ビットマップb1の位置「42」に「1」が設定されているため、ハッシュ化ビットマップh11の位置「13」に「1」を設定する。
インデックス生成部150bは、ビットマップb1の位置「29」以上の位置について、上記処理を繰り返し実行することで、ハッシュ化ビットマップh11を生成する。
ビットマップb1から、底「31」のハッシュ化ビットマップh12を生成する処理の一例について説明する。はじめに、インデックス生成部150bは、ビットマップb1の位置「0~30」の情報を、ハッシュ化ビットマップh12にコピーする。続いて、ビットマップb1のビットの位置「35」を、低「31」で割った余りは「4」となるので、ビットマップb1の位置「35」は、ハッシュ化ビットマップh12の位置「4」と対応付けられる。インデックス生成部150bは、ビットマップb1の位置「35」に「1」が設定されているため、ハッシュ化ビットマップh12の位置「4」に「1」を設定する。
ビットマップb1のビットの位置「42」を、低「31」で割った余りは「11」となるので、ビットマップb1の位置「42」は、ハッシュ化ビットマップh12の位置「11」と対応付けられる。インデックス生成部150bは、ビットマップb1の位置「42」に「1」が設定されているため、ハッシュ化ビットマップh12の位置「13」に「1」を設定する。
インデックス生成部150bは、ビットマップb1の位置「31」以上の位置について、上記処理を繰り返し実行することで、ハッシュ化ビットマップh12を生成する。
インデックス生成部150bは、インデックスビットマップの各列(または各行)について上記の折り返し技術による圧縮を行うことで、インデックステーブル140cのデータ量を削減する。
続いて、インデックス生成部150bが、圧縮したインデックスマップを復元する処理の一例について説明する。上記の実施例で説明した検索部150dが、検索処理を行う際に、インデックス生成部150bは、圧縮したインデックスマップを復元する。検索部150dは、復元されたインデックスマップを用いて、クエリ140bに対応するテキストの検索を行う。
図24は、ハッシュ化したインデックスを復元する処理の一例を示す図である。ここでは一例として、ハッシュ化ビットマップh11およびハッシュ化ビットマップh12を基にして、ビットマップb1を復元する場合について説明する。
インデックス生成部150bは、底「29」のハッシュ化ビットマップh11から、中間ビットマップh11’を生成する。インデックス生成部150bは、ハッシュ化ビットマップh11の位置0~28の値を、中間ビットマップh11’の位置0~28にそれぞれ、コピーする。
インデックス生成部150bは、中間ビットマップh11’の位置29以降の値については、「29」毎に、ハッシュ化ビットマップh11の位置0~28の値を、それぞれコピーする処理を繰り返し実行する。図24に示す例では、中間ビットマップh11’の位置29~43の位置に、ハッシュ化ビットマップh11の位置0~14の値を、コピーした例を示す。
インデックス生成部150bは、底「31」のハッシュ化ビットマップh12から、中間ビットマップh12’を生成する。インデックス生成部150bは、ハッシュ化ビットマップh12の位置0~30の値を、中間ビットマップh12’の位置0~30にそれぞれ、コピーする。
インデックス生成部150bは、中間ビットマップh12’の位置31以降の値については、「31」毎に、ハッシュ化ビットマップh12の位置0~30の値を、それぞれコピーする処理を繰り返し実行する。図24に示す例では、中間ビットマップh12’の位置31~43の位置に、ハッシュ化ビットマップh12の位置0~12の値を、コピーした例を示す。
インデックス生成部150bは、中間ビットマップh11’と、中間ビットマップh12’とを生成すると、中間ビットマップh11’と、中間ビットマップh12’とをAND演算することで、ハッシュ化前のビットマップb1を復元する。インデックス生成部150bは、他のハッシュ化されたビットマップについても、同様の処理を繰り返し実行することで、テキストのインデックスを復元することができる。
検索装置100の「その他の処理2」について説明する。検索装置100の検索部150dは、図12~図19等で説明したように、クエリビットマップと、インデックスビットマップとのAND演算を実行することで、クエリ140bにヒットするインデックスを検出していたがこれに限定されるものではない。たとえば、検索部150dは、クエリ140bにヒットするか否かの情報に加えて、類似度を合わせて判定し、出力してもよい。
検索部150dは、図12~図19で説明した処理に加えて、クエリに含まれる単語と、テキストの単語との比較を行い、一致する単語数を計算し、計算した単語数を類似度として算出する。たとえば、クエリ140bの文字列を「統計による翻訳」とし、テキストの文字列を「統計を使った機械翻訳」とすると、単語「統計」、「翻訳」が一致する単語(形態素)であるため、類似度は「2」となる。
たとえば、クエリ140bの文字列を「統計による機械翻訳」とし、テキストの文字列を「統計を使った機械翻訳」とすると、単語「統計」、「機械」、「翻訳」が一致する単語(形態素)であるため、類似度は「3」となる。
検索部150dは、クエリ140bにヒットするテキストの情報と、類似度の情報とを合わせて出力する。これにより、クエリにヒットするテキストが複数存在する場合に、利用者は、類似度を参考にして、検索対象とするテキストを絞り込むことが容易となる。
検索装置100の「その他の処理3」について説明する。たとえば、ケースA、ケースBに示すように、あるクエリとあるテキストとの類似度を算出した場合について説明する。
ケースA:クエリ「統計による翻訳」でテキスト「統計を使った機械翻訳」を検索
ケースB:クエリ「統計による自動翻訳」でテキスト「統計を使った機械翻訳」を検索
その他の処理2で説明したように、そのまま類似度の算出を行うと、ケースAでは類似度が「2」となり、ケースBでは類似度は「2」となる。ここで、複合語の「自動翻訳」の「自動」と、複合語の「機械翻訳」の「機械」とは、略同じ意味である。このため、検索装置の検索部150dは、複合語に含まれる所定の単語においては、同一の単語であると見なして、類似度の算出を行ってもよい。たとえば、検索部150dは、ケースBにおいて、複合語「自動翻訳」の「自動」と、複合語「機械翻訳」の「機械」とが一致すると見なすことで、ケースBの類似度を「3」と判定してもよい。
また、検索装置100のインデックス生成部150bは、テキストのインデックスを生成する場合に、縦軸の1つの行に割り当てる形態素を1つの形態素としていたがこれに限定されるものではなく、orの関係となる、複数の形態素を割り当ててもよい。
図25は、その他のインデックスのデータ構造の一例を示す図である。図25のインデックス45は、文字列「統計を使った機械翻訳」に対応するインデックスである。図6で説明したインデックス35aと比較すると、インデックス45には、2行目の形態素の属性に「機械or自動」が設定されている。このインデックス45では、文字列の「機械」または「自動」となるオフセット位置に、フラグ「1」が設定される。
検索装置100の「その他の処理3」について説明する。上述した従来技術では、クエリおよびテキストが「日本語」の場合について説明したが、「英語」であっても同様にして、クエリに対応するテキストを検索することが可能である。
図26および図27は、英語のテキストのインデックスを生成する処理の一例を示す図である。図26では、テキスト(文字列)「John gave bananas to Mary.」に対するインデックス46aを生成する場合について説明する。単語およびピリオドのオフセットは、それぞれ、「1、2、3、4、5、6」となる。
インデックス生成部150bは、文字列「John gave bananas to Mary.」に対して、意味解析を実行することで、結果46を得る。たとえば、「give」に対応するノードを、ノード61とする。「Mary」に対応するノードを、ノード62とする。「John」に対応するノードを、ノード63とする。「banana」に対応するノードを、ノード64とする。
結果46に示すように、ノード61およびノード64は、ノード61からノード64に向かうアーク<OBJECT>により接続される。ノード61およびノード62は、ノード61からノード62に向かうアーク<GOAL>により接続される。ノード61およびノード63は、ノード61からノード63に向かうアーク<AGENT>により接続される。ノード61は、ノード61を係り元とするアーク<PAST>に接続される。
インデックス生成部150bが、インデックス46aにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、形態素「.(ピリオド)」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「to」の行と、オフセット「4」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「give」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「banana」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「John」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「Mary」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス46aにおいて、アークの属性の行にフラグを設定する処理について説明する。結果46において、ノード61およびノード62は、ノード61からノード62に向かうアーク<GOAL>により接続される。ノード61は、オフセット2の形態素「give」に対応するノードである。ノード62は、オフセット5の形態素「Mary」に対応するノードである。このため、インデックス生成部150bは、「GOAL:source」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「GOAL:target」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。
結果46において、ノード61およびノード64は、ノード61からノード64に向かうアーク<OBJECT>により接続される。ノード61は、オフセット2の形態素「give」に対応するノードである。ノード64は、オフセット5の形態素「banana」に対応するノードである。このため、インデックス生成部150bは、「OBJECT:sourse」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「OBJECT:target」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。
結果46において、ノード61およびノード63は、ノード61からノード63に向かうアーク<AGENT>により接続される。ノード61は、オフセット2の形態素「give」に対応するノードである。ノード63は、オフセット1の形態素「John」に対応するノードである。このため、インデックス生成部150bは、「AGENT:sourse」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「AGENT:target」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
結果46において、ノード61にアーク<PAST>が接続されている。ノード61は、オフセット2の形態素「give」に対応するノードである。このため、インデックス生成部150bは、「PAST:source」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス46aにおいて、spanの属性の行にフラグを設定する処理について説明する。アーク<AGENT>で接続されたノード61,63に対応する文字列上の形態素「give」、「John」の距離(span)は「1」である。このため、インデックス生成部150bは、span1の行と、オフセット1、2の各列とが交差する各位置に、フラグ「1」を設定する。インデックス生成部150bが、spanの属性の行にフラグを設定するその他の処理については説明を省略する。
図27の説明に移行する。図27では、文字列「Mary gave bananas to John.」に対するインデックス47aを生成する場合について説明する。単語およびピリオドのオフセットは、それぞれ、「1、2、3、4、5、6」となる。
インデックス生成部150bは、文字列「Mary gave bananas to John.」に対して、意味解析を実行することで、結果47を得る。結果47に示すように、ノード61およびノード64は、ノード61からノード64に向かうアーク<OBJECT>により接続される。ノード61およびノード63は、ノード61からノード63に向かうアーク<GOAL>により接続される。ノード61およびノード62は、ノード61からノード62に向かうアーク<AGENT>により接続される。ノード61は、ノード61を係り元とするアーク<PAST>に接続される。
インデックス生成部150bが、インデックス47aにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部150bは、形態素「.(ピリオド)」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「to」の行と、オフセット「4」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「give」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「banana」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「John」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、形態素「Mary」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス47aにおいて、アークの属性の行にフラグを設定する処理について説明する。結果47において、ノード61およびノード63は、ノード61からノード63に向かうアーク<GOAL>により接続される。ノード61は、オフセット2の形態素「give」に対応するノードである。ノード63は、オフセット5の形態素「John」に対応するノードである。このため、インデックス生成部150bは、「GOAL:sourse」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「GOAL:target」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。
結果47において、ノード61およびノード64は、ノード61からノード64に向かうアーク<OBJECT>により接続される。ノード61は、オフセット2の形態素「give」に対応するノードである。ノード64は、オフセット5の形態素「banana」に対応するノードである。このため、インデックス生成部150bは、「OBJECT:sourse」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「OBJECT:target」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。
結果47において、ノード61およびノード62は、ノード61からノード62に向かうアーク<AGENT>により接続される。ノード61は、オフセット2の形態素「give」に対応するノードである。ノード62は、オフセット1の形態素「Mary」に対応するノードである。このため、インデックス生成部150bは、「AGENT:sousve」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「AGENT:target」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
結果47において、ノード61にアーク<PAST>が接続されている。ノード61は、オフセット2の形態素「give」に対応するノードである。このため、インデックス生成部150bは、「PAST:source」の行と、オフセット「2」の列とが交差する位置に、フラグ「1」を設定する。
インデックス生成部150bが、インデックス47aにおいて、spanの属性の行にフラグを設定する処理について説明する。アーク<AGENT>で接続されたノード61,63に対応する文字列上の形態素「give」、「Mary」の距離(span)は「1」である。このため、インデックス生成部150bは、span1の行と、オフセット1、2の各列とが交差する各位置に、フラグ「1」を設定する。インデックス生成部150bが、spanの属性の行にフラグを設定するその他の処理については説明を省略する。
図28は、英語のクエリのインデックスを生成する処理の一例を示す図である。クエリのインデックスは、クエリに付与される意味属性に対応する情報である。図28では、クエリ(文字列)「Bananas were given to John.」に対するインデックス48aを生成する場合について説明する。単語およびピリオドのオフセットは、それぞれ、「1、2、3、4、5、6」となる。
意味属性付与部150cは、文字列「Bananas were given to John.」に対して、意味解析を実行することで、結果48を得る。結果48に示すように、ノード61およびノード64は、ノード61からノード64に向かうアーク<OBJECT>により接続される。ノード61およびノード63は、ノード61からノード63に向かうアーク<GOAL>により接続される。
意味属性付与部150cが、インデックス48aにおいて、形態素の属性の行にフラグを設定する処理について説明する。意味属性付与部150cは、形態素「.(ピリオド)」の行と、オフセット「6」の列とが交差する位置に、フラグ「1」を設定する。意味属性付与部150cは、形態素「to」の行と、オフセット「4」の列とが交差する位置に、フラグ「1」を設定する。意味属性付与部150cは、形態素「give」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。意味属性付与部150cは、形態素「banana」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。意味属性付与部150cは、形態素「John」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。
意味属性付与部150cが、インデックス48aにおいて、アークの属性の行にフラグを設定する処理について説明する。結果48において、ノード61およびノード63は、ノード61からノード63に向かうアーク<GOAL>により接続される。ノード61は、オフセット3の形態素「give」に対応するノードである。ノード63は、オフセット5の形態素「John」に対応するノードである。このため、インデックス生成部150bは、「GOAL:sourse」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「GOAL:target」の行と、オフセット「5」の列とが交差する位置に、フラグ「1」を設定する。
結果48において、ノード61およびノード64は、ノード61からノード64に向かうアーク<OBJECT>により接続される。ノード61は、オフセット3の形態素「give」に対応するノードである。ノード64は、オフセット1の形態素「banana」に対応するノードである。このため、意味属性付与部150cは、「OBJECT:sourse」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。インデックス生成部150bは、「OBJECT:target」の行と、オフセット「1」の列とが交差する位置に、フラグ「1」を設定する。
結果48において、ノード61にアーク<PAST>が接続されている。ノード61は、オフセット3の形態素「give」に対応するノードである。このため、意味属性付与部150cは、「PAST:source」の行と、オフセット「3」の列とが交差する位置に、フラグ「1」を設定する。
意味属性付与部150cが、インデックス48aにおいて、spanの属性の行にフラグを設定する処理について説明する。アーク<OBJECT>で接続されたノード61,63に対応する文字列上の形態素「give」、「banana」の距離(span)は「2」である。このため、インデックス生成部150bは、span1の行と、オフセット1、3の各列とが交差する各位置に、フラグ「1」を設定する。インデックス生成部150bが、spanの属性の行にフラグを設定するその他の処理については説明を省略する。
検索装置100の検索部150dは、インデックス生成部150bに生成されたインデックス(インデックスビットマップ)46aと、意味属性付与部150cに生成されたインデックス(クエリビットマップ)48aとのAND演算を行う。検索部150dは、自立語部分を抽出する処理、演算用に変換する処理、AND演算を順に実行する。図示を省略するが、インデックス46aと、インデックス48aとのAND演算結果は、アークの属性部分が「0」となるため、検索部150dは、テキスト「John gave bananas to Mary.」は、クエリにヒットしないと判定し、検索対象から除外する。
検索部150dは、インデックス生成部150bに生成されたインデックス(インデックスビットマップ)47aと、意味属性付与部150cに生成されたインデックス(クエリビットマップ)48aとのAND演算を行う。検索部150dは、自立語部分を抽出する処理、演算用に変換する処理、AND演算を順に実行する。図示を省略するが、インデックス47aと、インデックス48aとのAND演算結果は、アークの属性の該当部分が「1」となるため、検索部150dは、テキスト「Mary gave bananas to John.」は、クエリにヒットすると判定し、検索対象として抽出する。
このように、本実施例に係る検索装置100は、対象の文字列が英語であっても、意味属性を考慮した検索を、インデックスのサイズを過剰に大きくすることなく、かつ1パスで行うことができる。
検索装置100の「その他の処理4」について説明する。図1に示した検索装置100では、検索装置100が、インデックス生成部150bを有し、インデックステーブル140cを生成していたが、これに限定されるものでは無い。
たとえば、検索装置100にネットワークを介して接続するサーバが、インデックス生成部150bの機能を有し、サーバが、インデックステーブル140cを生成してもよい。検索装置100の取得部150aは、サーバにより生成されたインデックステーブル140cを受信し、受信したインデックステーブル140cを記憶部140に格納する。
検索装置100は、上記のようにサーバからインデックステーブル140cを受信して、利用することで、インデックステーブル140cを生成する処理負荷を削減することができる。
次に、上記実施例に示した検索装置100と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図29は、検索装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
図29に示すように、コンピュータ200は、各種演算処理を実行するCPU201と、ユーザからのデータの入力を受け付ける入力装置202と、ディスプレイ203とを有する。また、コンピュータ200は、記憶媒体からプログラム等を読み取る読み取り装置204と、有線または無線ネットワークを介して他の装置との間でデータの授受を行うインタフェース装置205とを有する。また、コンピュータ200は、各種情報を一時記憶するRAM206と、ハードディスク装置207とを有する。そして、各装置201~207は、バス208に接続される。
ハードディスク装置207は、取得プログラム207a、インデックス生成プログラム207b、意味属性付与プログラム207c、検索プログラム207dを有する。また、ハードディスク装置207は、各プログラム207a~207dを読み出してRAM206に展開する。
取得プログラム207aは、取得プロセス206aとして機能する。インデックス生成プログラム207bは、インデックス生成プロセス206bとして機能する。意味属性付与プログラム207cは、意味属性付与プロセス206cとして機能する。検索プログラム207dは、検索プロセス207cとして機能する。
取得プロセス206aの処理は、取得部150aの処理に対応する。インデックス生成プロセス206bの処理は、インデックス生成部150bの処理に対応する。意味属性付与プロセス206cの処理は、意味属性付与部150cの処理に対応する。検索プロセス206dの処理は、検索部150dの処理に対応する。
なお、各プログラム207a~207dについては、必ずしも最初からハードディスク装置207に記憶させておかなくても良い。例えば、コンピュータ200に挿入されるフレキシブルディスク(FD)、CD-ROM、DVD、光磁気ディスク、ICカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ200が各プログラム207a~207dを読み出して実行するようにしても良い。
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)コンピュータが実行する検索方法であって、
対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成し、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与し、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う
ことを特徴とする検索方法。
(付記2)前記インデックスを取得する処理を更に実行し、前記検索を行う処理は、取得された前記インデックスと、前記クエリに付与された情報とを基にして、前記対象文字データに対する検索を行うことを特徴とする付記1に記載の検索方法。
(付記3)前記形態素間の意味上の属性は、形態素間の係り受けの始点となる形態素と、前記係り受けの終点となる形態素とを示す情報であることを特徴とする付記1または2に記載の検索方法。
(付記4)前記対象文字データは、意味属性を有する二つ以上の単語を含む文字列であることを特徴とする付記1、2または3に記載の検索方法。
(付記5)前記検索を行う処理は、前記クエリに付与された情報における形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素と、前記インデックスにおける形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素とが一致するか否かを基にして検索を行うことを特徴とする付記1~4のいずれか一つに記載の検索方法。
(付記6)対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成し、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与し、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う
処理をコンピュータに実行させることを特徴とする検索プログラム。
(付記7)前記インデックスを取得する処理を更に実行し、前記検索を行う処理は、取得された前記インデックスと、前記クエリに付与された情報とを基にして、前記対象文字データに対する検索を行うことを特徴とする付記6に記載の検索プログラム。
(付記8)前記形態素間の意味上の属性は、形態素間の係り受けの始点となる形態素と、前記係り受けの終点となる形態素とを示す情報であることを特徴とする付記6または7に記載の検索プログラム。
(付記9)前記対象文字データは、意味属性を有する二つ以上の単語を含む文字列であることを特徴とする付記6、7または8に記載の検索プログラム。
(付記10)前記検索を行う処理は、前記クエリに付与された情報における形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素と、前記インデックスにおける形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素とが一致するか否かを基にして検索を行うことを特徴とする付記6~9のいずれか一つに記載の検索プログラム。
(付記11)対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成するインデックス生成部と、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与する意味属性付与部と、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う検索部と
を有することを特徴とする検索装置。
(付記12)前記インデックスを取得する取得部を更に有し、前記検索部は、取得された前記インデックスと、前記クエリに付与された情報とを基にして、前記対象文字データに対する検索を行うことを特徴とする付記11に記載の検索装置。
(付記13)前記形態素間の意味上の属性は、形態素間の係り受けの始点となる形態素と、前記係り受けの終点となる形態素とを示す情報であることを特徴とする付記11または12に記載の検索装置。
(付記14)前記対象文字データは、意味属性を有する二つ以上の単語を含む文字列であることを特徴とする付記11、12または13に記載の検索装置。
(付記15)前記検索部は、前記クエリに付与された情報における形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素と、前記インデックスにおける形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素とが一致するか否かを基にして検索を行うことを特徴とする付記11~14のいずれか一つに記載の検索装置。