一部のタグ、浅いパーサーからのチャンク、名前エンティティ、およびさまざまな 自然言語処理(NLP) ツールからのその他など、基になるテキストに対する複数のレイヤーの注釈を含むデータ セットがあります。のような文の場合The man went to the store
、注釈は次のようになります。
単語 POS チャンク NER ==== === ===== ======== DT NP の人 男 NN NP 人 VBD VPに行きました - へ へ PP - DT NP の場所 店 NN NP 場所
Lucene を使用して、このような注釈を付けて一連のドキュメントをインデックス化し、さまざまなレイヤーで検索を実行したいと考えています。単純なクエリの例として、ワシントンがpersonとしてタグ付けされているすべてのドキュメントを取得することが挙げられます。私は表記法に完全にコミットしているわけではありませんが、構文的にエンド ユーザーは次のようにクエリを入力する場合があります。
クエリ:Word=Washington,NER=Person
また、さまざまなレイヤーにまたがる注釈の順序を含む、より複雑なクエリを実行したいと思います。たとえば、 personというタグが付けられた単語の後にlocationarrived at
というタグが付けられた単語が続くすべてのドキュメントを検索します。このようなクエリは次のようになります。
クエリ:"NER=Person Word=arrived Word=at NER=Location"
Lucene でこれにアプローチする良い方法は何ですか? 構造化されたトークンを含むドキュメント フィールドをインデックス化して検索する方法はありますか?
ペイロード
1 つの提案は、Luceneペイロードの使用を試みることでした。しかし、ペイロードはドキュメントのランキングを調整するためにのみ使用でき、返されるドキュメントを選択するためには使用されないと思いました。
いくつかのユースケースでは、パターンを含むドキュメントの数が本当に必要なため、後者は重要です。
また、クエリに一致する用語のペイロードのみが検査されます。これは、ペイロードが最初の例のクエリ のランキングにしか役立たないことを意味しますWord=Washington,NER=Person
。これにより、用語Washingonton
がPerson
. ただし、2 番目のサンプル クエリでは "NER=Person Word=arrived Word=at NER=Location"
、不特定の用語のタグをチェックする必要があるため、一致しない用語があります。