Levenshtein+
Dodano: Poniedziałek, 15 stycznia 2007, godzina 16:08:20Kategoria: Inne
Panel boczny: schowaj / pokaż
Odsłony: 66
Osoby w temacie będą wiedziały o co chodzi. ;)
Potrzebne będzie: tablica (kwadratowa o rozmiarze od 0 do maksymalnej długości
wzorca/słowa jakie zamierzacie porównywać). Pierwszy wiersz i kolumnę musicie
wypełnić kolejno liczbami od 1 do długości wzorca/słowa. W podanym poniżej
przykładzie n to długość wzorca, m długość słowa. Wartość w komórce [m,n]
tablicy jest naszą szukaną - jeżeli większa lub mniejsza od 2, to oba wyrazy są
podobne! Funkcja min jest wbudowana w Pascala - zwraca mniejszą wartość z dwóch
podanych. Nie zapomnijcie przed każdym użyciu funkcji wyzerować tablicę!
FUNCTION levenstein(wzor,slowo : wyraz):INTEGER;
VAR i,j,n,m : INTEGER; {zmienne pomocnicze}
BEGIN
n:=LENGTH(wzor);
m:=LENGTH(slowo);
for i:=0 TO n DO odleglosc[i,0]:=i;
for j:=0 TO m DO odleglosc[0,j]:=j;
FOR i:=1 TO n DO
BEGIN
FOR j:=1 TO m DO BEGIN
IF(slowo[j]=wzor[i]) THEN odleglosc[i,j]:=odleglosc[i-1,j-1] ELSE
IF(slowo[j-1]=wzor[i]) AND (slowo[j]=wzor[i-1]) THEN odleglosc[i,j]:=odleglosc[i-2,j-2]+1
ELSE
odleglosc[i,j]:=min(odleglosc[i-1,j-1]+1,min(odleglosc[i,j-1]+1,odleglosc[i-1,j]+1));
END;
END;
levenstein:=t[n,m];
END; { levenstein }
PS. Tylko nie kopiować słowo w słowo! Więcej
tutaj i
tutaj.
PS2. Podziękowania dla Błażeja za rozszerzenia algorytmu o czeski błąd (dodanie
jednego warunku).

» komentarzy: 4 «
Dodany: Wtorek, 16 stycznia 2007 o godzinie: 19:34:51
mam pytanie bo nie dziala mi to i wyskakuje przy kompilacji(Argument to LENGTH must be of type varying, char, or string, not array) tablice zadeklarowalem array(0..20,0..20) of integer i nie wiem co z tym zrobic :/
Dodany: Środa, 17 stycznia 2007 o godzinie: 17:33:35
hmm nie odpisales a mowiles ze odpisales :P albo ja tego nie widze no nie wiem bo dalej mi to nie kompiluje sie cos z tymi deklaracjami mam chyba zle ale nie wiem gdzie
Dodany: Środa, 17 stycznia 2007 o godzinie: 18:53:55
O kurcze… zapomnialem zatwierdzic komentarza i lezal w spamie :P Chodzi o deklaracje w funkcji- wzor,slowo : wyraz
wyraz to musi byc jakis zadeklarowany wczesniej typ! U mnie to jest tak:
TYPE
wyraz : VARAING [25] OF CHAR
Dodany: Sobota, 20 stycznia 2007 o godzinie: 01:47:35
sorry ze tak cie mecze ale mam problem z tym programem bo nie wiem jak wczytac te wyrazy do tej tablicy kwadratowej tzn jak to wczytywac z tego pliku zeby to potem porownywac z wzorcem ktory tez gdzies trzeba wczytac tylko nie wiem gdzie myslalem o tym algorytmie z wykladow ‘wczytaj wyraz” ale jak to zrobic na ta tablice kwadratowa no nie mam pojecia
» dodaj komentarz «