Cómo extraer texto de PDFs con Python ¡Fácil, rápido y gratis!

Por Administrador

Hola, hola Omesitos, bienvenidos a un nuevo tutorial, en el cual veremos cómo extraer texto de PDFs. Este tutorial es parte de una nueva sección del canal en el que vamos a hacer uso de herramientas o packages de Python para applicarlos en nuestro día a día, así que ¡vamos a por ello!.

Si en el día a día te has encontrado con la necesidad de extraer texto de un PDF rápidamente, pero has tenido que hacerlo manualmente, perdiendo mucho tiempo, o te has topado con herramientas costosas que no son prácticas, ¡este tutorial es para ti!. Hoy te enseñaré extraer ese tan deseado texto, de una forma rápida, fácil y completamente gratuita. ¡Estoy segura de que te va a encantar!  

¿Qué necesito para extraer texto de PDFs con Python? 

Para mantenerlo sencillo vamos a usar Google Colab, es decir, lo haremos online. Allí podremos programar en Python. Entonces necesitaremos:

¡Vamos con la programación! 

1. Instalar de PyPDF2 

    Lo primero que tendremos que hacer es instalar PyPDF2, para ello vamos a la primera celda y digitamos:

    !pip install PyPDF2 

    Esperamos a que se realice la instalación. 

    2. Conexión entre Google Colab y Drive 

      Para poder usar los archivos PDF que subimos a Drive, necesitaremos darle permisos a Google Colaboratory para que nos permita extraer esos archivos de Drive. Para ello tendremos que ejecutar la siguiente celda: 

      from google.colab import drive 
      drive.mount('/content/drive')

      ¿Cómo comprobamos que tengamos acceso a los archivos de Drive?. Vamos a Archivos, y veremos que ahora tenemos la carpeta “drive”, la desplegamos y tenemos “My Drive”. Volvemos a desplegar y podremos buscar la carpeta en donde están nuestros documentos. 

      3. Extraer texto de PDFs con Python

        Extraer texto de un archivo PDF puede parecer complicado, pero gracias a Python y a la librería PyPDF2, este proceso es rápido y sencillo. A continuación veremos como hacerlo:

        from PyPDF2 import PdfReader
        
        path = "/content/drive/MyDrive/pdf_de_entrada.pdf"
        reader = PdfReader(path)
        
        texto_extraido = ""
        
        for pagina in reader.pages:
            texto_extraido += pagina.extract_text()
        
        print(texto_extraido)

        En primer lugar importamos PdfReader que proviene de la librería PyPDF2. Es la herramienta que utilizaremos para leer archivos PDF y extraer el contenido de sus páginas.

        En la línea 3, definimos la ruta donde está ubicado el archivo PDF, del cual vayamos a extraer el texto. Mientas que en la línea 4 inicializamos el lector de PDF usando PdfReader. Esto crea un objeto que contiene todas las páginas y nos permitirá extraer el texto de cada una.

        En la línea 6, inicializamos una variable vacía llamada texto_extraido. Esta variable servirá para acumular todo el texto extraído de las páginas del PDF.

        En las líneas 8 y 9, usamos un bucle for para recorrer cada página del PDF:

        1. reader.pages contiene todas las páginas del archivo PDF.
        2. En cada iteración, la variable pagina representa una página del PDF.
        3. Utilizamos el método pagina.extract_text() para extraer el texto de esa página.
        4. El texto extraído se concatena a la variable texto_extraido con +=.

         Para finalizar este bloque de código tenemos la línea 11, en la cual imprimimos el texto acumulado en texto_extraido. Este paso se realiza después de que el bucle haya procesado todas las páginas.

        Si ejecutamos la celda, vamos a obtener un resultado como el siguiente:

        Entonces a la izquierda tenemos el PDF de entrada, y a la derecha el texto extraído de ese PDF, que se muestra en consola.

        De PDF a Word: Guarda el texto extraído en un archivo editable

        Extraer texto de un PDF no es el único paso que podemos dar. Con Python, también podemos guardar ese texto en un archivo Word de forma sencilla. Esto resulta muy útil si deseas editar o compartir el contenido en un formato más accesible. A continuación te enseño cómo hacerlo:

        En primer lugar tendremos que instalar el package python-docx, esto lo haremos con pip:

        !pip install python-docx

        Una vez instalado, pasamos con el programa.

        from docx import Document
        
        # Crear un nuevo archivo Word
        doc = Document()
        
        # Agregar el texto extraído al documento
        doc.add_paragraph(texto_extraido)
        
        # Guardar el documento en un archivo Word
        nuevo_path = path.replace(".pdf", "_texto_extraído.docx")
        doc.save(nuevo_path)

        En la línea 1, importamos la función Document de la librería python-docx. Esta función nos permite trabajar con archivos Word: crearlos, editarlos y guardarlos.

        En la línea 4, inicializamos un nuevo documento Word con la función Document. Este objeto representará el archivo Word donde guardaremos el texto extraído del PDF.

        En la línea 7, usamos el método add_paragraph() del objeto doc para añadir el texto extraído del PDF como un nuevo párrafo en el documento Word.

        En las líneas 10 y 11, creamos un nuevo nombre para el archivo Word reemplazando la extensión .pdf por _texto_extraído.docx. Luego usamos el método save() para guardar el documento Word en esa ubicación. Por ejemplo, si el archivo PDF se llamaba documento.pdf, el archivo Word resultante se llamará documento_texto_extraído.docx.

        Si ejecutamos, obtendremos el archivo de Word editable, con el texto del PDF:

        Limitaciones al Usar PyPDF2 para Extraer Texto de PDFs

        Aunque PyPDF2 es una herramienta muy útil para trabajar con archivos PDF, es importante entender que tiene ciertas limitaciones que pueden afectar la calidad y utilidad del texto extraído. A continuación, te presento algunos de los desafíos más comunes:

        1. PDFs Basados en Imágenes

        PyPDF2 no puede extraer texto de PDFs que contienen imágenes en lugar de texto digital. Esto ocurre con archivos generados a partir de documentos escaneados, ya que el texto en realidad es una imagen, no un dato estructurado. Para este tipo de archivos, se requiere una herramienta de OCR (Reconocimiento Óptico de Caracteres) como Tesseract, que puede convertir imágenes en texto editable.

        2. Diseño Complejo de PDFs

        Los PDFs con estructuras no lineales, como columnas, tablas, gráficos o diseños complejos, pueden generar texto desorganizado.

        3. PDFs Protegidos o Encriptados

        Si el archivo PDF está protegido con contraseña o tiene restricciones para copiar contenido, PyPDF2 no podrá extraer el texto.

        4. Velocidad y Eficiencia

        El procesamiento de documentos muy extensos con PyPDF2 puede ser lento, ya que la librería analiza cada página de forma individual. Esto se vuelve notable en PDFs con cientos o miles de páginas. Por ello, si trabajas con documentos extensos frecuentemente, considera dividir el archivo en partes más pequeñas o explorar librerías más optimizadas.

        5. Pérdida del Formato Original

        PyPDF2 solo extrae el texto del PDF y no replica el diseño o formato del archivo original. Esto puede incluir:

        • Pérdida de saltos de línea y separación de párrafos.
        • Desorganización en tablas y gráficos.
        • Ausencia de estilos como negritas, cursivas, tamaños de fuente y otros elementos visuales.

        Y bien, hemos llegado al final de este tutorial. ¡Espero que te haya gustado y lo hayas encontrado útil!. Nos vemos en un siguiente post.

        Referencias