(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)
levenshtein — İki dizge arasındaki Levenştayn mesafesini hesaplar
$dizge1
,$dizge2
,$yerleştirme_bedeli
= 1,$değiştirme_bedeli
= 1,$silme_bedeli
= 1
Levenştayn mesafesi, dizge1
dizgesini
dizge2
'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
,
dizge1
ve dizge2
'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).
yerleştirme_bedeli
,
değiştirme_bedeli
ve/veya
silme_bedeli
için 1
atanmışsa,
algoritma en ucuz dönüşümü seçmeye uyarlanır. Örneğin,
$yerleştirme_bedeli + $silme_bedeli < değiştirme_bedeli
ise,
hiçbir değiştirme yapılmaz, ama yerleştirme ve silme yapılır.
dizge1
Levenştayn mesafesi değerlendirilecek dizgelerden biri.
dizge2
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 iki dizge arasındaki Levenştayn mesafesi döner.
Sürüm: | Açıklama |
---|---|
8.0.0 | Bu sürümden önce, levenshtein() iki ya da beş bağımsız değişken ile çağrılabiliyordu. |
8.0.0 |
Bu sürümden önce, dizgelerden biri 255 karakterden uzunsa
levenshtein() -1 döndürürdü.
|
Örnek 1 - levenshtein() örneği
<?php
// girdi yanlış yazılmış olsun
$input = 'carrrot';
// bir sözcük dizisiyle karşılaştır
$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 hesapla
$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 eşleşme varsa döngüden çık
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ımla
$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