Имя: Пароль:
1C
 
Нечеткий поиск
0 repin_mike
 
24.06.25
17:15
Как на языке 1С оценить меру похожести строк? Например, строки "Иванов Петр Юрьевич" "Иванов Пётр Юрьевич" и "Иванов.Петр.Юрьевич " скорее похожи, а "Иванов Юрий Петрович" скорее не похожа на предыдущие?
1 PR
 
24.06.25
17:18
(0) Замени все ё на е
Замени все точки на пробелы
Разбей строку на подстроки по пробелам
Отсортируй по наименованию
Сравни получившиеся массивы
2 dark70
 
24.06.25
17:19
в запросе ПОДОБНО "%Иванов%" , например.
3 PR
 
24.06.25
17:20
А вообще гугли "Методы нечеткого сравнения текстов"
4 PR
 
24.06.25
17:20
(2) "Иванов Иванов Иванов" и "Иванов Петр Сергеевич" равны?
5 Timon1405
 
24.06.25
17:21
(0) wiki:Расстояние_Левенштейна
как запрограммировать на 1с спросите у дипсика
6 PR
 
24.06.25
17:21
7 dark70
 
24.06.25
17:25
(4) Нет. Но как вариант поиска.
8 PR
 
24.06.25
17:31
(7) И почему нет?
Все найдется
Таких никому не нужных нерабочих недовариантов можно дохрена накидать
Но зачем?
9 PR
 
24.06.25
17:33
Щас еще особо умные персонажи вспомнят, что 1С теперь умеет в регулярки, начнут наперебой умничать, что все нужно через них делать, не вдаваясь в детали, что именно и как именно делать
10 dark70
 
24.06.25
17:40
(8) Автор не обозначил критериев оценок "скорее похоже чем нет". А если задать проценты похожести, то "Подобно" вполне подойдет.
Хотя бы вот
https://catalog.mista.ru/1c/tools/445962/
11 Волшебник
 
24.06.25
17:59
(4) а бывают полные однофамильцы, которые не равны.

Или хотя бы уволенный сотрудник, который не равен вновь принятому, хотя физлицо совпадает.
12 dark70
 
24.06.25
18:01
Вообще-то здесь речь о строках, а ФИО как пример.
13 PR
 
24.06.25
18:02
(10) Рассуждения спеца за соточку
14 PR
 
24.06.25
18:03
(11) Ну, это уже не сравнение строк
15 Волшебник
 
24.06.25
18:03
Можно привести строки к минимальной длине, потом отбрасывать по одному символу справа и сравнивать. Если совпало, то длина строки будет мерой похожести.
16 Волшебник
 
24.06.25
18:11
(5) Я поддерживаю это решение. Там алгоритм на 10 строчек кода, три цикла
17 Злопчинский
 
24.06.25
18:40
На ИС штуки к реализации разных методов нечеткого поиска.
18 Злопчинский
 
24.06.25
18:41
(5) strmatch.dll на гем вроде базируется с добавками...
19 Волшебник
 
24.06.25
21:20
Функция РасстояниеЛевенштейна на языке 1С
Функция РасстояниеЛевенштейна(Строка1, Строка2)
    len1 = СтрДлина(Строка1)
    len2 = СтрДлина(Строка2)

    // Создаем матрицу (len1+1) x (len2+1)
    матрица = Новый Массив(len1 + 1)
    Для i = 0 По len1 Цикл
        матрица[i] = Новый Массив(len2 + 1)
    КонецЦикла

    // Инициализация первой строки
    Для j = 0 По len2 Цикл
        матрица[0][j] = j
    КонецЦикла

    // Инициализация первого столбца
    Для i = 0 По len1 Цикл
        матрица[i][0] = i
    КонецЦикла

    // Заполнение матрицы
    Для i = 1 По len1 Цикл
        Для j = 1 По len2 Цикл
            символ1 = Сред(Строка1, i, 1)
            символ2 = Сред(Строка2, j, 1)
            cost = ?(символ1 = символ2, 0, 1)

            матрица[i][j] = Мин(
                матрица[i-1][j] + 1,   // Удаление
                матрица[i][j-1] + 1,   // Вставка
                матрица[i-1][j-1] + cost  // Замена или совпадение
            )
        КонецЦикла
    КонецЦикла

    Возврат матрица[len1][len2]
КонецФункции


Я не проверял. Это творчество Qwen. Очевидно не хватает точки с запятой ";"
20 Djelf
 
гуру
24.06.25
21:23
(18) это для 7.7, на 8ку вроде никто это не портировал, но там это не требуется, 8ка же, там все есть...
Так ведь?
(19) гадя невероятная
21 Волшебник
 
24.06.25
21:23
(20) Простите великодушно.
Функция на самом деле очень интересная. Можно искать номенклатуру по артикулу или по части штрих|QR-кода.
22 Злопчинский
 
24.06.25
23:52
(20) штатная strmatch и с 8ой работает, на ис тоже были решения
23 DrZombi
 
гуру
25.06.25
06:06
(0) Для нечеткого поиска будь готов использовать кучу доп. полей, заполняемых системой, т.е. автоматически на основании динамических полей, к примеру "Наименование", "Комментарий" и т.д. другие прелести пользовательского интерфейса. :)

А так, только порядок ввода данных и административное "Нагоняй", помогут твоему горю :)