Часто возникает задача сравнить два текстовых описания и определить, относятся ли они к одному и тому же объекту. Например, сопоставить наименование контрагента из входящего документа с записью в справочнике (ООО "Ромашка" и Ромашка (общество с ограниченной ответственностью)) или, что сложнее, найти проданный товар из внешней системы в своей учетной базе по одному лишь текстовому описанию. Рассмотрим эту задачу на более сложном примере из практики: сопоставление наименований автозапчастей.
Допустим, во внешней системе (назовем ее "Bazon") товар продан под названием «Крыло Mazda Demio DE3AS 2007 перед. лев. (б/у)», а в нашей базе 1С он числится как «крыло на MAZDA / DEMIO / DE3AS; DE3FS; DE5FS; DEJFS / / Лево / Перед /». Уникальных артикулов или кодов нет. Как автоматизировать процесс сопоставления, чтобы корректно списать себестоимость товара?
Эта задача известна как сопоставление данных (data matching), связывание записей (record linkage) или, в более простом варианте, нечеткий поиск (fuzzy search). Разберем по шагам, какие подходы можно использовать для ее решения в 1С, двигаясь от простого к сложному.
Первый и обязательный шаг в любой задаче сравнения текста — это его предварительная обработка, или нормализация. Идея в том, чтобы привести обе строки к единому, «каноническому» виду, убрав из них все несущественные различия.
Общество с ограниченной ответственностью -> ОООИндивидуальный предприниматель -> ИПлев., левое, левая -> левоперед., переднее -> передб/у, подержанный -> буПосле такой обработки наши исходные строки могут превратиться во что-то вроде:
Исходник 1: крыло mazda demio de3as 2007 перед лев бу
Исходник 2: крыло на mazda demio de3as de3fs de5fs dejfs лево перед
Уже гораздо лучше, но они все еще не идентичны. Этот метод хорошо работает для простых случаев, как с названиями компаний, но для сложных описаний его недостаточно.
Когда после нормализации строки все равно не совпадают, на помощь приходят алгоритмы нечеткого сравнения. Они вычисляют «расстояние» или «степень схожести» между строками, выраженное в виде числа или коэффициента. Чем ближе строки, тем выше коэффициент схожести.
Эти подходы уже гораздо мощнее, но у них есть фундаментальное ограничение: они не понимают смысл текста. Для них "король" и "королева" — это очень похожие слова, а "б/у" и "подержанный" — совершенно разные.
Это самый «умный» и современный подход, который лежит в основе работы нейросетей и больших языковых моделей. Его суть — превратить текст в набор чисел, то есть в вектор. Этот процесс называется эмбеддингом (embedding).
Главное преимущество этого метода в том, что слова и фразы с похожим смыслом будут иметь близкие векторы в многомерном пространстве. Модель, обученная на огромном количестве текстов, "знает", что "б/у", "с пробегом" и "подержанный" — это синонимы, и их векторы будут находиться рядом.
Как это работает на практике:
Этот метод позволяет находить семантически, а не только текстуально, похожие описания. Для его реализации в 1С потребуются либо интеграция с внешними сервисами, либо использование специализированных компонент, которые "умеют" работать с нейросетевыми моделями.
На практике чисто программное решение без участия человека часто бывает либо слишком дорогим в разработке, либо недостаточно точным. Особенно в такой сложной сфере, как автозапчасти, где одно лишнее слово или буква (например, "рестайл") может означать совершенно другую деталь.
Поэтому самый надежный и эффективный способ — это построить многоступенчатую систему, которая автоматизирует рутину, а сложные случаи оставляет человеку.
Рассмотрим по шагам, как может выглядеть такой процесс:
крыло | mazda | demio | de3as | 2007 | перед | лев | бу
крыло | mazda | demio | de3as | de3fs | de5fs | dejfs | лево | перед
Важный момент: система может обучаться на выборе оператора. Если пользователь постоянно сопоставляет определенные пары, система может запомнить этот выбор и в следующий раз выполнить сопоставление автоматически. Это элемент самообучения, который со временем снижает нагрузку на персонал.
В итоге, не существует "серебряной пули". Эффективное решение — это всегда комбинация методов: качественная подготовка данных, применение подходящих алгоритмов для расчета схожести и, что самое главное, — продуманная система взаимодействия с пользователем для разрешения неоднозначных ситуаций.