ヨーロッパの多くの言語には屈折があります。これは、テキスト内で 1 つの単語を複数の形式で記述できることを意味します。たとえば、ポーランド語の「コンピューター」という単語には、「コンピューター」、「コンピューター」、「コンピューター」、「コンピューター」などの複数の形式があります。
言語の変化に対処するために django+haystack+whoosh を適切に使用するにはどうすればよいですか?
「komputer」、「komputera」、「komputerowi」のいずれかの形式を検索するときはいつでも、これと同じことを意味します->「komputer」。
NLP には、単語のステミング (接尾辞の切り取り) またはフォームを基本フォームへの変換 ("komputerowi" => "komputer") に基づく基本的なアプローチがあります。それを支援するライブラリがいくつかあります。
私が最初に考えたのは、特定の変数で認識されたすべての単語を、フォームではなく基本フォームを使用してテキストに変換する特別なテンプレート フィルターを準備することでした。次に、django + haystack の検索インデックス テンプレートで使用できます。whooshエンジンで評価する前に検索クエリも変換される場合、これはうまく機能するはずです。例を参照してください:
haystack search index template:
{{some_indexed_text|convert_to_base_form_filter}}
text to index: "Nie ma komputera" => "Nie ma komputer" <- this is really indexed
search query: "komputery" => "komputer" <-- this will match
しかし、これがこの問題の「エレガントな」解決策だとは思いません。また、スペルミスの提案を提案するなど、他のいくつかの機能も機能しません。
では、この問題をどのように解決すればよいですか? たぶん、whoosh 以外の検索エンジンを使用する必要がありますか?