En el marco de esta prueba se utiliza el framework de código abierto unstructured para evaluar el proceso de extracción de texto de documentos estructurados. El objetivo es comprobar en qué medida unstructured es adecuado para su uso práctico en sistemas de información basados en IA – especialmente con vista a la extracción de texto, el procesamiento semántico (chunking/tokenización) y la posterior generación de embeddings para sistemas de recuperación basados en vectores.

A continuación se muestra un ejemplo de un archivo PDF que se utilizó para el análisis con unstructured.

pm-partnerschaft-stackitDescargar

Para ejecutar la biblioteca unstructured se utiliza la imagen oficial de Docker. Esta incluye todas las dependencias necesarias (p. ej. Tesseract, Poppler, bibliotecas de Python) y permite un uso inmediato sin necesidad de una instalación local de Python.

En una primera prueba se ejecutó la herramienta unstructured de forma interactiva en el contenedor Docker para evaluar la calidad del reconocimiento de texto y el análisis estructural de un PDF de ejemplo. El objetivo era comprobar cuán fiable es el framework para reconocer contenidos como encabezados, párrafos y textos de flujo y asignarles tipos semánticos como Title o NarrativeText. El análisis demostró que unstructured pudo reconstruir en gran medida la estructura lógica del documento de forma correcta. La prueba sienta las bases para pasos posteriores como el chunking semántico y la preparación de los datos para sistemas de recuperación basados en embeddings.

En el siguiente paso automatizé la extracción de texto mediante un script de Python. El código detecta automáticamente el idioma del documento con “langdetect”, luego aplica la configuración de OCR correspondiente y realiza el análisis estructurado con unstructured – incluida la clasificación y la salida de los contenidos reconocidos.

En el ejemplo extraído se puede apreciar claramente cómo unstructured clasifica de manera diferenciada varios bloques de texto. La tipificación semántica es en muchos casos comprensible: encabezados como „OPITZ CONSULTING UND STACKIT WERDEN CLOUD-PARTNER“ son reconocidos correctamente como Title, los párrafos de texto de flujo como NarrativeText, y los elementos de diseño como numeraciones de página o pies de página como texto general.

En general, el análisis muestra que unstructured ya proporciona una base sólida para la estructuración de documentos con una estructura de diseño sencilla – aunque solo al usar la estrategia hi_res, ya que los resultados con el procesamiento estándar son claramente menos precisos y más fragmentados.

Los documentos PDF a menudo contienen más de lo que parece a simple vista. Sobre todo en PDFs escaneados o procesados automáticamente pueden estar incrustadas las llamadas „Hidden Text Layers“ – es decir, textos invisibles que se superponen a la imagen visible del documento. Estos surgen, por ejemplo, por software OCR como Adobe Acrobat, que almacena los caracteres reconocidos como texto legible por máquina sin mostrarlos al usuario.

Estos textos ocultos pueden ser leídos y procesados por herramientas de análisis de PDF como unstructured – incluso si no aparecen en los visores de PDF habituales. Para comprobar si un PDF contiene tales textos incrustados, es útil la herramienta pdftotext del paquete poppler-utils. Con un comando sencillo se puede extraer todo el texto legible por máquina y hacerlo visible en un archivo .txt.

Esto es especialmente útil cuando en la salida del análisis aparecen contenidos inesperados o aparentemente „erróneos“ – ya que no siempre provienen de errores de OCR, sino a veces de información de texto invisible en el documento original.

En este punto originalmente quería continuar con el chunking, pero tuve que constatar durante el análisis que la funcionalidad de chunking de Unstructured es muy rudimentaria. Por ello, para una segmentación semánticamente limpia prefiero una biblioteca como NLTK y por ahora no continuaré con el trabajo con Unstructured.