Внешняя Native-компонента FuzzyStringComparison - для нечеткого сравнения строк

04.01.25

Разработка - Разработка внешних компонент

В своё время написал программу для нечеткого сравнения строк FuzzyStringComparison. Теперь у меня возникла необходимость во внешней Native-компоненте с таким же функционалом. 32х и 64х-разрядные компоненты входят как макет FuzzyStringComparisonNative в прилагаемую к статье обработку "Проверка библиотеки FuzzyStringComparison Native".

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
Обработка "Поиск товаров с FuzzyStringComparison Native.epf", содержит внешнюю Native-компоненту FuzzyStringComparison - для нечеткого сравнения строк.
.epf 2,46Mb
2 3 950 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

В своё время написал программу для нечеткого сравнения строк FuzzyStringComparison. Теперь у меня возникла необходимость во внешней Native-компоненте с таким же функционалом.

32х и 64х-разрядные компоненты входят как макет FuzzyStringComparisonNative в прилагаемую к статье обработку "Проверка библиотеки FuzzyStringComparison Native".

Содержимое ZIP-архива из макета обработки представлено на скриншоте:

 

 

Компонента проводит транслитерацию с последующей адаптацией фонетического алгоритма для русского языка. И далее проводится сравнение в соответствии с установленными флагами.

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

Компонента проста в работе и имеет три функции и два свойства:

1. функция ПодготовитьИсточник(SRS)

В качестве реквизита SRS надо передать текст с любым количеством строк, вида:
Код или номер строки или любой уникальный номер|Наименование товара|
которые разделены между собой символом перевод строки, н-р:

20835|A-Thermic носки Alpinist p.35-38|
20836|A-Thermic носки Alpinist p.39-42|
20837|A-Thermic носки Alpinist p.43-46|

Наличие символов "|" обязательно, т.к. по ним идет парсинг строк в компоненте.

2. функция ПодготовитьПриемник(DST)

По аналогии с 1-ой функцией, в качестве реквизита DST надо передать текст с любым количеством строк, вида:
Код или номер строки или любой уникальный номер|Наименование товара|
которые разделены между собой символом перевод строки, н-р:

19237|A-Thermic носки Running p.35-38|
19235|A-Thermic носки Running p.39-42|
19236|A-Thermic носки Running p.43-46|

3. Функция Сравнить()

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

На выходе функция Сравнить возвращает текст вида:

Код_Приемник|Наименование_Приемник|Код_Источник;Расстояние_Левенштейна|, например:

26683|ящик A-Elita Sputnik|31403;0|16115;5|24613;6|02463;7|08040;11|21620;11|02243;12|09474;12|10807;12|15352;12|

13708|ящик A-Elita малый Sport|16115;5|02463;9|31403;10|24613;10|06966;13|03118;13|07200;13|06204;14|00447;14|19550;14| 21436|

ящик A-Elita малый SportBeg яркий|16115;13|31403;14|24613;15|02463;17|09744;19|27177;19|21620;19|04494;20|02727;20|14652;20|

Коды из базы-источника выстраиваются по возрастанию расстояния Левенштейна (0 - полное соответствие).

Если используется альтернативный алгоритм, тогда коды выстраиваются по убыванию (100 - полное соответствие).

Количество соответствий в настоящей версии компоненты 24 штуки, что более чем достаточно.

4. Булевские свойства "АлгоритмЛевенштейна" и "АлгоритмМетафон"

Флаги  АлгоритмЛевенштейна и АлгоритмМетафон, при желании, можно менять перед вызовом функции Сравнить(). По умолчанию во внешней компоненте:
АлгоритмЛевенштейна=Истина
АлгоритмМетафон=Истина

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

Описание обработки "Проверка библиотеки FuzzyStringComparison Native"

 

 

Обработка без правок должна работать в любой конфигурации на УФ, имеющей справочник Номенклатура.

В обработке есть четыре текстовых многострочных поля. При открытии поля SRS (источник) и DST (приемник) заполнены 19-ю одинаковыми строками. При желании можно посмотреть как меняется строка Результат при изменении флагов "Использовать алгоритм Левенштейна" и "Использовать алгоритм Metaphone".

При нажатии кнопки "Заполнить источник товарами из запроса" поле "SRS" заполняется данными из справочника Номенклатуры. В запросе обработки использовалась функция Строка(), которая работает с релиза платформы 1С 8.3.20.1549.

Нижняя строка отражает статистику времени работы при установке тех или иных флагов. Как видно из 1-ого скриншота, самое быстрое время работы при двух установленных флагах.

SRS (137 552)   DST (19)   Результат (19)     1 309 сек     Время начала 20.05.2024 14:29:02   (АлгоритмЛевенштейна=Нет; АлгоритмMetaphone=Нет)
SRS (137 552)   DST (19)   Результат (19)     294 сек     Время начала 20.05.2024 14:23:14   (АлгоритмЛевенштейна=Нет; АлгоритмMetaphone=Да)
SRS (137 552)   DST (19)   Результат (19)     45 сек     Время начала 20.05.2024 14:22:08   (АлгоритмЛевенштейна=Да; АлгоритмMetaphone=Нет)
SRS (137 552)   DST (19)   Результат (19)     35 сек     Время начала 20.05.2024 14:20:37   (АлгоритмЛевенштейна=Да; АлгоритмMetaphone=Да)

"Подводные камни" с которыми столкнулся при написании обработки:

1. Запрос на выборку 137552 товаров отрабатывал быстро, но последующая его укладка в строку через цикл работала очень долго, что сильно напрягало. Поэтому придумал алгоритм по быстрой укладке массива со столбцом из таблицы значений в нужную мне строку, через функцию ЗначениеВСтрокуВнутр(). Функция СтрСоединить() значительно улучшила производительность свертки столбца таблицы значений в строку.

2. Установку компоненты из ZIP-архива (макета обработки FuzzyStringComparisonNative) при каждом запуске выполнять не обязательно! Но если уже установлена старая версия компоненты, а надо использовать новую, тогда без установки не получится.
При подключении компоненты из ZIP-архива (макета обработки FuzzyStringComparisonNative) используется ранее установленная компонента. Компоненты устанавливаются в профиле пользователя "%AppData%\Roaming\1C\1cv8\ExtCompT\"

В обработке реализованы три механизма подключения внешней Native компоненты:

1. 1-ый вариант: подключение ВК из файла. Этот способ работает всегда, т.к. идет обращение к компоненте напрямую, а не через сохраненную копию в профиле пользователя.

2. 2-ой вариант: подключение ВК из общего макета. Этот способ работает только если не надо запускать новую версию компоненты, т.к. вначале происходит подключение к компоненте, а если подключение не прошло тогда компонента устанавливается. При подключении компоненты из ZIP-архива используется ранее установленная компонента. Компоненты устанавливаются в профиле пользователя "%AppData%\Roaming\1C\1cv8\ExtCompT\"

3. 3-ий вариант: подключение ВК из макета обработки. Проблемы аналогичные варианту 2, но в этой обработке устанавливаю компоненту каждый раз при запуске обработки. В обработке использую по умолчанию этот вариант.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    204513    1125    410    

1025

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    36222    209    104    

197

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

16000 руб.

10.11.2023    16645    72    39    

89

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    24216    63    28    

92

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    34980    125    53    

167

Разработка внешних компонент Программист 1С v8.3 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

3600 руб.

12.05.2020    30388    141    100    

97

SALE! 30%

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 12600 руб.

22.11.2024    1918    1    0    

8
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ветер в поле 3 23.05.24 10:11 Сейчас в теме
Крайне неудобный и нефункциональный интерфейс у компоненты. Есть же давно известная StrMatch. Там сначала добавляешь все источники (в цикле по одному, хотя тут не столь принципиально), потом по одному сравниваешь с искомой строкой. Причем ты задаешь количество возвращаемых наиболее похожих источников, а не как здесь только один самый похожий.
3. o2005 69 23.05.24 22:00 Сейчас в теме
(1) Вероятно, Вы не очень внимательно читали мою статью. В тексте написано:
"На выходе функция Сравнить возвращает текст вида:
Код_Приемник|Наименование_Приемник|Код_Источник;Расстояние_Левенштейна|, например:
26683|ящик A-Elita Sputnik|31403;0|16115;5|24613;6|02463;7|08040;11|21620;11|02243;12|09474;12|10807;12|15352;12|
......
Количество соответствий в настоящей версии компоненты 24 штуки, что более чем достаточно."

Как видно из текста компонента находит 24 совпадения.

Где Вы увидели что "а не как здесь только один самый похожий" ?
5. o2005 69 23.05.24 22:50 Сейчас в теме
(1) Компонента не визуальная. О каком "неудобный и нефункциональный интерфейс" Вы пишите ?
2. shard 282 23.05.24 10:42 Сейчас в теме
Про сложение (конкатенацию) строк обратите внимание на публикацию и ЗаписьXML
4. o2005 69 23.05.24 22:21 Сейчас в теме
(2) Спасибо большое за подсказку.
Функция СтрСоединить() значительно улучшила производительность свертки столбца таблицы значений в строку.
В моем случае код обработки стал более быстрым и лаконичным:
SRS = СтрСоединить(мСтроки, Символы.ПС);
Теперь выборка запросом 137552 товаров и укладка их в строку занимает менее 2 секунд.
Оставьте свое сообщение