Словенский стеммер для сфинкса
Я ищу алгоритм определения словенского языка, который я могу использовать с поиском Сфинкса.
Я пытаюсь добиться, например, поиска "jabolka", я также хочу получить результаты для документов, содержащих "jabolko", "jabolki", "jabolk" и т. Д.
Я нашел некоторые упоминания о существовании словенского стеммера, но не могу найти, где его скачать, он даже нигде не продается...
Другой вариант, с которым я столкнулся, - это использование wordforms
в исходной конфигурации Sphinx ( http://sphinxsearch.com/docs/manual-0.9.9.html), но создание собственного словаря будет слишком сложным, поэтому мне интересно, есть ли общедоступные словари, доступные уже?
Если словенский стеммер недоступен, может кто-нибудь предложить какой-то другой подход для получения похожих результатов поиска?
3 ответа
Мне удалось собрать словенский стеммер в следующие шаги:
- Загрузите http://snowball.tartarus.org/dist/snowball_code.tgz (исходный код для снежного кома) и распакуйте его
- Загрузите словенский алгоритм с http://snowball.tartarus.org/archives/snowball-discuss/0725.html и сохраните его в распакованном проекте, начиная с шага 1, в папке /gorithms / slovene. Имя файла должно быть
stem_ISO_8859_2.sbl
- Алгоритм находится в кодировке ISO, поэтому я преобразовал его в UTF8 и сохранил как
stem_Unicode.sbl
(Вы должны найти UTF-коды для специальных словенских символов, таких как ČŠŽĆ) Отредактируйте оба файла.txt в папке / libstemmer и добавьте записи для словенского:
slovene UTF_8,ISO_8859_2 slovene,sl,slv
- Отредактируйте /GNUmakefile и добавьте словенский язык (один раз в список языков для utf и один раз для ISO_8859_2_algorithms)
перейдите в папку / libstemmer и запустите:
./mkmodules.pl modules.h src_c modules.txt ../mkinc.mak ./mkmodules.pl modules_utf8.h src_c modules_utf8.txt ../mkinc_utf8.mak
Это создаст файлы, необходимые для компиляции позже.
- бежать
make
(из корня распакованных файлов) Если во время компиляции ошибок не было, у вас должна быть папка / src_c и код словенского стеммера (рядом с другими)
stem_UTF_8_slovene.c stem_ISO_8859_2_slovene.c ...
Распакуйте последнюю версию sphinx и скопируйте все файлы из вашего проекта Snowball в папку sphinx / libstemmer_c (за исключением
libstemmer.o
а такжеGNUmakefile
)скомпилировать сфинкса:
touch NEWS README AUTHORS ChangeLog autoreconf --force --install ./configure --with-libstemmer make make install
если все прошло нормально, у вас должен быть slovene stemmer для работы sphinx, вам просто нужно включить его в вашей конфигурации sphinx index (на моем Debian он находится в /usr/local/etc/sphinx.conf):
charset_type = utf-8 morphology = libstemmer_slovene
Надеюсь, это кому-нибудь поможет, у меня не было опыта работы с autoconf, поэтому мне понадобилось время, чтобы понять это.
Этот словенский стеммер официально не выпущен на http://snowball.tartarus.org/, но из моих тестов он работает достаточно хорошо для моего проекта.
Я не уверен, что это будет делать то, что вы хотите, но я встретил эту ссылку на инструмент под названием spelldump в документации по Sphinx:
spelldump является одним из вспомогательных инструментов в пакете Sphinx.
Он используется для извлечения содержимого файла словаря, который использует формат ispell или MySpell, что может помочь в создании списков слов для словоформ - все возможные формы предварительно созданы для вас.
Для этого требуется "файл словаря, который использует ispell или MySpell" - я нашел ссылку на словенский файл словаря ispell, который может подойти.
Удачи!
Я также пытался найти стеммер для словенского языка, но не нашел никаких существующих решений.
Я создал свой собственный стеммер на Ruby, взяв за основу никогда не реализованную версию Snowball .
Он доступен на Github как hajkr/slovene-stemmer . Он далек от совершенства, но работает в большинстве случаев.