martes, 9 de septiembre de 2025

DATOS. Archivos PDF

Biblioteca PyPDF2 (V)

Limitaciones

Hasta ahora hemos visto diferentes formas de trabajar con documentos .pdf para acceder a su contenido, pero nos hemos limitado a lo básico y positivo. Aunque lo que conseguimos no es poco (1), la verdad es que nos hemos saltado algunas limitaciones y no podemos decir que la información obtenida resulte de fácil manejo. Dedicaremos esta entrada a exponer algunas limitaciones que presenta PyPDF2.

La primera y más radical de ellas es que PyPDF2 no nos da acceso al contenido gráfico de los .pdf, incluyendo imágenes que contienen texto. Esto es así porqueesta lisbrería no es un OCR, pero esta limitación, que puede tener poca importancia cuando las imágenes no contienen texto, es importante cuando trabajamos con documentos .pdf que contienen texto guardado como imagen. Y este contenido es más frecuente de lo que creemos, especialmente cuando trabajamos con documentación antigua digitalizada. Por ello esta carencia supone un hándicap importante para la automatización del acceso a ese tipo de documentos (2).

Para probar lo dicho es suficiente con observar qué ha sucedido con la imagen de fondo del documento multi-página con el que trabajamos en esta entrada, que simplemente ha desaparecido (3). Pero lo que aquí es una ventaja, en este otro caso es un serio inconveniente.

Aunque el script ahora es lo de menos (lo que importa es el documento al que se accede), te remito al expuesto en esta entrada, aunque debes cambiar la línea de acceso al .pdf por esta otra (lector= PdfReader("pdf/DocImg.pdf")) para obtener el que ahora me interesa y cuyo contenido te muestro a continuación.

Como puede ver, no se trata de un documento antiguo ni difícil de trabajar con OCR, pero sí cumple el criterio principal: aunque no lo parezca, es una captura de pantalla (img) pegada en un documento Writer, convertido posteriormente en documento .pdf. El procedimiento no se diferencia mucho del practicado en otro caso (4), pero el resultado es radicalmente distinto: en el primero obtenemos el contenido del documento, pero aplicado ese mismo script a este (DocImg.pdf) (5) el resultado es nada.

Esta misma limitación la observamos respecto a los elementos gráficos de este otro pdf (EvalTDAH.dpf) (6). Los gráficos estadísticos que contiene han desaparecido, aunque PyPDF2 nos permite rescatar alguna información asociada a ellos. También nos permite acceder a la información de las tablas del documento (7), pero se presentan de forma poco accesible. Con todo, lo que posiblemente sea aun más decepcionante es la forma en que aparece el texto en pantalla: al estar expresado en formato doble columna obtenemos líneas acortadas aunque correctas en cuanto a su sucesión; esto hace innecesariamente más extenso el texto y no facilita su lectura y el trabajo con su contenido (8).

Aquí nos encontramos, pues, con limitaciones/dificultades de uso de PyPDF2 que afectan a la presentación pero también a la recuperación y el manejo del texto. Incluso también, como resultado de lo segundo, al acceso a información concreta, siendo como es este el principal objetivo por el que usamos esta biblioteca.

Vistas y demostradas limitaciones de importancia para el uso que podemos hacer de PyPDF2, me propongo en próximas entradas presentar soluciones, incluyendo las que requieran recursos complementarios a esta biblioteca; pero sobre todo avanzando en un uso más potente de lo que Python nos puede aportar.

Documentos.

Nota:

1 Y da para unas cuantas cosas, algunas de las cuales veremos en otro momento.
2 Estoy pensando por ejemplo en el trabajo con informes médicos que, por su formato, resultan complicados de escanear como texto, por lo que se suele recurrir al escaneo como imagen.
3 Cosa que en este caso nos viene bien, ya que lejos de aportar algo sólo podría servir para dificultar la lectura automatizada del documento.
4 Salvo el tratamiento como img, el resto del procedimiento es exactamente el mismo que seguí para crear VueltaCavernas.pdf. Ten en cuenta que esta misma limitación la tenemos para acceder a pdf que contienen controles de formulario: en ellos podemos acceder a los elementos textuales de las tablas, pero no al contenido escrito en los controles. Esto supone una seria limitación, de la cual no hablamos en esta entrada por corresponder a desarrollos o aplicaciones concretas de PyPDF2 como herramienta de automatización a documentos
5 Enlace para acceso en Documentos
6 Por tratarse ahora de un documento multi-página deberemos utilizar el script presentado en esta entrada, de nuevo modificando la instrucción que especifica el archivo al que accedemos (lector = PdfReader("pdf/EvalTDAH.pdf")). También es este caso puedes acceder al .pdf desde Documentos.
7 Ver, por ejemplo, el contenido de la página 6 del documento en la versión pdf del mismo y en el texto que el script devuelve en pantalla.
8 Mucho más aun el acceso contenido específico que nos pudiera interesar. Este en, en realidad, la segunda de las limitaciones o dificultades de las que hablo en la intro de esta entrada.

No hay comentarios:

Publicar un comentario

Comenta esta entrada