Python: función para separar nombre de apellidos

Unafunción que recibe como parámetro una cadena e intenta separar el nombre de los apellidos. Tiene en cuenta algunas separadores especiales (de, del ....)
Funciona siempre bien, si las dos últimas palabras son apellidos (con o sin palabras especiales)
Nombre1 Apellido1
Apellido2 Nombre1
Nombre2 Apellido1 Apellido2
Nombre1 [del,de ...] Nombre2 [del,de ...] Apellido1 [del,de ...] Apellido2 Nombre1 Apellido1

No funciona bien con :
Nombre1 Nombre2 Apellido1

Siempre da por supuesto que si hay al menos 3 palabras, las dos últimas forman el apellido:

def obtenerNombrePassswd(cadena):
 lista = cadena.split(" ")
 especiales = ['da', 'de', 'del', 'la', 'las', 'los', 'mac',
  'mc', 'van', 'von', 'y', 'i', 'san', 'santa']
 salida = list()
 for m in reversed(lista):
  if ( (len(salida) > 0 
   and (m.upper() in map(str.upper, especiales))) 
   or ((len(salida) > 2) ) ):
    salida[-1] = str(m) + ' ' +  salida[-1] 
  else:
   salida.append(m)
 nombre = str(salida[-1])
 if len(salida) >1:
  apellido1 = salida[-2]
 if len(salida) == 3:
  apellido2 = salida[0]
 apellidos = " ".join(salida[:-1])
 return [ nombre, apellidos]

Comentarios

Entradas populares de este blog

Compilar php 4.4 con ldap en centOs

Oracle : Tablas y objetos bloqueados