(57)【要約】【課題】意味属性を考慮した検索を、インデックスのサイズを過剰に大きくすることなく、かつ１パスで行うこと。【解決手段】検索装置１００は、対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成する。検索装置１００は、入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報をクエリに付与する。検索装置１００は、クエリに付与された情報と、インデックスとを基にして、対象文字データに対する検索を行う。【選択図】図１
2019211959.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが実行する検索方法であって、
対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成し、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与し、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う
ことを特徴とする検索方法。
【請求項２】
前記インデックスを取得する処理を更に実行し、前記検索を行う処理は、取得された前記インデックスと、前記クエリに付与された情報とを基にして、前記対象文字データに対する検索を行うことを特徴とする請求項１に記載の検索方法。
【請求項３】
前記形態素間の意味上の属性は、形態素間の係り受けの始点となる形態素と、前記係り受けの終点となる形態素とを示す情報であることを特徴とする請求項１または２に記載の検索方法。
【請求項４】
前記対象文字データは、意味属性を有する二つ以上の単語を含む文字列であることを特徴とする請求項１、２または３に記載の検索方法。
【請求項５】
前記検索を行う処理は、前記クエリに付与された情報における形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素と、前記インデックスにおける形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素とが一致するか否かを基にして検索を行うことを特徴とする請求項１〜４のいずれか一つに記載の検索方法。
【請求項６】
対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成し、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与し、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う
処理をコンピュータに実行させることを特徴とする検索プログラム。
【請求項７】
対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成するインデックス生成部と、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与する意味属性付与部と、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う検索部と
を有することを特徴とする検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索方法等に関する。
【背景技術】
【０００２】
近年、データベースに格納されるテキストのデータ量が爆発的に増大しており、検索の重要性が増している。ここで、ある文字列をクエリに指定してテキストを検索する場合に、検索対象となる文字列が意味する表現のバリエーションが多いと、検索もれを起こしたり、関係のないテキストが検索されてしまう場合がある。
【０００３】
図３０は、検索の現状を説明するための図である。例１のように、「自然言語（１語）」、「言語（１語）」、「言語処理（１語）」は、「自然言語処理（１語）」と同じ意味の文字列（たとえば、複合語）であるが、単語単位ではマッチしない。このため、クエリで「自然言語」、「言語」、「言語処理」を指定し、単語単位の検索を行ってもデータベースの「自然言語処理」にヒットしない。同様に、「統計  翻訳（２語）」、「統計的  翻訳（２語）」、「統計  機械翻訳（２語）」は、「統計的機械翻訳（１語）」と同じ意味の文字列（たとえば、複合語）であるが、単語単位ではマッチしない。このため、クエリで統計  翻訳（２語）」、「統計的  翻訳（２語）」、「統計  機械翻訳（２語）」を指定し、単語単位の検索を行ってもデータベースの「統計的機械翻訳」にヒットしない。
【０００４】
一方、例２のように、「言語処理」、「自然言語処理」、「自然言語の処理」は、表現のバリエーションが異なるが同じ意味の文字列である。しかし、各文字列は、単語単位ではマッチしない。このため、クエリで「言語処理」、「自然言語処理」を指定して、単語単位の検索を行ってもデータベースの「自然言語の処理」にヒットしない。同様に、「統計を利用した機械翻訳」、「統計による翻訳」、「統計を使った機械翻訳」は、表現のバリエーションが異なるが同じ意味の文字列である。しかし、各文字列は、単語単位ではマッチしない。このため、「統計を利用した機械翻訳」、「統計による翻訳」を指定して、単語単位の検索を行ってもデータベースの「統計を使った機械翻訳」にヒットしない。
【０００５】
図３０で説明した検索の現状に対して、従来技術では、複合語等の文字列を、この文字列が構成する単語に分割し、単語の組合せによって、クエリに対応するテキストデータを検索する。しかし、この従来技術では、異なる意味を持つ文字列も検索されてしまう場合がある。この問題を解消するべく、近傍検索を利用する従来技術と、意味解析結果を検索に利用する従来技術とがある。
【０００６】
図３１は、近傍検索を利用する従来技術を説明するための図である。この従来技術では、ステップＳ１０、ステップＳ１１の順に処理を行い、クエリ１５に指定される条件に、テキスト１０ａがヒットするか否かを判定する。クエリ１５に指定される条件に、テキスト１０ａがヒットする場合には、テキスト１０ａが検索対象のテキストとなる。一例として、比較対象となるテキスト１０ａを「自然言語処理において、・・・」とする。
【０００７】
従来技術は、ステップＳ１０において、テキスト１０ａの文字列「自然言語処理」に対して、複合語を構成する単語を検索し、複合語を単語単位に分割することで、分割データ１０ｂを生成する。図３１に示す例では、「自然言語処理」は、単語「自然」、「言語」、「処理」に分割される。
【０００８】
クエリ１５を「（自然  near:2  言語）AND（言語  near:2  処理）AND（自然  near:2  処理）」とする。ここで、「第１単語  near:N  第２単語」は、第１単語と、第２単語との近傍度がＮ以内であることを示す条件である。第１単語と第２単語との近傍度は、第１単語のオフセットと、第２単語のオフセットとの差分値を示すものである。たとえば、分割データ１０ｂにおいて、単語「自然」を先頭の単語とすると、単語「自然」、「言語」、「処理」のオフセットはそれぞれ「１」、「２」、「３」となる。
【０００９】
すなわち、クエリ１５の（自然  near:2  言語）は、単語「自然」と、単語「言語」との近傍度が２以内であることを示す条件である。（言語  near:2  処理）は、単語「言語」と、単語「処理」との近傍度が２以内であることを示す条件である。（自然  near:2  処理）は、単語「自然」と、単語「処理」との近傍度が２以内であることを示す条件である。また、クエリ１５の各条件は、「AND」で定義されているため、各条件を全て満たすテキストが検索対象となる。
【００１０】
分割データ１０ｂにおいて、「自然」と「言語」との近傍度は「近傍度＝２−１＝１」となり、（自然  near:2  言語）の条件を満たす。分割データ１０ｂにおいて、「言語」と「処理」との近傍度は「近傍度＝３−２＝１」となり、（言語  near:2  処理）の条件を満たす。分割データ１０ｂにおいて、「自然」と「処理」との近傍度は「近傍度＝３−１＝２」となり、（自然  near:2  処理）の条件を満たす。すなわち、分割データ１０ｂは、クエリ１５に示される条件を満たすため、テキスト１０ａが検索される。
【００１１】
続いて、意味解析結果を検索に利用する従来技術について説明する。この従来技術では、複合語を構成する単語で検索を行うステップと、検索された結果を意味構造で検証し、検索対象のテキストであるか否かを判定するステップとからなる。
【００１２】
図３２は、従来技術による意味構造の解析結果の一例を示す図である。図３２に示すように、文字列「自然言語処理」は、意味構造の解析により、「自然」、「言語」、「処理」の単語に分割され、「処理」に対応するノード２０ｃから、「言語」に対応するノード２０ｂに向うアークによって対応付けられている。また、ノード２０ｂから、「自然」に対応するノード２０ａに向かうアークによって対応付けられている。アークは、単語間の係り受けを示す情報である。文字列「自然な処理」は、意味構造の解析により、「自然」、「処理」の単語に分割され、処理に対応するノード２１ｂから、自然に対応するノード２１ａに向かうアークによって対応付けられる。
【００１３】
文字列「言語処理」は、「言語」、「処理」の単語に分割され、「処理」に対応するノード２２ｂから、「言語」に対応するノード２２ａに向かうアークによって対応付けられる。「処理言語」は、「言語」、「処理」の単語に分割され、「言語」に対応するノード２３ａから、「処理」に対応するノード２３ｂに向かうアークによって対応付けられる。
【００１４】
この従来技術では、検索を行う際に、表記上のマッチングに加え、図３２で説明した意味上のマッチングを行うことで、異なる意味を持つ文字列が検索されることを防止している。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開平１１−２０３３１２号公報
【特許文献２】特開２００４−４６４３８号公報
【特許文献３】特開２０００−３２２４４９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
しかしながら、上述した従来技術では、意味属性を考慮した検索を、精度よく高速に行うことができないと言う問題がある。
【００１７】
図３１で説明した近傍検索を利用する従来技術では、近傍度の判定が低速であり、検索に時間を要してしまう。たとえば、テキスト中に「自然」、「言語」、「処理」がバラバラにそれぞれＮ回、Ｍ回、Ｐ回出現していたとすると、近傍度の判定処理は、オーダー（Ｎ×Ｍ＋Ｍ×Ｐ＋Ｎ×Ｐ）の計算量となる。この計算量は、およそＮの２乗の計算量である。
【００１８】
また、近傍検索を利用する従来技術では、近傍度をいくつに設定するかが難しい。近傍度を大きくするとノイズが発生し、近傍度を小さくすると検索もれが発生する。
【００１９】
図３３は、近傍検索を利用する従来技術の問題点を説明するための図である。一例として、「統計による翻訳」というクエリ２５で、「統計を使った機械翻訳」というテキスト２６ａを検索したい場合について説明する。たとえば、クエリ２５の条件で、「統計」と「翻訳」との近傍度を「２」に設定して検索を行うと、テキスト２６ａの「統計」と「翻訳」との近傍度が「５」である。このため、クエリ２５の条件がテキスト２６ａとマッチしないため、クエリ２５により、テキスト２６ａの検索もれが発生する。
【００２０】
これに対して、クエリ２５の近傍度を「５」に変更し、検索を行うと、テキスト２６ａを検索することができるが、たとえば、テキスト２６ｂ、２６ｃも検索結果に含まれる。テキスト２６ｂの近傍度は「５」であるが、テキスト２６ｂの内容は「統計を使わない機械翻訳」であり、クエリ２５の意味に対応しない。テキスト２６ｃの近傍度は「４」であるが、テキスト２６ｃの内容は「翻訳を使った統計」であり、クエリ２５の意味に対応しない。すなわち、近傍度を大きくすると、検索結果にノイズ（テキスト２６ｂ、２６ｂ）が含まれ、検索精度が低下する。
【００２１】
また、図３２で説明した意味構造の解析結果を利用して、検索する従来技術では、複合語を構成する単語で検索を行うステップと、検索された結果を意味構造で検証するステップとの検索（２パスの検索）となり、高速に検索を行うことが難しい。また、検索の際に、表記上のマッチングに加え、図３２で説明した意味上のマッチングを行うと、大きな計算負荷が発生してしまう。
【００２２】
１つの側面では、本発明は、意味属性を考慮した検索を、インデックスのサイズを過剰に大きくすることなく、かつ１パスで行うことができる検索方法、検索プログラムおよび検索装置を提供することを目的とする。
【課題を解決するための手段】
【００２３】
第１の案では、コンピュータは、対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成する。コンピュータは、入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報をクエリに付与する。コンピュータは、クエリに付与された情報と、インデックスとを基にして、対象文字データに対する検索を行う。
【発明の効果】
【００２４】
意味属性を考慮した検索を、インデックスのサイズを過剰に大きくすることなく、かつ１パスで行うことができる。
【図面の簡単な説明】
【００２５】
【図１】図１は、本実施例に係る検索装置の構成を示す機能ブロック図である。
【図２】図２は、テキストＤＢのデータ構造の一例を示す図である。
【図３】図３は、インデックステーブルのデータ構造の一例を示す図である。
【図４】図４は、意味解析結果で得られる係り受けの関係を示す図（１）である。
【図５】図５は、意味解析結果で得られる係り受けの関係を示す図（２）である。
【図６】図６は、インデックスを生成する処理を説明するための図（１）である。
【図７】図７は、インデックスを生成する処理を説明するための図（２）である。
【図８】図８は、インデックスを生成する処理を説明するための図（３）である。
【図９】図９は、インデックスを生成する処理を説明するための図（４）である。
【図１０】図１０は、インデックスを生成する処理を説明するための図（５）である。
【図１１】図１１は、インデックスを生成する処理を説明するための図（６）である。
【図１２】図１２は、自立語部分を抽出する処理を説明するための図（１）である。
【図１３】図１３は、自立語部分を抽出する処理を説明するための図（２）である。
【図１４】図１４は、演算用に変換する処理を説明するための図（１）である。
【図１５】図１５は、演算用に変換する処理を説明するための図（２）である。
【図１６】図１６は、ＡＮＤ演算を説明するための図（１）である。
【図１７】図１７は、自立語部分を抽出する処理を説明するための図（３）である。
【図１８】図１８は、演算用に変換する処理を説明するための図（３）である。
【図１９】図１９は、ＡＮＤ演算を説明するための図（２）である。
【図２０】図２０は、インデックスを生成する処理手順を示すフローチャートである。
【図２１】図２１は、検索処理の処理手順を示すフローチャートである。
【図２２】図２２は、ＡＮＤ演算処理の処理手順を示すフローチャートである。
【図２３】図２３は、インデックスのハッシュ化の一例を説明するための図である。
【図２４】図２４は、ハッシュ化したインデックスを復元する処理の一例を示す図である。
【図２５】図２５は、その他のインデックスのデータ構造の一例を示す図である。
【図２６】図２６は、英語のテキストのインデックスを生成する処理の一例を示す図（１）である。
【図２７】図２７は、英語のテキストのインデックスを生成する処理の一例を示す図（２）である。
【図２８】図２８は、英語のクエリのインデックスを生成する処理の一例を示す図である。
【図２９】図２９は、検索装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【図３０】図３０は、検索の現状を説明するための図である。
【図３１】図３１は、近傍検索を利用する従来技術を説明するための図である。
【図３２】図３２は、従来技術による意味構造の解析結果の一例を示す図である。
【図３３】図３３は、近傍検索を利用する従来技術の問題点を説明するための図である。
【発明を実施するための形態】
【００２６】
以下に、本願の開示する検索方法、検索プログラムおよび検索装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例】
【００２７】
図１は、本実施例に係る検索装置の構成を示す機能ブロック図である。図１に示すように、この検索装置１００は、通信部１１０と、入力部１２０と、表示部１３０と、記憶部１４０と、制御部１５０とを有する。
【００２８】
通信部１１０は、ネットワークを介してサーバとデータ通信を実行する処理部である。通信部１１０は、通信装置に対応する。たとえば、検索装置１００は、後述するテキストＤＢ１４０ａや、インデックステーブル１４０ｃのデータをサーバから受信して、記憶部１４０に格納してもよい。また、通信部１１０は、ネットワークを介して利用者の端末装置等から、クエリのデータを受信してもよい。
【００２９】
入力部１２０は、検索装置１００に各種の情報を入力するための入力装置である。たとえば、入力部１２０は、キーボードやマウス、タッチパネル等に対応する。ユーザは、入力部１２０を操作して、クエリのデータを入力してもよい。
【００３０】
表示部１３０は、制御部１５０から出力される各種のデータを表示する表示装置である。たとえば、表示部１３０は、液晶モニタやタッチパネル等に対応する。表示部１３０は、制御部１５０により実行されるクエリの検索結果等を表示する。
【００３１】
記憶部１４０は、テキストＤＢ１４０ａ、クエリ１４０ｂ、インデックステーブル１４０ｃ、意味属性付与クエリ１４０ｄ、辞書情報１４０ｅを有する。記憶部１４０は、ＲＡＭ（Random  Access  Memory）、ＲＯＭ（Read  Only  Memory）、フラッシュメモリ（Flash  Memory）などの半導体メモリ素子や、ＨＤＤ（Hard  Disk  Drive）などの記憶装置に対応する。
【００３２】
テキストＤＢ１４０ａは、クエリ１４０ｂの検索対象となる複数のテキストのデータを保持するＤＢ（Data  Base）である。図２は、テキストＤＢのデータ構造の一例を示す図である。図２に示すように、このテキストＤＢ１４０ａには、テキストＩＤと、テキストデータとを対応付ける。テキストＩＤは、テキストを一意に識別する情報である。テキストは、複数のセンテンスを含む情報である。
【００３３】
クエリ１４０ｂは、利用者によって指定されるクエリの情報である。後述するように、検索装置１００は、クエリ１４０ｂに含まれる文字列（複合語等）と同じ意味の文字列を含むテキストを、テキストＤＢ１４０ａから検索する。
【００３４】
インデックステーブル１４０ｃは、テキストＤＢ１４０ａの各テキストに対応するインデックスをそれぞれ保持するテーブルである。図３は、インデックステーブルのデータ構造の一例を示す図である。図３に示すように、このインデックステーブルは、テキストＩＤと、インデックスとを対応付ける。テキストＩＤは、図２で説明したテキストＩＤに対応するものである。インデックスは、テキストＩＤに対応するテキストから生成されるインデックスの情報である。インデックスは、テキストに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含む情報である。インデックスに関する具体的な説明は後述する。
【００３５】
意味属性付与クエリ１４０ｄは、クエリ１４０ｂに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とをクエリ１４０ｂに付与した情報である。意味属性付与クエリ１４０ｄに関する具体的な説明は後述する。
【００３６】
辞書情報１４０ｅは、各複合語に対応する文字列を定義する情報である。たとえば、辞書情報１４０ｅには、「自然言語処理」、「言語処理」、「処理言語」、「機械翻訳」等の文字列が含まれる。テキストに含まれる文字列（形態素）のうち、辞書情報１４０ｅの文字列と一致する文字列が、複合語として特定される。また、辞書情報１４０ｅは、複合語に類する文字列を含んでいてもよい。
【００３７】
制御部１５０は、取得部１５０ａと、インデックス生成部１５０ｂと、意味属性付与部１５０ｃと、検索部１５０ｄとを有する。制御部１５０は、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などによって実現できる。また、制御部１５０は、ＡＳＩＣ（Application  Specific  Integrated  Circuit）やＦＰＧＡ（Field  Programmable  Gate  Array）などのハードワイヤードロジックによっても実現できる。
【００３８】
取得部１５０ａは、各種の情報を取得し、取得した情報を記憶部１４０に格納する処理部である。たとえば、取得部１５０ａは、ネットワーク上のサーバ等から、テキストＤＢ１４０ａを取得し、取得したテキストＤＢ１４０ａを、記憶部１４０に格納する。また、取得部１５０ａは、ネットワーク上の利用者の端末装置、または、入力部１２０から、クエリ１４０ｂを取得し、取得したクエリ１４０ｂを、記憶部１４０に格納する。
【００３９】
インデックス生成部１５０ｂは、テキストＤＢ１４０ａに格納されたテキストに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成する処理部である。インデックス生成部１５０ｂは、テキストに対応するインデックスを生成すると、テキストＩＤとインデックスとを対応付けて、インデックステーブル１４０ｃに格納する。
【００４０】
以下において、インデックス生成部１５０ｂの処理の一例について説明する。インデックス生成部１５０ｂは、複合語および複合語に類する表現の同定処理、係り受け情報設定処理、インデックス生成処理を順に実行する。
【００４１】
複合語に類する表現の同定処理について説明する。インデックス生成部１５０ｂは、テキストＤＢから、テキストを取得し、取得したテキストに対して形態素解析を行うことで、テキストの文字列を複数の形態素に分割する。インデックス生成部１５０ｂは、各形態素に対して、標本化を実行することで、テキストから得られた形態素のうち、単語に対応する形態素を特定する。
【００４２】
インデックス生成部１５０ｂは、標本化により、単語に対応する形態素と、辞書情報１４０ｅとを比較することで、複合語に対応する形態素を特定し、特定した複合語に対応する形態素を、単語単位に分解する。たとえば、インデックス生成部１５０ｂは、複合語に対応する１つの形態素「自然言語処理」を、３つの形態素「自然」、「言語」、「処理」に分割する。
【００４３】
また、インデックス生成部１５０ｂは「複合語に類する表現」の同定を行う。たとえば、インデックス生成部１５０ｂは「統計を使った機械翻訳」等の表現に関しては、構文解析・意味解析を実行することで、どこからどこまでが複合語に類する表現であるかを同定する。インデックス生成部１５０ｂは、構文解析・意味解析の結果得られる構文木・意味構造において、複合語の形態素のノードと直接つながるノードのうち、３つまでのノードに対応する形態素の組を、複合語に類する表現として同定する。なお、複合語に限らない場合には、直接つながるノードの数に制約を設けなくてもよい。
【００４４】
たとえば、インデックス生成部１５０ｂは、テキスト「今から示すのは、これまでに様々な研究機関により評価が進められた統計を使った機械翻訳に関する論文です」に含まれる「統計を使った機械翻訳」を、複合語に類する表現として同定する。これに対して、インデックス生成部１５０ｂは、テキスト「今から示すのは、これまでに様々な研究機関により評価が進められた統計を使った機械翻訳に関する論文です」全体を、複合語に類する表現として同定しない。また、インデックス生成部１５０ｂは、「これまでに様々な研究機関により評価が進められた統計」を、複合語に類する表現として同定しない。インデックス生成部１５０ｂは、「統計を使った機械」を、複合語に類する表現として同定しない。
【００４５】
係り受け情報設定処理について説明する。インデックス生成部１５０ｂは、複合語に対応する形態素の組、複合語に類する表現に対応する形態素の組について、意味解析を実行し、係り元および係り先の情報を形態素のノードに付与する。
【００４６】
図４および図５は、意味解析結果で得られる係り受けの関係を示す図である。図４に示すように、文字列「自然言語処理」の意味解析結果は、結果３０となる。「自然」に対応するノードを、ノード３０ａとする。「言語」に対応するノードを、ノード３０ｂとする。「処理」に対応するノードを、ノード３０ｃとする。ノード３０ａおよびノード３０ｂは、ノード３０ｂからノード３０ａに向かうアーク＜ｍｏｄ＞により接続される。ノード３０ｂおよびノード３０ｃは、ノード３０ｃからノード３０ｂに向かうアーク＜ｍｏｄ＞により接続される。
【００４７】
文字列「自然な処理」の意味解析結果は、結果３１となる。結果３１に示すように、ノード３０ａおよびノード３０ｂは、ノード３０ｂからノード３０ａに向かうアーク＜ｍｏｄ．ａ＞により接続される。
【００４８】
ここで、結果３０と結果３１とを比較すると、アークが接続するノードの種別が異なり、また、アークの種別も異なるので、「自然言語処理」と「自然な処理」は意味が異なる。結果３１では、ノード３０ａとノード３０ｃとが直接接続されているが、結果３０では、ノード３０ａとノード３０ｃとが直接接続されていない。
【００４９】
文字列「言語処理」の意味解析結果は、結果３２となる。結果３２に示すように、ノード３０ｂおよびノード３０ｃは、ノード３０ｃからノード３２ｂに向かうアーク＜ｍｏｄ＞により接続される。
【００５０】
文字列「処理言語」の意味解析結果は、結果３３となる。結果３３に示すように、ノード３３ｂおよびノード３３ｃは、ノード３３ｂからノード３３ｃに向かうアーク＜ｍｏｄ＞により接続される。
【００５１】
結果３２と結果３３とを比較すると、アークの種別、アークによって接続されるノードの種別は一致しているが、アークの向きが異なるので、「言語処理」と「処理言語」とは意味が異なる。
【００５２】
図５の説明に移行する。文字列「統計による翻訳」の意味解析結果は、結果３４となる。「翻訳」に対応するノードを、ノード３０ｄとする。「統計」に対応するノードを、ノード３０ｅとする。ノード３０ｄおよびノード３０ｅは、ノード３０ｄからノード３０ｅに向かうアーク＜ｔｏｏｌ＞により接続される。
【００５３】
文字列「統計を使った機械翻訳」の意味解析結果は、結果３５となる。「機械」に対応するノードを、ノード３０ｆとする。ノード３０ｄおよびノード３０ｅは、ノード３０ｄからノード３０ｅに向かうアーク＜ｔｏｏｌ＞により接続される。ノード３０ｄおよびノード３０ｆは、ノード３０ｄからノード３０ｆに向かうアーク＜ｍｏｄ＞により接続される。
【００５４】
文字列「統計を使わない人間翻訳」の意味解析結果は、結果３６となる。「人間」に対応するノードを、ノード３０ｇとする。「使う」に対応するノードを、ノード３０ｈとする。ノード３０ｄおよびノード３０ｇは、ノード３０ｄからノード３０ｇに向かうアーク＜ｍｏｄ＞により接続される。ノード３０ｄおよびノード３０ｈは、ノード３０ｈからノード３０ｄに向かうアーク＜ａｇｅｎｔ＞により接続される。ノード３０ｈは、ノード３０ｈを係り元とするアーク＜ｎｏｔ＞が接続される。ノード３０ｈおよびノード３０ｅは、ノード３０ｈからノード３０ｅに向かうアーク＜ｏｂｊ＞により接続される。
【００５５】
文字列「翻訳の統計」の意味解析結果は、結果３７となる。ノード３０ｄおよびノード３０ｅは、ノード３０ｅからノード３０ｄに向かうアーク＜ｍｏｄ＞により接続される。
【００５６】
文字列「翻訳を使った統計」の意味解析結果は、結果３８となる。ノード３０ｅおよびノード３０ｄは、ノード３０ｅからノード３０ｄに向かうアーク＜ｔｏｏｌ＞により接続される。
【００５７】
図５において、結果３４と結果３５とを比較すると、ノード３０ｄおよびノード３０ｅを接続するアークの種別およびアークの向きが一致しているため、文字列「統計による翻訳」と、「統計を使った機械翻訳」とは、意味が一致することを示す。これに対して、結果３４と、結果３６、３７、３８とは、アークの種別、アークの向き、あるいは、アークに接続されるノードの種別が異なる。このため、文字列「統計による翻訳」と、「統計を使わない人間翻訳」とは意味が異なる。文字列「統計による翻訳」と、「翻訳の統計」とは意味が異なる。文字列「統計による翻訳」と、「翻訳を使った統計」とは意味が異なる。
【００５８】
インデックス生成処理について説明する。インデックス生成部１５０ｂは、上述した同定処理、係り受け情報設定処理の結果を基にして、インデックスを生成する。
【００５９】
図６〜図１１は、インデックスを生成する処理を説明するための図である。図６について説明する。図６では、文字列「統計を使った機械翻訳」に対応するインデックス３５ａを生成する場合について説明する。インデックスは、横軸にオフセットをとり、縦軸に属性をとる。縦軸の属性は、形態素の属性と、アークの属性と、ｓｐａｎの属性を含む。縦軸に設定される属性の順番は、予め設定された順番となる。
【００６０】
インデックスで示される形態素の属性には、文字列に含まれる各形態素がそれぞれ設定される。形態素の属性に配置される各形態素は、上から順に所定の順番に配置される。たとえば、各形態素は辞書順に配置される。インデックスで示されるアークの属性には、形態素のノードに設定されるアークの始点および終点が、アークの種別毎に設定される。ｓｐａｎの属性には、アークで接続された各ノードに対応する形態素間の、文字列上の距離を示す情報が設定される。なお、オフセットは、文字列に含まれる各形態素に設定される情報であり、先頭の形態素から順に、１、２、３、・・・ｎが割り振られる。
【００６１】
インデックス生成部１５０ｂは、上述したように、文字列「統計を使った機械翻訳」に対して、意味解析を実行することで、結果３５を得る。また、文字列「統計を使った機械翻訳」は、形態素「統計」、「を」、「使っ」、「た」、「機械」、「翻訳」に分割され、各形態素のオフセットは、順に「１、２、３、４、５、６」となる。インデックス生成部１５０ｂは、かかる内容に基づいて、文字列「統計を使った機械翻訳」に対応するインデックス３５ａを生成する。インデックス３５ａの各位置における初期値を「０」とする。
【００６２】
インデックス生成部１５０ｂが、インデックス３５ａにおいて、形態素の属性の行にフラグ（ビット）を設定する処理について説明する。インデックス生成部１５０ｂは、形態素「統計」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「機械」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「翻訳」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「使う（使っ）」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「を」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「た」の行と、オフセット「４」の列とが交差する位置に、フラグ「１」を設定する。
【００６３】
インデックス生成部１５０ｂが、インデックス３５ａにおいて、アークの属性の行にフラグを設定する処理について説明する。結果３５において、ノード３０ｄおよびノード３０ｆは、ノード３０ｄからノード３０ｆに向かうアーク＜ｍｏｄ＞により接続される。ノード３０ｄは、オフセット６の形態素「翻訳」に対応するノードである。ノード３０ｆは、オフセット５の形態素「機械」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｍｏｄ始点」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｍｏｄ終点」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。
【００６４】
結果３５において、ノード３０ｄおよびノード３０ｅは、ノード３０ｄからノード３０ｅに向かうアーク＜ｔｏｏｌ＞により接続される。ノード３０ｄは、オフセット６の形態素「翻訳」に対応するノードである。ノード３０ｅは、オフセット１の形態素「統計」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｔｏｏｌ始点」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｔｏｏｌ終点」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【００６５】
インデックス生成部１５０ｂが、インデックス３５ａにおいて、ｓｐａｎの属性の行にフラグを設定する処理について説明する。アーク＜ｍｏｄ＞で接続されたノード３０ｄ，３０ｆに対応する文字列上の形態素「翻訳」、「機械」の距離（ｓｐａｎ）は「１」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ１の行と、オフセット５、６の各列とが交差する各位置に、フラグ「１」を設定する。
【００６６】
アーク＜ｔｏｏｌ＞で接続されたノード３０ｄ，３０ｅに対応する文字列上の形態素「翻訳」、「統計」の距離（ｓｐａｎ）は「５」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ５の行と、オフセット１、６の各列とが交差する各位置に、フラグ「１」を設定する。
【００６７】
ｓｐａｎの属性を設けることで、アークの属性を曖昧性なく設定することができる。また、他の文の単語の関係を除外することが可能となる。たとえば、インデックス３５ａのｓｐａｎの属性を参照すると、アークで接続されている形態素のノードは、機械のノードと、翻訳のノードとの組、統計のノードと、翻訳のノードとの組であることが明確になり、統計のノードと機械のノードとが直接接続されていないことが明確となる。
【００６８】
インデックス生成部１５０ｂは、上記処理を行うことで、文字列「統計を使った機械翻訳」に対応するインデックス３５ａを生成する。
【００６９】
続いて、図７について説明する。図７では、文字列「統計による翻訳」に対応するインデックス３４ａを生成する場合について説明する。インデックス３４ａは、インデックス３５ａと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
【００７０】
インデックス生成部１５０ｂは、上述したように、文字列「統計による翻訳」に対して、意味解析を実行することで、結果３４を得る。また、文字列「統計による翻訳」は、形態素「統計」、「による」、「翻訳」に分割され、各形態素のオフセットは、順に「１，２、３」となる。インデックス生成部１５０ｂは、かかる内容に基づいて、文字列「統計による翻訳」に対応するインデックス３４ａを生成する。インデックス３４ａの各位置における初期値を「０」とする。
【００７１】
インデックス生成部１５０ｂが、インデックス３４ａにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、形態素「統計」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「翻訳」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「による」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。
【００７２】
インデックス生成部１５０ｂが、インデックス３４ａにおいて、アークの属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、結果３４において、ノード３０ｄおよびノード３０ｅは、ノード３０ｄからノード３０ｅに向かうアーク＜ｔｏｏｌ＞により接続される。ノード３０ｄは、オフセット３の形態素「翻訳」に対応するノードである。ノード３０ｅは、オフセット１の形態素「統計」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｔｏｏｌ始点」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｔｏｏｌ終点」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【００７３】
インデックス生成部１５０ｂが、インデックス３４ａにおいて、ｓｐａｎの属性の行にフラグを設定する処理について説明する。アーク＜ｔｏｏｌ＞で接続されたノード３０ｄ，３０ｅに対応する文字列上の形態素「翻訳」、「統計」の距離（ｓｐａｎ）は「２」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ２の行と、オフセット１、３の各列とが交差する各位置に、フラグ「１」を設定する。
【００７４】
続いて、図８について説明する。図８では、文字列「統計を使わない機械翻訳」に対応するインデックス３６ａを生成する場合について説明する。インデックス３６ａは、インデックス３５ａと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
【００７５】
インデックス生成部１５０ｂは、上述したように、文字列「統計を使わない機械翻訳」に対して、意味解析を実行することで、結果３６を得る。また、文字列「統計を使わない機械翻訳」は、形態素「統計」、「を」、「使う（使わ）」、「ない」、「機械」、「翻訳」に分割され、各形態素のオフセットは、順に「１，２、３、４、５、６」となる。インデックス生成部１５０ｂは、かかる内容に基づいて、文字列「統計を使わない機械翻訳」に対応するインデックス３６ａを生成する。インデックス３６ａの各位置における初期値を「０」とする。
【００７６】
インデックス生成部１５０ｂが、インデックス３６ａにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、形態素「統計」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「機械」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「翻訳」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「使う」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「を」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「ない」の行と、オフセット「４」の列とが交差する位置に、フラグ「１」を設定する。
【００７７】
インデックス生成部１５０ｂが、インデックス３６ａにおいて、アークの属性の行にフラグを設定する処理について説明する。結果３６において、ノード３０ｄおよびノード３０ｇは、ノード３０ｄからノード３０ｇに向かうアーク＜ｍｏｄ＞により接続される。ノード３０ｄは、オフセット６の形態素「翻訳」に対応するノードである。ノード３０ｇは、オフセット５の形態素「人間」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｍｏｄ始点」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｍｏｄ終点」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。
【００７８】
結果３６において、ノード３０ｈおよびノード３０ｅは、ノード３０ｈからノード３０ｅに向かうアーク＜ｏｂｊ＞により接続される。ノード３０ｈは、オフセット３の形態素「使う」に対応するノードである。ノード３０ｅは、オフセット１の形態素「統計」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｏｂｊ始点」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｏｂｊ終点」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【００７９】
結果３６において、ノード３０ｄおよびノード３０ｈは、ノード３０ｈからノード３０ｄに向かうアーク＜ａｇｅｎｔ＞により接続される。ノード３０ｄは、オフセット６の形態素「翻訳」に対応するノードである。ノード３０ｈは、オフセット３の形態素「使う」に対応するノードである。このため、インデックス生成部１５０ｂは、「ａｇｅｎｔ始点」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ａｇｅｎｔ終点」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。
【００８０】
結果３６において、ノード３０ｈにアーク＜ｎｏｔ＞が接続されている。ノード３０ｈは、オフセット３の形態素「使う」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＮＯＴ始点」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。
【００８１】
インデックス生成部１５０ｂが、インデックス３６ａにおいて、ｓｐａｎの属性の行にフラグを設定する処理について説明する。アーク＜ｍｏｄ＞で接続されたノード３０ｄ，３０ｇに対応する文字列上の形態素「翻訳」、「人間」の距離（ｓｐａｎ）は「１」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ１の行と、オフセット５、６の各列とが交差する各位置に、フラグ「１」を設定する。
【００８２】
アーク＜ｏｂｊ＞で接続されたノード３０ｄ，３０ｈに対応する文字列上の形態素「統計」、「使う」の距離（ｓｐａｎ）は「２」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ２の行と、オフセット１、３の各列とが交差する各位置に、フラグ「１」を設定する。
【００８３】
アーク＜ａｇｅｎｔ＞で接続されたノード３０ｄ，３０ｈに対応する文字列上の形態素「使う」、「翻訳」の距離（ｓｐａｎ）は「３」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ２の行と、オフセット３、６の各列とが交差する各位置に、フラグ「１」を設定する。
【００８４】
続いて、図９について説明する。図９では、文字列「翻訳の統計」に対応するインデックス３７ａを生成する場合について説明する。インデックス３７ａは、インデックス３５ａと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
【００８５】
インデックス生成部１５０ｂは、上述したように、文字列「翻訳の統計」に対して、意味解析を実行することで、結果３７を得る。また、文字列「翻訳の統計」は、形態素「翻訳」、「の」、「統計」に分割され、各形態素のオフセットは、順に「１，２、３」となる。インデックス生成部１５０ｂは、かかる内容に基づいて、文字列「翻訳の統計」に対応するインデックス３７ａを生成する。インデックス３７ａの各位置における初期値を「０」とする。
【００８６】
インデックス生成部１５０ｂが、インデックス３７ａにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、形態素「統計」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「翻訳」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「の」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。
【００８７】
インデックス生成部１５０ｂが、インデックス３７ａにおいて、アークの属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、結果３７において、ノード３０ｄおよびノード３０ｅは、ノード３０ｅからノード３０ｄに向かうアーク＜ｍｏｄ＞により接続される。ノード３０ｄは、オフセット１の形態素「翻訳」に対応するノードである。ノード３０ｅは、オフセット３の形態素「統計」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｍｏｄ始点」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｍｏｄ終点」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【００８８】
インデックス生成部１５０ｂが、インデックス３７ａにおいて、ｓｐａｎの属性の行にフラグを設定する処理について説明する。アーク＜ｍｏｄ＞で接続されたノード３０ｄ，３０ｅに対応する文字列上の形態素「翻訳」、「統計」の距離（ｓｐａｎ）は「２」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ２の行と、オフセット１、３の各列とが交差する各位置に、フラグ「１」を設定する。
【００８９】
続いて、図１０について説明する。図１０では、文字列「翻訳を使った統計」に対応するインデックス３８ａを生成する場合について説明する。インデックス３８ａは、インデックス３５ａと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
【００９０】
インデックス生成部１５０ｂは、上述したように、文字列「翻訳を使った統計」に対して、意味解析を実行することで、結果３８を得る。また、文字列「翻訳を使った統計」は、形態素「翻訳」、「を」、「使う（使っ）」、「た」、「統計」に分割され、各形態素のオフセットは、順に「１，２、３、４、５」となる。インデックス生成部１５０ｂは、かかる内容に基づいて、文字列「翻訳を使った統計」に対応するインデックス３８ａを生成する。インデックス３８ａの各位置における初期値を「０」とする。
【００９１】
インデックス生成部１５０ｂが、インデックス３８ａにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、形態素「統計」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「翻訳」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「使う」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「た」の行と、オフセット「４」の列とが交差する位置に、フラグ「１」を設定する。
【００９２】
インデックス生成部１５０ｂが、インデックス３８ａにおいて、アークの属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、結果３８において、ノード３０ｄおよびノード３０ｅは、ノード３０ｅからノード３０ｄに向かうアーク＜ｔｏｏｌ＞により接続される。ノード３０ｄは、オフセット１の形態素「翻訳」に対応するノードである。ノード３０ｅは、オフセット５の形態素「統計」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｔｏｏｌ始点」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｔｏｏｌ終点」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【００９３】
インデックス生成部１５０ｂが、インデックス３８ａにおいて、ｓｐａｎの属性の行にフラグを設定する処理について説明する。アーク＜ｔｏｏｌ＞で接続されたノード３０ｄ，３０ｅに対応する文字列上の形態素「翻訳」、「統計」の距離（ｓｐａｎ）は「４」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ４の行と、オフセット１、５の各列とが交差する各位置に、フラグ「１」を設定する。
【００９４】
続いて、図１１について説明する。図１１では、文字列「自然言語処理において・・・処理言語の・・・」に対応するインデックス４０ａを生成する場合について説明する。インデックス４０ａは、インデックス３５ａと同様にして、横軸にオフセットをとり、縦軸に属性をとる。
【００９５】
インデックス生成部１５０ｂは、「自然言語処理」に対して、意味解析を実行することで、結果３０を得る。また、インデックス生成部１５０ｂは、「処理言語」に対して、意味解析を実行することで、結果３３を得る。また、文字列「自然言語処理において・・・処理言語の・・・」は、形態素「自然」、「言語」、「処理」、「において」、「・・・（中略）」、「処理」、「言語」、「の」に分割される。例えば、「自然」、「言語」、「処理」、「において」のオフセットを「１、２、３、４」とする。続く、「処理」、「言語」、「の」のオフセットを「５２、５３、５４」とする。
【００９６】
インデックス生成部１５０ｂが、結果３０、３３に基づき、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、形態素「言語」の行と、オフセット「２」および「５３」の各列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「自然」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「処理」の行と、オフセット「３」、「５２」の各列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「において」の行と、オフセット「４」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「の」の行と、オフセット「５４」の列とが交差する位置に、フラグ「１」を設定する。
【００９７】
インデックス生成部１５０ｂが、結果３０、３３に基づき、アークの属性の行にフラグを設定する処理について説明する。結果３０において、ノード３０ａおよびノード３０ｂは、ノード３０ｂからノード３０ａに向かうアーク＜ｍｏｄ＞により接続される。ノード３０ａは、オフセット１の形態素「自然」に対応するノードである。ノード３０ｂは、オフセット２の形態素「言語」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｍｏｄ始点」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｍｏｄ終点」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【００９８】
結果３０において、ノード３０ｂおよびノード３０ｃは、ノード３０ｃからノード３０ｂに向かうアーク＜ｍｏｄ＞により接続される。ノード３０ｂは、オフセット２の形態素「言語」に対応するノードである。ノード３０ｃは、オフセット３の形態素「処理」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｍｏｄ始点」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｍｏｄ終点」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。
【００９９】
結果３３において、ノード３０ｂおよびノード３０ｃは、ノード３０ｂからノード３０ｃに向かうアーク＜ｍｏｄ＞により接続される。ノード３０ｂは、オフセット５３の形態素「言語」に対応するノードである。ノード３０ｃは、オフセット５２の形態素「処理」に対応するノードである。このため、インデックス生成部１５０ｂは、「ｍｏｄ始点」の行と、オフセット「５２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ｍｏｄ終点」の行と、オフセット「５３」の列とが交差する位置に、フラグ「１」を設定する。
【０１００】
インデックス生成部１５０ｂが、結果３０、３３に基づき、ｓｐａｎの属性の行にフラグを設定する処理について説明する。結果３０において、アーク＜ｍｏｄ＞で接続されたノード３０ａ，３０ｂに対応する文字列上の形態素「自然」、「言語」の距離（ｓｐａｎ）は「１」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ１の行と、オフセット１、２の各列とが交差する各位置に、フラグ「１」を設定する。アーク＜ｍｏｄ＞で接続されたノード３０ｂ，３０ｃに対応する文字列上の形態素「言語」、「処理」の距離（ｓｐａｎ）は「１」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ１の行と、オフセット２、３の各列とが交差する各位置に、フラグ「１」を設定する。
【０１０１】
結果３３において、アーク＜ｍｏｄ＞で接続されたノード３０ｂ，３０ｃに対応する文字列上の形態素「言語」、「処理」の距離（ｓｐａｎ）は「１」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ１の行と、オフセット５２、５３の各列とが交差する各位置に、フラグ「１」を設定する。
【０１０２】
インデックス生成部１５０ｂは、テキストＤＢ１４０ａに格納されたテキストを取得し、取得したテキストのインデックスを、図６〜図１１で説明した処理を実行することで生成する。インデックス生成部１５０ｂは、テキストＩＤと、テキストのインデックスとを対応付けて、インデックステーブル１４０ｃに格納する。インデックス生成部１５０ｂは、各テキストについて、上記処理を繰り返し実行して、インデックスを生成する。
【０１０３】
図１の説明に戻る。意味属性付与部１５０ｃは、利用者に指定されたクエリ１４０ｂに意味属性を付与することで、意味属性付与クエリ１４０ｄを生成する処理部である。たとえば、クエリ１４０ｂに付与される意味属性は、クエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とに対応する。意味属性付与部１５０ｃは、意味属性付与クエリ１４０ｄを、記憶部１４０に格納する。
【０１０４】
以下において、意味属性付与部１５０ｃの処理の一例について説明する。意味属性付与部１５０ｃは、複合語および複合語に類する表現の同定処理、係り受け情報設定処理、意味属性付与処理を順に実行する。
【０１０５】
複合語に類する表現の同定処理について説明する。意味属性付与部１５０ｃは、クエリ１４０ｂに対して形態素解析を行うことで、クエリ１４０ｂの文字列を複数の形態素に分割する。意味属性付与部１５０ｃは、各形態素に対して、標本化を実行することで、クエリ１４０ｂから得られた形態素のうち、単語に対応する形態素を特定する。
【０１０６】
意味属性付与部１５０ｃは、標本化により特定した単語に対応する形態素と、辞書情報１４０ｅとを比較することで、複合語に対応する形態素を特定し、特定した複合語に対応する形態素を、単語単位に分解する。たとえば、意味属性付与部１５０ｃは、複合語に対応する１つの形態素「自然言語処理」を、３つの形態素「自然」、「言語」、「処理」に分割する。
【０１０７】
また、意味属性付与部１５０ｃは、インデックス生成部１５０ｂと同様にして、クエリ１４０ｂに含まれる「複合語に類する表現」の同定を行ってもよい。
【０１０８】
係り受け情報設定処理について説明する。意味属性付与部１５０ｃは、複合語に対応する形態素の組、複合語に類する表現に対応する形態素の組について、意味解析を実行し、係り元および係り先の情報を形態素のノードに付与する。たとえば、意味属性付与部１５０ｃによる、意味解析結果で得られる係り受けの関係は、図４、図５で説明したものと同様である。
【０１０９】
意味属性付与処理について説明する。意味属性付与部１５０ｃは、上述した同定処理、係り受け情報設定処理の結果を基にして、クエリ１４０ｂに意味属性を付与する。クエリに付与される意味属性は、インデックスに相当する情報である。
【０１１０】
意味属性付与部１５０ｃは、図６〜図１１で説明したものと同様に、インデックスを作成する要領で、クエリに付与する意味属性を生成する。たとえば、クエリ１４０ｂで指定された文字列が「統計による翻訳」とする。この場合には、意味属性付与部１５０ｃは、図７で説明した処理を実行することで、インデックス３４ａを生成し、このインデックス３４ａを、意味属性として、クエリ１４０ｂに付与することで、意味属性付与クエリ１４０ｄを生成する。
【０１１１】
図１の説明に戻る。検索部１５０ｄは、インデックステーブル１４０ｃのインデックスと、意味属性付与クエリ１４０ｄとを基にして、検索対象となるテキストの検索を行う処理部である。検索部１５０ｄは、検索結果となるテキストの情報を、表示部１３０に出力する。なお、検索部１５０ｄは、クエリ１４０ｂが、外部の端末装置から送信されたものである場合には、外部の端末装置に、検索結果となるテキストの情報を送信する。
【０１１２】
以下において、検索部１５０ｄの処理の一例について説明する。検索部１５０ｄは、自立語部分を抽出する処理、演算用に変換する処理、ＡＮＤ演算を順に実行する。検索部１５０ｄの説明においては、意味属性付与クエリ１４０ｄに付与された意味属性の情報を「クエリビットマップ」と表記する。テキストから生成されたインデックスを「インデックスビットマップ」と表記する。
【０１１３】
自立語部分を抽出する処理について説明する。図１２および図１３は、自立語部分を抽出する処理を説明するための図である。図１２について説明する。図１２に示すクエリビットマップ５０は、クエリに含まれる「統計による翻訳」から生成されるビットマップ（インデックス）である。
【０１１４】
自立語は、予め指定される複数の形態素のうち、属性部分にフラグ「１」が立っている形態素を示す。たとえば、クエリビットマップ５０において、形態素「統計」、「翻訳」の属性部分にフラグ「１」が立っている。この統計、翻訳を、予め指定される形態素とする。形態素「による」が、予め指定される複数の形態素に含まれないとする。検索部１５０ｄは、クエリビットマップ５０のオフセット「２」の列を取り除くことで、自立語部分を抽出したクエリビットマップ５０ａを生成する。
【０１１５】
図１３について説明する。図１３に示すインデックスビットマップ６０は、テキストに含まれる文字列「統計を使った機械翻訳」から生成されるビットマップ（インデックス）である。インデックスビットマップ６０において、形態素「統計」、「機械」、「翻訳」の属性部分にフラグ「１」が立っている。形態素「を」、「使う」、「た」が、予め指定される複数の形態素に含まれていないとする。検索部１５０ｄは、インデックスビットマップ６０のオフセット「２〜４」の列を取り除くことで、自立語部分を抽出したインデックスビットマップ６０ａを生成する。
【０１１６】
続いて、演算用に変換する処理について説明する。図１４および図１５は、演算用に変換する処理を説明するための図である。図１４について説明する。検索部１５０ｄは、自立語部分を抽出したクエリビットマップ５０ａの形態素の属性の行において、辞書順に、フラグが「１」となるように列を入れ替える。クエリビットマップ５０ａのフラグは、辞書順に「１」となっているため、そのままとなる。
【０１１７】
検索部１５０ｄは、クエリビットマップ５０ａのｓｐａｎの属性を更新する。クエリの「統計による翻訳」から「による」に対応する情報が削除されたため、形態素「統計」と「翻訳」とのｓｐａｎ（オフセットの距離）は、「ｓｐａｎ２」から、「ｓｐａｎ１」となる。このため、検索部１５０ｄは、ｓｐａｎ１の行と、オフセット１、３の各列とが交差する位置のフラグを「１」に変換する。検索部１５０ｄは、ｓｐａｎ２の行と、オフセット１、３の各列とが交差する位置のフラグを「０」に変換する。
【０１１８】
検索部１５０ｄは、上記処理を行うことで、クエリビットマップ５０ａを、演算用のクエリビットマップ５０ｂに変換する。
【０１１９】
図１５について説明する。検索部１５０ｄは、自立語部分を抽出したインデックスビットマップ６０ａの縦軸の単語（形態素）の順序を、辞書順にソートする。インデックスビットマップ６０ａの形態素の属性の行において、辞書順に、フラグが「１」となるように列を入れ替える。インデックスビットマップ６０ａのフラグは、辞書順に「１」となっているため、そのままとなる。また、検索部１５０ｄは、比較対象のクエリビットマップ５０ｂに、形態素「機械」に対するフラグ「１」が立っていないため、インデックスビットマップのオフセット「５」の列を取り除く処理を行う。
【０１２０】
検索部１５０ｄは、インデックスビットマップ６０ａのｓｐａｎの属性を更新する。テキストの「統計を使った機械翻訳」から「を使った機械」に対応する情報が削除されたため、形態素「統計」と「翻訳」とのｓｐａｎ（オフセットの距離）は、「ｓｐａｎ５」から、「ｓｐａｎ１」となる。このため、検索部１５０ｄは、ｓｐａｎ１の行と、オフセット１、６の各列とが交差する位置のフラグを「１」に変換する。検索部１５０ｄは、ｓｐａｎ２の行と、オフセット１、６の各列とが交差する位置のフラグを「０」に変換する。
【０１２１】
検索部１５０ｄは、上記処理を行うことで、インデックスビットマップ６０ａを、演算用のインデックスビットマップ６０ｂに変換する。
【０１２２】
続いて、ＡＮＤ演算について説明する。検索部１５０ｄは、演算用のクエリビットマップと、演算用のインデックスビットマップとをＡＮＤ演算する。検索部１５０ｄは、ＡＮＤ演算結果において、クエリビットマップの属性のフラグが「１」となっていた位置が、全て「１」となる場合に、インデックスビットマップの作成元となるテキストに、クエリがヒットしたと判定する。
【０１２３】
図１６は、ＡＮＤ演算を説明するための図である。図１６に示すように、検索部１５０ｄは、クエリビットマップ５０ｂと、インデックスビットマップ６０ｂとのＡＮＤ演算を行うと、ＡＮＤ演算結果７０が得られる。検索部１５０ｄは、属性の行および列をそれぞれ対応させて、ＡＮＤ演算を行うものとする。
【０１２４】
たとえば、検索部１５０ｄは、クエリビットマップ５０ｂの「統計の行および１列目」と、インデックスビットマップ６０ｂの「統計の行および１列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７０の「統計の行および１列目」の値「１」を算出する。検索部１５０ｄは、クエリビットマップ５０ｂの「翻訳の行および２列目」と、インデックスビットマップ６０ｂの「翻訳の行および２列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７０の「翻訳の行および２列目」の値「１」を算出する。
【０１２５】
検索部１５０ｄは、クエリビットマップ５０ｂの「ｔｏｏｌ始点の行および２列目」と、インデックスビットマップ６０ｂの「ｔｏｏｌ始点の行および２列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７０の「ｔｏｏｌ始点の行および２列目」の値「１」を算出する。検索部１５０ｄは、クエリビットマップ５０ｂの「ｔｏｏｌ終点の行および１列目」と、インデックスビットマップ６０ｂの「ｔｏｏｌ終点の行および１列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７０の「ｔｏｏｌ終点の行および１列目」の値「１」を算出する。
【０１２６】
検索部１５０ｄは、クエリビットマップ５０ｂの「ｓｐａｎ１の行および１列目」と、インデックスビットマップ６０ｂの「ｓｐａｎ１の行および１列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７０の「ｓｐａｎ１の行および１列目」の値「１」を算出する。検索部１５０ｄは、クエリビットマップ５０ｂの「ｓｐａｎ１の行および２列目」と、インデックスビットマップ６０ｂの「ｓｐａｎ１の行および２列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７０の「ｓｐａｎ１の行および２列目」の値「１」を算出する。
【０１２７】
クエリビットマップ５０ｂと、ＡＮＤ演算結果７０とを比較すると、ＡＮＤ演算結果７０において、クエリビットマップ５０ｂの属性のフラグが「１」となっていた位置が、全て「１」となっている。このため、検索部１５０ｄは、クエリ「統計による翻訳」が、テキスト「統計を使った機械翻訳」にヒットしたと判定する。検索部１５０ｄは、インデックスビットマップ６０ｂの作成元となったテキストの情報を、検索結果として出力する。
【０１２８】
続いて、検索部１５０ｄによる他の検索例について説明する。ここでは、クエリの文字列を上記のクエリと同様とする。すなわち、クエリビットマップを、図１２に示したクエリビットマップ５０とする。検索部１５０ｄは、クエリビットマップ５０に対して、自立語部分を抽出する処理、演算用に変換する処理を行うことで、図１４に示した、クエリビットマップ５０ｂを生成する。
【０１２９】
一方、テキストから生成されたインデックスビットマップを、図１７に示すインデックスビットマップ５５とする。このインデックスビットマップ５５は、テキストに含まれる文字列「翻訳を使った統計」から生成されるビットマップ（インデックス）である。
【０１３０】
図１７は、自立語部分を抽出する処理を説明するための図である。図１７に示すように、インデックスビットマップ５５において、形態素「統計」、「翻訳」の属性部分にフラグ「１」が立っている。この統計、翻訳を、予め指定される形態素とする。形態素「を」、「使う」、「た」が、予め指定される複数の形態素に含まれていないとする。検索部１５０ｄは、インデックスビットマップ６０のオフセット「２〜４」の列を取り除くことで、自立語部分を抽出したインデックスビットマップ６１ａを生成する。
【０１３１】
図１８は、演算用に変換する処理を説明するための図である。検索部１５０ｄは、自立語部分を抽出したインデックスビットマップ６１ａの形態素の属性の行において、辞書順に、フラグが「１」となるように列を入れ替える。たとえば、検索部１５０ｄは、形態素の属性の行において、右側の列ほど、フラグ「１」が下側に配置されるように列を入れ替える。図１８に示す例では、インデックスビットマップ６１ａの１列目の「翻訳」においてフラグが「１」となり、２列目の「統計」においてフラグが「１」となっている。このため、検索部１５０ｄは、インデックスビットマップ６１ａの１列目と２列目とを入れ替える。
【０１３２】
検索部１５０ｄは、インデックスビットマップ６１ａのｓｐａｎの属性を更新する。テキストの「翻訳を使った統計」から「を使った」に対応する情報が削除されたため、形態素「翻訳」と「統計」とのｓｐａｎ（オフセットの距離）は、「ｓｐａｎ４」から、「ｓｐａｎ１」となる。このため、検索部１５０ｄは、ｓｐａｎ１の行と、オフセット１、５の各列とが交差する位置のフラグを「１」に変換する。検索部１５０ｄは、ｓｐａｎ４の行と、オフセット１、５の各列とが交差する位置のフラグを「０」に変換する。
【０１３３】
検索部１５０ｄは、上記処理を行うことで、インデックスビットマップ６１ａを、演算用のインデックスビットマップ６１ｂに変換する。
【０１３４】
図１９は、ＡＮＤ演算を説明するための図である。図１９に示すように、検索部１５０ｄは、クエリビットマップ５０ｂと、インデックスビットマップ６１ｂとのＡＮＤ演算を行うと、ＡＮＤ演算結果７１が得られる。検索部１５０ｄは、属性の行および列をそれぞれ対応させて、ＡＮＤ演算を行うものとする。
【０１３５】
たとえば、検索部１５０ｄは、クエリビットマップ５０ｂの「統計の行および１列目」と、インデックスビットマップ６１ｂの「統計の行および１列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７１の「統計の行および１列目」の値「１」を算出する。検索部１５０ｄは、クエリビットマップ５０ｂの「翻訳の行および２列目」と、インデックスビットマップ６１ｂの「翻訳の行および２列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７１の「翻訳の行および２列目」の値「１」を算出する。
【０１３６】
検索部１５０ｄは、クエリビットマップ５０ｂの「ｔｏｏｌ始点の行および２列目」と、インデックスビットマップ６１ｂの「ｔｏｏｌ始点の行および２列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７０１「ｔｏｏｌ始点の行および２列目」の値「０」を算出する。検索部１５０ｄは、クエリビットマップ５０ｂの「ｔｏｏｌ終点の行および１列目」と、インデックスビットマップ６１ｂの「ｔｏｏｌ終点の行および１列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７１の「ｔｏｏｌ終点の行および１列目」の値「０」を算出する。
【０１３７】
検索部１５０ｄは、クエリビットマップ５０ｂの「ｓｐａｎ１の行および１列目」と、インデックスビットマップ６１ｂの「ｓｐａｎ１の行および１列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７１の「ｓｐａｎ１の行および１列目」の値「１」を算出する。検索部１５０ｄは、クエリビットマップ５０ｂの「ｓｐａｎ１の行および２列目」と、インデックスビットマップ６１ｂの「ｓｐａｎ１の行および２列目」とをＡＮＤ演算することで、ＡＮＤ演算結果７１の「ｓｐａｎ１の行および２列目」の値「１」を算出する。
【０１３８】
クエリビットマップ５０ｂと、ＡＮＤ演算結果７１とを比較すると、ＡＮＤ演算結果７１において、クエリビットマップ５０ｂの属性のフラグが「１」となっていた位置が、全て「１」となっていない。クエリビットマップ５０ｂでは、「ｔｏｏｌ始点の行および２列目」と、「ｔｏｏｌ終点の行および１列目」とが「１」となっている。これに対して、ＡＮＤ演算結果７１では、「ｔｏｏｌ始点の行および２列目」と、「ｔｏｏｌ終点の行および１列目」とが「０」となっている。このため、検索部１５０ｄは、クエリ「統計による翻訳」が、テキスト「翻訳を使った統計」にヒットしていないと判定する。
【０１３９】
図３３で説明した近傍検索では、クエリ「統計による翻訳」２５の近傍度を「５」に変更し、検索を行うと、検索すべきではない、「翻訳を使った統計」を含むテキスト２６ｃがヒットしてしまい、検索精度が低下する。これに対して、上述した検索部１５０ｄの処理では、クエリ「統計による翻訳」を指定された場合に、テキスト「統計を使った機械翻訳」を検索でき、かつ、テキスト「翻訳を使った統計」を検索することを抑止できるので、検索精度を向上させることができる。
【０１４０】
ここでは詳細な説明を省略するが、検索部１５０ｄが、クエリ「統計による翻訳」のクエリビットマップと、テキスト「翻訳の統計」のインデックスビットマップとのＡＮＤ演算を行うと、アークの属性が「０」となり、ヒットしない。検索部１５０ｄが、クエリ「統計による翻訳」のクエリビットマップと、テキスト「統計を使わない人間翻訳」のインデクスビットマップとのＡＮＤ演算を行うと、アークの属性が「０」となり、ヒットしない。このため、検索すべきでないテキストが検索されることを抑止することができる。
【０１４１】
次に、本実施例に係る検索装置１００の処理手順の一例について説明する。図２０は、インデックスを生成する処理手順を示すフローチャートである。図２０に示すように、検索装置１００のインデックス生成部１５０ｂは、テキストＤＢ１４０ａからテキストを取得する（ステップＳ１０１）。
【０１４２】
インデックス生成部１５０ｂは、テキストに対して形態素解析を実行する（ステップＳ１０２）。インデックス生成部１５０ｂは、標本化を実行することで、複合語に対応する形態素を特定する（ステップＳ１０３）。インデックス生成部１５０ｂは、形態素間の部分文字列の同定処理を実行する（ステップＳ１０４）。
【０１４３】
インデックス生成部１５０ｂは、意味解析（または構文解析）を実行する（ステップＳ１０５）。インデックス生成部１５０ｂは、意味解析結果を基にして、インデックスを生成する（ステップＳ１０６）。
【０１４４】
インデックス生成部１５０ｂは、インデックスの生成を終了する場合には（ステップＳ１０７，Ｙｅｓ）、処理を終了する。一方、インデックス生成部１５０ｂは、インデックスの生成を終了しない場合には（ステップＳ１０７，Ｎｏ）、ステップＳ１０１に再度移行する。
【０１４５】
図２１は、検索処理の処理手順を示すフローチャートである。図２１に示すように、検索装置１００の取得部１５０ａは、クエリ１４０ｂを受け付ける（ステップＳ２０１）。検索装置１００の意味属性付与部１５０ｃは、クエリ１４０ｂに対して形態素解析を実行する（ステップＳ２０２）。意味属性付与部１５０ｃは、標本化を実行することで、複合語に対応する形態素を特定する（ステップＳ２０３）。
【０１４６】
意味属性付与部１５０ｃは、形態素間の部分文字列の同定処理を実行する（ステップＳ２０４）。意味属性付与部１５０ｃは、意味解析を実行し（ステップＳ２０５）、意味属性付与部１５０ｃは、意味属性付与クエリ１４０ｄを生成する（ステップＳ２０６）。
【０１４７】
検索装置１００の検索部１５０ｄは、ＡＮＤ演算処理を実行する（ステップＳ２０７）。検索部１５０ｄは、検索結果を表示部１３０に出力する（ステップＳ２０８）。
【０１４８】
次に、図２１のステップＳ２０７に示したＡＮＤ演算処理の処理手順について説明する。図２２は、ＡＮＤ演算処理の処理手順を示すフローチャートである。図２２に示すように、検索装置１００の検索部１５０ｄは、クエリビットマップおよびインデックスビットマップの自立語部分のみを抽出する（ステップＳ３０１）。
【０１４９】
検索部１５０ｄは、フラグが「１」となる単語の順序が辞書順となるように、ビットマップの列をソートする（ステップＳ３０２）。検索部１５０ｄは、ｓｐａｎ属性の情報を更新する（ステップＳ３０３）。検索部１５０ｄは、クエリビットマップと、インデックスビットマップとをＡＮＤ演算する（ステップＳ３０４）。
【０１５０】
検索部１５０ｄは、クエリビットマップのフラグが「１」となる位置に対応する、ＡＮＤ演算結果の位置が「１」のままであるか否かを判定する（ステップＳ３０５）。検索部１５０ｄは、クエリビットマップのフラグが「１」となる位置に対応する、ＡＮＤ演算結果の位置が「１」のままである場合には（ステップＳ３０５，Ｙｅｓ）、クエリにマッチするテキストのインデックスであると判定する（ステップＳ３０６）。
【０１５１】
一方、検索部１５０ｄは、クエリビットマップのフラグが「１」となる位置に対応する、ＡＮＤ演算結果の位置が「１」のままでない場合には（ステップＳ３０５，Ｎｏ）、クエリにマッチするテキストのインデックスでないと判定する（ステップＳ３０７）。
【０１５２】
次に、本実施例に係る検索装置１００の効果について説明する。検索装置１００は、テキストに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成する。検索装置１００は、クエリ１４０ｂが指定されると、クエリ１４０ｂに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とをクエリ１４０ｂに付与することで、意味属性付与クエリ１４０ｄを生成する。検索装置１００は、インデックスと、意味属性付与クエリ１４０ｄとのＡＮＤ演算を行うことで、テキストＤＢ１４０ａから、クエリ１４０ｂにヒットするテキストの検索を行う。たとえば、意味解析を行う過程で、意味属性付与クエリ１４０ｄと、インデックスとが生成され、ＡＮＮＤ演算を行うだけで、ヒットするか否かを判定できるため、意味属性を考慮した検索を、インデックスのサイズを過剰に大きくすることなく、かつ１パスで行うことができる。
【０１５３】
上述した検索装置１００の処理は一例であり、検索装置１００はその他の処理を実行してもよい。以下において、本実施例に係る検索装置１００のその他の処理１〜４について説明する。
【０１５４】
検索装置１００の「その他の処理１」について説明する。検索装置１００のインデックス生成部１５０ｂは、折り返し技術を利用することで、インデックスを圧縮（ハッシュ化）し、インデックステーブル１４０ｃのデータ量を削減することができる。
【０１５５】
図２３は、インデックスのハッシュ化の一例を説明するための図である。ここでは、３２ビットレジスタを想定し、一例として２９と３１のハッシュ値（底）を基に、各ビットマップをハッシュ化する。ビットマップｂ１から、ハッシュ化ビットマップｈ１１およびハッシュ化ビットマップｈ１２を生成する場合について説明する。ビットマップｂ１は、あるインデックスビットマップの列を抽出したビットマップを示すものとする。ハッシュ化ビットマップｈ１１は、底「２９」によりハッシュ化されたビットマップである。ハッシュ化ビットマップｈ１２は、底「３１」によりハッシュ化されたビットマップである。
【０１５６】
インデックス生成部１５０ｂは、ビットマップｂ１の各ビットの位置を、１つの低で割った余りの値を、ハッシュ化ビットマップの位置と対応付ける。インデックス生成部１５０ｂは、該当するビットマップｂ１のビットの位置に「１」が設定されている場合には、対応付けられたハッシュ化ビットマップの位置に「１」を設定する処理を行う。
【０１５７】
ビットマップｂ１から、底「２９」のハッシュ化ビットマップｈ１１を生成する処理の一例について説明する。はじめに、インデックス生成部１５０ｂは、ビットマップｂ１の位置「０〜２８」の情報を、ハッシュ化ビットマップｈ１１にコピーする。続いて、ビットマップｂ１のビットの位置「３５」を、低「２９」で割った余りは「６」となるので、ビットマップｂ１の位置「３５」は、ハッシュ化ビットマップｈ１１の位置「６」と対応付けられる。インデックス生成部１５０ｂは、ビットマップｂ１の位置「３５」に「１」が設定されているため、ハッシュ化ビットマップｈ１１の位置「６」に「１」を設定する。
【０１５８】
ビットマップｂ１のビットの位置「４２」を、低「２９」で割った余りは「１３」となるので、ビットマップｂ１の位置「４２」は、ハッシュ化ビットマップｈ１１の位置「１３」と対応付けられる。インデックス生成部１５０ｂは、ビットマップｂ１の位置「４２」に「１」が設定されているため、ハッシュ化ビットマップｈ１１の位置「１３」に「１」を設定する。
【０１５９】
インデックス生成部１５０ｂは、ビットマップｂ１の位置「２９」以上の位置について、上記処理を繰り返し実行することで、ハッシュ化ビットマップｈ１１を生成する。
【０１６０】
ビットマップｂ１から、底「３１」のハッシュ化ビットマップｈ１２を生成する処理の一例について説明する。はじめに、インデックス生成部１５０ｂは、ビットマップｂ１の位置「０〜３０」の情報を、ハッシュ化ビットマップｈ１２にコピーする。続いて、ビットマップｂ１のビットの位置「３５」を、低「３１」で割った余りは「４」となるので、ビットマップｂ１の位置「３５」は、ハッシュ化ビットマップｈ１２の位置「４」と対応付けられる。インデックス生成部１５０ｂは、ビットマップｂ１の位置「３５」に「１」が設定されているため、ハッシュ化ビットマップｈ１２の位置「４」に「１」を設定する。
【０１６１】
ビットマップｂ１のビットの位置「４２」を、低「３１」で割った余りは「１１」となるので、ビットマップｂ１の位置「４２」は、ハッシュ化ビットマップｈ１２の位置「１１」と対応付けられる。インデックス生成部１５０ｂは、ビットマップｂ１の位置「４２」に「１」が設定されているため、ハッシュ化ビットマップｈ１２の位置「１３」に「１」を設定する。
【０１６２】
インデックス生成部１５０ｂは、ビットマップｂ１の位置「３１」以上の位置について、上記処理を繰り返し実行することで、ハッシュ化ビットマップｈ１２を生成する。
【０１６３】
インデックス生成部１５０ｂは、インデックスビットマップの各列（または各行）について上記の折り返し技術による圧縮を行うことで、インデックステーブル１４０ｃのデータ量を削減する。
【０１６４】
続いて、インデックス生成部１５０ｂが、圧縮したインデックスマップを復元する処理の一例について説明する。上記の実施例で説明した検索部１５０ｄが、検索処理を行う際に、インデックス生成部１５０ｂは、圧縮したインデックスマップを復元する。検索部１５０ｄは、復元されたインデックスマップを用いて、クエリ１４０ｂに対応するテキストの検索を行う。
【０１６５】
図２４は、ハッシュ化したインデックスを復元する処理の一例を示す図である。ここでは一例として、ハッシュ化ビットマップｈ１１およびハッシュ化ビットマップｈ１２を基にして、ビットマップｂ１を復元する場合について説明する。
【０１６６】
インデックス生成部１５０ｂは、底「２９」のハッシュ化ビットマップｈ１１から、中間ビットマップｈ１１’を生成する。インデックス生成部１５０ｂは、ハッシュ化ビットマップｈ１１の位置０〜２８の値を、中間ビットマップｈ１１’の位置０〜２８にそれぞれ、コピーする。
【０１６７】
インデックス生成部１５０ｂは、中間ビットマップｈ１１’の位置２９以降の値については、「２９」毎に、ハッシュ化ビットマップｈ１１の位置０〜２８の値を、それぞれコピーする処理を繰り返し実行する。図２４に示す例では、中間ビットマップｈ１１’の位置２９〜４３の位置に、ハッシュ化ビットマップｈ１１の位置０〜１４の値を、コピーした例を示す。
【０１６８】
インデックス生成部１５０ｂは、底「３１」のハッシュ化ビットマップｈ１２から、中間ビットマップｈ１２’を生成する。インデックス生成部１５０ｂは、ハッシュ化ビットマップｈ１２の位置０〜３０の値を、中間ビットマップｈ１２’の位置０〜３０にそれぞれ、コピーする。
【０１６９】
インデックス生成部１５０ｂは、中間ビットマップｈ１２’の位置３１以降の値については、「３１」毎に、ハッシュ化ビットマップｈ１２の位置０〜３０の値を、それぞれコピーする処理を繰り返し実行する。図２４に示す例では、中間ビットマップｈ１２’の位置３１〜４３の位置に、ハッシュ化ビットマップｈ１２の位置０〜１２の値を、コピーした例を示す。
【０１７０】
インデックス生成部１５０ｂは、中間ビットマップｈ１１’と、中間ビットマップｈ１２’とを生成すると、中間ビットマップｈ１１’と、中間ビットマップｈ１２’とをＡＮＤ演算することで、ハッシュ化前のビットマップｂ１を復元する。インデックス生成部１５０ｂは、他のハッシュ化されたビットマップについても、同様の処理を繰り返し実行することで、テキストのインデックスを復元することができる。
【０１７１】
検索装置１００の「その他の処理２」について説明する。検索装置１００の検索部１５０ｄは、図１２〜図１９等で説明したように、クエリビットマップと、インデックスビットマップとのＡＮＤ演算を実行することで、クエリ１４０ｂにヒットするインデックスを検出していたがこれに限定されるものではない。たとえば、検索部１５０ｄは、クエリ１４０ｂにヒットするか否かの情報に加えて、類似度を合わせて判定し、出力してもよい。
【０１７２】
検索部１５０ｄは、図１２〜図１９で説明した処理に加えて、クエリに含まれる単語と、テキストの単語との比較を行い、一致する単語数を計算し、計算した単語数を類似度として算出する。たとえば、クエリ１４０ｂの文字列を「統計による翻訳」とし、テキストの文字列を「統計を使った機械翻訳」とすると、単語「統計」、「翻訳」が一致する単語（形態素）であるため、類似度は「２」となる。
【０１７３】
たとえば、クエリ１４０ｂの文字列を「統計による機械翻訳」とし、テキストの文字列を「統計を使った機械翻訳」とすると、単語「統計」、「機械」、「翻訳」が一致する単語（形態素）であるため、類似度は「３」となる。
【０１７４】
検索部１５０ｄは、クエリ１４０ｂにヒットするテキストの情報と、類似度の情報とを合わせて出力する。これにより、クエリにヒットするテキストが複数存在する場合に、利用者は、類似度を参考にして、検索対象とするテキストを絞り込むことが容易となる。
【０１７５】
検索装置１００の「その他の処理３」について説明する。たとえば、ケースＡ、ケースＢに示すように、あるクエリとあるテキストとの類似度を算出した場合について説明する。
ケースＡ：クエリ「統計による翻訳」でテキスト「統計を使った機械翻訳」を検索
ケースＢ：クエリ「統計による自動翻訳」でテキスト「統計を使った機械翻訳」を検索
【０１７６】
その他の処理２で説明したように、そのまま類似度の算出を行うと、ケースＡでは類似度が「２」となり、ケースＢでは類似度は「２」となる。ここで、複合語の「自動翻訳」の「自動」と、複合語の「機械翻訳」の「機械」とは、略同じ意味である。このため、検索装置の検索部１５０ｄは、複合語に含まれる所定の単語においては、同一の単語であると見なして、類似度の算出を行ってもよい。たとえば、検索部１５０ｄは、ケースＢにおいて、複合語「自動翻訳」の「自動」と、複合語「機械翻訳」の「機械」とが一致すると見なすことで、ケースＢの類似度を「３」と判定してもよい。
【０１７７】
また、検索装置１００のインデックス生成部１５０ｂは、テキストのインデックスを生成する場合に、縦軸の１つの行に割り当てる形態素を１つの形態素としていたがこれに限定されるものではなく、ｏｒの関係となる、複数の形態素を割り当ててもよい。
【０１７８】
図２５は、その他のインデックスのデータ構造の一例を示す図である。図２５のインデックス４５は、文字列「統計を使った機械翻訳」に対応するインデックスである。図６で説明したインデックス３５ａと比較すると、インデックス４５には、２行目の形態素の属性に「機械ｏｒ自動」が設定されている。このインデックス４５では、文字列の「機械」または「自動」となるオフセット位置に、フラグ「１」が設定される。
【０１７９】
検索装置１００の「その他の処理３」について説明する。上述した従来技術では、クエリおよびテキストが「日本語」の場合について説明したが、「英語」であっても同様にして、クエリに対応するテキストを検索することが可能である。
【０１８０】
図２６および図２７は、英語のテキストのインデックスを生成する処理の一例を示す図である。図２６では、テキスト（文字列）「John  gave  bananas  to  Mary.」に対するインデックス４６ａを生成する場合について説明する。単語およびピリオドのオフセットは、それぞれ、「１、２、３、４、５、６」となる。
【０１８１】
インデックス生成部１５０ｂは、文字列「John  gave  bananas  to  Mary.」に対して、意味解析を実行することで、結果４６を得る。たとえば、「give」に対応するノードを、ノード６１とする。「Mary」に対応するノードを、ノード６２とする。「John」に対応するノードを、ノード６３とする。「banana」に対応するノードを、ノード６４とする。
【０１８２】
結果４６に示すように、ノード６１およびノード６４は、ノード６１からノード６４に向かうアーク＜ＯＢＪＥＣＴ＞により接続される。ノード６１およびノード６２は、ノード６１からノード６２に向かうアーク＜ＧＯＡＬ＞により接続される。ノード６１およびノード６３は、ノード６１からノード６３に向かうアーク＜ＡＧＥＮＴ＞により接続される。ノード６１は、ノード６１を係り元とするアーク＜ＰＡＳＴ＞に接続される。
【０１８３】
インデックス生成部１５０ｂが、インデックス４６ａにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、形態素「．（ピリオド）」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「to」の行と、オフセット「４」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「give」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「banana」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「John」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「Mary」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。
【０１８４】
インデックス生成部１５０ｂが、インデックス４６ａにおいて、アークの属性の行にフラグを設定する処理について説明する。結果４６において、ノード６１およびノード６２は、ノード６１からノード６２に向かうアーク＜ＧＯＡＬ＞により接続される。ノード６１は、オフセット２の形態素「give」に対応するノードである。ノード６２は、オフセット５の形態素「Mary」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＧＯＡＬ：ｓｏｕｒｃｅ」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ＧＯＡＬ：ｔａｒｇｅｔ」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。
【０１８５】
結果４６において、ノード６１およびノード６４は、ノード６１からノード６４に向かうアーク＜ＯＢＪＥＣＴ＞により接続される。ノード６１は、オフセット２の形態素「give」に対応するノードである。ノード６４は、オフセット５の形態素「banana」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＯＢＪＥＣＴ：ｓｏｕｒｓｅ」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ＯＢＪＥＣＴ：ｔａｒｇｅｔ」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。
【０１８６】
結果４６において、ノード６１およびノード６３は、ノード６１からノード６３に向かうアーク＜ＡＧＥＮＴ＞により接続される。ノード６１は、オフセット２の形態素「give」に対応するノードである。ノード６３は、オフセット１の形態素「John」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＡＧＥＮＴ：ｓｏｕｒｓｅ」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ＡＧＥＮＴ：ｔａｒｇｅｔ」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【０１８７】
結果４６において、ノード６１にアーク＜ＰＡＳＴ＞が接続されている。ノード６１は、オフセット２の形態素「give」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＰＡＳＴ：ｓｏｕｒｃｅ」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。
【０１８８】
インデックス生成部１５０ｂが、インデックス４６ａにおいて、ｓｐａｎの属性の行にフラグを設定する処理について説明する。アーク＜ＡＧＥＮＴ＞で接続されたノード６１，６３に対応する文字列上の形態素「give」、「John」の距離（ｓｐａｎ）は「１」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ１の行と、オフセット１、２の各列とが交差する各位置に、フラグ「１」を設定する。インデックス生成部１５０ｂが、ｓｐａｎの属性の行にフラグを設定するその他の処理については説明を省略する。
【０１８９】
図２７の説明に移行する。図２７では、文字列「Mary  gave  bananas  to  John.」に対するインデックス４７ａを生成する場合について説明する。単語およびピリオドのオフセットは、それぞれ、「１、２、３、４、５、６」となる。
【０１９０】
インデックス生成部１５０ｂは、文字列「Mary  gave  bananas  to  John.」に対して、意味解析を実行することで、結果４７を得る。結果４７に示すように、ノード６１およびノード６４は、ノード６１からノード６４に向かうアーク＜ＯＢＪＥＣＴ＞により接続される。ノード６１およびノード６３は、ノード６１からノード６３に向かうアーク＜ＧＯＡＬ＞により接続される。ノード６１およびノード６２は、ノード６１からノード６２に向かうアーク＜ＡＧＥＮＴ＞により接続される。ノード６１は、ノード６１を係り元とするアーク＜ＰＡＳＴ＞に接続される。
【０１９１】
インデックス生成部１５０ｂが、インデックス４７ａにおいて、形態素の属性の行にフラグを設定する処理について説明する。インデックス生成部１５０ｂは、形態素「．（ピリオド）」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「to」の行と、オフセット「４」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「give」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「banana」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「John」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、形態素「Mary」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【０１９２】
インデックス生成部１５０ｂが、インデックス４７ａにおいて、アークの属性の行にフラグを設定する処理について説明する。結果４７において、ノード６１およびノード６３は、ノード６１からノード６３に向かうアーク＜ＧＯＡＬ＞により接続される。ノード６１は、オフセット２の形態素「give」に対応するノードである。ノード６３は、オフセット５の形態素「John」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＧＯＡＬ：ｓｏｕｒｓｅ」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ＧＯＡＬ：ｔａｒｇｅｔ」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。
【０１９３】
結果４７において、ノード６１およびノード６４は、ノード６１からノード６４に向かうアーク＜ＯＢＪＥＣＴ＞により接続される。ノード６１は、オフセット２の形態素「give」に対応するノードである。ノード６４は、オフセット５の形態素「banana」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＯＢＪＥＣＴ：ｓｏｕｒｓｅ」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ＯＢＪＥＣＴ：ｔａｒｇｅｔ」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。
【０１９４】
結果４７において、ノード６１およびノード６２は、ノード６１からノード６２に向かうアーク＜ＡＧＥＮＴ＞により接続される。ノード６１は、オフセット２の形態素「give」に対応するノードである。ノード６２は、オフセット１の形態素「Mary」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＡＧＥＮＴ：ｓｏｕｓｖｅ」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ＡＧＥＮＴ：ｔａｒｇｅｔ」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【０１９５】
結果４７において、ノード６１にアーク＜ＰＡＳＴ＞が接続されている。ノード６１は、オフセット２の形態素「give」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＰＡＳＴ：ｓｏｕｒｃｅ」の行と、オフセット「２」の列とが交差する位置に、フラグ「１」を設定する。
【０１９６】
インデックス生成部１５０ｂが、インデックス４７ａにおいて、ｓｐａｎの属性の行にフラグを設定する処理について説明する。アーク＜ＡＧＥＮＴ＞で接続されたノード６１，６３に対応する文字列上の形態素「give」、「Mary」の距離（ｓｐａｎ）は「１」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ１の行と、オフセット１、２の各列とが交差する各位置に、フラグ「１」を設定する。インデックス生成部１５０ｂが、ｓｐａｎの属性の行にフラグを設定するその他の処理については説明を省略する。
【０１９７】
図２８は、英語のクエリのインデックスを生成する処理の一例を示す図である。クエリのインデックスは、クエリに付与される意味属性に対応する情報である。図２８では、クエリ（文字列）「Bananas  were  given  to  John.」に対するインデックス４８ａを生成する場合について説明する。単語およびピリオドのオフセットは、それぞれ、「１、２、３、４、５、６」となる。
【０１９８】
意味属性付与部１５０ｃは、文字列「Bananas  were  given  to  John.」に対して、意味解析を実行することで、結果４８を得る。結果４８に示すように、ノード６１およびノード６４は、ノード６１からノード６４に向かうアーク＜ＯＢＪＥＣＴ＞により接続される。ノード６１およびノード６３は、ノード６１からノード６３に向かうアーク＜ＧＯＡＬ＞により接続される。
【０１９９】
意味属性付与部１５０ｃが、インデックス４８ａにおいて、形態素の属性の行にフラグを設定する処理について説明する。意味属性付与部１５０ｃは、形態素「．（ピリオド）」の行と、オフセット「６」の列とが交差する位置に、フラグ「１」を設定する。意味属性付与部１５０ｃは、形態素「to」の行と、オフセット「４」の列とが交差する位置に、フラグ「１」を設定する。意味属性付与部１５０ｃは、形態素「give」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。意味属性付与部１５０ｃは、形態素「banana」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。意味属性付与部１５０ｃは、形態素「John」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。
【０２００】
意味属性付与部１５０ｃが、インデックス４８ａにおいて、アークの属性の行にフラグを設定する処理について説明する。結果４８において、ノード６１およびノード６３は、ノード６１からノード６３に向かうアーク＜ＧＯＡＬ＞により接続される。ノード６１は、オフセット３の形態素「give」に対応するノードである。ノード６３は、オフセット５の形態素「John」に対応するノードである。このため、インデックス生成部１５０ｂは、「ＧＯＡＬ：ｓｏｕｒｓｅ」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ＧＯＡＬ：ｔａｒｇｅｔ」の行と、オフセット「５」の列とが交差する位置に、フラグ「１」を設定する。
【０２０１】
結果４８において、ノード６１およびノード６４は、ノード６１からノード６４に向かうアーク＜ＯＢＪＥＣＴ＞により接続される。ノード６１は、オフセット３の形態素「give」に対応するノードである。ノード６４は、オフセット１の形態素「banana」に対応するノードである。このため、意味属性付与部１５０ｃは、「ＯＢＪＥＣＴ：ｓｏｕｒｓｅ」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。インデックス生成部１５０ｂは、「ＯＢＪＥＣＴ：ｔａｒｇｅｔ」の行と、オフセット「１」の列とが交差する位置に、フラグ「１」を設定する。
【０２０２】
結果４８において、ノード６１にアーク＜ＰＡＳＴ＞が接続されている。ノード６１は、オフセット３の形態素「give」に対応するノードである。このため、意味属性付与部１５０ｃは、「ＰＡＳＴ：ｓｏｕｒｃｅ」の行と、オフセット「３」の列とが交差する位置に、フラグ「１」を設定する。
【０２０３】
意味属性付与部１５０ｃが、インデックス４８ａにおいて、ｓｐａｎの属性の行にフラグを設定する処理について説明する。アーク＜ＯＢＪＥＣＴ＞で接続されたノード６１，６３に対応する文字列上の形態素「give」、「banana」の距離（ｓｐａｎ）は「２」である。このため、インデックス生成部１５０ｂは、ｓｐａｎ１の行と、オフセット１、３の各列とが交差する各位置に、フラグ「１」を設定する。インデックス生成部１５０ｂが、ｓｐａｎの属性の行にフラグを設定するその他の処理については説明を省略する。
【０２０４】
検索装置１００の検索部１５０ｄは、インデックス生成部１５０ｂに生成されたインデックス（インデックスビットマップ）４６ａと、意味属性付与部１５０ｃに生成されたインデックス（クエリビットマップ）４８ａとのＡＮＤ演算を行う。検索部１５０ｄは、自立語部分を抽出する処理、演算用に変換する処理、ＡＮＤ演算を順に実行する。図示を省略するが、インデックス４６ａと、インデックス４８ａとのＡＮＤ演算結果は、アークの属性部分が「０」となるため、検索部１５０ｄは、テキスト「John  gave  bananas  to  Mary.」は、クエリにヒットしないと判定し、検索対象から除外する。
【０２０５】
検索部１５０ｄは、インデックス生成部１５０ｂに生成されたインデックス（インデックスビットマップ）４７ａと、意味属性付与部１５０ｃに生成されたインデックス（クエリビットマップ）４８ａとのＡＮＤ演算を行う。検索部１５０ｄは、自立語部分を抽出する処理、演算用に変換する処理、ＡＮＤ演算を順に実行する。図示を省略するが、インデックス４７ａと、インデックス４８ａとのＡＮＤ演算結果は、アークの属性の該当部分が「１」となるため、検索部１５０ｄは、テキスト「Mary  gave  bananas  to  John.」は、クエリにヒットすると判定し、検索対象として抽出する。
【０２０６】
このように、本実施例に係る検索装置１００は、対象の文字列が英語であっても、意味属性を考慮した検索を、インデックスのサイズを過剰に大きくすることなく、かつ１パスで行うことができる。
【０２０７】
検索装置１００の「その他の処理４」について説明する。図１に示した検索装置１００では、検索装置１００が、インデックス生成部１５０ｂを有し、インデックステーブル１４０ｃを生成していたが、これに限定されるものでは無い。
【０２０８】
たとえば、検索装置１００にネットワークを介して接続するサーバが、インデックス生成部１５０ｂの機能を有し、サーバが、インデックステーブル１４０ｃを生成してもよい。検索装置１００の取得部１５０ａは、サーバにより生成されたインデックステーブル１４０ｃを受信し、受信したインデックステーブル１４０ｃを記憶部１４０に格納する。
【０２０９】
検索装置１００は、上記のようにサーバからインデックステーブル１４０ｃを受信して、利用することで、インデックステーブル１４０ｃを生成する処理負荷を削減することができる。
【０２１０】
次に、上記実施例に示した検索装置１００と同様の機能を実現するコンピュータのハードウェア構成の一例について説明する。図２９は、検索装置と同様の機能を実現するコンピュータのハードウェア構成の一例を示す図である。
【０２１１】
図２９に示すように、コンピュータ２００は、各種演算処理を実行するＣＰＵ２０１と、ユーザからのデータの入力を受け付ける入力装置２０２と、ディスプレイ２０３とを有する。また、コンピュータ２００は、記憶媒体からプログラム等を読み取る読み取り装置２０４と、有線または無線ネットワークを介して他の装置との間でデータの授受を行うインタフェース装置２０５とを有する。また、コンピュータ２００は、各種情報を一時記憶するＲＡＭ２０６と、ハードディスク装置２０７とを有する。そして、各装置２０１〜２０７は、バス２０８に接続される。
【０２１２】
ハードディスク装置２０７は、取得プログラム２０７ａ、インデックス生成プログラム２０７ｂ、意味属性付与プログラム２０７ｃ、検索プログラム２０７ｄを有する。また、ハードディスク装置２０７は、各プログラム２０７ａ〜２０７ｄを読み出してＲＡＭ２０６に展開する。
【０２１３】
取得プログラム２０７ａは、取得プロセス２０６ａとして機能する。インデックス生成プログラム２０７ｂは、インデックス生成プロセス２０６ｂとして機能する。意味属性付与プログラム２０７ｃは、意味属性付与プロセス２０６ｃとして機能する。検索プログラム２０７ｄは、検索プロセス２０７ｃとして機能する。
【０２１４】
取得プロセス２０６ａの処理は、取得部１５０ａの処理に対応する。インデックス生成プロセス２０６ｂの処理は、インデックス生成部１５０ｂの処理に対応する。意味属性付与プロセス２０６ｃの処理は、意味属性付与部１５０ｃの処理に対応する。検索プロセス２０６ｄの処理は、検索部１５０ｄの処理に対応する。
【０２１５】
なお、各プログラム２０７ａ〜２０７ｄについては、必ずしも最初からハードディスク装置２０７に記憶させておかなくても良い。例えば、コンピュータ２００に挿入されるフレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＤＶＤ、光磁気ディスク、ＩＣカードなどの「可搬用の物理媒体」に各プログラムを記憶させておく。そして、コンピュータ２００が各プログラム２０７ａ〜２０７ｄを読み出して実行するようにしても良い。
【０２１６】
以上の各実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２１７】
（付記１）コンピュータが実行する検索方法であって、
対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成し、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与し、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う
ことを特徴とする検索方法。
【０２１８】
（付記２）前記インデックスを取得する処理を更に実行し、前記検索を行う処理は、取得された前記インデックスと、前記クエリに付与された情報とを基にして、前記対象文字データに対する検索を行うことを特徴とする付記１に記載の検索方法。
【０２１９】
（付記３）前記形態素間の意味上の属性は、形態素間の係り受けの始点となる形態素と、前記係り受けの終点となる形態素とを示す情報であることを特徴とする付記１または２に記載の検索方法。
【０２２０】
（付記４）前記対象文字データは、意味属性を有する二つ以上の単語を含む文字列であることを特徴とする付記１、２または３に記載の検索方法。
【０２２１】
（付記５）前記検索を行う処理は、前記クエリに付与された情報における形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素と、前記インデックスにおける形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素とが一致するか否かを基にして検索を行うことを特徴とする付記１〜４のいずれか一つに記載の検索方法。
【０２２２】
（付記６）対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成し、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与し、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う
処理をコンピュータに実行させることを特徴とする検索プログラム。
【０２２３】
（付記７）前記インデックスを取得する処理を更に実行し、前記検索を行う処理は、取得された前記インデックスと、前記クエリに付与された情報とを基にして、前記対象文字データに対する検索を行うことを特徴とする付記６に記載の検索プログラム。
【０２２４】
（付記８）前記形態素間の意味上の属性は、形態素間の係り受けの始点となる形態素と、前記係り受けの終点となる形態素とを示す情報であることを特徴とする付記６または７に記載の検索プログラム。
【０２２５】
（付記９）前記対象文字データは、意味属性を有する二つ以上の単語を含む文字列であることを特徴とする付記６、７または８に記載の検索プログラム。
【０２２６】
（付記１０）前記検索を行う処理は、前記クエリに付与された情報における形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素と、前記インデックスにおける形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素とが一致するか否かを基にして検索を行うことを特徴とする付記６〜９のいずれか一つに記載の検索プログラム。
【０２２７】
（付記１１）対象文字データに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性とを含むインデックスを生成するインデックス生成部と、
入力されたクエリに含まれる各形態素の位置と、各位置に対応する形態素間の意味上の属性との情報を前記クエリに付与する意味属性付与部と、
前記クエリに付与された情報と、前記インデックスとを基にして、前記対象文字データに対する検索を行う検索部と
を有することを特徴とする検索装置。
【０２２８】
（付記１２）前記インデックスを取得する取得部を更に有し、前記検索部は、取得された前記インデックスと、前記クエリに付与された情報とを基にして、前記対象文字データに対する検索を行うことを特徴とする付記１１に記載の検索装置。
【０２２９】
（付記１３）前記形態素間の意味上の属性は、形態素間の係り受けの始点となる形態素と、前記係り受けの終点となる形態素とを示す情報であることを特徴とする付記１１または１２に記載の検索装置。
【０２３０】
（付記１４）前記対象文字データは、意味属性を有する二つ以上の単語を含む文字列であることを特徴とする付記１１、１２または１３に記載の検索装置。
【０２３１】
（付記１５）前記検索部は、前記クエリに付与された情報における形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素と、前記インデックスにおける形態素間の係り受けの始点となる形態素および前記係り受けの終点となる形態素とが一致するか否かを基にして検索を行うことを特徴とする付記１１〜１４のいずれか一つに記載の検索装置。
【符号の説明】
【０２３２】
１００    検索装置
１１０    通信部
１２０    入力部
１３０    表示部
１４０    記憶部
１４０ａ  テキストＤＢ
１４０ｂ  クエリ
１４０ｃ  インデックステーブル
１４０ｄ  意味属性付与クエリ
１４０ｅ  辞書情報
１５０    制御部
１５０ａ  取得部
１５０ｂ  インデックス生成部
１５０ｃ  意味属性付与部
１５０ｄ  検索部
【図１】
2019211959.tif 000003
【図２】
2019211959.tif 000004
【図３】
2019211959.tif 000005
【図４】
2019211959.tif 000006
【図５】
2019211959.tif 000007
【図６】
2019211959.tif 000008
【図７】
2019211959.tif 000009
【図８】
2019211959.tif 000010
【図９】
2019211959.tif 000011
【図１０】
2019211959.tif 000012
【図１１】
2019211959.tif 000013
【図１２】
2019211959.tif 000014
【図１３】
2019211959.tif 000015
【図１４】
2019211959.tif 000016
【図１５】
2019211959.tif 000017
【図１６】
2019211959.tif 000018
【図１７】
2019211959.tif 000019
【図１８】
2019211959.tif 000020
【図１９】
2019211959.tif 000021
【図２０】
2019211959.tif 000022
【図２１】
2019211959.tif 000023
【図２２】
2019211959.tif 000024
【図２３】
2019211959.tif 000025
【図２４】
2019211959.tif 000026
【図２５】
2019211959.tif 000027
【図２６】
2019211959.tif 000028
【図２７】
2019211959.tif 000029
【図２８】
2019211959.tif 000030
【図２９】
2019211959.tif 000031
【図３０】
2019211959.tif 000032
【図３１】
2019211959.tif 000033
【図３２】
2019211959.tif 000034
【図３３】
2019211959.tif 000035