Obtenga texto subrayado de cualquier PDF con Python |  de Sasha Korovkina |  mayo, 2024

Una guía paso a paso para obtener texto subrayado como una matriz a partir de archivos PDF.

💡 Si quieres ver el código de este proyecto, consulta mi repositorio: https://github.com/sasha-korovkina/pdfUnderlinedExtractor

La extracción de datos PDF puede ser un verdadero dolor de cabeza, y se vuelve aún más complicado cuando intentas capturar texto subrayado; lo creas o no, no existen soluciones ni bibliotecas que manejen esto de manera inmediata. Pero no te preocupes, estoy aquí para mostrarte cómo abordar esto.

Foto por dlxmedia.hu en desempaquetar

La teoría

La extracción de texto subrayado de archivos PDF puede seguir diferentes caminos. Podría considerar usar OCR para detectar componentes de texto con líneas inferiores o profundizar en las capacidades de marcado de PyMuPDF. Sin embargo, descubrí que el OCR tiende a fallar y sufre de inconsistencia y baja precisión. PyMuPDF tampoco es mi favorito: exige un delicado ajuste de parámetros, lo que requiere mucho tiempo. Además, una configuración incorrecta podría perder una gran cantidad de datos.

Es importante recordar que los PDF son:

  • Datos no estructurados: Los elementos del PDF a menudo carecen de agrupación o categorización, lo que complica los esfuerzos de búsqueda sistemática en el contenido.
  • Reconocimiento de formato de texto: Detectar formatos de texto específicos, como negrita o subrayado, es muy difícil en archivos PDF, ya que la mayoría de las bibliotecas de Python no admiten esta capacidad de manera efectiva.

Pero no temas, ya que tenemos una estrategia para resolver esto.

La estrategia

  • Convierta el PDF a XML estructurado: comience transformando el documento PDF a un formato XML estructurado para facilitar la manipulación de datos.
  • Extraer componentes deseados: Identificar y aislar los componentes específicos del XML que sean relevantes para nuestras necesidades.
  • Utilice OCR (reconocimiento óptico de caracteres) en las coordenadas extraídas para obtener los datos del texto subrayado como una matriz.
  • Extraer y generar texto subrayado: finalmente, extraiga el texto subrayado del documento y muestre o imprima los resultados.

El código

  1. PDF a XML

Usaremos el consulta pdf Library, el conversor de PDF a XML más completo que he encontrado.

2. Estudiando el XML

El XML tiene algunos componentes clave que nos interesan:

  • LTRect — A veces, la biblioteca analiza el texto subrayado como un rectángulo de ancho mínimo debajo del texto.
  • Línea LT — otras veces, reconocería el contorno como un componente de línea independiente.
Así es como se verá el XML de salida. Imagen creada por el autor.

Ejemplo de componente LTrect:

<LTRect y0="563.787" y1="629.964" x0="367.942" x1="473.826" width="105.884" height="66.178" bbox="[367.942, 563.787, 473.826, 629.964]" linewidth="0" pts="[[367.942, 629.964], [473.826, 629.964], [473.826, 563.787], [367.942, 563.787]]">

Por lo tanto, al convertir todo el documento al formato XML, podemos replicar su estructura como componentes XML. ¡Hagamos precisamente eso!

Replicación de estructuras

Ahora, recrearemos la estructura de nuestro documento como coordenadas del cuadro delimitador. Para hacer esto, analizaremos el XML para definir la página, los cuadros de componentes, las líneas y los rectángulos, y luego los dibujaremos todos en nuestro lienzo en 3 colores diferentes.

Visualización de objetos PDF.

Aquí está nuestro PDF inicial, ha sido generado en Microsoft Word, exportando un documento con algunos subrayados al formato de archivo PDF:

Documento inicial con texto de muestra. Imagen creada por el autor.

Después de aplicar el algoritmo anterior, aquí está la representación visual que obtenemos:

El contorno del cuadro del documento. Negro: todos los componentes del documento, azul: texto subrayado. Imagen creada por el autor.

Esta imagen representa la estructura de nuestro documento, donde el cuadro negro se usa para describir todos los componentes de la página y el azul se usa para describir los elementos LTRect, de ahí el texto subrayado.

Superposición de texto

Ahora, visualicemos todo el texto dentro del PDF en sus respectivas posiciones, con la siguiente línea de código:

can.drawString(text_x, text_y, text)

Aquí está el resultado:

Recreación de PDF basada en la ubicación del texto y los subrayados. Imagen creada por el autor.

Tenga en cuenta que el texto no está exactamente donde estaba en el documento original, debido a la diferencia de tamaño y fuente del lenguaje de marcado en la biblioteca pdfquery.

Extracción coordinada

Como resultado de nuestro XML, tendremos una matriz de coordenadas de regiones subrayadas, en mi caso lo he llamado texto_subrayado.

Un fragmento de código que forma una matriz de coordenadas de texto subrayado dentro del archivo PDF.

Extracción de texto

Aquí está el proceso:

  1. Identificamos los rectángulos de coordenadas como se determinó previamente.
  2. Extraemos estos apartados del PDF.
  3. Aplicamos Tesseract OCR para extraer texto de cada sección extraída.

Este método de extraer texto de archivos PDF utilizando rectángulos de coordenadas y Tesseract OCR es eficaz por varias razones:

  1. Precisión en la extracción de texto: Al identificar rectángulos de coordenadas específicos, el proceso se dirige solo a áreas relevantes del PDF. Este enfoque centrado evita el procesamiento innecesario de todo el documento y reduce los errores relacionados con la extracción de texto no deseado.
  2. Eficiencia: Extraer secciones predefinidas directamente del PDF es mucho más rápido que procesar el documento completo. Este método ahorra tiempo y recursos computacionales, lo que es particularmente útil cuando se trata de documentos grandes.
  3. Precisión con OCR: Tesseract OCR es una sólida herramienta de reconocimiento óptico de caracteres que puede convertir imágenes de texto en texto legible por máquina. Al alimentarlo con secciones precisas de texto, puede funcionar con mayor precisión, ya que se ocupa de menos ruido de fondo y problemas de formato que podrían confundir el proceso de OCR en documentos más grandes y no segmentados.

Y este es el código:

Código para extraer texto subrayado de las secciones del PDF.

Asegúrese de tener Tesseract instalado en su sistema antes de ejecutar esta función. Para obtener instrucciones detalladas, consulte su guía de instalación oficial aquí: https://github.com/tesseract-ocr/tessdoc/blob/main/Installation.md o en mi repositorio de GitHub aquí: https://github.com/sasha-korovkina/pdfUnderlinedExtractor.

Poniendolo todo junto…

Ahora, si tomamos cualquier archivo PDF, como este archivo de ejemplo:

El texto completo del archivo de prueba. Imagen creada por el autor.

Tenemos algunas palabras subrayadas en este archivo:

ipsum y laboris están subrayados aquí. Imagen creada por el autor.

Después de ejecutar el código descrito anteriormente, esto es lo que obtenemos:

Una serie de todas las palabras subrayadas del documento. Imagen creada por el autor.

¡Después de obtener esta matriz, puede usar estas palabras para su posterior procesamiento!

¡Disfruta usando este script! Me encantaría conocer cualquier aplicación creativa que se te ocurra o si te gustaría contribuir. ¡Hágamelo saber! ❤️