Mostrando entradas con la etiqueta pdf. Mostrar todas las entradas
Mostrando entradas con la etiqueta pdf. Mostrar todas las entradas

martes, 14 de abril de 2026

DATOS. Manipulación

Datos semi-estructurados PDF (I)

Tabla-Imagen

Con frecuencia una de las fuentes de datos estructurados son los documentos de texto, concretamente los documentos PDF. Realmente se trata de una fuente doblemente compleja: son realmente datos estructurados a nuestros ojos, pero precisan un tratamiento manual de tabulación (por ejemplo), pero están muy lejos de serlo para un ordenador, especialmente las "tablas" .pdf.

Antes de seguir y para que no queden dudas respecto al objetivo que se persigue aquí, diré que entiendo por manipulación o tratamiento de datos tabulados en documentos de texto el procedimiento cuyo objetivo último es la creación de estructuras asimilables a una tabla o base de datos que puede ser tratadamediante procedimientos de acceso y consulta a datos estructurados. Digo "objetivo último" porque realmente no siempre se puede garantizar su logro, al menos no de forma directa.

En para un tratamiento manual u ofimático "clásico" no existe diferencia entre un documento .pdf y un documento .docx (o un documento .odt), aunque es posible manipular directamente estos últimos mediante procedimientos relativamente simples basados en los mismos servicios ofimáticos y/o en la combinación procesador-hoja de cálculo. Esta posibilidad se complica si las tablas están en un documento .pdf, pero puede ser una complicación salvable, especialmente si los datos no están sujetos a confidencialidad; si sí lo están va a depender de la suerte que tengamos en el procedo de captura de los datos: si es posible copia-pega, no vamos a tener más trabajo que si se tratara de tablas .docx (o casi), pero si no se dejan capturar de este modo no nos va a quedar más remedio que copiarlos manualmente o casi manualmente.

El tratamiento automatizado se complica significativamente cuando la fuente es un documento .pdf, especialmente si sus tablas contienen información confidencial, que no es posible derivar a recursos especialidados IA; posiblemente las dificultades persisten incluso en caso de que sí sea posible emplear esos medios. De todas formas, en lo que a un SEO se refiere, ni por presupuesto ni por razones de confidencialidad es posible recurrir a esos medios. El resultado es, pues, que o bien renunciamos a automatizar el acceso a estas tablas o aplicamos procedimientos de automatización que sólo resuelven el problema de forma parcial y sin total garantia de estar libres de error; o lo que viene a seer lo mismo, deberemos estar dispuestos a realizar no sólo una siempre necesaria supervisión, sino algún tipo de intervención manual u ofimática complementaria.

Esto es debido a la complejidad que para los medios digitales presentan las tablas de los documentos .pdf, que presentan diferentes posibles comportamientos, no siempre claramente identificables ni siempre necesariamente el mismo en un único documento. Es por ello que las tecnologías de automatización pueden fracasar, al menos parcialmente, sin que sea garantía de éxito ni la complejidad ni la modernidad del recurso de automatización.

Sobre estas cuestiones trabajaremos en posteriores entradas, pero en la actual quiero presentar una opción que se toma casi en último extremo y que resuelve parcialmente la automatización del acceso al contenido de las tablas: la conversión de éstas en una imagen y el tratamiento de la imágen con recursos de OCR.

Aunque lo más ajustado a criterio de automatización sería generar la imagen de forma automática (converir automáticamente el .pdf en imagen), el coste de este procedimiento puede ser prohibitivo en términos de computación o de memoria, por lo que puede resultar mucho más sencillo crear manualmente la imagen mediante Imprimir pantalla, procedimiento simple y barato, especialmente si, siendo la tarea un trabajo personal, el número de documentos es pequeño. En otros casos podría optarse por el uso de la fotocopiadora en modo scanner y plantear un trabajo a nivel de equipo.

He de decir que, según IA-Gemnini existen opciones para automatizar la captura de pantalla, pero no vamos a tratarlas ahora, optando por el procedimiento manual al suponer un trabajo personal sobre unos pocos documentos. Lo que vamos a hacer es centrarnos en la automatización de la conversión del documento a texto, procedimiento que resolvemos mediante el siguiente script.


