Словенский стеммер для сфинкса

Я ищу алгоритм определения словенского языка, который я могу использовать с поиском Сфинкса.

Я пытаюсь добиться, например, поиска "jabolka", я также хочу получить результаты для документов, содержащих "jabolko", "jabolki", "jabolk" и т. Д.

Я нашел некоторые упоминания о существовании словенского стеммера, но не могу найти, где его скачать, он даже нигде не продается...

Другой вариант, с которым я столкнулся, - это использование wordforms в исходной конфигурации Sphinx ( http://sphinxsearch.com/docs/manual-0.9.9.html), но создание собственного словаря будет слишком сложным, поэтому мне интересно, есть ли общедоступные словари, доступные уже?


Если словенский стеммер недоступен, может кто-нибудь предложить какой-то другой подход для получения похожих результатов поиска?

3 ответа

Решение

Мне удалось собрать словенский стеммер в следующие шаги:

  1. Загрузите http://snowball.tartarus.org/dist/snowball_code.tgz (исходный код для снежного кома) и распакуйте его
  2. Загрузите словенский алгоритм с http://snowball.tartarus.org/archives/snowball-discuss/0725.html и сохраните его в распакованном проекте, начиная с шага 1, в папке /gorithms / slovene. Имя файла должно быть stem_ISO_8859_2.sbl
  3. Алгоритм находится в кодировке ISO, поэтому я преобразовал его в UTF8 и сохранил как stem_Unicode.sbl (Вы должны найти UTF-коды для специальных словенских символов, таких как ČŠŽĆ)
  4. Отредактируйте оба файла.txt в папке / libstemmer и добавьте записи для словенского:

    slovene         UTF_8,ISO_8859_2        slovene,sl,slv
    
  5. Отредактируйте /GNUmakefile и добавьте словенский язык (один раз в список языков для utf и один раз для ISO_8859_2_algorithms)
  6. перейдите в папку / libstemmer и запустите:

    ./mkmodules.pl modules.h src_c modules.txt ../mkinc.mak
    ./mkmodules.pl modules_utf8.h src_c  modules_utf8.txt ../mkinc_utf8.mak
    

    Это создаст файлы, необходимые для компиляции позже.

  7. бежать make (из корня распакованных файлов)
  8. Если во время компиляции ошибок не было, у вас должна быть папка / src_c и код словенского стеммера (рядом с другими)

    stem_UTF_8_slovene.c
    stem_ISO_8859_2_slovene.c
    ...
    
  9. Распакуйте последнюю версию sphinx и скопируйте все файлы из вашего проекта Snowball в папку sphinx / libstemmer_c (за исключением libstemmer.o а также GNUmakefile)

  10. скомпилировать сфинкса:

    touch NEWS README AUTHORS ChangeLog
    autoreconf --force --install
    ./configure --with-libstemmer
    make
    make install
    
  11. если все прошло нормально, у вас должен быть 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, что может помочь в создании списков слов для словоформ - все возможные формы предварительно созданы для вас.

http://sphinxsearch.com/docs/current.html

Для этого требуется "файл словаря, который использует ispell или MySpell" - я нашел ссылку на словенский файл словаря ispell, который может подойти.

Удачи!

Я также пытался найти стеммер для словенского языка, но не нашел никаких существующих решений.

Я создал свой собственный стеммер на Ruby, взяв за основу никогда не реализованную версию Snowball .

Он доступен на Github как hajkr/slovene-stemmer . Он далек от совершенства, но работает в большинстве случаев.

Другие вопросы по тегам