Algoritmos para nomes pessoais divisão em partes
-
06-07-2019 - |
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
Viridianae
Alinrecebem 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.
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:
- 10% para a manipulação geral corda
- 30% para a natureza específica do dados (formatos de nome mexicanos, peculiaridades de entrada de dados)
- 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.