Словенский стеммер для сфинкса - PullRequest
3 голосов
/ 03 января 2012

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

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

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

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


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

Ответы [ 2 ]

4 голосов
/ 05 марта 2012

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

  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. если все прошло нормально, у вас должен быть словенский стеммер для работы с сфинксом, вам просто нужно включить его в вашей конфигурации sphinx index (на моем Debian это в /usr/local/etc/sphinx.conf):

    charset_type = utf-8
    morphology = libstemmer_slovene
    

Надеюсь, это кому-нибудь поможет, у меня не было опыта работы с autoconf , поэтому мне потребовалось некоторое время, чтобы понять это.

Этот словенский стеммер официально не выпущен на http://snowball.tartarus.org,, но из моих тестов он работает достаточно хорошо для моего проекта.

1 голос
/ 11 января 2012

Я не уверен, что это будет делать то, что вы хотите, но я наткнулся на эту ссылку на инструмент под названием spelldump в документации Sphinx:

spelldump - один из вспомогательных инструментов в пакете Sphinx.

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

http://sphinxsearch.com/docs/current.html#ref-spelldump

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

Удачи!

...