La mayoría de los extractores de PDF utilizan la API incorrecta
La mayoría de las herramientas de PDF utilizan la fuente de datos incorrecta.
Cuando los desarrolladores hablan de extracción de PDF, generalmente se refieren a getTextContent(). Este método proporciona elementos de texto y sus posiciones. Es el estándar para casi todas las herramientas basadas en el navegador.
Pero getTextContent() es una vista procesada. Es una versión simplificada de lo que realmente está disponible.
Existen tres niveles de datos en PDF.js:
• getStructTree(): Esto te indica el significado del documento. Contiene tablas, encabezados y fórmulas.
• getOperatorList(): Esto te indica lo que el documento dibuja. Incluye líneas, trayectorias y formas.
• getTextContent(): Esta es una vista filtrada de lo que el documento dibuja.
La mayoría de las herramientas utilizan la tercera opción. Esto funciona para el 80% de los documentos, como informes sencillos. Sin embargo, falla en artículos académicos y publicaciones complejas.
Usar únicamente getTextContent() crea cuatro problemas principales:
- Pierdes las estructuras de las tablas. Tienes que adivinar dónde están las celdas basándote en las posiciones del texto.
- Rompes las ecuaciones matemáticas. Las ecuaciones de LaTeX a menudo aparecen como bloques de texto únicos y gigantes.
- Pierdes las líneas de las columnas. Muchos diseños utilizan líneas reales para separar las columnas. Estas líneas no existen en el contenido de texto.
- Obtienes un orden de lectura incorrecto. El texto a menudo aparece en el orden en que fue dibujado, no en la forma en que lo lee un humano.
La forma correcta de construir un procesador de PDF es mediante un sistema de tres niveles:
- Primero, comprueba
getStructTree(). Si el documento tiene una estructura lógica, utilízala para encontrar tablas y encabezados de inmediato. - A continuación, comprueba
getOperatorList(). Utiliza las líneas y trayectorias explícitas para encontrar los límites de las columnas. - Utiliza
getTextContent()como alternativa. Usa matemáticas geométricas solo cuando los dos primeros niveles no proporcionen datos.
Este enfoque no implica más trabajo. Los niveles 1 y 2 actúan como salidas rápidas. Si el documento está bien estructurado, te saltas las matemáticas difíciles. Solo utilizas inferencias complejas cuando el documento no tiene etiquetas.
Esta arquitectura gestiona tanto archivos corporativos sencillos como artículos científicos complejos.
Fuente: https://dev.to/bonzai2carn/most-pdf-extractors-use-the-wrong-api-heres-what-we-built-instead-5dgh
