Python para PNL: trabajar con archivos de texto y PDF

    Este es el primer artículo de mi serie de artículos sobre Python para el procesamiento del lenguaje natural (NLP). En este artículo, comenzaremos con los conceptos básicos de Python para NLP. Veremos cómo podemos trabajar con archivos de texto simples y archivos PDF usando Python.

    Trabajar con archivos de texto

    Los archivos de texto son probablemente los tipos más básicos de archivos que encontrará en sus esfuerzos de PNL. En esta sección, veremos cómo leer un archivo de texto en Python, crear un archivo de texto y escribir datos en el archivo de texto.

    Leer un archivo de texto

    Cree un archivo de texto con el siguiente texto y guárdelo en su directorio local con una extensión “.txt”.

    Welcome to Natural Language Processing
    It is one of the most exciting research areas as of today
    We will see how Python can be used to work with text files.
    

    En mi caso, guardé el archivo llamado “myfile.txt” en mi directorio raíz “D:”.

    Leer todo el contenido del archivo

    Ahora veamos cómo podemos leer todo el contenido del archivo. El primer paso es especificar la ruta del archivo, como se muestra a continuación:

    myfile = open("D:myfile.txt")
    

    Para abrir el archivo, puede utilizar la función integrada de Python open función. Si ejecuta el fragmento de código anterior y no ve un error, eso significa que su archivo se abrió correctamente. Asegúrese de cambiar la ruta del archivo a la ubicación en la que guardó su archivo de texto.

    Veamos ahora qué se almacena en el myfile variable:

    print(myfile)
    

    La salida se ve así:

    <_io.TextIOWrapper name="D:\myfile.txt" mode="r" encoding='cp1252'>
    

    La salida dice que myfile variable es una envoltura de la myfile.txt archivo y abre el archivo en modo de solo lectura.

    Si especifica la ruta de archivo incorrecta, es probable que obtenga el siguiente error:

    myfile222 = open("D:myfile222.txt")
    print(myfile222)
    
    FileNotFoundError: [Errno 2] No such file or directory: 'D:\myfile222.txt'
    

    Siempre que obtenga Errno 2, puede haber dos razones. O su archivo no existe o proporcionó la ruta de archivo incorrecta al open función.

    Ahora, leamos el contenido del archivo. Para hacerlo, debe llamar al read() función en el myfile variable, como se muestra a continuación:

    myfile = open("D:myfile.txt")
    print(myfile.read())
    

    En la salida, debería ver el texto del archivo, como se muestra a continuación:

    Welcome to Natural Language Processing
    It is one of the most exciting research areas as of today
    We will see how Python can be used to work with text files.
    

    Ahora, si intentas llamar al read de nuevo, verá que no se imprimirá nada en la consola:

    print(myfile.read())
    

    Esto se debe a que una vez que llamas al read método, el cursor se mueve al final del texto. Por lo tanto, cuando vuelva a llamar a leer, no se mostrará nada ya que no hay más texto para imprimir.

    Una solución a este problema es que después de llamar al read() método, llame al seek() y pase 0 como argumento. Esto moverá el cursor de regreso al inicio del archivo de texto. Mire el siguiente script para ver cómo funciona esto:

    myfile = open("D:myfile.txt")
    print(myfile.read())
    myfile.seek(0)
    print(myfile.read())
    

    En la salida, verá el contenido del archivo de texto impreso dos veces.

    Una vez que haya terminado de trabajar con un archivo, es importante cerrar el archivo para que otras aplicaciones puedan acceder al archivo. Para hacerlo, debe llamar al close() método.

    myfile.close()
    

    Leer un archivo línea por línea

    En lugar de leer todo el contenido del archivo a la vez, también podemos leer el contenido del archivo línea por línea. Para hacerlo, necesitamos ejecutar el readlines() método, que devuelve cada línea en el archivo de texto como elemento de lista.

    myfile = open("D:myfile.txt")
    print(myfile.readlines())
    

    En la salida, verá cada línea en el archivo de texto como un elemento de lista:

    ['Welcome to Natural Language Processingn', 'It is one of the most exciting research areas as of todayn', 'We will see how Python can be used to work with text files.']
    

    En muchos casos, esto facilita el trabajo con el texto. Por ejemplo, ahora podemos iterar fácilmente a través de cada línea e imprimir la primera palabra en la línea.

    myfile = open("D:myfile.txt")
    for lines in myfile:
        print(lines.split()[0])
    

    La salida se ve así:

    Welcome
    It
    We
    

    Escribir en un archivo de texto

    Para escribir en un archivo de texto, simplemente tiene que abrir un archivo con el modo establecido en w o w+. El primero abre un archivo en el modo de escritura, mientras que el segundo abre el archivo en modo de lectura y escritura. Si el archivo no existe, se creará. Es importante mencionar que si abre un archivo que ya contiene algún texto con w o w+ modo, se eliminará todo el contenido del archivo existente, como se muestra a continuación:

    myfile = open("D:myfile.txt", 'w+')
    print(myfile.read())
    

    En la salida, no verá nada impreso en la pantalla ya que el archivo se abre con el w+ modo, se ha eliminado todo el contenido del archivo. Si desea evitar esto, entonces querrá agregar texto en su lugar, que también cubro a continuación.

    Ahora, escriba algo de contenido en el archivo usando el write() método.

    myfile = open("D:myfile.txt", 'w+')
    print(myfile.read())
    myfile.write("The file has been rewritten")
    myfile.seek(0)
    print(myfile.read())
    

    En el script anterior, escribimos texto en el archivo y luego llamamos al seek() método para volver a mover el cursor al inicio y luego llamar al read método para leer el contenido del archivo. En la salida, verá el contenido recién agregado como se muestra a continuación:

    The file has been rewritten
    

    A menudo, no es necesario simplemente borrar el contenido existente del archivo. Más bien, es posible que deba agregar el contenido al final del archivo.

    Para hacerlo, debe abrir el archivo con a+ modo que se refiere a agregar más lectura.

    Vuelva a crear un archivo con el siguiente contenido y guárdelo como “myfile.txt” en el directorio “D”:

    Welcome to Natural Language Processing
    It is one of the most exciting research areas as of today
    We will see how Python can be used to work with text files.
    

    Ejecute el siguiente script para abrir el archivo con el modo de agregar:

    myfile = open("D:myfile.txt", 'a+')
    myfile.seek(0)
    print(myfile.read())
    

    En la salida, verá el contenido del archivo.

    A continuación, agreguemos algo de texto al archivo.

    myfile.write("nThis is a new line")
    

    Ahora volvamos a leer el contenido del archivo:

    myfile.seek(0)
    print(myfile.read())
    

    En el resultado, verá la línea recién agregada al final del texto como se muestra a continuación:

    Welcome to Natural Language Processing
    It is one of the most exciting research areas as of today
    We will see how Python can be used to work with text files.
    This is a new line
    

    Finalmente, antes de pasar a la siguiente sección, veamos cómo se puede usar el administrador de contexto para cerrar automáticamente el archivo después de realizar las operaciones deseadas.

    with open("D:myfile.txt") as myfile:
        print(myfile.read())
    

    Utilizando la with palabra clave, como se muestra arriba, no es necesario cerrar explícitamente el archivo. Más bien, el script anterior abre el archivo, lee su contenido y luego lo cierra automáticamente.

    Trabajar con archivos PDF

    Además de los archivos de texto, a menudo necesitamos trabajar con archivos PDF para realizar diferentes tareas de procesamiento del lenguaje natural. De forma predeterminada, Python no viene con ninguna biblioteca incorporada que pueda usarse para leer o escribir archivos PDF. Más bien, podemos usar el PyPDF2 biblioteca.

    Antes de que podamos usar la biblioteca PyPDF2, necesitamos instalarla. Si está utilizando el instalador pip, puede utilizar el siguiente comando para instalar la biblioteca PyPDF2:

    $ pip install PyPDF2
    

    Alternativamente, si está utilizando Python desde el entorno Anaconda, puede ejecutar el siguiente comando en el símbolo del sistema conda:

    $ conda install -c conda-forge pypdf2
    

    Nota: Es importante mencionar aquí que un documento PDF se puede crear a partir de diferentes fuentes como documentos de procesamiento de texto, imágenes, etc. En este artículo, solo nos ocuparemos de los documentos PDF creados con procesadores de texto. Para los documentos PDF creados mediante imágenes, existen otras bibliotecas especializadas que explicaré en un artículo posterior. Por ahora, solo trabajaremos con los documentos PDF generados mediante procesadores de texto.

    Como documento ficticio para jugar, puede descargar el PDF desde este enlace:

    http://www.bavtailor.com/wp-content/uploads/2018/10/Lorem-Ipsum.pdf

    Descargue el documento localmente en la raíz de la unidad “D”.

    Leer un documento PDF

    Para leer un documento PDF, primero tenemos que abrirlo como cualquier archivo normal. Mira el siguiente guión:

    import PyPDF2
    mypdf = open('D:Lorem-Ipsum.pdf', mode="rb")
    

    Es importante mencionar que al abrir un archivo PDF, el modo debe estar configurado en rb, que significa “leer binario”, ya que la mayoría de los archivos PDF están en formato binario.

    Una vez que se abre el archivo, necesitaremos llamar al PdfFileReader() función de la biblioteca PyPDF2, como se muestra a continuación.

    pdf_document = PyPDF2.PdfFileReader(mypdf)
    

    Ahora usando el pdf_document variable, podemos realizar una variedad de funciones de lectura. Por ejemplo, para obtener el número total de páginas del documento PDF, podemos usar el numPages atributo:

    pdf_document.numPages
    

    Como solo tenemos una página, en nuestro documento PDF, verá 1 en la salida.

    Finalmente, para extraer el texto del documento PDF, primero debe obtener la página del documento PDF utilizando el getPage() función.

    A continuación, puede llamar al extractText() función para extraer el texto de esa página en particular.

    El siguiente script extrae el texto de la primera página del PDF y luego lo imprime en la consola.

    first_page = pdf_document.getPage(0)
    
    print(first_page.extractText())
    

    En el resultado, debería ver el texto de la primera página del PDF.

    Escribir en un documento PDF

    No es posible escribir directamente cadenas de Python en un documento PDF utilizando la biblioteca PyPDF2 debido a las fuentes y otras restricciones. Sin embargo, por el bien de la demostración, leeremos el contenido de nuestro documento PDF y luego escribiremos ese contenido en otro archivo PDF que crearemos.

    Primero leamos el contenido de la primera página de nuestro documento PDF.

    import PyPDF2
    
    mypdf = open('D:Lorem-Ipsum.pdf', mode="rb")
    pdf_document = PyPDF2.PdfFileReader(mypdf)
    pdf_document.numPages
    
    page_one = pdf_document.getPage(0)
    

    El script anterior lee la primera página de nuestro documento PDF. Ahora podemos escribir el contenido de la primera página en un nuevo documento PDF usando el siguiente script:

    pdf_document_writer = PyPDF2.PdfFileWriter()
    

    El script anterior crea un objeto que se puede usar para escribir contenido en un archivo PDF. Primero, agregaremos una página a este objeto y le pasaremos la página que recuperamos del otro PDF.

    pdf_document_writer.addPage(page_one)
    

    A continuación, necesitamos abrir un nuevo archivo con wb (escribir binarios) permisos. Abrir un archivo con esos permisos crea un nuevo archivo si no existe.

    pdf_output_file = open('new_pdf_file.pdf', 'wb')
    

    Finalmente, necesitamos llamar al write() en el objeto del escritor de PDF y páselo al archivo recién creado.

    pdf_document_writer.write(pdf_output_file)
    

    Cierre tanto el mypdf y pdf_output_file archivos y vaya al directorio de trabajo del programa. Debería ver un nuevo archivo new_pdf_file.pdf en su editor. Abra el archivo y verá que contiene el contenido de la primera página de nuestro PDF original.

    Intentemos leer el contenido de nuestro documento PDF recién creado:

    import PyPDF2
    
    mypdf = open(r'C:UsersAdminnew_pdf_file.pdf', mode="rb")
    
    pdf_document = PyPDF2.PdfFileReader(mypdf)
    pdf_document.numPages
    page_one = pdf_document.getPage(0)
    
    print(page_one.extractText())
    

    Trabajemos ahora con un archivo PDF más grande. Descarga el archivo PDF desde este enlace:

    http://ctan.math.utah.edu/ctan/tex-archive/macros/latex/contrib/lipsum/lipsum.pdf

    Guárdelo en su directorio local. El nombre del archivo descargado será “lipsum.pdf”.

    Ejecute el siguiente script para ver el número de páginas del archivo:

    import PyPDF2
    
    mypdf = open(r'D:lipsum.pdf', mode="rb")
    pdf_document = PyPDF2.PdfFileReader(mypdf)
    pdf_document.numPages
    

    En el resultado, verá 87 impresos ya que hay 87 páginas en el PDF. Imprimamos todas las páginas del documento en la consola:

    import PyPDF2
    
    mypdf = open(r'D:lipsum.pdf', mode="rb")
    pdf_document = PyPDF2.PdfFileReader(mypdf)
    
    for i in range(pdf_document.numPages):
        page_to_print = pdf_document.getPage(i)
        print(page_to_print.extractText())
    

    En la salida, verá todas las páginas del documento PDF, impresas en la pantalla.

    Conclusión

    Leer y escribir documentos de texto es un paso fundamental para desarrollar aplicaciones de procesamiento del lenguaje natural. En este artículo, explicamos cómo podemos trabajar con archivos de texto y PDF usando Python. Vimos cómo leer y escribir archivos de texto y PDF.

    En el próximo artículo, comenzaremos nuestra discusión sobre algunas otras tareas de PNL, como derivación, lematización y tokenización con la biblioteca spaCy.

     

    Etiquetas:

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *