3

「男が象を見た」というあいまいな言葉のテキストがあります。

各単語には、補題、品詞、および品詞に応じたさまざまな文法属性という属性があります。

「見た」の場合は次のようになります。

{補題:参照、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に組み込むのはどれほど難しいでしょうか?

4

1 に答える 1

2

つまり...これを行うための詐欺師の方法は、(実際には)luceneインデックスの作成方法を制御することです。

Luceneインデックスを作成するときは、Luceneインデックスを作成する前に各単語を変更して、単語に必要なすべての属性が含まれるようにします。この方法でインデックスを作成する場合は、同じ方法でルックアップを実行する必要があります。

一方通行:

つまり、実行するクエリの種類ごとに、同じ方法でインデックスを作成する必要があります。

例:

sawは名詞になります-saw-そのようにインデックスを付けます。のこぎりも名詞になります-過去-参照-そのようにインデックスを付けます。のこぎりも名詞-過去-単数形になります-参照-そのようにインデックスを付けます。

反対に:

単一のインデックスで属性ベースのルックアップが必要な場合は、おそらく「saw」という単語の順列補完などを実行する必要があります。これにより、名詞のsawの代わりに、大きな必要な属性のすべての可能な順列が得られます。論理ステートメント。

これが良い答えかどうかはわかりませんが、私が考えることができるのはそれだけです。

于 2012-12-31T03:44:44.383 に答える