W3docs

soundex()

Artigo sobre a função PHP soundex(), usada para calcular a chave Soundex de uma string, útil para comparar pronúncias e correspondência fonética.

A função PHP soundex() calcula a chave Soundex de uma string — um código curto que representa como a string soa em inglês, em vez de como é escrita. Duas palavras com grafias diferentes, mas pronunciadas de forma semelhante (como "Smith" e "Smyth"), produzem a mesma chave, o que torna o Soundex útil para correspondência fonética de nomes, sugestões de correção ortográfica e remoção de duplicatas em listas de contatos.

Esta página aborda a sintaxe de soundex(), o formato da chave retornada, como o algoritmo funciona e exemplos práticos — incluindo suas limitações e como se compara a funções relacionadas.

Sintaxe

soundex(string $string): string

Recebe um parâmetro:

  • $string — a string de entrada a ser codificada. Apenas os caracteres alfabéticos são considerados; dígitos, espaços e pontuação são ignorados.

Retorna a chave Soundex como uma string. Para entradas alfabéticas não vazias, a chave tem sempre 4 caracteres: uma letra maiúscula seguida de três dígitos (por exemplo, H464). Se a entrada não contiver letras, soundex() retorna uma string vazia.

Como a chave Soundex é construída

O algoritmo Soundex reduz uma palavra à sua primeira letra mais um código de três dígitos baseado nos sons consonantais restantes:

  1. Mantém a primeira letra da palavra.

  2. Mapeia as letras restantes para dígitos, agrupando consoantes de sons semelhantes:

    LetrasDígito
    b, f, p, v1
    c, g, j, k, q, s, x, z2
    d, t3
    l4
    m, n5
    r6
  3. As vogais a, e, i, o, u e as letras h, w, y são descartadas (não recebem dígito).

  4. Dígitos duplicados adjacentes são colapsados em um só.

  5. O resultado é preenchido com zeros (ou truncado) para exatamente quatro caracteres.

É por isso que soundex('Robert') e soundex('Rupert') produzem ambos R163 — as vogais diferentes são ignoradas.

Exemplo básico

php— editable, runs on the server

Aqui a string $string é codificada com soundex(). A saída é:

H464

O H é a primeira letra, e 464 codifica os sons consonantais l (4), r (6), l (4). O espaço e o limite de palavra são ignorados — o Soundex trata a entrada como uma sequência contínua de letras.

Comparando duas strings

O uso mais comum de soundex() é verificar se duas palavras soam igual, comparando suas chaves:

php— editable, runs on the server

Como Smith e Smyth ambos codificam para S530, suas chaves coincidem e a saída é:

The strings sound the same.

Correspondência de um nome com uma lista

Um padrão prático é sugerir candidatos "você quis dizer…" a partir de uma lista conhecida quando uma correspondência exata falha:

<?php
$names = ['Robert', 'Rupert', 'Rubin', 'Albert'];
$query = 'Ruppert';
$queryKey = soundex($query);

foreach ($names as $name) {
    if (soundex($name) === $queryKey) {
        echo "$name sounds like $query\n";
    }
}
?>

Tanto Robert quanto Rupert compartilham a chave R163 com Ruppert, portanto a saída é:

Robert sounds like Ruppert
Rupert sounds like Ruppert

Limitações

  • Centrado no inglês. O mapeamento de letras para dígitos é ajustado para a pronúncia em inglês, portanto funciona mal para nomes de outros idiomas.
  • A primeira letra deve coincidir. Como o Soundex sempre mantém a primeira letra, Kris (K620) e Chris (C620) não correspondem, mesmo que soem de forma idêntica.
  • Correspondência grosseira. Apenas os primeiros sons consonantais sobrevivem, portanto palavras longas muito diferentes podem colidir na mesma chave. Use-o como um filtro de primeira passagem, não como resposta definitiva.

Para um algoritmo fonético diferente que frequentemente funciona melhor para o inglês, veja metaphone(). Para medir o quão próximas duas strings são em vez de se soam igual, veja similar-text() e levenshtein().

Prática

Prática
Qual é a função do sistema Soundex em PHP?
Qual é a função do sistema Soundex em PHP?
Was this page helpful?