menü    videók      
Mit tanulnál?
Keresés:
videót kérek belépés regisztráció
 Termék tesztek, hírek, bemutatók  ✦  mobilok, okosórák, médialejátszók, stb.  ✦  kattints ide!
Hasonló kifejezések keresése PHP-val (2018.06.12)
Bejegyzések a témában:   php  
Hozzászólások
Keresések során rendszeresen előfordulnak véletlen elgépelések (és az is, hogy valaki nem jól tud egy szót, kifejezést), amelyek jellemzően nem eredményeznek találatot.

Az ilyen eseteken alapvetően két módon lehet segíteni:

1. a hasonló találatok megjelenítésével ("Erre gondolt?")

2. vagy esetleg a kereséseket adatbázisba mentve átnézhetők a sikertelen keresések és azokra alapozva felajánlható alternatíva

Értelemszerűen a második lehetőség jár több munkával , míg előbbi automatikussá tehető. Ezzel foglalkozunk most.

Ha rákeresünk arra, hogy "fuzzy search php", akkor bőven találhatunk kész, komplexebb megoldásokat, de önmagában a PHP is képes erre.

similar_text()

A similar_text megmondja, hogy két paraméterül kapott string mennyire hasonló. Ha nem teljes az egyezés, de pl. 80%-ban hasonló, akkor elképzelhető, hogy csak elgépelésről van szó.

A használata:

int similar_text ( string $first , string $second [, float &$percent ] )
Vagyis egyik string, másik string, opcionálisan egy változó, amibe belekerül a százalékban megadott hasonlóság. Egy számot eredményez, amely azt mondja meg, hogy mennyi egyező karaktert talált a két stringben. A két string felcserélése eltérő eredményt adhat!
$h = similar_text('telefon', 'telefn', $sz);
echo "hasonlóság: $h ($sz %)";

Eredménye:

hasonlóság: 6 (92.307692307692 %)

levenshtein()

Kiszámítja az úgynevezett Levenshtein távolságot két string között. Levenshtein távolság egy szám, amely azt fejezi ki, hogy mennyi karakter beszúrására, törlésére, cseréjére van szükség, hogy a két string megegyezzen. Egy számot ad eredményül, ami ha 0, akkor a két string megegyezik, ha -1, akkor az egyik string hosszabb, mint 255 karakter.

A használata:

int levenshtein ( string $str1 , string $str2 )
echo levenshtein ( "telefon", "telefoon" );

Eredménye: 1, mert az egyik string eggyel több karaktert tartalmaz.

A levenshtein() a multibyte karakterek (mint az UTF-8) esetén hibás értéket adhat:

echo levenshtein ( "körte", "korte" );

Eredménye: 2, pedig csak egynek kellene lennie.

Ha ez probléma, akkor célszerű egy olyan megoldást keresni, amely erre fel van készítve.

A levenshtein() -t felhasználva egyébként szavak halmazából ki lehet választani a leginkább hasonlót, ha egy keresés nem eredményezett találatot. Erre a php.net-en van egy kész példa, érdemes megnézni.