04 agosto 2020

Genealogía y Python


Resulta que tengo unos informes genelogicos mutantes. El de los familiares directos solamente contiene 230 páginas escritas en apretado Arial 8, deben ser más de diez mil parientes, ni siquiera he intentado contarlos, es el informe que se puede ver aquí.

Desde hace tiempo tenía la inquietud de hacer un listado que contuviese solo mis abuelos en las ditintas generaciones, así es que sin pensarlo mucho empecé a borrar todos los que no correspondían a abuelos. Después de un par de horas estaba terriblemente mareado con los malditos nombres y no llevaba ni el 1% del trabajo hecho. Tenía que buscar otra forma.

Entonces me acordé de Python y sus esxcelentes funciones para manejar strings en texto plano y se me ocurrió que podría convertir el documento de Word a un archivo de texto y procesarlo con un programa que escogiera solo la información que me interesaba grabándola en un segundo archivo de texto, después ese lo pasaba a Word de nuevo y lo formateaba bonito ¿Qué podría salir mal?

Nada salió mal, pese a que tenía completamente olvidada la programación en Python, recordaba que era fácil y después de una hora de consultar mi propio curso Python en 3 días y el excelente libro Python para informáticos de Chuck Severance, más algo de prueba y error, ya tenía funcionando el pequeño programita, que en menos de u segundo hizo lo que me habría tomado días, el programa es este

Más fácil que comer pan, la única triquiñuela está en la línea
if not "ancestro" or not "generaciones" in linea :
Que escoge cual línea va a grabar y cual ignora. Seré franco, nunca he sido bueno para la lógica de Boole así es que la escribí solo por prueba y error, usando mi potente "tufómetro". ¿Como se me ocurrió? Bueno, aunque no sabía en detalle como hacerlo, pero en general tenía la idea: debía ignorar todas las líneas que no contuviesen las palabras "ancestro" y "generaciones", lo primero porque "ancestro" identifica a los abuelos y le agregué "generaciones" para que recortara toda esa porquería que dice "es tatara tatara tatara...tatara,etc, abuelo".

No tengo muy claro como, pero funcionó lo más bien. el archivo de parientes tenía 32.185 líneas y pude extraer de manera "inteligente" y finalmente quedaron 3.568  abuelos, aquí pueden ver el flamante informe con todos mis abuelos. Claro que cuando las cosas se hacen de esta manera no salen perfectas, hubo unos 50 -o tal vez un poco más- de abuelos que por alguna razón el programa no logró recuperar, a esos los marqué como "nn" y los dejé para agregarlos manualmente más adelante.

Otra cosa que quería hacer es colocar los nombres en negrita, como se acostumbra en los informes genealógicos serios, eso no lo podía hacer con Pythom pero supongo que con mi querido Visual Basic para Aplicaciones. que se incluye en el Office se podría hacer. Pero no me animé, el VBA no tiene las potentes funciones de string de Python y a mi modo de ver un programa así podría ser bastante complicado, así es que decidí marcar  mano en negrita cada uno de los 3.000+ nombres, he pasado todo el día en eso y llevo poco más de la mitad.

Esta creo que es la primera vez en mi vida, después de muchos años programando, que puedo solucionar un problema personal, mío, con un programa de computación, lo que me pone muy contento.

La programación y la genealogía tienen puntos en común, se necesita muchísima paciencia y gran curiosidad para ambas cosas, la genealogía, como es perfectamente inútil y consume mucho tiempo solo la practican los millonarios ociosos o los jubilados, porque puede tomarnos meses de mucho trabajo sin ninguna otra recompensa que la satisfacción personal del trabajo hecho, es un verdadero hobby de príncipes, fuera del alcance de cualquiera que necesite trabajar para vivir.

Hace.dos o tres días me escribió un amigo de Venezuela que estaba tramitando para obtener la nacionalidad española o portuguesa por tener antepasados sefardíes y me adjuntó un informe genealógico hecho por un profesional en Venezuela, que entroncaba a su familia con mi abuela 21ª Yonati (Paloma) bat Gedalia, (1335-1429). Al principio no me convenció mucho pero pasé chequeando, pariente por pariente, toda la línea y la corroboré completa con la información de Geni (mormones), incluso pude determinar el lejanísimo parentesco que tenemos: primos en 15º grado.

Esto de la genealogía es un movimiento gigantesco, lo empezaron los mormones que desarrollaron las herramientas y las liberaron para uso del público, ahora hay más de mil millones de nombres enlazados -especialmente antiguos- que son revisados, limpiados y validados por "curadores" voluntarios. La red que existe es gigantesca, antes para averiguar sobre una persona yo iba a Facebook, ahora voy a Geni, que me da datos familiares muy precisos y de gran calidad, todo espontáneo, igual que la mayoría de las cosas de Internet.

Me preguntaba mi nuevo amigo -y lejanísimo primo- que tan confiable era esa información y que pasaba con esos informes que llegan hasta Adan y Eva o a Jesucristo.Bueno, en el caso de personajes legendarios u otros cuya existencia histórica no está documentada (caso de Jesucristo) son puros engaños, pero todo lo demás es sumamente confiable por una razón muy simple: la consistencia.

