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 *