sábado, 13 de septiembre de 2025

Textos. Python.

Biblioteca PyPDF2. Segmentar el contenido (otras unidades)


Aunque dividir el contenido por páginas es de interés, mayor cuanto de más páginas conste el documento, no es la única segmentación posible ni la única de la que podemos obtener beneficios a la hora de automatizar el acceso a un documento pdf. En esta entrada veremos otras segmentaciones posibles.


La primera que se me ocurre resulta de la aplicación de la función split() la cual, [como sabes] (1) sirve para separar los elementos de una cadena en función de un carácter usado como criterio de segmentación.

La aplicación de split() para crear una lista la realizamos sobre el contenido de la variable resultante de la captura del contenido textual del (o de los) pdf, por lo que mantenemos el código anterior y simplemente implementamos el nuevo (2).

En función del objetivo que busquemos con la segmentación, el cual a su vez puede estar determinado por la extensión (y otras características) del texto, deberemos utilizar el carácter divisor que más se ajuste a nuestro objetivo. 

Aunque el más simple consiste en obtener una lista con las palabras del texto usando simplemente la instrucción split() (3), posiblemente uno de los de mayor utilidad en caso de texto extensos y complejos de forma sea el salto de línea (\n), para el que, ya sabemos, contamos con la función específica splitlines().

Lo cierto es que, combinando este criterio de separación por saltos de línea con la función de recomposición de la unidad del texto mediante join() (4), podemos intentar resolver una de las "limitaciones" que observamos cuando trabajamos con pdf multi-columna.

from PyPDF2 import PdfReader

#Acceso al documento
lector = PdfReader("pdf/EvalTDAH.pdf")
pag = len(lector.pages)
texto = ""

for pg in range(pag):
    pagina = lector.pages[pg]
    texto += pagina.extract_text()

#Variables para cargar info
pag = len(lector.pages)
meta = lector.metadata 
num_pal = len(texto)

#Imprimir en consola
print("DATOS DEL DOCUMENTO --------------------------")
print("Número de páginas",pag)
print("Número de palabras",num_pal)
print("METADATOS DEL DOCUMENTO --------------------")
print("Autor",meta.author)
print("Título",meta.title)
print("TEXTO completo -----------------------------------")
print(texto)

#Segmentación del contenido en función de las líneas

listalin = []
listalin = texto.splitlines()

#Recomposición de la unidad del texto
textofin = ""
textofin = " ".join(listalin)

#Mostrar el nuevo texto por pantalla
print(textofin)

Muy cierto que pasamos de un problema a otro, pero no pretendo aquí más que mostrar lo que resulta de combinar split() con join() en el manejo de textos amplios y complejos. Evidentemente se puede mejorar mucho el resultado, pero necesitamos trabajar más el script, así que, por el momento voy a considerarlo suficiente.


NOTAS

(1) También sabes tanto OOo Basic como Python cuentan con esta función para la segmentación de cadenas, que además funciona del mismo modo en ambos lenguajes. Para OOo Basic puedes consultar [esta entrada].
(2) Al contrario de lo que hicimos cuando segmentamos el contenido en función de las páginas del pdf [ver entrada anterior]
(3) La utilidad inmediata de este procedimiento es conocer el número de palabras del texto mediante la función len(), pero no el la única; hay todo un mundo de opciones detrás de esta segmentación.
(4) Vale para join() el enlace asociado a 1 en el cuerpo de la entrada y lo dicho en esa misma nota para split()

No hay comentarios:

Publicar un comentario

Comenta esta entrada