La información genealógica falsa o errada salta enseguida porque todos los nombres están enlazados entre si en un sistema consistente: cuando aparece una inconsistencia es porque el dato tiene un error o es falso, gracias a la computación las inconsistencias se chequean de manera automática. Por ejemplo mi árbol genealógico de Geni debe tener más de 20.000 parientes y aparecen 200 y tantas inconsistencias, los curadores son los que se encargan de resolverlas.

Los errores más comunes son los "duplicados". Como se trata de un trabajo colaborativo, supongamos que yo entro el nombre de mi abuelo y otro pariente -sin saberlo- entra nuevamente ese nombre, así es como aparecen las inconsistencias más comunes. La información genealógica se guarda en archivos de texto XML estandarizados llamados "Gedcom", como es texto plano, son muy fáciles y rápidos de manejar con distinto software.

Dependiendo donde esté el  Gedcom puede tener diferentes versiones, por ejemplo yo tengo uno en la web Geni que es enorme, porque va ingresando automáticamente vínculos a parientes apenas los detecta, el problema es que como recoge información de cientos de miles de personas la posibilidad de duplicados e inconsistencia es es muy alta. Hace años yo descargué mi Gedcom de Geni y empecé a depurarlo a mano, ahora reviso los nuevos parientes que aparecen en Geni, los chequeo y los ingreso manualmente en mi archivo local, así tengo un Gedconm muy limpio, no debo tener más de 20 inconsistencia que voy limpiando poco a poco.

En mi laptop, con el software de My Heritage trabajando en modo local es como hago todos los cálculos familiares que se muestran en mi blog de genealogía y de tiempo en tiempo saco informes actualizados y subo el Gedcom "limpio" a My Heritage. No me atrevo a hacer so en Geni porque la información que tengo allí, aunque más sucia es mucho más abundante y no quiero perderla ni por nada. Algún día voy a estudiar bien como es la estructura de los Gedcom, creo que Python y Gedcom juntos pueden hacer maravillas.

Es un trabajo detectivesco divertido, apasionante y como dije, completamente inútil ¿Qué más podría pedir? Se ha convertido en mi hobby favorito.. .

5 comentarios:

  1. Un tío también empezó a rallar con la genealogía, estaba especialmente chocho con su herencia alemana.
    En un momento encargó un escudo familiar (heráldica?) A Alemania, esto fue en los noventa, así que eran unos meses de espera entre pedirlo y que llegara.
    Llegó el esperado escudo y de un día para otro, perdió todo interés, dejó de ser un tema recurrente de conversación. Y el escudo fue sacado del living donde estuvo un corto tiempo en exhibición.

    Entre los símbolos que aparecían en el escudo estaba la estrella de David. Y pudo más su poco aprecio por el pueblo judío que su interés en la genealogía. Nunca más habló del asunto y para nosotros era tema de risa y ejemplo del mal karma de despreciar tanto algunas ideas o religiones

    ResponderBorrar
  2. Yo descargo las bases de datos de family search a plantillas excell y con un programa en VB y algunas lineas de visual C estoy obteniendo mi arbol genealogico...

    ResponderBorrar
  3. Yo descargo las bases de datos de family search a plantillas excell y con un programa en VB y algunas lineas de visual C estoy obteniendo mi arbol genealogico...

    ResponderBorrar
  4. Javier, yo creo queeso de los "escudos de familia" es una tontera, los escudos de verdad están asociados a un título de nobleza (son "las armas" del título) y muy poca gente tiene esos títulos, que por lo demás son caros e inútiles. Claro que cualquiera se puede asignar un escudo cualquiera y decir que es de su familia, nadie se lo impide, pero yo lo encuentro medio ridículo, es como disfrazarse de militar o de cura sin serlo.

    Ah de repente Miguel lee esto y me lo va a contradecir, bah!

    LA gracia de la genealogía son las historias familiares, no andarse pavoneando del pariente zutano o mengano, eso no es motivo de orgullo, lo encuentro una estupidez.

    Nick Obre (buen nik) ¡lo estás haciendo de la manera más complicada posible! Aunque debe ser entretenido, puedes hacerlo muchísimo más fácil exportando tu archivo Gedcom a tu PC y bajando el software "Family Tree Builder" de My Heritage, es gratis y tremendamente potente para establecer conexiones, hacer cálculos familiares y emitir toda clase de informes y gráficos. Creo que es el mejor software disponible para eso

    ResponderBorrar
  5. Me quedó dando vueltas el comentario de Nick Obre sobre usar Excel, ¡para poner en negrita los nombres habría sido una excelente idea! La cosa sería más o menos así:

    1. Exporto el documento original con los nombres sin negrita a un archivo de texto plano
    2. usando Python hago dos "rebanadas" con cada línea, la segunda la escojo porque parte con "es ancestro directo"(usando lstrip), almaceno las líneas en un diccionario
    3. Converto el diccionario atexto plano nuevamente, cada línea con dos campos delimitados por coma
    4. Importo ese texto plano a Excel y coloco la priera columna en negrita
    5. exporto a Word
    ¡Voila!

    Que poderoso es Pyton, poco a poco voy encontrando aplicaciones nuevas. Lástima que pasé casi dos días colocando los nombres en negrita, uno por uno

    ResponderBorrar

"Send me a postcard, drop me a line
Stating point of view
Indicate precisely what you mean to say
Yours sincerely, wasting away
Give me your answer, fill in a form
Mine for evermore
Will you still need me, will you still feed me
When I'm sixty-four"