Pergunta

Estou procurando referências em separar um nome: "John A. Doe" em partes, primeiro = John, média = A, last = Doe.. No México temos nomes paternos, maternos, primeiro e segundo dado, e podem ser escritos em diferentes permutações, então o problema é bastante complexo.

Como ele depende de dados, estamos a trabalhar com o software correspondente que calcula uma pontuação para cada palavra para que possamos tomar decisões (ele é baseado em um grande banco de dados). Os dados de entrada não é limpo, ele é importado a partir de algumas páginas da web do governo e é humana filtrada para que ele pudesse ter lixo que tem de ser reconhecido também. Alguma sugestão?

[Edit] Exemplos:

name:
   Javier Abdul Córdoba Gándara
common permutations (or as it may appear in gvt data referring to same person):
   Córdoba Gándara Javier Abdul
   Javier A. Córdoba Gándara
   Javier Abdul Córdoba G.

paternal=Córdoba
maternal=Gándara
first given:Javier
second given:Abdul
name: María de la Luz Sánchez Martínez
paternal:Sánchez
maternal: Martínez
first given: María de la Luz
name: Paloma Viridiana Alin Arias Medina
paternal: Arias
maternal: Medina
first given: Paloma
second given: Viridiana Alin

Como eu disse o que o significado de cada palavra depende da pontuação. Um tem nenhuma maneira de saber que

Viridiana
e
Alin
recebem nomes, se não a partir da pontuação.

Temos um banco de dados muito forte (80 milhões de registros ou mais) para que possamos ter algum uso do sistema de pontuação. Eu estou projetando um algoritmo que usa esse, mas à procura de outras referências.

Foi útil?

Solução

Infelizmente - e de ter feito um pouco deste trabalho sozinho - seu algoritmo ideal será muito específico de dados, e você terá que resolver isso para sua situação particular.

É o tempo total e esforço para desenvolver esse algoritmo, eu diria que o tempo será dividido aproximadamente da seguinte forma:

  1. 10% para a manipulação geral corda
  2. 30% para a natureza específica do dados (formatos de nome mexicanos, peculiaridades de entrada de dados)
  3. 60% para atender a qualidade dos dados / falta de qualidade

E eu acredito que é bastante generoso para com a manipulação geral string. Claro que depende se você precisa de resultados de qualidade para todos os registros, ou apenas os registros 'limpas' etc, e se você é capaz de ignorar os registros 'difíceis' torna-se muito mais simples.

Algumas dicas gerais

  • Se eles não são necessários, remova não alfanumérico / espaço em branco caracteres
  • Split em espaços
  • Use hífens / pontuação para identificar sobrenomes ou nomes de família
  • Iniciais (que são geralmente único letras) não são sobrenomes; ou seja, eles deve ser o primeiro / médio
  • determinar o nível de confiança que você programaticamente identificou a cada nome (e testar esta completamente). Você pode descobrir que há subconjuntos de dados que contêm padrões semelhantes que precisam ser atendidas individualmente (eles podem vir de diferentes fontes etc)

Outras dicas

Você pode precisar adicionar alguma linguagem natural ou de aprendizagem de máquina para verificar. O problema de identificar os nomes dos autores (por exemplo, em artigos científicos) é difícil, pois eles podem ser comunicados com ordens diferentes, graus de abreviatura, elisões etc. Se seu banco de dados está sujo você vai acabar com a ambiguidade o que você faz.

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