Pregunta

Estoy buscando referencias para separar un nombre: "John A. Doe" en partes, primero = John, medio = A., último = Doe. En México tenemos nombres paternos, maternos, de primer y segundo nombre, y se pueden escribir en diferentes permutaciones, por lo que el problema es bastante complejo.

Como depende de los datos, estamos trabajando con un software de correspondencia que calcula una puntuación para cada palabra para que podamos tomar decisiones (se basa en una gran base de datos). Los datos de entrada no están limpios, se importan de algunas páginas web del gobierno y se filtran de forma humana, por lo que podría tener basura que también debe reconocerse. ¿Alguna sugerencia?

[Editar] Ejemplos:

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 dije, el significado de cada palabra depende de la puntuación. Uno no tiene forma de saber que

Viridiana
y
Alin
son nombres si no son del puntaje.

Tenemos una base de datos muy sólida (80 millones de registros más o menos) para poder utilizar el sistema de puntuación. Estoy diseñando un algoritmo que lo usa pero busco otras referencias.

¿Fue útil?

Solución

Desafortunadamente, y después de haber hecho un poco de este trabajo yo mismo, su algoritmo ideal será muy específico de los datos, y deberá resolverlo para su situación particular.

Del tiempo total y esfuerzo para desarrollar este algoritmo, diría que el tiempo se dividirá aproximadamente de la siguiente manera:

  1. 10% para manipulación general de cadenas
  2. 30% para la naturaleza específica de la datos (formatos de nombres mexicanos, peculiaridades de entrada de datos)
  3. 60% para atender la calidad de los datos / falta de calidad

Y creo que es bastante generoso con la manipulación general de cadenas. Por supuesto, depende de si necesita resultados de calidad para todos los registros, o solo los registros 'limpios', etc., y si puede ignorar los registros 'difíciles', lo hace mucho más simple.

Algunos consejos generales

  • Si no son necesarios, elimine los caracteres no alfanuméricos / espacios en blanco
  • División en espacios
  • Use guiones / puntuación para identificar apellidos o apellidos
  • Iniciales (que son generalmente individuales letras) no son apellidos; es decir, ellos debe ser primero / medio
  • determine el nivel de confianza de que identificó programáticamente cada nombre (y pruébelo a fondo). Puede encontrar que hay subconjuntos de datos que contienen patrones similares que deben ser atendidos individualmente (pueden provenir de diferentes fuentes, etc.)

Otros consejos

Puede que necesite agregar un lenguaje natural o aprendizaje automático para verificar. El problema de identificar los nombres de los autores (por ejemplo, en artículos científicos) es difícil, ya que se pueden informar con diferentes órdenes, grados de abreviatura, elisiones, etc. Si su base de datos está sucia, terminará con la ambigüedad, haga lo que haga.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top