Principales respuestas
Split Nombre Completo

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
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").
- Propuesto como respuesta Brayan De La Cruz lunes, 17 de abril de 2017 17:06
- Marcado como respuesta Joyce_ACModerator jueves, 27 de abril de 2017 14:27
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. -
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").
- Propuesto como respuesta Brayan De La Cruz lunes, 17 de abril de 2017 17:06
- Marcado como respuesta Joyce_ACModerator jueves, 27 de abril de 2017 14:27