Пример реализации стеммера Портера для русского языка без использования регулярных выражений на Delphi. Стемминг - это вероятностный процесс выделения основы слова. Не использует базы и словари. Суть алгоритма в постепенном отбрасывании окончаний и суффиксов, опираясь на правила словообразования конктретного языка.
Скачать программу и исходник
Подробное описание алгоритма на русском.
Данная реализация подходит скорее для изучения работы алгоритма, чем для использования в живых проектах. В коде много TStringList и лишних операций со строками. Но даже она быстрее версии на регулярных выражениях в 3 раза.
За основу взят проект из поста про множественный поиск.
Файлы особого назначения:
rus-stop-list.txt - список стоп-слов
diffs.txt - контрольная база для проверки алгоритма
Ссылки:
Исходный пост о стеммере для русского на регулярных выражениях php.
Там же есть кусок кода для Delphi, он раза в 3 медленнее и
имеет кучу ошибок в тесте diffs.txt (больше 14 000 ошибок из 50 000)
Официальная страница алгоритма
Project "Snowball"
Алгоритм для русского (на английском)
Уж почти 11 лет прошло с момента публикации, но информация актуальна до сих пор.
ОтветитьУдалитьБольшое спасибо за этот материал.
Тоже внес свою лепту, см. здесь:
roamer55.ru/main_programming/delphi/text_porter_rus/