Created
June 24, 2019 14:21
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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