0nongmvqtffjeqlo1.jpeg

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! ‚̧ԳŹ