![]() |
![]() |
![]() |
|
Нечеткий поиск nick86, arsik, mmg, Hawk_1c, Кирпич, Многолетний Апельсин, skafandr, denk32, Timon1405, Анцеранана, PR, Мультук, novichok79, sikuda, Климов Сергей, ptiz, Fedor-1971, p-soft, who respawn, PLUT, maxab72, zenik, Prog_man, МаленькийВопросик, Djelf, rsv, KJlag, elka302, repin_mike, strange2007, Злопчинский, Terrixus, Ёпрст, obs191, orakool, vasvl123, s_trikozin, Ильф, Гипервизор, Billi, abfm, AlexKimp, Trosskin, ADirks, vbus, ads55, mszsuz, MichmaN, dva1c, DrZombi, Aleksey, ОбновляторОдинЭс, Джордж1, H A D G E H O G s
| ☑ | ||
---|---|---|---|---|
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) Для нечеткого поиска будь готов использовать кучу доп. полей, заполняемых системой, т.е. автоматически на основании динамических полей, к примеру "Наименование", "Комментарий" и т.д. другие прелести пользовательского интерфейса. :)
А так, только порядок ввода данных и административное "Нагоняй", помогут твоему горю :) |
|||
24
ptiz
25.06.25
✎
09:14
|
(0) Самый простой способ, которого достаточно в большинстве случаев:
1) Делим строку на блоки и получаем таблицу строк вида: "%Иванов%Петр%Юрьевич%" - 38, "%Иванов%Петр%" -23, "%Иванов%" - 14. 2) Строим запрос поиска похожих: ВЫБРАТЬ ТЗ.Подстрока, ТЗ.ДлинаСтроки ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ ; ВЫБРАТЬ ПЕРВЫЕ 5 ГдеИщем.Наименование, МАКСИМУМ(ТЗ.ДлинаСтроки) КАК Приоритет, ИЗ Справочник.ГдеИщем КАК ГдеИщем ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ ПО (ГдеИщем.Наименование ПОДОБНО ТЗ.Подстрока) СГРУППИРОВАТЬ ПО ГдеИщем.Наименование УПОРЯДОЧИТЬ ПО Приоритет УБЫВ |
|||
25
mmg
25.06.25
✎
09:48
|
(0) Берешь библиотеку искусственного интеллекта для 1С. Определяешь векторы для этих строк, сравниваешь расстояния и получаешь то, что хотел.
|
|||
26
arsik
гуру
25.06.25
✎
10:24
|
(0) Можно подсмотреть. как это делается в любой стандартной. Например e1cib/app/Обработка.СопоставлениеНоменклатурыБЭД
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |