Имя: Пароль:
IT
 
Нечеткое сравнение строк
0 Вадимыч
 
08.02.08
12:44
Посоветуйте пожалуйста алгоритм нечёткого сравнения строк. Мне нужно сравнивать названия контрагентов, т.е. строки в среднем от 10 до 25 символов. Перевёл один хороший алгоритм в Delphi на 1С, но он работает ужасно долго! Где-то по 10-20 мин на одно сравнение!
Помогите пожалуйста!

//------------------------- Нечеткое сравнение --------------------
Функция Соответствие(с1, с2, А, Б)
   ГлобальнаяСумма = 0; Мах = 0;
   //~Цикел:            
   //Если Сред(А, с1, 1)=Сред(Б, с2, 1) Тогда  
   //    ГлобальнаяСумма = ГлобальнаяСумма + 1;
   //    Если (с1<СтрДлина(А)) И (с2<СтрДлина(Б)) Тогда
   //        с1 = с1 + 1;
   //        с2 = с2 + 1;
   //        Перейти ~Цикел;
   //    КонецЕсли;
   //КонецЕсли;
   Пока Сред(А, с1, 1)=Сред(Б, с2, 1) Цикл
       ГлобальнаяСумма = ГлобальнаяСумма + 1;
       Если (с1<СтрДлина(А)) И (с2<СтрДлина(Б)) Тогда
           с1 = с1 + 1;
           с2 = с2 + 1;
       Иначе
           Прервать;
       КонецЕсли
   КонецЦикла;
   Если (с1<СтрДлина(А)) И (с2<СтрДлина(Б)) Тогда
       Сумм = Соответствие(с1+1, с2+1, А, Б);
       Если (Мах<Сумм) Тогда Мах = Сумм; КонецЕсли;
   КонецЕсли;    
   Если с1<СтрДлина(А) Тогда
       Сумм = Соответствие(с1+1, с2, А, Б);
       Если (Мах<Сумм) Тогда Мах = Сумм; КонецЕсли;
   КонецЕсли;
   Если с2<СтрДлина(Б) Тогда
       Сумм = Соответствие(с1, с2+1, А, Б);
       Если (Мах<Сумм) Тогда Мах = Сумм; КонецЕсли;
   КонецЕсли;
   Возврат ГлобальнаяСумма + Мах;
КонецФункции

Функция НечеткоеСравнение(Строка1, Строка2)
   Возврат Соответствие(1, 1, Строка1, Строка2) * 2.0/(СтрДлина(Строка1) + СтрДлина(Строка2)) * 100; // Процент соответствия
КонецФункции
//--------------------------------------------------------------
1 Вадимыч
 
08.02.08
12:46
Ой, извините, забыл коменты убрать и тег код вставить!
2 Ursus maritimus
 
08.02.08
12:48
За перейти надо расстреливать без суда и следствия.
3 Ursus maritimus
 
08.02.08
12:49
если 8.1, то есть полнотекстовый поиск.
4 Андрюха
 
08.02.08
12:49
"Цикел" - готично
5 yukon
 
08.02.08
12:51
может не стоит изобретать велосипед?
попробуй, посмотри здесь
strmatch - Нечеткое сравнение и поиск строк
http://1c.proclub.ru/modules/mydownloads/personal.php?lid=2485&cid=92
и здесь
[P2P] "Удар По Бездуховности" v.1.0д
http://infostart.ru/projects/393/index.php?id=393&ref=174
6 Вадимыч
 
08.02.08
15:58
>>>strmatch
Спасибо! То что надо. Работает очень быстро!
7 Злопчинский
 
08.02.08
16:01
Автору strmatch - памятник при жизни!
офигенная вещь!
8 insider
 
08.02.08
16:22
кто код смотрел: обработка по пробелам слова вычленяет и потом по ним ищет? тогда это просто...
Независимо от того, куда вы едете — это в гору и против ветра!