Cómo analizar inteligentemente el apellido

Asumiendo la convención de nomenclatura occidental de FirstName MiddleName(s) LastName,

¿Cuál sería la mejor manera de analizar correctamente el apellido de un nombre completo?

Por ejemplo:

John Smith --> 'Smith'
John Maxwell Smith --> 'Smith'
John Smith Jr --> 'Smith Jr'
John van Damme --> 'van Damme'
John Smith, IV --> 'Smith, IV'
John Mark Del La Hoya --> 'Del La Hoya'

... y las innumerables otras permutaciones de esto.

preguntado el 28 de agosto de 11 a las 00:08

Consiga que un ser humano lo haga. -

Eso es lo que se está haciendo actualmente. -

Esto parece un buen problema de aprendizaje automático; la clave es que debe estar listo para cometer errores, pero esperar una tasa de éxito cada vez mayor. -

Dices "occidental", pero en realidad no lo dices en serio. Los nombres españoles tienen patronímico seguido de matronímico, etc. Realmente no puedes hacer esto., ni siquiera por sus supuestos nombres occidentales. Simplemente no funcionará. -

No estaría de acuerdo con la afirmación de que no puede hacerlo. Puedes pero no será perfecto. Lo único es que, dependiendo de su dominio, obtendrá mayor o menor precisión / recuperación de su reconocimiento. A nivel técnico: hay un abanico de posibilidades. Podría, por ejemplo, usar el aprendizaje automático para aprender cómo se ven los nombres basándose en ejemplos de su conjunto de datos. -

3 Respuestas

Probablemente la mejor respuesta aquí sea no intentarlo. Los nombres son individuales e idosincrásicos e, incluso limitándose a la tradición occidental, nunca puede estar seguro de haber pensado en todos los casos extremos. Un amigo mío cambió legalmente su nombre para que fuera una sola palabra, y lo ha pasado muy mal tratando con varias instituciones cuyos procedimientos no pueden lidiar con esto. Estás en una posición única de ser el que crea el software que implementa un procedimiento, por lo que tienes la oportunidad de diseñar algo que no moleste a las personas con nombres poco convencionales. Piense por qué necesita analizar el apellido para empezar y vea si hay algo más que pueda hacer.

Dicho esto, como cuestión puramente técnica, la mejor manera probablemente sería recortar específicamente las cuerdas "Jr", ", Jr", ", Jr.", "III", ", III", etc. desde el final de la cadena que contiene el nombre, y luego obtenga todo desde el último espacio en la cadena hasta el final (nuevo, después de haber eliminado Jr, etc.). Esto no obtendría, digamos, "Del La Hoya" de tu ejemplo, pero ni siquiera puedes contar con un humano para obtenerlo. Estoy haciendo una suposición fundamentada de que el apellido de John Mark Del La Hoya es "Del La Hoya "y no" Mark Del La Hoya "porque soy un hablante nativo de inglés y tengo cierta intuición sobre cómo se ven los apellidos en español. Si el nombre fuera, di" Gauthip Yeidze Ka Illunyepsi ", no tendría ni idea de si contar ese Ka como parte del apellido o no porque no tengo idea de qué idioma es.

Respondido 28 ago 11, 04:08

Encontré una biblioteca llamada "analizador de nombres" en https://pypi.python.org/pypi/nameparser Maneja cuatro de los seis casos anteriores:

#!/usr/bin/env python
from nameparser import HumanName

def get_lname(somename):
    name = HumanName(somename)
    return name.last

people_names = [
    ('John Smith', 'Smith'),
    ('John Maxwell Smith', 'Smith'),
    # ('John Smith Jr', 'Smith Jr'),
    ('John van Damme', 'van Damme'),
    # ('John Smith, IV', 'Smith, IV'),
    ('John Mark Del La Hoya', 'Del La Hoya')
]

for name, target in people_names:
    print('{} --> {} <-- {}'.format(name, get_lname(name), target))
    assert get_lname(name) == target    

Respondido 14 Jul 17, 00:07

Estoy secundando a Tnekutippa aquí, pero deberías echarle un vistazo reconocimiento de entidad nombrada. Podría ayudar a automatizar parte del proceso. Sin embargo, como se ha señalado, esto es bastante difícil. No estoy muy seguro de si el NER de Stanford puede extraer nombres y apellidos de la caja, pero un enfoque de aprendizaje automático podría resultar muy útil para esta tarea. El NER de Stanford podría ser un buen punto de partida, o podría intentar crear sus propios clasificadores y corpus de capacitación.

Respondido 28 ago 11, 19:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.