martes, 9 de septiembre de 2025

Textos. Python.

Biblioteca PyPDF2. 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 así 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 las limitaciones (algunas de las, para nosotros, más importantes) que presenta PyPDF2.


La primera y más radical de las limitaciones es que PyPDF2 no nos da acceso al contenido gráfico de los .pdf, incluyendo aquellas imágenes que siéndolo, contienen información textual.

Esto es así porque PyPDF2 no es un programa ocr, pero esta limitación, que puede ser menor si se trata de imágenes puras, es de cierta importancia cuando trabajamos con documentos pdf que contienen texto guardado como imagen. Este tipo de archivo pdf es más común de lo que creemos, especialmente si se trata de documentación antigua digitalizada; por ello puede suponer un hándicap de cierta importancia para la automatización del acceso a documentos pdf de cierta antigüedad y no tanta... (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 un 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 un 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.

Esa 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 cierta información asociada a ellos, cierto es que posiblemente de escaso interés. También nos permite acceder a la información de las tablas del documento (7), aunque se presentan de forma poco accesible. Pero lo posiblemente es 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 PyPDF2.

Vistas y demostradas en esta entrada limitaciones de relevancia para el uso que nosotros podemos hacer de PyPDF2, me propongo en entradas próximas a presentar soluciones, incluyendo aquellas que requieran recursos complementarios a esta librería, pero sobre todo avanzando (eso pretende) en un uso más potente de lo que Python nos puede aportar.

Documentos.

NOTAS

(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, abajo, 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