Frage von killer7879, 11

PHP 2 Stings vergleichen und Übereinstimmung in Prozent

Suche ein PHP Script teil womit ich 2 Strings vergleichen kann. Sprich:

$str1 = 'Hallo Welt!';
$str2 = 'hallo welt!';

Nun soll er mir errechnen zu wie viel Prozent $str1 und $str2 gleich sind. Da macht die Website nicht mit ;) Habe vor dann auzugeben: Die Namen "Andreas" und "Andrea" sind zu irgendwas% gleich. Hab schon gegoogelt aber keins Funktioniert richtig

Danke im Vorraus ;)

Antwort
von FaronWeissAlles, 11

Was du suchst ist eine PHP-Implementierung des Levenshtein-Algorithmus.

Die Levenshtein-Distanz ist im Prinzip die Anzahl der Aktionen die nötig sind um aus einem String A den String B zu machen unter Verwendung der Operationen "Füge ein Buchstaben hinzu", "Lösche einen Buchstaben" und "Ersetze einen Buchstaben mit einem anderen". "Andreas" und "Andrea" hätte z.B. die Distanz 1 (1 Buchstabe muss hinzugefügt bzw. gelöscht werden). Ein Buchstabendreher die Distanz 2 (2 Ersetzungen nötig).

PHP bringt das bereits von Haus aus mit: die levenshtein()-Funktion. Wenn du unbedingt eine Prozentangabe willst kannst du die Distanz durch die obere Schranke der Funktion teilen (dann bekommst du die Verschiedenheit in Prozent) und davon das Komplement berechnen (dann bekommst du die Gleichheit in Prozent):

$percent = 1.0 - ( levenshtein($a,$b) / max(strlen($a),strlen($b)) );

PHP hat auch noch eine andere eingebaute Funktion: similar_text(). Die zählt die übereinstimmenden Buchstaben zweier Strings. Wenn du als dritten Parameter der Funktion eine Variable angibst schreibt er dir den Prozentwert der Übereinstimmung direkt rein:

similar_text($a,$b,$percent);

Zum nachlesen: http://php.net/manual/de/function.levenshtein.php

Die Levenshtein-Funktion berücksichtigt in der PHP-Implementierung Groß- und Kleinschreibung. Wenn das nicht gewünscht ist musst du beide Eingabestrings vorher durch die strtolower()-Funktion schicken

Antwort
von OddN3ss, 6

Sowas spezielles musst du schon selbst scripten, aber den ersten Schritt hast du schon getan.

Du weist, was dein "Script" tun soll. Jetzt musst du es nur scripten und das sollte nicht sonderlich kompliziert werden.

Antwort
von goosejan, 5

Ergänzend zu der Antwort von FaronWeissAlles gibt es hier eine fertige Klasse, die mit Hilfe dem von ihm angesprochenen Levensthein Algorithmus einen Prozentwert für die Gleichheit oder Ungleichheit von zwei Strings ausspuckt:

https://github.com/akalongman/php-string-compare

Da es nur eine Klasse ist, könntest Du auch einfach nur die Funktionen übernehmen, die Du brauchst.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten