CLI - Extracción de datos de ficheros formulario word
06 Jul 2009Este script se utilizó en un caso real para automatizar la extracción de información de archivos .doc usados a modo de formulario.
El caso real son unos 200 ficheros .doc tipo abstracts para un congreso. Cada uno de ellos consistía de una sola hoja con Título del poster/conferencia, Autores, Fotografía del autor principal, resumen y referencias. Con los datos extraidos se crearon hojas de cálculo o CSVs para facilitar la creación de listados por paises, direcciones de correo, instituciones, etc.
El formato .doc no es amigo de la línea de comandos y previo a todo procesado, los ficheros .doc se convirtieron a texto plano .txt usando la macro de Danny Brewer para convertir en batch documentos de un formato a otro.
Actualización 7 Oct 2018: posiblemente el paquete pandoc sea una buena alternativa a esta macro
Si el formulario se rellenó siguiendo las instrucciones, el archivo .txt contendría unas determinadas líneas con la información bien localizada. El siguiente paso es aplicarle el script detallado más abajo para extraer los datos que necesitamos de esos 200 ficheros de tipo txt. Mucha gente tiene problemas para seguir unas instrucciones paso a paso, quizás porque dichas instrucciones son ambiguas o quizás gusta de romper las normas cuando esto no tiene realmente consecuencias sin descartar que simplemente dicha persona sea un poco faltusca. Aproximadamente el 25 % de los formularios recibidos necesitaron de alguna correción manual.
El script usa sed, awk, head, tail,… comandos estándar en distribuciones GNU-linux, y está dividido en cuatro partes:
- La primera parte crea el archivo TITLES.CSV que da correspondencia entre títulos y un numero identificativo que queda grabado en el fichero lista.
- La segunda parte crea AUTHORS.CSV y en este caso da correspondencia entre autores y el número de abstract de lista.
- La tercera parte es la más difícil. Extrae uno a uno todos los autores y le da correspondencia con el abstract que presentan. La dificultad reside en el número de autores variable para cada abstract y su composición que puede ser Nombre + 2 apellidos o +1 apellido, 2 nombres un apellido, 2 nombres + 2 apellidos etc. El script 3 recoge casi toda la casuística pero contra los John Smith III Jr., el nexo “der” o los apellidos de alto abolengo unidos por “de”, el script fallará miserablemente. Se recomienda no enmendar este error manualmente o incluso empeorarlo, si es posible, con algún juego de palabras. La función de este tercer script es generar el fichero INDEX.CSV con filas de Apellido, Nombre de tal forma que contiene todos los autores y todos los abstracts correspondientes en los que Apellido, Nombre aparece como autor.
- La cuarta parte del script relaciona autores y títulos.