PHP 2 Stings vergleichen und Übereinstimmung in Prozent

...komplette Frage anzeigen

3 Antworten

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

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.

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.

Was möchtest Du wissen?