none
Split Nombre Completo RRS feed

  • Pregunta

  • Saludos, tengo el siguiente caso, quiero hacer split en una cadena nombres y poder jugar con los nombres, apellidos, segundo apellido, teniendo en cuenta que hay apellidos muy variantes por ejemplo [De La Rosa, De La Cruz, Del Rosario, De Mota], etc.

    Ejemplo nombre completo: José Antonio Del Castillo De La Rosa.

    Primer Nombre : José

    Segundo Nombre : Antonio

    Primer Apellido : Del Castillo

    Segundo Apellido : De La Rosa

    Gracias de antemano.


    Juan A. Reyes

    lunes, 17 de abril de 2017 16:22

Respuestas

  • Hacer el Split es fácil, tomas el nombre, haces un Split por los espacios, y te devuelve el array de strings. La parte difícil es la de saber identificar cuáles de las partes son de cada apellido. En un caso como el ejemplo que pusiste ("José Antonio Del Castillo De La Rosa") te saldrían 7 strings. Y aquí tienes que aplicar una heurística, que podrá contemplar más o menos casos pero nunca será absolutamente infalible. Por ejemplo, puedes examinar los strings y si alguno de ellos es "de" o "del" lo pegas al siguiente, Y si hay un artículo como "la", también lo incluyes con el siguiente. Según esa lógica, tus 7 strings se convertirían en 4: "José", "Antonio", "Del Castillo" y "De La Rosa". En un caso como este, se puede presumir que las dos primeras son el primero y segundo nombre, y las otras dos los dos apellidos. Pero hay más casos posibles, por ejemplo alguien que solo tenga un nombre y dos apellidos, o que tenga dos nombres y un solo apellido. Aquí no hay más remedio que tener una lista con nombres de pila conocidos y comparar la palabra con todos ellos para tratar de distinguir si es un nombre o un apellido. Pero esto no siempre funciona, porque hay nombres que son "raros" y no están en la lista, y también hay palabras que pueden ser nombres o apellidos. Y esto no acaba de contemplar todas las posibilidades, por ejemplo, también tienes que ver si hay un "y" en cuyo caso la palabra anterior y la siguiente tienen que juntarse con la Y para formar un único apellido. Y posiblemente varios otros casos que ni nos hemos planteado. Así que como mucho, la lógica hará un intento razonable de partier el nombre y los apellidos, pero habrá casos en los que falle y tendrás que proveer una alternativa para cuando esto suceda (por ejemplo, meter como primer apellido todo lo que no sea "seguro").
    lunes, 17 de abril de 2017 16:51

Todas las respuestas

  • Saludos, tengo el siguiente caso, quiero hacer split en una cadena nombres y poder jugar con los nombres, apellidos, segundo apellido, teniendo en cuenta que hay apellidos muy variantes por ejemplo [De La Rosa, De La Cruz, Del Rosario, De Mota], etc.

    No, no bastará con descomponer la cadena en sub-cadenas por lo mismo que mencionas de los apellidos y nombres compuestos, es complejo inferir cual sub-cadena corresponde a una secuencia de nombre o apellido, de la misma manera como si en una cadena estuviese escrito la dirección completa, ¿cómo distinguir el nombre de la urbanización, calle, ciudad, estado?, quizá teniendo una base de conocimiento sobre el cuál comparar pero incluso puedes tener nombres de ciudades iguales en estados distintos, en fin, es complejo. 


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    lunes, 17 de abril de 2017 16:49
  • Hacer el Split es fácil, tomas el nombre, haces un Split por los espacios, y te devuelve el array de strings. La parte difícil es la de saber identificar cuáles de las partes son de cada apellido. En un caso como el ejemplo que pusiste ("José Antonio Del Castillo De La Rosa") te saldrían 7 strings. Y aquí tienes que aplicar una heurística, que podrá contemplar más o menos casos pero nunca será absolutamente infalible. Por ejemplo, puedes examinar los strings y si alguno de ellos es "de" o "del" lo pegas al siguiente, Y si hay un artículo como "la", también lo incluyes con el siguiente. Según esa lógica, tus 7 strings se convertirían en 4: "José", "Antonio", "Del Castillo" y "De La Rosa". En un caso como este, se puede presumir que las dos primeras son el primero y segundo nombre, y las otras dos los dos apellidos. Pero hay más casos posibles, por ejemplo alguien que solo tenga un nombre y dos apellidos, o que tenga dos nombres y un solo apellido. Aquí no hay más remedio que tener una lista con nombres de pila conocidos y comparar la palabra con todos ellos para tratar de distinguir si es un nombre o un apellido. Pero esto no siempre funciona, porque hay nombres que son "raros" y no están en la lista, y también hay palabras que pueden ser nombres o apellidos. Y esto no acaba de contemplar todas las posibilidades, por ejemplo, también tienes que ver si hay un "y" en cuyo caso la palabra anterior y la siguiente tienen que juntarse con la Y para formar un único apellido. Y posiblemente varios otros casos que ni nos hemos planteado. Así que como mucho, la lógica hará un intento razonable de partier el nombre y los apellidos, pero habrá casos en los que falle y tendrás que proveer una alternativa para cuando esto suceda (por ejemplo, meter como primer apellido todo lo que no sea "seguro").
    lunes, 17 de abril de 2017 16:51