Skip to content

Instantly share code, notes, and snippets.

@franps
Created June 24, 2019 14:21
Show Gist options
  • Save franps/f491182068f7079ce7bcadeafd16b110 to your computer and use it in GitHub Desktop.
Save franps/f491182068f7079ce7bcadeafd16b110 to your computer and use it in GitHub Desktop.
Funcion que separa un nombre completo en español a nombres y apellidos, tomando en cuenta nombres compuestos
# parsearNombre toma un string con un nombre y lo separa en primer y segundo nombre, y primer y segundo apellido
# los artículos en los nombres compuestos se unen con el nombre siguiente
# existen más personas en Uruguay con tres nombres que con tres apellidos, pero no puedo distinguir unos de otros
# por lo que ante la duda, elijo separar en más nombres. Por lo que tengo un error de 0.0025
articulos = ['de', 'del', 'la', 'los', 'las', 'De', 'Del'
'La', 'Los', 'Las', 'o', 'O', 'Mac', 'mac', 'di', 'Di', 'da', 'do', 'dos', 'san', 'd']
def pprint(list):
for item in list:
print(item + " : " + str(list[item]))
def unirArticulos(array):
result = ['', '', '', '', '', '']
cont = 0
for i in array:
if i in articulos:
result[cont] += i + " "
else:
result[cont] += i
cont += 1
result = result[:cont]
return result
def parsearNombre(nombre):
print("============================")
nombreCompleto = {}
aux = nombre.split()
nombreCompleto["Primer nombre"] = aux[0]
aux = aux[1:]
largoAux = len(aux)
if (largoAux == 1):
nombreCompleto["Primer apellido"] = aux[0]
return nombreCompleto
aux2 = unirArticulos(aux)
if len(aux2) == 1:
nombreCompleto["Primer apellido"] = aux2[0]
return nombreCompleto
if (len(aux2) == 2):
nombreCompleto["Primer apellido"] = aux2[0]
nombreCompleto["Segundo apellido"] = aux2[1]
return nombreCompleto
if (len(aux2) == 3):
nombreCompleto["Segundo nombre"] = aux2[0]
nombreCompleto["Primer apellido"] = aux2[1]
nombreCompleto["Segundo apellido"] = aux2[2]
return nombreCompleto
# No puedo distinguir si tiene tres nombres o tres apellidos
# Hay más personas con tres nombres que tres apellidos
if (len(aux2) == 4):
nombreCompleto["Segundo nombre"] = aux2[0] + " "+aux[1]
nombreCompleto["Primer apellido"] = aux2[2]
nombreCompleto["Segundo apellido"] = aux2[3]
return nombreCompleto
else:
return nombreCompleto
print("==== Nombres no compuestos ====")
pprint(parsearNombre("Juan Perez"))
pprint(parsearNombre("Juan Perez Rodriguez"))
pprint(parsearNombre("Juan Martin Perez Rodriguez"))
print("==== Tres nombres ====")
pprint(parsearNombre("Clara Maria Francisca Pereira Ruiz"))
print("==== Nombres compuestos ====")
pprint(parsearNombre("Lorena de León"))
pprint(parsearNombre("Francisco de los Santos Perez"))
pprint(parsearNombre("Maria de los Angeles Santos Abel"))
pprint(parsearNombre("Mario Eduardo O Neil Rebollo"))
pprint(parsearNombre("Nicolas Juan Herrera Mac Eachen"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment