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

17.05.13

Разработка - Математика и алгоритмы

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Стеммер
.epf 11,17Kb
74
74 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

См. также

Математика и алгоритмы Программист Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    2849    stopa85    12    

38

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    7001    user1959478    50    

36

Математика и алгоритмы Разное Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расширение (+ обработка) представляют собою математический тренажер. Ваш ребенок сможет проверить свои знание на математические вычисление до 100.

2 стартмани

29.09.2023    2789    maksa2005    8    

26

Математика и алгоритмы Инструментарий разработчика Программист Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

Что ж... лучше поздно, чем никогда. Подсистема 1С для работы с регулярными выражениями: разбор выражения, проверка на соответствие шаблону, поиск вхождений в тексте.

1 стартмани

09.06.2023    10579    7    SpaceOfMyHead    18    

61

Математика и алгоритмы Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Три задачи - три идеи - три решения. Мало кода, много смысла. Мини-статья.

03.04.2023    4058    RustIG    9    

25

Механизмы платформы 1С Математика и алгоритмы Программист Платформа 1С v8.3 Россия Бесплатно (free)

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

23.11.2022    3191    gzharkoj    14    

25

Математика и алгоритмы Программист Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    8985    7    kalyaka    11    

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

в теории правильно
на практике макет можно добавить в обработку и закинуть словарь туда
и потом считывать
скорость правда будет не гуд, но как вариант...
7. fixin 4271 03.02.17 14:57 Сейчас в теме
Оставьте свое сообщение