Antes de nada voy a explicar como se maneja esta herramienta. Este libro tiene dos hojas, una de ellas (hoja "Nombres") contiene los nombres mas habituales, sin acento y otra con la relación de nombres completos a separar (hoja "Personal"). Su uso es tan fácil como:
He logrado encontrar un algoritmo que me permite separar nombre y apellidos de manera automática. No todos, calculo que quizás no encuentre bien menos 10% de los nombres, o no los encuentra o los encuentra mal, pero encuentra mas del 90%.
- Habilitar macros.
- Eliminar las líneas usadas anteriormente en la hoja Personal. Eliminarlas, no borrarlas.
- Copiar en la columna D de la hoja personal la lista de los nombres completos.
- Si fuese necesario hay que eliminar los dobles espacios.
- Realizar el proceso automático.
- Realizar el proceso manual.
- La búsqueda de nombres se basa en la lista de nombres. Si Se añaden nuevos nombres a la lista de la hoja Nombres esta búsqueda mejora. No es necesario ni ordenarla ni que solo aparezca solo una vez cada nombre, se pueden repetir. Los nombres se deben añadir sin acento.
He logrado encontrar un algoritmo que me permite separar nombre y apellidos de manera automática. No todos, calculo que quizás no encuentre bien menos 10% de los nombres, o no los encuentra o los encuentra mal, pero encuentra mas del 90%.
Los apellidos simples los encuentra todos si el nombre no es compuesto y casi todos si el nombre es compuesto.
Los apellidos compuestos, algunos de ellos para saber como van hay que hablar con el sujeto en cuestión, creo que tiene un acierto mayor al 80%. El resto hay que resolverlos a mano.
Mi algoritmo está pensado para nombres compuestos de hasta cuatro palabras, dos nombres y dos partículas, del tipo "María de las Mercedes". Este algoritmo no contempla un nombre compuesto de mas de dos nombres. De los apellidos compuestos solo estudio dos palabras, para saber si son partículas.
Recordemos que en la composición de nombres y apellidos, en algunas de sus opciones, no se dan certezas, se dan casos mas probables.
Recordemos que en la composición de nombres y apellidos, en algunas de sus opciones, no se dan certezas, se dan casos mas probables.
Para nombres:
- He recopilado los 380 nombres mas comunes en España. En este caso necesito saber si una palabra esta incluida en la relación de nombres.
- Cuento el número de palabras del texto con el nombre y apellidos. Para que uno de esos textos tenga un nombre compuesto o un apellido compuesto debe tener mas de tres palabras.
- Si tiene tres palabras, la primera es el nombre, la segunda es el primer apellido y la tercera es el segundo apellido. Las separaciones las indican el primer y segundo espacio del texto.
- Si tiene cuatro puede tener un nombre compuesto de dos palabras (José María), la primera y la segunda palabra. Hay que comprobar si esa segunda palabra está en la relación de nombres. Si lo esta la separación entre el nombre, en este caso compuesto, es el segundo espacio, si no es el primero.
- Si tiene cinco puede tener un nombre compuesto de tres palabras, dos nombres y una partícula (María del Carmen). Si la segunda palabra es nombre se aplica el anterior punto. Si no es nombre lo supongo partícula y compruebo que la tercera palabra sea nombre. Debería comprobar que la segunda palabra fuese una partícula pero, con estos niveles de error, da un poco lo mismo. Además el algoritmo está pensado para funciones Excel no para programación, lo que multiplicaría por mil las funciones anidadas. Si la tercera palabra es nombre la separación es el tercer espacio. Si no, el primero.
- Si tiene séis puede tener un nombre compuesto de cuatro palabras, dos nombres y dos partícula (María de las Mercedes). Si la segunda palabra es nombre se aplica lo dicho en puntos anteriores. Si no es nombre lo supongo partícula y compruebo que la tercera palabra sea nombre, como en el anterior punto. Si la cuarta palabra es nombre la separación es el cuarto espacio. Si no, el primero.
Resumiendo:
- Si el texto tiene cuatro o mas palabras (>=4) y la segunda palabra es nombre la separación la da el segundo espacio.
- Si el texto tiene cinco o mas palabras (>=5) y la segunda palabra es una partícula y la tercera es nombre la separación la da el tercer espacio.
- Si el texto tiene seis o mas palabras (>=6) y la segunda palabra es una partícula y la tercera es nombre la separación la da el cuarto espacio espacio.
- En todos los demás casos la separación la da el primer espacio.
El formulón que resuelve este algoritmo es:
=SI(P1<=3;1;SI(Y(NO(ESNOD(COINCIDIR(J1;Nom;0)));P1>=4);2;SI(Y(NO(ESNOD(COINCIDIR(K1;Nom;0)));P1>=5);3;SI(Y(NO(ESNOD(COINCIDIR(L1;Nom;0)));P1>=6);4;1))))
En Donde:
- P1 (columna P) es el número de palabras del texto original.
- J1 (columna J) es la segunda palabra, K1 la tercera y L1 la cuarta.
- El rango con nombre Nom es =Nombres!$A:$A
- Durante la fase de desarrollo separé las palabras del texto mediante la opción "Texto en Columnas". El número de palabras la calculé con =SI(L1="";3;SI(M1="";4;SI(N1="";5;SI(O1="";6;7))))
Podía haber separado mediante una fórmula similar los apellidos, pero dado que es realmente farragoso y que además es un trabajo dedicado a mi esposa, ella lo va a utilizar, decidí pasarme a la programación.
Para apellidos estudio las tres palabras siguientes al nombre o nombre compuesto encontrado. Los casos encontrados y su respuesta mas probable son:
- Si primera de estas palabras es partícula y la segunda no (Del Corral) la separación se produce dos espacios después del nombre.
- Si esas dos palabras son partículas (De la Parra) la separación es tres espacios después del nombre.
- Si después del nombre hay cuatro o mas palabras y ninguna de las tres primeras es una partícula la separación se produce dos espacios después del nombre.
- Si después del nombre hay cuatro o mas palabras y la primera no es partícula, la segunda si y la tercera no la separación se produce tres espacios después del nombre.
- En todos los demás casos la separación se produce un espacio después del nombre.
Las partículas que considero son: "de" , "del" , "la" , "los" , "las", "a", "as", "o", "os", "y", "i", "do" , "dos", "van", "den", "san"