Start · Sprachen · PHP · Referenz · metaphone

metaphone

Funktion

Berechnet den Metaphone-Schlüssel eines Strings zur phonetischen Ähnlichkeitssuche englischsprachiger Wörter.

seit PHP 4.0.0 Kategorie: string

Signatur

metaphone(string $string, int $max_phonemes = 0): string|false

Beschreibung

metaphone() erzeugt einen phonetischen Schlüssel für einen englischen String nach dem Metaphone-Algorithmus. Zwei Wörter, die gleich oder ähnlich klingen, erhalten denselben oder einen ähnlichen Schlüssel – unabhängig von ihrer genauen Schreibweise. Das macht die Funktion ideal für Ähnlichkeitssuchen, Tippfehler-Korrekturen oder die Suche nach Namen in Datenbanken.

Im Gegensatz zu soundex(), der immer genau 4 Zeichen zurückgibt, erzeugt Metaphone Schlüssel variabler Länge, die den tatsächlichen Klang eines Wortes präziser abbilden. Die Länge kann optional über den Parameter max_phonemes begrenzt werden.

Der Algorithmus ist auf englische Phonetik ausgelegt und liefert für deutsche oder andere nicht-englische Wörter nur bedingt sinnvolle Ergebnisse. Für deutsche Namen oder Texte kann soundex() oder eine spezialisierte Bibliothek die bessere Wahl sein.

Typische Anwendungsfälle sind Personensuchen in Adressbüchern, Suchen in Produktkatalogen oder allgemein überall dort, wo Nutzer möglicherweise falsch geschriebene, aber phonetisch korrekte Eingaben machen.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der Eingabe-String, für den der Metaphone-Schlüssel berechnet werden soll. Sollte ein englisches Wort oder einen englischen Namen enthalten, um sinnvolle Ergebnisse zu liefern.
$max_phonemes int 0 Maximale Anzahl an Phonemen (Zeichen) im zurückgegebenen Schlüssel. Der Wert 0 (Standard) bedeutet keine Begrenzung – der vollständige Schlüssel wird zurückgegeben.

Rückgabewert

Typ
string|false
Beschreibung
Gibt den Metaphone-Schlüssel als String zurück. Bei einem Fehler (z. B. leerem String oder ungültigem Eingabewert) wird false zurückgegeben.

Beispiele

Einfacher Vergleich phonetisch ähnlicher Wörter

<?php
$word1 = 'Smith';
$word2 = 'Smyth';
$word3 = 'Smythe';

echo metaphone($word1) . PHP_EOL; // SM0
echo metaphone($word2) . PHP_EOL; // SM0
echo metaphone($word3) . PHP_EOL; // SM0

if (metaphone($word1) === metaphone($word2)) {
    echo "'$word1' und '$word2' klingen gleich." . PHP_EOL;
}
SM0 SM0 SM0 'Smith' und 'Smyth' klingen gleich.

Namenssuche in einer Datenbank mit Metaphone-Schlüsseln

<?php
// Simulierte Datenbank mit Namen
$names = ['Thompson', 'Thomson', 'Tomson', 'Johnson', 'Jonson'];

$searchName  = 'Thomson';
$searchKey   = metaphone($searchName);

echo "Suche nach Klang-Ähnlichkeiten zu '$searchName' (Schlüssel: $searchKey):" . PHP_EOL;

foreach ($names as $name) {
    $key = metaphone($name);
    if ($key === $searchKey) {
        echo "  Treffer: $name (Schlüssel: $key)" . PHP_EOL;
    }
}
Suche nach Klang-Ähnlichkeiten zu 'Thomson' (Schlüssel: TMSN): Treffer: Thompson (Schlüssel: TMSN) Treffer: Thomson (Schlüssel: TMSN) Treffer: Tomson (Schlüssel: TMSN)

Nutzung von max_phonemes zur Schlüsselbegrenzung

<?php
$word = 'Philadelphia';

echo metaphone($word)        . PHP_EOL; // Vollständiger Schlüssel
echo metaphone($word, 4)     . PHP_EOL; // Begrenzt auf 4 Phoneme
echo metaphone($word, 2)     . PHP_EOL; // Begrenzt auf 2 Phoneme
FLXLF FLXL FL

// Wichtig · Fallstricke

Sprachliche Einschränkung: Der Metaphone-Algorithmus ist für englische Wörter und Namen konzipiert. Für deutsche oder andere europäische Sprachen liefert er oft ungenaue oder unbrauchbare Schlüssel. In solchen Fällen sollte man auf soundex() ausweichen oder spezialisierte Bibliotheken (z. B. Kölner Phonetik für Deutsch) verwenden.

Vergleich mit soundex(): soundex() gibt immer genau einen vierstelligen Schlüssel zurück und ist etwas gröber. metaphone() liefert präzisere Ergebnisse bei variabler Schlüssellänge und eignet sich daher besser für exaktere phonetische Vergleiche.

Bei sehr kurzen oder leeren Strings kann die Funktion false zurückgeben – der Rückgabewert sollte daher mit === geprüft werden, um false nicht mit einem leeren String zu verwechseln.