levenshtein

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

levenshteinİki dizge arasındaki Levenştayn mesafesini hesaplar

Açıklama

levenshtein ( string $d1 , string $d2 ) : int
levenshtein ( string $d1 , string $d2 , int $yerleştirme_bedeli , int $değiştirme_bedeli , int $silme_bedeli ) : int

Levenştayn mesafesi, d1 dizgesini d2'ye dönüştürmek için silinecek, yerleştirilecek veya değiştirilecek karakterlerin asgarisini tanımlar. Algoritmanın hesaplama karmaşıklığı, n ve m, d1 ve d2'nin uzunluğu olmak üzere O(m*n)'dir (Hesaplama karmaşıklığı O(max(n,m)**3) olan similar_text() işlevine göre daha iyi olsa da hala pahalıdır).

İşlevin en basit kullanımında, işlev sadece iki değiştirge alır ve d1 dizgesini d2'ye dönüştürmek için silinecek, yerleştirilecek veya değiştirilecek karakterlerin sayısını hesaplar.

İşlevin diğer bir kullanım türünde, işlev, yerleştirme, değiştirme ve silme işlemlerinin maliyetini tanımlayan üç değiştirge daha alır. Bu daha genel ve daha uyarlanabilir bir kullanım olsa da o kadar verimli değildir.

Değiştirgeler

d1

Levenştayn mesafesi değerlendirilecek dizgelerden biri.

d2

Levenştayn mesafesi değerlendirilecek dizgelerden biri.

yerleştirme_bedeli

Yerleştirme maliyetini tanımlar.

değiştirme_bedeli

Değiştirme maliyetini tanımlar.

silme_bedeli

Silme maliyetini tanımlar.

Dönen Değerler

Belirtilen diziler 255 karakterlik üst sınırdan uzunsa -1 değilse Levenştayn mesafesi döner.

Örnekler

Örnek 1 - levenshtein() örneği

<?php
// girdi yanlış yazılmış olsun
$input 'carrrot';

// bir sözcük dizisiyle karşılaştıralım
$words  = array('apple','pineapple','banana','orange',
                
'radish','carrot','pea','bean','potato');

// en kısa mesafenin bulunamaması durumu
$shortest = -1;

// En kısa mesafeyi bulmak için döngü
foreach ($words as $word) {

    
// girdi ile sözcük arasındaki mesafeyi hesaplatalım
    
$lev levenshtein($input$word);

    
// Bir eşleşme var mı bakalım
    
if ($lev == 0) {

        
// en yakın sözcük bu olacak (tam eşleşme)
        
$closest $word;
        
$shortest 0;

        
// Tam bir eşleşme bulduğumuza göre döngüden çıkalım
        
break;
    }

    
// Eğer bu mesafe bir öncekinden kısaysa
    // veya en kısa mesafe henüz bulunamadıysa
    
if ($lev <= $shortest || $shortest 0) {
        
// en yakın eşleşmeyi ve en kısa mesafeyi tanımlayalım
        
$closest  $word;
        
$shortest $lev;
    }
}

echo 
"Girdi: $input\n";
if (
$shortest == 0) {
    echo 
"Tam eşleşme bulundu: $closest\n";
} else {
    echo 
"Doğrusu bu olabilir mi?: $closest\n";
}

?>

Yukarıdaki örneğin çıktısı:

Girdi: carrrot
Doğrusu bu olabilir mi?: carrot

Ayrıca Bakınız

  • soundex() - Bir dizgenin sestek anahtarını hesaplar
  • similar_text() - İki dizge arasındaki benzerliği hesaplar
  • metaphone() - Bir dizgenin metafon anahtarını hesaplar