W3docs

metaphone()

Articolo sulla funzione PHP metaphone(), che calcola la chiave metafona di una stringa per confronti fonetici approssimati.

La funzione PHP metaphone() calcola la chiave metafona di una stringa — un codice che rappresenta come la stringa suona in inglese piuttosto che come si scrive. Le parole pronunciate allo stesso modo producono la stessa chiave (o una molto simile), il che rende metaphone() utile per la corrispondenza approssimata: "Catherine" e "Katherine", oppure "Smith" e "Smyth", convergono tutte sulla stessa chiave.

Deprecata da PHP 8.4.0. metaphone() funziona ancora nel PHP attuale, ma è destinata alla rimozione. Per il nuovo codice, preferire una libreria fonetica mantenuta (oppure soundex() per un'alternativa integrata più semplice). La funzione è documentata qui perché molte codebase esistenti ne fanno ancora uso.

Questo articolo tratta la sintassi, l'argomento opzionale $phonemes, alcuni esempi pratici e i casi d'uso reali delle chiavi metafona.

Sintassi

metaphone(string $string, int $phonemes = 0): string|false
ParametroDescrizione
$stringLa stringa di input da codificare.
$phonemesOpzionale. Il numero massimo di caratteri (fonemi) da restituire. Con 0 (impostazione predefinita), viene restituita la chiave completa.

Il valore restituito è la chiave metafona come stringa maiuscola, oppure false in caso di errore.

Esempio di base

php— editable, runs on the server

Output:

HLWRLT

Si noti che i caratteri non alfabetici come ! e lo spazio vengono ignorati, e il risultato è composto esclusivamente da codici sonori consonantici e vocalici. La chiave non è pensata per essere leggibile da un essere umano — è un'impronta normalizzata della pronuncia.

Come la chiave codifica i suoni

Metaphone applica le regole di pronuncia dell'inglese, quindi l'output non è una traslitterazione uno a uno. Vale la pena conoscere alcune convenzioni:

  • La cifra 0 (zero) rappresenta il suono "th".
  • Le lettere mute e duplicate vengono eliminate, e alcune coppie di lettere si contraggono (ad esempio ph diventa F).
<?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
?>

Output:

0MPSN
SM0
FP

Limitare la lunghezza della chiave con $phonemes

Il secondo argomento limita il numero di caratteri che la chiave può contenere. È utile quando si vogliono confrontare solo i primi suoni di parole lunghe.

<?php
echo metaphone("Thompson"), "\n";    // full key
echo metaphone("Thompson", 4), "\n"; // first 4 phonemes only
echo metaphone("Wikipedia", 4), "\n";
?>

Output:

0MPSN
0MPS
WKPT

Abbinare parole che suonano allo stesso modo

Il vero valore di metaphone è raggruppare grafie diverse dello stesso suono. Confrontiamo due grafie dello stesso cognome:

<?php
$a = metaphone("Catherine");
$b = metaphone("Katherine");

echo $a, "\n";                       // K0RN
echo $b, "\n";                       // K0RN
echo $a === $b ? "Match\n" : "No\n"; // Match
?>

Output:

K0RN
K0RN
Match

Poiché entrambi i nomi condividono la stessa chiave metafona, un indice di ricerca basato su metaphone() restituirebbe l'uno quando l'utente digita l'altro — la base delle funzionalità "intendevi…?", della deduplicazione delle rubriche e della ricerca tollerante ai nomi.

Quando usarla (e cosa usare al suo posto)

Caso d'usoNote
Ricerca approssimata di nomi/paroleIndicizzare la chiave metafona accanto al valore originale, poi abbinare sulla chiave.
Ricerche tolleranti agli errori ortograficiIntercetta errori tipografici fonetici che la corrispondenza esatta non coglie.
Deduplicazione di recordRaggruppa le righe i cui nomi suonano allo stesso modo.

metaphone() modella solo la pronuncia inglese, quindi non è affidabile per altre lingue. Per la distanza da errori di battitura anziché per il suono, ricorrere a levenshtein() o similar_text(). Per un codice fonetico più semplice e non deprecato, soundex() è l'alternativa integrata.

metaphone() trasforma una parola in una chiave fonetica in modo che parole scritte diversamente ma pronunciate in modo simile corrispondano. Ricordare che la chiave codifica la pronuncia inglese (con 0 che rappresenta "th"), che l'argomento opzionale $phonemes limita la lunghezza della chiave, e che la funzione è deprecata a partire da PHP 8.4 — preferire soundex() o una libreria mantenuta per i nuovi progetti.

Pratica

Pratica
Qual è lo scopo della funzione metaphone() in PHP?
Qual è lo scopo della funzione metaphone() in PHP?
Was this page helpful?