A formação mais procurada no Mundo.

Algoritmo fonético para o português brasileiro em diversas linguagens de programação

algoritmo Algoritmo fonético para o português brasileiro em diversas linguagens de programação
foto_ramos Algoritmo fonético para o português brasileiro em diversas linguagens de programação

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.
foto_ramos Algoritmo fonético para o português brasileiro em diversas linguagens de programação

Últimos posts por Ramos de Souza Janones (exibir todos)

Este artigo é apenas uma exploração de uso de recursos fonéticos de forma geral para as mais diversas linguagens de programação. Deixe sua sugestão dos comentários.

Para facilitar a busca de informações comumente grafadas erradas, usamos algoritmos fonéticos. Um recurso que é extremamente útil mas que costuma ser negligenciado, especialmente fora da língua inglesa onde existem alguns algoritmos conhecidos como os citados na Wikipedia(en), particularmente o Soundex disponível em diversos DBs e linguagens.

Temos particularidades na nossa língua que inviabilizam o uso de algoritmos de outras línguas. Na verdade é até mais regionalizado. Um algoritmo que funciona para o Brasil, não funciona para Portugal e talvez para outros países lusófonos. Tenho até dúvidas se precisaria de especializações para o cearensegaúcho ou mesmo para o piracicabano e adjacências (de centenas de quilômetros 🙂 ), só para citar alguns.

  • Existe alguma fonte oficial, um estudo conclusivo de como deveria ser o nosso algoritmo fonético?
  • Baseado nesses estudos ou por experiência, como seria esse algoritmo? Podemos aproveitar alguma variante do SoundexMetaphone ou outro algoritmo consagrado da língua inglesa, só trocando os fonemas?
  • Podemos ou devemos usar (opcionalmente) fonemas estrangeiros comuns também, já que usamos nomes estrangeiros?
  • Estou interessado no algoritmo em si, portanto, como desenvolvê-lo em detalhes (não basta linhas gerais que já tem informação suficiente), um pseudo-código ou código real em alguma linguagem seria útil mas não funadamental.

Já que posso portar código de quase qualquer linguagem mainstream, e de fato eu vou (e outros poderão) usar em algumas linguagens diferentes, não me importa se está em C, C++, C#, Java, Javascript, PHP, Perl, Python, Ruby, Lua, Delphi, Go, D, Scala, F#, ou variantes de BASIC, xBase (Clipper, Harbour, FoxPro), SQL, etc. ou até COBOL :). Use o que já possui ou sinta-se mais confortável.

Curso de PHP ERP com NFe.

Note que o melhor algoritmo é o que vale, não a implementação, por isso não me importa a linguagem. O mesmo algoritmo em linguagem diferente será considerado duplicado.

Algumas referências que eu conheço (algumas são bem ruins):

A ideia por trás do “Metaphone Pt-BR” é justamente a história do sucesso e do uso de algoritmos como o soundex durante os primeiros censos americanos e a melhoria da ideia, no caso, com o surgimento do metaphone.

O nicho desse algoritmo é bem específico. Não se trata de uma representação fonética acurado, seguindo o IPA, mas simplificações das palavras baseado no “soa como …”. O uso, tal como o soundex, foi principalmente no cruzamento de dados textuais e identificações de nomes duplicados grafados incorretamente. A vantagem dele é de conseguir reduzir o esforço computacional necessário para se encontrar uma palavra semelhante a outra usando algoritmos como similar_text() (no PHP), levenshtein, dentre outros.

Como o Metaphone poderia ser útil nesse caso? Algoritmos como similar_text, levenshtein e outros devolvem um índice, normalmente entre 0 e 1, do grau de proximidade entre duas strings, sendo 0 igual a nenhuma semelhança e 1 a semelhança total.

Imagine então para cruzar um banco de dados de milhares de nomes de ruas, cada qual com uma média entre três a quatro palavras, com um nome de rua com mesmo tamanho médio, oriundo de outro banco de dados, que pode ter sido grafado erradamente, ou abreviado, enfim, não exatamente igual ao que você possui, seria necessário verificar a semelhança entre cada palavra e tirar uma média para a rua. Considerando que esses algoritmos de semelhança tem complexidades O(m*n) e O(n^3), então estamos diante de grandes esforços computacionais para encontrar uma única rua.

O metaphone entra nessa parte. Ao simplificar a string, reduzindo-a para um tamanho de até 4 caracteres, torna-se possível criar um “índice” para palavras semelhantes. Por exemplo, REBECA, REBBECA, RABEKA e tantas outras variações partilhariam da mesma string metaphone: RBK. Com isso, posso aplicar o algoritmo levenshtein em um conjunto reduzido (normalmente entre 1 e 2 dezenas) de palavras, reduzindo o esforço computacional necessário.

Naturalmente pode-se ter outras abordagens para se resolver o problema citado, mas o Metaphone é uma delas só exigiria ter no banco de dados uma coluna a mais para servir de índice.

A versão para o português foi feita porque o Metaphone original utiliza as regras gramaticais inglesas, então muitas palavras em português acabam caindo em grupos diferentes porque soariam diferente para um americano.

Quem desenvolve sistemas sabe que normalmente o CPF, por ser único e numérico, é comumente utilizando como chave primária e evitar cadastro duplicados. A saída fonética é uma das abordagens que apareceu no grupo. Com isso, fiz um aprofundamento do algoritmo utilizando uma base de dados montada com nomes de pessoas, 1 milhão de nomes e 220.000 palavras únicas, resultando no estudo acima referido, onde entendo que 4 caracteres são suficientes e quais seriam as regras para o Metaphone Português – Brasileiro. A implementação dessas regras estão no código em C disponível no SourceForge e no JavaScript.

Acredito, até pela data do projeto REDECA, essa seria uma das primeira variantes abertas para o Português Brasileiro do Metaphone, rendendo um artigo científico.

E para acrescentar resposta à pergunta, segue o link do README do código em C que contém as regras de conversão do Metaphone Pt-BR, publicadas em artigo:http://sourceforge.net/p/metaphoneptbr/code/ci/master/tree/README

Compartilhe.

PinIt
Top
%d blogueiros gostam disto: