Jämför texter i PHP
Jag skrev tidigare att jag tänkte byta inriktning på bloggen. Här kommer första posten inom denna inriktning, jämför text i PHP.
Joacim har tidigare skrivit “Menar du…?“, här förklarar han två tekniker som används för att räkna ut vad man egentligen menar. Den första är Levenshtein och den andra är N-Grams. Jag kommer i denna post gå igenom hur man använder Levenshtein samt en funktion som heter similar_text.
Levenshtein – Menade du?
Jag tänkte i denna post gå igenom hur man använder Levenshtein för att räkna ut vad man egentligen menar. Metoden i PHP heter Levenshtein och tar emot två parametrar i form av två strängar man vill jämföra.
$searchPhrase = 'vovlo'; $words = array('volvo', 'bmw', 'saab', 'skoda', 'chrysler', 'opel', 'mazda'); $distance = -1; foreach ($words as $word) { $levenshtein = levenshtein($searchPhrase, $word); if($levenshtein == 0) { $closest = $word; $distance = 0; break; } if($levenshtein <= $distance || $distance < 0) { $closest = $word; $distance = $levenshtein; } } if($distance === 0) echo 'Hittade en korrekt träff, ' . $closest; else echo 'Menade du... <em>' . $closest . '</em>?';
Vi börjar exemplet med att definiera det ord vi vill söka efter, i detta fall “vovlo”. Nästa steg är att skapa en array som innehåller de ord som vi vill matcha emot. Därefter loopar vi igenom alla ord i arrayen. I loopen använder vi Levenshtein-funktionen för att räkna ut distansen mellan de två orden. Till sist så skriver vi ut det närmsta ordet eller om det var en direkt träff.
Resultat Levenshtein
![]()
Din text verkar finnas – similar_text
Den andra funktionen är similar_text. Likt Levenshtein beräknar den likheten mellan två texter. I detta exemplet ska vi beräkna om en text verkar vara en dubblett.
$string1 = "Jag heter Andreas Eriksson och jobbar på Utomic och bloggar på baronen.org" $string2 = "Jag är Andreas Eriksson och arbetar på Utomic och skriver på baronen" echo similar_text($string1, $string2);
Detta exempel kommer skriva ut ’57′, det är alltså hur många bokstäver som stämmer överens i de båda strängarna. Det hade varit bättre om vi kunde få ut likheten i procent. Detta gör man genom att skicka med en tredje parameter som sedan får värdet i procent.
$string1 = "Jag heter Andreas Eriksson och jobbar på Utomic och bloggar på baronen.org" $string2 = "Jag är Andreas Eriksson och arbetar på Utomic och skriver på baronen" similar_text($string1, $string2, $p); echo round($p,1). "%"
I och med att vi skickar med $p så kommer $p innehålla likheten mellan de två strängarna i procent. Innan vi skriver ut resultatet använder vi funktionen round som avrundar till en decimal.
Denna teknik kan man till exempel använda för att kontrollera om en text är en dubblett.
Resultat Similar_text
![]()
Här har du två olika metoder för att jämföra texter i PHP. Du kan säkert hitta fler användningsområden än de två jag har gått igenom i denna post.












Jämför texter i PHP http://bit.ly/ASs6s
This comment was originally posted on Twitter
Ny post på baronen.org – Jämför texter i PHP http://bit.ly/ASs6s
This comment was originally posted on Twitter
Nice Nice, detta kommer nog att bli användbart! =)
Verkligen passande av dig då jag fick nytta av inlägget idag. Stort tack.
Det va så lite så. Alltid trevligt när någon har nytta av det man skriver
[...] Jämför texter i PHP – I denna post förklarar jag hur man använder funktionerna similar_text och Levenshtein för att jämföra texter och till exempel bygga “menade du”. [...]