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

04.01.25

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

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

Скачать файл

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

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

В своё время написал программу для нечеткого сравнения строк 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С.

12000 руб.

02.09.2020    169314    937    403    

905

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

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

8400 руб.

20.08.2024    12619    99    42    

101

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

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

9360 руб.

17.05.2024    26541    90    48    

134

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

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16833    41    15    

75

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

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

15000 руб.

10.11.2023    11400    40    27    

66

SALE! %

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

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

4800 3840 руб.

14.01.2013    190556    1150    0    

918

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

Медиадисплей покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Экран можно использовать в качестве графического меню-борда в кафе и видеовывески. В качестве устройства отображения можно использовать Android-планшеты, смарт-телевизоры с Android, мониторы или проекторы под управлением Windows или Linux-компьютера. Linux-версия успешно запускается на одноплатных компьютерах Raspberri Pi и Orange Pi. Настраивается ЛЮБОЙ ДИЗАЙН экрана при помощи встроенного графического редактора! Решение можно масштабировать от одного экрана до тысяч экранов с централизованным управлением.

18000 руб.

30.05.2017    54042    9    69    

46

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    783    2    0    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 секунд.
Оставьте свое сообщение