Многие языки в Европе являются флективными. Это означает, что одно слово может быть написано в нескольких формах в тексте. Например, слово «компьютер» в польском языке «компьютер» имеет несколько форм: «компьютер», «компьютер», «компьютер», «компьютер» и т. Д.
Как правильно использовать django + haystack + whoosh, чтобы справиться с перегибом языка?
Всякий раз, когда я ищу любую форму "komputer", "komputera", "komputerowi", я имею в виду одно и то же -> "komputer".
В НЛП существует базовый подход, основанный либо на словах-основах (суффиксы сокращения), либо на преобразовании формы в базовую форму ("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
Но я не думаю, что это «элегантное» решение этой проблемы, также не сработают некоторые другие функции, например, предложения по написанию ошибок.
Итак - как мне решить эту проблему? Может быть, я должен использовать другой поисковик, чем свист?