Algorítimo

Bem pessoal,

Me desculpem se eu estiver colocando esta mensagem no local errado, mas foi o que achei que mais precisamente se encaixava em minha questão.

O problema não é especificamente sobre java, mas sobre um algorítimo que preciso implementar.

É o seguinte: preciso implementar uma solução que me diga que determinados dados possam ser os mesmos e sugira isso. Acho que um exemplo pode explicar melhor:

Maria Aparecida da Silva e Maria Ap. da Silva e Maria A. Silva

podem ser a mesma pessoa ou ainda

Dr. Antonio Carlos Pedroso e Antonio C. Pedrozo

também podem ser a mesma pessoa.

Preciso de um algorítimo que resolva isso de forma inteligente - não determinando que as pessoas são as mesmas, mas SUGERINDO isso ao usuário. Ah… na verdade poderá ( ou não ) haver mais campos relacionados nessa decisão.

Alguém tem alguma idéia?

Aqui vai uma idéia, longe de estar completa:

  • Identifique e remova as partes pouco interessantes da String (pontuacao, acentuacao, espacos duplicados)

  • Troque 's’s e 'z’s por um caractere qualquer ($, por exemplo). Faca o mesmo com 'x’s, 'ch’s, etc

  • Compare as duas Strings

Ou então…

  • Calcule um ‘score’ para a String, somando pontuacao a cada caracter igual na mesma sequencia da String original, e determine uma ‘nota de corte’ para saber quando a String passa a nao ter relacao nenhuma com a original

Alexandre,

O Incor desenvolveu uma api sobre pesquisa fonética que me ajudou bastante. Funciona basicamente da seguinte forma:

os sons das palavras (em português) são transformados em um código e a partir daí vc faz as suas pesquisas. Muito interessante.

Procure por pesquisa fonética no google.

Espero ter ajudado,

Marques

Ricardo Baesa, da universidade do Chile, desenvolveu papers EXATAMENTE sobre esse assunto.
Sao algoritmos bem sofisticados e complicados. Usando " primos" dos BLAST e FAST para o match de genes.

matchsimile.com.br, faz EXATAMENTE isso, usando o algoritmo chileno. ele faz das formas mais loucas possivel, igual qdo vc faz pesquisa genetica com o BLAST e tal.

tipo.

“Paulo Eduardo Silveira” ele acharaia em " Paaulo E. Silva"

Repare que Silva e Silveira sao BEM diferentes. E voce pode fazer o fine tuning.