Bibloteca PyMuPDF (III)
Acceso a pdf. Sólo textos
Aunque PyMuPDF está pensado para extraer (entre otras cosas) el texto del documento con independencia de en qué presentación se encuentre (como vimos en la entrada anterior), cuando en el documento se diferencian bloques de texto (párrafos) y tablas, es posible que deseemos diferenciar unos textos de otros. En este caso vamos a crear un script que da respuesta a esta necesidad.
#0. Importar la biblioteca
import fitz # PyMuPDF
# 1 Acceder al objeto documento
doc = fitz.open("plataformas_educativas.pdf")
# Generar documento de salida (.txt)
with open("plataformas_txt2.txt", "w", encoding="utf-8") as archivo_txt:
for pag in doc:
archivo_txt.write(f"--- Página {pag.number + 1} ---\n")
# 1. Localizar las tablas en la página actual
tabs = pag.find_tables() # Busca las tablas presentes en el texto
tab_rects = [table.bbox for table in tabs] # Obtenemos los rectángulos que delimitan las tablas
# 2. Obtener los bloques de texto (con independencia de su ubicación)
blocks = pag.get_text("blocks") # Cada 'bloque' devuelve (x0, y0, x1, y1, "texto", block_no, block_type)
for b in blocks:
rect_bloque = fitz.Rect(b[:4]) # Coordenadas del bloque de texto
# 3. Verificar si el bloque está dentro de alguna tabla
dentro_de_tabla = False # Declara la variable para controlar presencia de texto
for t_rect in tab_rects:
if rect_bloque.intersects(t_rect): # Si el bloque de texto toca el área de la tabla...
dentro_de_tabla = True # Cambia el contenido de la variable y...
break # Se sale del ciclo (y no se "captura" el bloque de texto)
# 4. Escribir solo si no es parte de una tabla y es tipo texto (0)
if not dentro_de_tabla and b[6] == 0: # Opción contraria a la precedente (if not)
archivo_txt.write(b[4] + "\n") # Entonces sí se "capttura" el bloque de texto y se escribe en el .txt (almacen)
archivo_txt.write("\n\n") # Añade salto de línea para diferenciar bloques de texto en el .txt
doc.close() #Cerrar objeto Document
print("Proceso finalizado: Párrafos extraídos omitiendo áreas de tablas.")
Lee detenidamente el script y sus comentarios. Advertirás que la base de su funcionamiento es la identificación de los sectores de texto y de las estructuras de las tablas, ejecutando un proceso opcional, en función del objetivo: capturar (al .txt de saldida) los bloques de texto que no están asociados a la/s tabla/s.
No hay comentarios:
Publicar un comentario
Comenta esta entrada