gifts2017

Стеммер Портера или нечеткое сравнение слов

Опубликовал Эмиль Фахреев (Kobra_RU) в раздел Программирование - Практика программирования

Стеммер позволяет организовать нечеткое сравнение слов путем выделения из них некоторой значащей части, которые затем и подлежат сравнению. Алгоритм реализован для 8.2, но может быть перенесен на любую платформу 1С.

При выполнении задания потребовалась организация сравнения и поиска соответствий ключевых значений одного набора свойств (осмысленная текстовая строка) с другим набором свойств, где ключами являютя тоже текстовые строки и смысл похожий, но выражены иначе. Т.е. человек легко найдет соответствие, но не 1С. Использование полнотекстового поиска не реализуемо, т.к. оба набора свойств динамические (соответствия).

Попытка найти готовое решение в интернете привела меня на страницу http://snowball.tartarus.org/algorithms/russian/stemmer.html, где описан алгоритм выделения значащего куска слова. Алгоритм работает не со 100% точностью, тем не менее он не требует громоздких словарей и работает достаточно быстро. Реализация в коде в интернете есть, но использует регулярные выражения, которые 1С (сама по себе) не понимает.

В обработке приведен код, получающий стем слова использующий только простейшие конструкции обработки строк 1С и не подключающий внешних объектов. Таким образом, хотя обработка написана для платформы 8.2, она легко может быть портирована на любую другую платформу 1С.

Скачать файлы

Наименование Файл Версия Размер
Стеммер 56
.epf 11,17Kb
17.05.13
56
.epf 11,17Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. alex_japanese_student (Alex_Japanese_Student) 18.05.13 00:02
Можно чуточку подробнее описать. Вы пишете, что не используете словари - то есть от сравнений по синонимам отказались? Или следующим этапом будет? Потому что выделения куска слова чаще всего не достаточно для сравнения фраз по смыслам.. Или так широко задача не стояла?
2. Эмиль Фахреев (Kobra_RU) 20.05.13 08:02
Нет, пока более широко задача не стоит. Это просто программная реализация на 1С алгоритма получения стема русского языка. На форумах этот алгоритм достаточно широко обсуждался. Отмечается, что он не на 100 процентов может выделить именно то что нужно, но достаточно компактный и быстрый. Т.е. с неточностями придется смириться.
В публикации есть ссылка на страницу алгоритма, на ней приведен список слов и их стемы. По этому списку можно сделать предварительный вывод об использовании алгоритма.
3. qweasd qweasdzc (serega3333) 22.05.13 13:05
(2) Kobra_RU, подкрутив словарь в этот стеммер по сути можно будет синонимайзер сделать? заменяя корни слов...
4. alex_japanese_student (Alex_Japanese_Student) 22.05.13 13:25
да вот и я думал, что одного стеммера маловато, надо словари синонимов прикручивать, иначе задача получается половинчатой.
а словари они чаще всего платные, да и качеством часто не блещут
5. Эмиль Фахреев (Kobra_RU) 22.05.13 14:26
Словарь подразумевает наличие объекта для его хранения, что сразу ограничивает использование решения, во внешних обработках уже не применишь...
6. alex_japanese_student (Alex_Japanese_Student) 22.05.13 14:34
(5) Kobra_RU,
Словарь подразумевает наличие объекта для его хранения, что сразу ограничивает использование решения, во внешних обработках уже не применишь...

в теории правильно
на практике макет можно добавить в обработку и закинуть словарь туда
и потом считывать
скорость правда будет не гуд, но как вариант...