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?

meantJag 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... ' . $closest . '?';

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
Bild 9

Din text verkar finnas – similar_text

meant2Den 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
Bild 10

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.

4 Replies to “Jämför texter i PHP”

Din kommentar eller åsikt