'''
Acceso a tablas convertidas en img manualmente mediante Imprimir pantalla
El script de Python usa pytesseract como OCR lo que implica tener instalado Tesseract
en el sistema.

Script desarrollado haciendo uso de IA-Gemini para mejoras de funcionamiento
implementadas a demanda específicada por el autor.

****************************************************************************************
--- FASES DEL PROCESO -------------------------
****************************************************************************************
'''

#0. Carga de bibliotecas ---------------------

import pytesseract
from PIL import Image
import os

# 1. Configuraciones y acceso a imagen -------------------------

# Configuración de Tesseract
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# Configuración de las rutas de salida
nombre_carpeta = 'tablas'
nombre_archivo_txt = 'resultado_ocr.txt'

# Obtener la ruta del directorio donde se ejecuta el script
directorio_actual = os.path.dirname(os.path.abspath(__file__))
ruta_tablas = os.path.join(directorio_actual, nombre_carpeta)

# Crear la carpeta 'tablas' si no existe
if not os.path.exists(ruta_tablas):
    os.makedirs(ruta_tablas)

# Entrada nombre o ruta de img
nombre_imagen = input("Introduce el nombre del archivo de la imagen o su ruta completa (sin comillas): ").strip()

# 2. Procesamiento de OCR -----------------------------------

# Verificamos si el archivo existe antes de continuar
if not os.path.isfile(nombre_imagen):
    print(f"Error: El archivo '{nombre_imagen}' no se encuentra en la ruta especificada.")
else:
    try:
# Iniciamos el procesamiento OCR
        img = Image.open(nombre_imagen)
        texto = pytesseract.image_to_string(img, lang='spa')

# 4. Mostrar y guardar resultado -----------------------------

# Mostrar resultado en consola
        print("\nTexto extraído con éxito:")
        print("-" * 30)
        print(texto)
        print("-" * 30)

# Guardar resultado en archivo TXT usando el nombre de la imagen original para evitar sobreescritura
        nombre_base = os.path.splitext(os.path.basename(nombre_imagen))[0]
        ruta_final_txt = os.path.join(ruta_tablas, f"{nombre_base}.txt")
        
        with open(ruta_final_txt, 'w', encoding='utf-8') as f:
            f.write(texto)
        
        print(f"Archivo guardado en: {ruta_final_txt}")

    except Exception as e:
        print(f"Ocurrió un error al procesar la imagen: {e}")

Los comentarios que acompañan al código, que han sido específicamente incorporados y redactados exprofeso, hacen innecesario comentar el script, pero no lo que resulta de su aplicación.

La ventaja que resulta de aplicar este (que hemos llamado) último recurso (la conversión del visionado de la tabla-pdf en img) es que, si la calidad de la imagen es buena (y lo es al proceder de la captura de pantalla de un texto legible), el OCR funciona correctamente y transforma en texto accesible y sin errores ni omisiones, lo que antes podia no serlo tanto, especialmente para un procedimiento de automatización basado en código. Desgraciadamente tendremos ocasión de comprobar las dificultades que se presentan y la importante cantidad de errores que se producen; lo que no deja de ser un motivo para celebrar el exíto de rappidez y precisión de actual procedimiento.

Ahora bien, ya el visionado del texto en la consola (para eso lo hicimos así) nos va a mostrar que el resultado está aun lejos de ser directamente asimilable a una estructura de tabla de datos. El almacenamiento del texto como .txt permite guardar el texto tal y como lo visualizamos en pantalla, pero también proceder a su manipulación con estrategias propias del procesamiento de los documentos en ese formato, incluídas las estrategias manuales-ofimáticas, que son las que, de momento, planteo como solución más eficiente, rápida y segura.

Aunque sepa a poco, por ahora me conformo con esta "semi-automatización" y dejo para otro momento el desarrollo de otros procedimientos. En realidad estamos aun lejos de conseguir nuestro objetivo, pero mucho más cerca de obtener los datos que necesitamos por medios "tradicionales" aunque con un ahorro significativo de tiempo. Tan sólo tenemos que modificar el documento .txt resultante, preparándolo para ser procesado mediante la conocida combinación ofimática (vg.) Writer-Calc que ya sabemos aplicar.