Форум: "Основная";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];
ВнизЛюди! Не подскажите, есть ли такая функция которая выдает по типу Найти похожие ветки
← →
Maloi (2002-10-29 18:31) [0]Люди! Не подскажите, есть ли такая функция которая выдает по типу значение "похожести" двух строк? ну например если 100 (это для примера) это 100% похожесть, 50 - 50%-ная и так далее?
в люой вариации смысла "похожести". Главное, чтоб если точно похоже возвращало максимальное значение функции:-)
← →
Шурик Ш (2002-10-29 18:34) [1]Сам-то понял?
← →
Шурик Ш (2002-10-29 18:38) [2]Так пойдет?
function Likeness(Str1,Str2: string): Integer;
begin
if Str1 = Str2 then Likeness := 100
else Likeness := 0;
end;
← →
MBo (2002-10-29 18:45) [3]http://www.lmc-mediaagentur.de/dpool/tips/0040.htm
← →
Дремучий (2002-10-29 18:47) [4]Пробуй нейронные сети юзать
или архиваторные алгоритмы...
конкретней? - не скажу, не пробовал подобные вещи ваять
читай литературку...
:))
← →
Maloi (2002-10-29 18:47) [5]ты меня за идиота держишь чтоли?:-)
это то понятно, а вот если:
"чемпион"-исходное слов и с ним сравнивают слова "вася" и "чемпионат".
твоя "супер" функция:-) вернет для двух этих слов ноль, а ведь последнее мягко говоря более похоже на исходное слово.
← →
Дремучий (2002-10-29 18:54) [6]или генетические алгоритмы...
там тоже нечто подобно есть...
Самое простое - перебором всех комбинаций, но я так понимаю нужно красивое решение? Кстати тут, одна девчушка, с подобной задачкой заявилась... На работу устраивашься? Тестовое задание?
:))
> MBo © (29.10.02 18:45)
> http://www.lmc-mediaagentur.de/dpool/tips/0040.htm
Хеадер заинтересовал, код рассмешил...
:))
← →
MBo (2002-10-29 19:00) [7]>Дремучий
Задачу в какой-то мере же выполняет ;)
А если серьезно, то есть понятие "расстояние между строками", кажется, на algolist.manual.ru имеется информация
← →
Maloi (2002-10-29 19:02) [8]нет, не устраиваюсь на работу:-) просто нужно
← →
Дремучий (2002-10-29 19:47) [9]просто нужно? :))
это ты дяде на улице расскажешь
:)))
типа решаешь прикладную задачу,
даже не зная как к ней приступиться?
из какой предметной области?
и еще - лучше промолчать, чем соврать
:)
← →
Darts (2002-10-29 19:58) [10]Это регулярные выражения.
← →
()utLaw (2002-10-29 20:28) [11]Я случайно занимался этим вопросом. И решил его. Вот код, дающий только число:
var
s1,s2:string;
i,j,k,l,s,
eq,t:integer;
begin
readln(s1);
readln(s2);
i:=1;j:=1;eq:=0;t:=0;
while (i<=length(s1)) and(j<=length(s2)) do
begin
if s1[i]=s2[j] then
begin
i:=i+1;j:=j+1;eq:=eq+1;t:=t+1;
end
else
begin
k:=1;
while ((i+k<=length(s1))or(j+k<=length(s2))) and(s1[i]<>s2[j]) do
begin
if (i+k<=length(s1))and(s1[i+k]=s2[j]) then
begin
i:=i+k;t:=t+k;
continue;
end;
if (j+k<=length(s2))and(s1[i]=s2[j+k]) then
begin
j:=j+k;t:=t+k;
continue;
end;
for l:=1 to k do
begin
if (i+k<=length(s1))and(j+l<=length(s2))and
(s1[i+k]=s2[j+l]) then
begin
i:=i+k;j:=j+l;t:=t+k;
break;
end;
if (i+l<=length(s1))and(j+k<=length(s2))and
(s1[i+l]=s2[j+k]) then
begin
i:=i+l;j:=j+k;t:=t+k;
break;
end;
end;
k:=k+1;
end;
if s1[i]<>s2[j] then
begin
if length(s1)-i>length(s2)-j
then t:=t+length(s1)-i+1
else t:=t+length(s2)-j+1;
i:=length(s1)+1;
j:=length(s2)+1;
end;
end;
end;
if i<=length(s1) then t:=t+length(s1)-i+1;
if j<=length(s2) then t:=t+length(s2)-j+1;
if t=0 then begin t:=1;eq:=1;end;
writeln(eq/t*100:4:2);
end.
To be continued...
← →
()utLaw (2002-10-29 20:31) [12]А вот код, дающий ответ в виде двух строк, содержащих результат ставнения (там еще тесты вставлены...):
var
s1,s2,
r1,r2:string;
i,j,k,l,s,
eq,t:integer;
begin
r1:="";r2:="";
{ s1:="abcdefgh";{}
{ s2:="adefijgh"; {Deleting & Inserting}
{ s2:="adijgklh"; {Deleting, Inserting & Replacing}
{ s2:="adijkglmh"; {Cool Test! Replacing with different lengthed pieces!}
(* Full Test *)
{ s1:="abcdefghi"; s2:="adjklgmnho";{}
(* Full Test 2*)
{ s1:="abcdefgh"; s2:="adjklgmnho";{}
(* Full Test 3*)
{ s1:="abcdefghi"; s2:="adjklgmnh";{}
s1:="abcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghia"+
"bcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdefghiabcdef"+
"ghiabcdefghiabc";
s2:="adjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnha"+
"djklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklgmnhadjklg"+
"mnhadjklgmnhadj";{}
i:=1;j:=1;eq:=0;t:=0;
while (i<=length(s1)) and(j<=length(s2)) do
begin
if s1[i]=s2[j] then
begin
i:=i+1;j:=j+1;eq:=eq+1;t:=t+1;
r1:=r1+"=";r2:=r2+"=";
end
else
begin
k:=1;
while ((i+k<=length(s1))or(j+k<=length(s2))) and(s1[i]<>s2[j]) do
begin
if (i+k<=length(s1))and(s1[i+k]=s2[j]) then
begin
i:=i+k;t:=t+k;
for s:=1 to k do r1:=r1+"X";
continue;
end;
if (j+k<=length(s2))and(s1[i]=s2[j+k]) then
begin
j:=j+k;t:=t+k;
for s:=1 to k do r2:=r2+"I";
continue;
end;
for l:=1 to k do
begin
if (i+k<=length(s1))and(j+l<=length(s2))and
(s1[i+k]=s2[j+l]) then
begin
i:=i+k;j:=j+l;t:=t+k;
for s:=1 to k do r1:=r1+"R";
for s:=1 to l do r2:=r2+"R";
break;
end;
if (i+l<=length(s1))and(j+k<=length(s2))and
(s1[i+l]=s2[j+k]) then
begin
i:=i+l;j:=j+k;t:=t+k;
for s:=1 to l do r1:=r1+"R";
for s:=1 to k do r2:=r2+"R";
break;
end;
end;
k:=k+1;
end;
if s1[i]<>s2[j] then
begin
for s:=i to length(s1) do r1:=r1+"R";
for s:=j to length(s2) do r2:=r2+"R";
if length(s1)-i>length(s2)-j
then t:=t+length(s1)-i+1
else t:=t+length(s2)-j+1;
i:=length(s1)+1;
j:=length(s2)+1;
end;
end;
end;
if i<=length(s1) then
begin
for s:=i to length(s1) do r1:=r1+"X";
t:=t+length(s1)-i+1;
end;
if j<=length(s2) then
begin
for s:=j to length(s2) do r2:=r2+"I";
t:=t+length(s2)-j+1;
end;
if t=0 then begin t:=1;eq:=1;end;
writeln("Похожесть строк : ",eq/t*100:4:2,"%.");
writeln("Нажмите <Enter>");
readln;
end.
Напиши мне, понравилось ли... Плз...
← →
Юрий Зотов (2002-10-30 00:19) [13]Есть такой алгоритм Soundex. Он сравнивает строки по их "звуковому" образу. Например КОРОВА и КАРОВА для него - одинаковые строки (это, конечно, лишь самый простой пример).
Видел я в сети и русскоязычную реализацию этого алгоритма, но вот ссылку не запомнил. Если это то, что нужно, сделайте поиск строки Soundex, думаю, найдете.
← →
Maloi (2002-10-30 12:07) [14]спасибо большое! очень помогли!
Дремучий! а ты я вижу тут местный шутник чтоли?:-)
так лучше бы помог, а шутки лучше при себе оставь
← →
Alx2 (2002-10-30 12:34) [15]>Maloi (29.10.02 18:31)
На UBPFD готовое решение лежит.
http://delphibase.endimus.com/?action=viewfunc&topic=strmath&id=10289
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.009 c