Регулярные выражения в 1С
Вышел проект с использованием регулярных выражений - Заполнение оснований финансирования по правилам в банковских выписках. В рамках этого проекта мы решали задачу поиска элемента справочника по назначению платежа. Пробовали различные подходы, например, нечеткий поиск с помощью n-грамм и Расстояния Левинштейна. Но, к сожалению, требуемой точности не удалось достичь. Решили пойти способом попроще.
Для этого спрашиваем у пользователя - что конкретно искать в строке, чтобы выбрать и подставить нужный элемент справочника. Это один из самых распространенных способов, он частично используется при распознавании выписки из банка. Но раньше это не настраивалось пользователем и работало на обычном поиске по строке.
В рамках этого проекта решили использовать поиск с помощью регулярных выражений, чтобы ускорить распознавание выписки. Правила поиска задаются пользователем и их может быть много. Если использовать обычный поочередный поиск по каждому правилу, то при большом количестве правил это занимает значительное время. Или как сказали бы настоящие программы у алгоритма будет квадратичная сложность O(n^2). Использование регулярных выражение позволило собрать одно выражение из всех правил и искать по нему. Это работает быстрее, а сложность будет линейная O(n).
Логика примерно такая: 1. Берем все правила от пользователя, например, «грант», «пожертвование» и «профсоюз» 2. Собираем одно регулярное выражение - (грант)|(пожертвование)|(профсоюз) 3. Применяем это выражение к назначению платежа в выписке и смотрим какая группа сработала 4. По найденной группе определяем элемент справочника, который нужно подставить 5. Готово!
Само регулярное выражение чуть сложнее получается из-за возможных использований исключений, но суть примерно такая. Теперь ждем обратную связь от пользователей. Если все пройдет гладко, то будем распространять этот инструмент и на обычную Бухгалтерию предприятия. Сейчас это только в 1С:Бухгалтерия некоммерческой организации.
При распознавании выписки мы итак смотрим на различные ключевые слова в назначении платежа, но делаем это последовательно, каждый раз прогоняя все через поиск по строке. Рассчитываю, что использование регулярных выражений здесь тоже даст прирост в скорости.