「男が象を見た」というあいまいな言葉のテキストがあります。
各単語には、補題、品詞、および品詞に応じたさまざまな文法属性という属性があります。
「見た」の場合は次のようになります。
{補題:参照、pos:動詞、時制:過去}、{補題:のこぎり、pos:名詞、数:単数}
このすべての属性はサードパーティのツールに由来し、Lucene自体は語義の曖昧性解消には関与していません。
「pos=verb&number = singular」のようなクエリを実行したいのですが、結果に「saw」が表示されないようにします。
個別の文法注釈を「l:see; pos:verb; t:past | l:saw; pos:noun; n:sg」のような文字列にエンコードし、正規表現「pos \:verb [^ \|]+」を検索することを考えました。 n \:sg "ですが、パフォーマンスの問題のため、正規表現クエリを実行する余裕はありません。
たぶん、リストペイロードを投稿するいくつかのハックを適用することができますか?
UPD:私のソリューションのドラフト
私のプロジェクトの詳細は次のとおりです。単語が持つことができる解析の最大数は固定されています(たとえば、8)。そこで、各属性のペイロードに解析番号を挿入し、投稿リストの交差段階でこのペイロードを使用することを考えました。たとえば、「pos=Verb」の投稿リストは...|... | 1.1234 | ... | ...のようになり、「number = Singular」の投稿リストは次のようになります:... | .. .. | 2.1234 | ... |...投稿リスト処理のすべての段階で「pos=Verb AND number = singular」のようなクエリを処理している間、「x.1234」エントリは交差段階まで受け入れられ、そこで拒否されます。対応しない解析番号のため。
これはかなりコンパクトなソリューションだと思いますが、Luceneに組み込むのはどれほど難しいでしょうか?