Pergunta

Atualmente, estou trabalhando no projeto, onde tenho que combinar uma grande quantidade de nomes gerados pelo usuário com uma lista separada dos mesmos nomes em um formato canônico. O problema é que os nomes gerados pelo usuário contém inúmeros erros de ortografia, abreviações e dados simplesmente inválidos, dificultando a referência cruzada com os dados canônicos. Alguma sugestão sobre métodos para fazer isso?

Isso não precisa ser feito em tempo real e, neste caso, a precisão é mais importante que a velocidade.

As idéias atuais para isso são:

  1. Faça uma pesquisa difusa pelo nome do usuário inserido no banco de dados canônico usando uma implementação de pesquisa existente como Lucene ou Sphinx, que presumo que use algo como a distância de Levenshtein para isso.
  2. Referência cruzada no hash SoundEx (que supostamente é calculada no som do nome em vez de ortografia) em vez de usar o nome real.
  3. Alguma combinação do acima

Alguém tem algum feedback sobre alguma dessas ou idéias próprias?

Uma das minhas preocupações é que nenhum dos métodos acima lidará muito bem com as abreviações. Alguém pode me apontar em uma direção para alguns métodos de aprendizado de máquina para realmente pesquisar em abreviações expandidas (ou me dizer que estou louco)? Desde já, obrigado.

Foi útil?

Solução

Primeiro, eu adicionaria à sua lista as técnicas discutidas em O post de Peter Norvig sobre a correção de ortografia.

Segundo, eu perguntava de que tipo de "nomes gerados pelo usuário" você está falando. Tendo lidado com ambos, acredito que as heurísticas que você usaria para os nomes das ruas são um pouco diferentes das heurísticas para nomes de pessoas. (Como um exemplo simples, o "dr" expande para "drive" ou "doutor"?)

Terceiro, eu examinaria uma combinação usando testes para estabelecer o conjunto de coeficientes para combinar os resultados das várias técnicas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top