Перебор символов
Добрый день, нужна помощь, хотелось бы посмотреть, на рабочий вариант
Есть текстовая переменная (нужно реализовать ее ввод), далее по тексту слово, длиной 2-4 символа, слово может содержать символы русского и английского алфавита и цифры.
Суть задания , нужно получить список схожих по написанию слов с похожими русскими, английскими символами или цифрами. Нужно сделать различаемое оформление символов из разных наборов (а – русская, A – английская). Так же нужно учесть, что, 0 (ноль) похож на русскую и английскую букву О.
Реквизит - поле ввода, в который будут вноситься данные, по нажатию на кнопку отрабатывает код и выводится всё в таблицу значений, которая будет на форме
Например: есть слово 'АP0', результатом обработки должен быть список вида:
АРO
AРo
AР0
AрO
Aрo
Aр0
aРO
aРo
aР0
aрO
aрo
aр0
Есть текстовая переменная (нужно реализовать ее ввод), далее по тексту слово, длиной 2-4 символа, слово может содержать символы русского и английского алфавита и цифры.
Суть задания , нужно получить список схожих по написанию слов с похожими русскими, английскими символами или цифрами. Нужно сделать различаемое оформление символов из разных наборов (а – русская, A – английская). Так же нужно учесть, что, 0 (ноль) похож на русскую и английскую букву О.
Реквизит - поле ввода, в который будут вноситься данные, по нажатию на кнопку отрабатывает код и выводится всё в таблицу значений, которая будет на форме
Например: есть слово 'АP0', результатом обработки должен быть список вида:
АРO
AРo
AР0
AрO
Aрo
Aр0
aРO
aРo
aР0
aрO
aрo
aр0
По теме из базы знаний
- Строка в число (Обычный способ и способ, основанный на регулярных выражениях). Тестирование скорости выполнения на больших данных
- Минимализмы 3
- Работа с Ворд через СОМ-Объект
- Подсистема регулярных выражений с использованием RegEx
- Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(5)
Я бы за обозначенную сумму мог бы описать алгоритм на словах, но писать готовый код... нафиг-нафиг, желаю удачи!
задачу нашел просто на просторах интернета
То есть, практического смысла она не несет?
вот сейчас заинтересовало решение
Ну так решайте! Или, как гласит один из законов Мерфи: "Сложность программы растет до тех пор, пока не превысит способности программиста" - тот самый случай? ;)
Я бы за обозначенную сумму мог бы описать алгоритм на словах, но писать готовый код... нафиг-нафиг, желаю удачи!
(8)Задача была взята их интернета, хотелось посмотреть на готовый вариант, как это всё работает, потому есть есть варианты на c# python, а вот на 1с не понимаю, как работает,
можно учесть тот момент, что введёные данные могут быть только АР0 или ар0 допустим или ан0 или АН0
можно учесть тот момент, что введёные данные могут быть только АР0 или ар0 допустим или ан0 или АН0
(10) ну так с питона в 1С адаптировать достаточно легко код. Есть множ5ство алгоритмов, определяющих схожеть - по звучанию, по написанию, ... Не так давно на ифостарте была публикация про это. Все, полагаю, сводится к тому, чтобы найти расстояние между похожими буквами. Чем оно больше, тем меньше коэффициент "похожести". Ну и считать буквы одинакового написания (или цифру НОЛЬ, как букву "○") одинаковыми.
примерно так, нужное соответствие дополнить
&НаСервере
Процедура РазложитьНаСервере()
СоответствиеСимволов = Новый Соответствие;
СоответствиеСимволов.Вставить("о", "0");
СоответствиеСимволов.Вставить("А", "A");
ДлинаСтроки = СтрДлина(СокрЛП(Строка));
Массив = Новый Массив(ДлинаСтроки, 4);
Для ИндексСтроки = 1 По ДлинаСтроки Цикл
ТекущийСимвол = Сред(Строка, ИндексСтроки, 1);
Массив[ИндексСтроки-1][0] = ВРег(ТекущийСимвол);
Массив[ИндексСтроки-1][1] = НРег(ТекущийСимвол);
ТекущийСимволСооветствия = СоответствиеСимволов.Получить(Врег(ТекущийСимвол));
Если ТекущийСимволСооветствия <> Неопределено Тогда
Если ТипЗнч(ТекущийСимволСооветствия) = тип("Число") Тогда
Массив[ИндексСтроки-1][2] = ТекущийСимволСооветствия;
Иначе
Массив[ИндексСтроки-1][2] = ВРег(ТекущийСимволСооветствия);
Массив[ИндексСтроки-1][3] = НРег(ТекущийСимволСооветствия);
КонецЕсли;
Конецесли;
КонецЦикла;
СписокВариантов = Новый СписокЗначений;
ЗаполнитьСтроку(СписокВариантов, "", Массив, ДлинаСтроки-1, 0);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтроку(СписокВариантов, текСтрока, Массив, МаксИндекс, текИндекс)
Если текИндекс<=МаксИндекс Тогда
Для ИндексМассиваВложенный = 0 По 3 Цикл
Если ЗначениеЗаполнено(Массив[текИндекс][ИндексМассиваВложенный]) Тогда
ЗаполнитьСтроку(СписокВариантов, текСтрока+ Массив[текИндекс][ИндексМассиваВложенный], Массив, МаксИндекс, текИндекс+1);
Конецесли;
конецЦикла;
ИначеЕсли текИндекс = МаксИндекс+1 Тогда
СписокВариантов.Добавить(текСтрока);
КонецЕсли;
Конецпроцедуры
Показать
Нужно определить предел схожести. "u" и "и" тоже, говорят, похожи.
А по реализации предлагаю сделать наборы похожих символов. Хранить в регистре или в справочнике с табчастью. Или хранить в строках наборы символов, потом в цикле перебирать. Для ускорения получения нужных наборов предлагаю сделать регистр с фиксированным набором символов, чтобы осуществлять по ним поиск.
Перебираем символы в слове, ищем набор, в котором присутствует символ, формируем варианты слова с перебором символов.
А по реализации предлагаю сделать наборы похожих символов. Хранить в регистре или в справочнике с табчастью. Или хранить в строках наборы символов, потом в цикле перебирать. Для ускорения получения нужных наборов предлагаю сделать регистр с фиксированным набором символов, чтобы осуществлять по ним поиск.
Перебираем символы в слове, ищем набор, в котором присутствует символ, формируем варианты слова с перебором символов.