(PHP 4 >= 4.0.1, PHP 5, PHP 7)
levenshtein — İki dizge arasındaki Levenştayn mesafesini hesaplar
$d1
, string $d2
)$d1
, string $d2
, int $yerleştirme_bedeli
, int $değiştirme_bedeli
, int $silme_bedeli
)
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.
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.
Belirtilen diziler 255 karakterlik üst sınırdan uzunsa -1 değilse Levenştayn mesafesi döner.
Ö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