понедельник, 27 декабря 2010 г.

Стеммер Портера для русского языка на Delphi

Пример реализации стеммера Портера для русского языка без использования регулярных выражений на Delphi. Стемминг - это вероятностный процесс выделения основы слова. Не использует базы и словари. Суть алгоритма в постепенном отбрасывании окончаний и суффиксов, опираясь на правила словообразования конктретного языка.


Скачать программу и исходник

Подробное описание алгоритма на русском.

Данная реализация подходит скорее для изучения работы алгоритма, чем для использования в живых проектах. В коде много TStringList и лишних операций со строками. Но даже она быстрее версии на регулярных выражениях в 3 раза.
За основу взят проект из поста про множественный поиск.

Файлы особого назначения:
rus-stop-list.txt - список стоп-слов
diffs.txt - контрольная база для проверки алгоритма

Ссылки:
Исходный пост о стеммере для русского на регулярных выражениях php.
Там же есть кусок кода для Delphi, он раза в 3 медленнее и
имеет кучу ошибок в тесте diffs.txt (больше 14 000 ошибок из 50 000)
Официальная страница алгоритма
Project "Snowball"
Алгоритм для русского (на английском)

1 комментарий:

  1. Уж почти 11 лет прошло с момента публикации, но информация актуальна до сих пор.
    Большое спасибо за этот материал.
    Тоже внес свою лепту, см. здесь:
    roamer55.ru/main_programming/delphi/text_porter_rus/

    ОтветитьУдалить