soundex / metaphone în PHP

Calculează o cheie fonetică: cuvintele care se pronunță asemănător (în engleză) primesc aceeași cheie.

Sintaxă
soundex(string $string): string

Ce face soundex / metaphone

soundex returnează un cod de 4 caractere (o literă și trei cifre), iar metaphone un cod format din litere, de lungime variabilă. Cuvintele care sună la fel au de obicei același cod, chiar dacă sunt scrise diferit.

Sunt folosite pentru căutări tolerante la greșeli de scriere, de exemplu în liste de nume. Regulile sunt făcute pentru pronunția engleză, deci pentru limba română rezultatele sunt doar aproximative. metaphone are un al doilea parametru, $max_phonemes, care limitează lungimea codului.

Parametri

Parametru Descriere
$string Cuvântul analizat.
$max_phonemes Doar la metaphone, opțional: lungimea maximă a codului. 0 înseamnă fără limită.

Ce returnează

Codul fonetic, ca text.

Exemple

Exemplul 1: Nume scrise diferit, același cod

<?php
foreach (["Popescu", "Popesku", "Popa"] as $nume) {
    echo "$nume: soundex " . soundex($nume) . ", metaphone " . metaphone($nume) . "\n";
}

Rezultat

Popescu: soundex P120, metaphone PPSK
Popesku: soundex P120, metaphone PPSK
Popa: soundex P100, metaphone PP

Exemplul 2: Căutare tolerantă la greșeli

<?php
$clienti = ["Ionescu", "Ionesku", "Ionita", "Marinescu"];
$cautat = "Ionescu";

foreach ($clienti as $nume) {
    if (metaphone($nume) === metaphone($cautat)) {
        echo "Posibilă potrivire: $nume\n";
    }
}

Rezultat

Posibilă potrivire: Ionescu
Posibilă potrivire: Ionesku

Greșeli frecvente

  • Te aștepți ca diacriticele să fie înțelese. Funcțiile ignoră caracterele care nu sunt litere englezești: elimină întâi diacriticele cu strtr.

Comenzi înrudite

  • levenshtein: Calculează câte modificări de caractere sunt necesare ca un text să devină altul (distanța Levenshtein).
  • similar_text: Calculează cât de asemănătoare sunt două texte, ca număr de caractere comune și ca procent.