Lucene のチェコ語レンマタイザーの実装に成功しました。私はSolrでテストしていますが、インデックス時にうまく機能します。ただし、クエリ パーサーはレンマタイザーにコンテキスト (前後の単語) を提供しないため、クエリに使用するとうまく機能しません。
たとえば、フレーズpila vodu
は、クエリ時とインデックス時では異なる方法で分析されます。それはあいまいな単語を使用しており、これは (saw eg chainsaw) または(動詞の「飲む」の過去形)pila
を意味する可能性があります。pila
pít
pila vodu
->
- インデックス時間:
pít voda
- クエリ時間:
pila voda
..そのため、単語pila
が見つからず、ドキュメント スニペットで強調表示されません。
この動作はsolr wiki (以下に引用) で文書化されており、コードをデバッグすることで確認できます (分離された文字列 "pila" と "vodu" のみがレンマタイザーに渡されます)。
... Lucene QueryParser は、Analyzer にテキストを渡す前に空白をトークン化するため、ユーザーが単語を検索すると
sea biscit
、アナライザーには「sea」と「biscit」という単語が別々に与えられます...
だから私の質問は:
レンマタイザーがクエリ文字列全体、または少なくとも個々の単語の一部のコンテキストを見るように、クエリパーサーを何らかの方法で変更、構成、または適応させることは可能ですか? dismaxやedismaxなどのさまざまな solr クエリ パーサーのソリューションも提供したいと考えています。
(quotes) のようなフレーズ クエリにはそのような問題がないことはわかってい"pila vodu"
ますが、正確なフレーズのないドキュメントは失われます (たとえば、"pila víno"や"pila dobrou vodu"を含むドキュメント)。
編集-次の質問を説明/回答しようとしています(@femtoRgonに感謝します):
2 つの用語が句ではなく、必ずしも一緒になるとは限らない場合、なぜそれらは相互の文脈で分析されるのでしょうか?
確かに、一緒に来る用語だけを分析する方が良いでしょう. たとえば、インデックス作成時に、レンマタイザーは入力テキスト内の文を検出し、1 つの文の単語のみを一緒に分析します。しかし、クエリ時に同様のことを達成するにはどうすればよいでしょうか? 独自のクエリ パーサーを実装することが唯一の選択肢ですか? pf2
パーサーのオプションとpf3
オプションがとても気に入っていますedismax
。自分のパーサーの場合、それらを再度実装する必要がありますか?
レンマタイザーは、同じ語彙ベースを持つ単語であっても単語の意味の曖昧さを解消するため、背後にある考え方は実際にはもう少し深いものです。たとえば、単語bow
には英語で約 7 つの異なる意味があり ( wikipediaを参照)、レンマタイザーはそのような意味を区別しています。したがって、この可能性を利用して、検索をより正確に行いbow
、クエリで必要な具体的な意味で単語を含むドキュメントのみを返したいと考えています。したがって、私の質問は次のように拡張でき<lemma;sense>
ます。クエリ用語の正しいペアを取得するにはどうすればよいですか? 単語が共通の文脈で提示されている場合、レンマタイザーは正しい意味を割り当てることができることが非常に多いですが、文脈がない場合はチャンスがありません。