metaphone()
Dieser Artikel erklärt die PHP-Funktion metaphone(), die den Metaphone-Schlüssel eines Strings berechnet – nützlich für phonetische Suchen.
Die PHP-Funktion metaphone() berechnet den Metaphone-Schlüssel eines Strings — einen Code, der beschreibt, wie der String auf Englisch klingt, nicht wie er geschrieben wird. Wörter, die gleich ausgesprochen werden, ergeben denselben (oder einen sehr ähnlichen) Schlüssel. Dadurch ist metaphone() für unscharfe Treffer nützlich: "Catherine" und "Katherine" oder "Smith" und "Smyth" werden alle auf denselben Schlüssel abgebildet.
Veraltet seit PHP 8.4.0.
metaphone()funktioniert in aktuellen PHP-Versionen noch, ist aber für die Entfernung vorgesehen. Für neuen Code sollte man eine gepflegte phonetische Bibliothek bevorzugen (odersoundex()als einfachere eingebaute Alternative). Die Funktion ist hier dokumentiert, weil viele bestehende Codebasen noch auf sie angewiesen sind.
Dieser Artikel behandelt die Syntax, das optionale Argument $phonemes, einige Beispiele und den tatsächlichen Einsatzbereich von Metaphone-Schlüsseln.
Syntax
metaphone(string $string, int $phonemes = 0): string|false| Parameter | Beschreibung |
|---|---|
$string | Der zu kodierende Eingabe-String. |
$phonemes | Optional. Die maximale Anzahl der zurückgegebenen Zeichen (Phoneme). Bei 0 (Standardwert) wird der vollständige Schlüssel zurückgegeben. |
Der Rückgabewert ist der Metaphone-Schlüssel als Großbuchstaben-String oder false bei einem Fehler.
Einfaches Beispiel
Ausgabe:
HLWRLTNicht-Buchstaben wie ! und das Leerzeichen werden ignoriert, und das Ergebnis besteht ausschließlich aus Konsonanten- und Vokal-Lautcodes. Der Schlüssel ist nicht für Menschen lesbar gedacht — er ist ein normierter Fingerabdruck der Aussprache.
Wie der Schlüssel Laute kodiert
Metaphone wendet englische Ausspracheregeln an, sodass die Ausgabe keine Eins-zu-eins-Transliteration ist. Zwei Konventionen sind wissenswert:
- Die Ziffer
0(Null) steht für den „th"-Laut. - Stille und doppelte Buchstaben werden entfernt, und bestimmte Buchstabenpaare werden zusammengeführt (zum Beispiel wird
phzuF).
<?php
echo metaphone("Thompson"), "\n"; // 0MPSN — "Th" → 0, silent p kept by the rule
echo metaphone("Smith"), "\n"; // SM0 — trailing "th" → 0
echo metaphone("PHP"), "\n"; // FP — "ph" → F
?>Ausgabe:
0MPSN
SM0
FPSchlüssellänge mit $phonemes begrenzen
Das zweite Argument begrenzt die Anzahl der Zeichen im Schlüssel. Das ist praktisch, wenn man nur die ersten Laute langer Wörter vergleichen möchte.
<?php
echo metaphone("Thompson"), "\n"; // full key
echo metaphone("Thompson", 4), "\n"; // first 4 phonemes only
echo metaphone("Wikipedia", 4), "\n";
?>Ausgabe:
0MPSN
0MPS
WKPTGleich klingende Wörter abgleichen
Der eigentliche Nutzen von Metaphone liegt im Gruppieren unterschiedlicher Schreibweisen desselben Lauts. Vergleich zweier Schreibweisen desselben Nachnamens:
<?php
$a = metaphone("Catherine");
$b = metaphone("Katherine");
echo $a, "\n"; // K0RN
echo $b, "\n"; // K0RN
echo $a === $b ? "Match\n" : "No\n"; // Match
?>Ausgabe:
K0RN
K0RN
MatchDa beide Namen denselben Metaphone-Schlüssel teilen, würde ein auf metaphone() basierender Suchindex den einen zurückgeben, wenn der Nutzer den anderen eintippt — die Grundlage für „Meinten Sie …?"-Funktionen, das Deduplizieren von Kontaktlisten und tolerante Namenssuchen.
Wann es einsetzen (und was stattdessen nutzen)
| Anwendungsfall | Hinweise |
|---|---|
| Unscharfe Namen-/Wortsuche | Den Metaphone-Schlüssel neben dem Originalwert indizieren und dann über den Schlüssel suchen. |
| Rechtschreibtolerante Suchen | Erfasst phonetische Tippfehler, die exaktes Matching übersieht. |
| Datensätze deduplizieren | Zeilen gruppieren, deren Namen gleich klingen. |
metaphone() modelliert nur die englische Aussprache und ist daher für andere Sprachen unzuverlässig. Für Tippfehler-Distanzen statt Klang empfiehlt sich levenshtein() oder similar_text(). Für einen einfacheren, nicht veralteten phonetischen Code ist soundex() die eingebaute Alternative.
Zusammenfassung
metaphone() wandelt ein Wort in einen phonetischen Schlüssel um, sodass unterschiedlich geschriebene, aber ähnlich klingende Wörter übereinstimmen. Dabei ist zu beachten: Der Schlüssel kodiert die englische Aussprache (wobei 0 für „th" steht), das optionale Argument $phonemes kürzt die Schlüssellänge, und die Funktion ist seit PHP 8.4 veraltet — für neue Projekte sollte man soundex() oder eine gepflegte Bibliothek bevorzugen.