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: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors