|
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; // Процент соответствия
КонецФункции
//--------------------------------------------------------------
|
|