Подскажите алгоритм сравнения строк на "похожесть" #266637


#0 by ado
Ссылочку какую-нибудь, или может у кого готовая функция завалялась. Плиииз.
#1 by MikleV
RegExp
#2 by quest
строки "строка" и "стРРРРоккаааа" - похожи ?
#3 by asady
Функция НайтиПохожиеОбъектыПоСловам(ИмяСправочника, текНаименование, текВладелец="", ВсеВарианты=Истина)    //ТочноеСоответствие    стрПоиска=СокрЛП(текНаименование);    //Сообщить("поиск по наименованию :"+стрПоиска+" в спр."+ИмяСправочника);    Запрос = Новый Запрос;    Если СокрЛП(текВладелец)<>"" Тогда        ТекстЗапроса="ВЫБРАТЬ                 |    Спр.Код,                 |    Спр.Ссылка,                 |    Спр.Владелец                 |ИЗ                 |    Справочник."+ИмяСправочника+" КАК Спр                 |ГДЕ                 |    Спр.Наименование ПОДОБНО &стрПоиска                 |    И Спр.Владелец=&текВладелец                 |  УПОРЯДОЧИТЬ ПО Спр.Код";        Запрос.УстановитьПараметр("текВладелец",текВладелец);                  Иначе        ТекстЗапроса="ВЫБРАТЬ                 |    Спр.Код,                 |    Спр.Ссылка                 |ИЗ                 |    Справочник."+ИмяСправочника+" КАК Спр                 |ГДЕ                 |    Спр.Наименование ПОДОБНО &стрПоиска                 |  УПОРЯДОЧИТЬ ПО Спр.Код";    КонецЕсли;                    Запрос.Текст = ТекстЗапроса;                          Запрос.УстановитьПараметр("стрПоиска","%"+стрПоиска+"%");                  Рез=Запрос.Выполнить;    Результат=Неопределено;    Если НЕ Рез.Пустой Тогда        Результат=Рез.Выгрузить;    Иначе        Если ВсеВарианты Тогда            СписокСлов=ПолучитьСписокСлов(стрПоиска);            колслов=СписокСлов.Количество;            если колслов>1 Тогда                стрПоиска=стрЗаменить(стрПоиска,СписокСлов[колслов-1].Значение,"");                ОбработкаПрерыванияПользователя;                Результат=НайтиПохожиеОбъектыПоСловам(ИмяСправочника,стрПоиска,текВладелец);            КонецЕсли;        КонецЕсли;        КонецЕсли;            возврат Результат;     КонецФункции Функция ПолучитьСписокСлов(стрПоиска) перем Буфер;    СЗ=Новый СписокЗначений;    //Сообщить("делим на слова :"+стрПоиска);    Буфер=СтрЗаменить(стрПоиска,Символ," ");    Буфер=СтрЗаменить(стрПоиска,Символ," ");        Буфер=СтрЗаменить(Буфер,Символ," "); //убираем паразитов    Буфер=СтрЗаменить(Буфер,"."," ");    Буфер=СтрЗаменить(Буфер,","," ");    Буфер=СтрЗаменить(Буфер,"_"," ");    Буфер=СтрЗаменить(Буфер,"("," ");    Буфер=СтрЗаменить(Буфер,")"," ");    Буфер=СтрЗаменить(Буфер,"ООО","");    Буфер=СтрЗаменить(Буфер,"OOO","");    Буфер=СтрЗаменить(Буфер,"ЗАО","");    Буфер=СтрЗаменить(Буфер,"ОАО","");    Буфер=СтрЗаменить(Буфер,"OAO","");    Буфер=СокрЛП(Буфер);    //Сообщить(" почистили :"+Буфер);    Буфер=СтрЗаменить(Буфер,Символ,Символы.ПС);    Буфер=СтрЗаменить(Буфер,Символы.Таб,Символы.ПС);    Для Счетчик = 1 По СтрЧислоСтрок(Буфер) Цикл        ТекСтрока = СтрПолучитьСтроку(Буфер, Счетчик);        Если СтрДлина(ТекСтрока)>2 Тогда            СЗ.Добавить(ТекСтрока);            //Сообщить(ТекСтрока);        Конецесли;        КонецЦикла;    возврат СЗ; КонецФункции
#4 by Скользящий
Поищи по форуму на слова "нечёткое сравнение строк" и на проклабе вроде готовое решение валяется.
#5 by КонецЦикла
strmatch.dll
#6 by ado
Спасибо всем, нашел примерчики
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

Похожие вопросы 1С

В этой группе 1С