Home » 2015 » agosto

Monthly Archives: agosto 2015

Extracción de texto de PDFs de manera automatizada

Vuelvo a reabrir el blog de Kaimon, después de un tiempo cerrado… A ver si esta vez lo conservo y actualizo de vez en cuando. Me dio lata migrar el contenido que tenía en el anterior (también aproveché de cambiar CMS)… así que será una partida en una hoja limpia 🙂

El otro día, tuvimos un problema en el trabajo que implicaba la revisión de varios cientos de informes en formato PDF, buscando un patrón específico de texto en su contenido. Armamos un equipo de personas, cada una con un buen turro de PDFs a su cargo, revisando para tener un listado de aquellos informes que tuvieran el patrón de texto indicado. Obviamente que me pareció que ésta era una tarea totalmente automatizable, y mientras miraba al equipo quemándose las pestañas para poder hacer la tarea en el poco tiempo que teníamos para esto, y siendo que trabajamos en la Dirección de Informática Clínica, pensé “aquí es donde aplicamos nuestro ingenio y conocimiento… ¡Python al rescate!”

monty_python

No, éstos son Monty Python… Me refiero a Python

De más está decir que, sabiendo que el formato PDF es malvado, necesitaría una buena librería para hacer la pega. Así que, tras cinco minutos de buscar en Google, encontré PDFMiner. Ésta es una librería muy simpática que permite, programáticamente desde Python 2.4 o superior (Python 3 no está soportado 🙁 …), extraer el texto y elementos del layout de cualquier PDF. El patrón buscado era muy fácil de modelar con una expresión regular, y con los ejemplos de código incluidos con la librería, podía armar una solución sencilla en unos pocos minutos. ¡Una vez más, Python salvaría el día!

… Y así habría sido, si no fuera por el hecho de que, como mencioné arriba, PDF es un formato diabólico. Al correr el script sobre algunos de los PDFs que debíamos analizar, la extracción de texto devolvía siempre un string vacío. Pronto me pude dar cuenta que estos PDFs, generados por un software al interior de nuestra institución, tienen un atributo que deshabilita la extracción de texto de los mismos (si se han encontrado con un PDF del que no se puede marcar texto para copiar, ésta es la razón). Cuando el PDF tiene este atributo, programas de extracción automatizados no pueden acceder al contenido del mismo.

Hay una forma de pasar por encima de esto: imprimir el PDF en una “impresora virtual” de PDFs, asegurándose de permitir, en la “impresión” virtual, la extracción de texto. Pero, a esas alturas, simplemente me uní al grupo de revisores y terminamos de pasar por todos los PDFs en un par de horas.

De todas maneras, guardo esta librería PDFMiner, que sin duda puede ser útil para una próxima situación.