Loading:


levenshtein()

int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )

 

Oblicza relatywny odległości między dwoma ciągami.

Odległość Levenshtein definiowana jest jako minimalna liczba znaków, którą trzeba zastąpić, wstawić lub usunąć, aby przekształcić $str1 do $str2. Złożoność tego algorytmu jest O (m * n), gdzie n i m są długości $str1 i $str2 (dość dobry w porównaniu do similar_text (), która jest O (max (n, m) ** 3), ale nadal bardzo kosztowne).



W najprostszej postaci funkcja przyjmować będzie tylko dwa ciągi jako parametry i będzie po prostu obliczyć liczbę, aby wstawić, usunąć i zastąpi czynności potrzebne do przekształcenia $str1 do $str2.



Drugi wariant będzie miał trzy dodatkowe parametry, które określają koszt wstawiania, usunięcia i zastąpięnia operacji. Jest to bardziej ogólne oraz adaptacyjny wariant niż jeden, ale nie tak skuteczny.

 

Kompatybilność: PHP4, PHP5.



Napisz Artyku³

Listing

<?php
// słowo źle przeliterowane
$input = 'carrrot';

// array do sprawdzania poprawności
$words  = array('apple','pineapple','banana','orange',
                'radish','carrot','pea','bean','potato');

// brak najkrótszej odległości
$shortest = -1;

// pętla do arraya aby sprawdzić poprawność i porównać
foreach ($words as $word) {

    // liczymy dystans między 1 a 2 stringiem,
    $lev = levenshtein($input, $word);

    // zacieśniamy wyszukiwanie
    if ($lev == 0) {

        // najbliższe słowo jest to:
        $closest = $word;
        $shortest = 0;

        // jeśli znaleźliśmy wynik to zamykamy pętlę
        break;
    }

    // jeśli dystans jest mniejszy niż znaleziony najmniejszy
    // dystans, lub jesli następnego najmniejszego słowa nie znaleziono
    if ($lev <= $shortest || $shortest < 0) {
        // ustaw najbliższe wyniki i najmniejsze dustanse
        $closest  = $word;
        $shortest = $lev;
    }
}

echo "Input word: $input\n";
if ($shortest == 0) {
    echo "Exact match found: $closest\n";
} else {
    echo "Did you mean: $closest?\n";
}

?>

//zwróci:

Input word: carrrot
Did you mean: carrot?




Dodano przez: divix
Ranga: Administrator serwisu Punktów: 38473
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2021 v.1.5 | design: diviXdesign & rainbowcolors