Python para NLP: Trabajar con archivos de texto y PDF

Este es el primer artículo de mi serie de artículos sobre Python para el procesamiento de lenguaje natural (PNL). 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 .

Leyendo un archivo de texto

Cree un archivo de texto con el siguiente texto y guárdelo en su directorio local con la 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, almacené el archivo llamado "myarchivo.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 usar la función incorporada de Python openSi ejecuta el fragmento de código anterior y no ve un error, eso significa que su archivo se abrió con éxito. Asegúrese de cambiar la ruta del archivo a la ubicación en la que guardó el archivo de texto.
Veamos ahora qué se almacena en la myfilevariable:
print(myfile)  
La salida se ve así:
<_io.TextIOWrapper name='D:\\myfile.txt' mode='r' encoding='cp1252'>  
La salida lee que la myfilevariable es una envoltura para el myfile.txtarchivo 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'  
Cada vez que obtienes Errno 2, puede haber dos razones. O su archivo no existe o usted proporcionó la ruta de archivo incorrecta a la openfunción.
Ahora, vamos a leer los contenidos del archivo. Para hacerlo, necesita llamar a la read()función en la myfilevariable, 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 intenta volver a llamar al readmétodo, verá que no se imprimirá nada en la consola:
print(myfile.read())  
Esto se debe a que una vez que se llama al readmétodo, el cursor se mueve al final del texto. Por lo tanto, cuando vuelve a llamar a leer, no se muestra 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()método y pase 0 como argumento. Esto moverá el cursor de nuevo al inicio del archivo de texto. Mira 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 ello, debes llamar al close()método.
myfile.close()  
Leyendo un archivo línea por línea
En lugar de leer todos los contenidos del archivo a la vez, también podemos leer los contenidos del archivo línea por línea . Para hacerlo, debemos ejecutar el readlines()método, que devuelve cada línea del archivo de texto como elemento de la 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 la lista:
['Welcome to Natural Language Processing\n', 'It is one of the most exciting research areas as of today\n', 'We will see how Python can be used to work with text files.']
En muchos casos, esto hace que sea más fácil trabajar 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 ww+El primero abre un archivo en el modo de escritura, mientras que el último abre el archivo en modo de lectura y escritura. Si el archivo no existe, será creado. Es importante mencionar que si abre un archivo que ya contiene texto con ww+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 eliminó todo el contenido del archivo. Si quieres evitar esto, entonces querrás adjuntar un texto, que también cubro a continuación.
Ahora, escribamos 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 la secuencia de comandos anterior, escribimos texto en el archivo y luego llamamos al seek()método para cambiar el cursor al inicio y luego llamamos al readmé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  
Muchas veces, no es necesario que elimine el contenido existente del archivo. En su lugar, es posible que deba agregar el contenido al final del archivo.
Para hacerlo, necesita abrir el archivo con el a+modo que se refiere a adjuntar más leer.
De nuevo, cree 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ás los contenidos del archivo.
A continuación, vamos a añadir un poco 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 la salida, 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())
Al usar la withpalabra clave, como se muestra arriba, no necesita 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 de lenguaje natural. De forma predeterminada, Python no viene con ninguna biblioteca integrada que pueda usarse para leer o escribir archivos PDF. Más bien, podemos usar la biblioteca PyPDF2 .
Antes de que podamos usar la biblioteca PyPDF2, necesitamos instalarla. Si está utilizando el instalador pip, puede usar 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 indicador de comandos de conda:
$ conda install -c conda-forge pypdf2
Nota : Es importante mencionar aquí que se puede crear un documento PDF a partir de diferentes fuentes, como documentos de procesamiento de textos, imágenes, etc. En este artículo, solo trataremos los documentos PDF creados con procesadores de texto. Para los documentos PDF creados con imágenes, hay otras bibliotecas especializadas que explicaré en un artículo posterior. Por ahora, solo trabajaremos con los documentos PDF generados usando procesadores de texto.
Como un documento ficticio para jugar, puedes descargar el PDF desde este enlace:
Descargue el documento localmente en la raíz de la unidad "D".

Leyendo un documento PDF

Para leer un documento PDF, primero tenemos que abrirlo como cualquier archivo ordinario. Mira el siguiente script:
import PyPDF2  
mypdf = open('D:\Lorem-Ipsum.pdf', mode='rb')  
Es importante mencionar que al abrir un archivo PDF, el modo debe configurarse en rb, lo que significa "leer binario", ya que la mayoría de los archivos PDF están en formato binario.
Una vez que se abra el archivo, necesitaremos llamar a la PdfFileReader()función de la biblioteca PyPDF2, como se muestra a continuación.
pdf_document = PyPDF2.PdfFileReader(mypdf)  
Ahora usando la pdf_documentvariable, podemos realizar una variedad de funciones de lectura. Por ejemplo, para obtener el número total de páginas en el documento PDF, podemos usar el numPagesatributo:
pdf_document.numPages  
Ya que solo tenemos una página 1, 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 la getPage()función.
A continuación, puede llamar a la extractText()función para extraer el texto de esa página en particular.
La siguiente secuencia de comandos 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 la salida, 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 los contenidos de nuestro documento PDF y luego los escribiremos 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 utilizando el siguiente script:
pdf_document_writer = PyPDF2.PdfFileWriter()  
La secuencia de comandos 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 wbpermisos (escribir binario). Abrir un archivo con tales permisos crea un nuevo archivo si no existe uno.
pdf_output_file = open('new_pdf_file.pdf', 'wb')  
Finalmente, necesitamos llamar al write()método en el objeto de escritura de PDF y pasarle el archivo recién creado.
pdf_document_writer.write(pdf_output_file )  
Cerca tanto el mypdfpdf_output_filelos archivos y vaya al directorio de trabajo del programa. Deberías ver un nuevo archivo new_pdf_file.pdfen tu editor. Abra el archivo y verá que contiene el contenido de la primera página de nuestro PDF original.
Intentemos leer los contenidos de nuestro documento PDF recién creado:
import PyPDF2

mypdf = open(r'C:\Users\Admin\new_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. Descargue el archivo PDF desde este enlace:
Guárdalo en tu directorio local. El nombre del archivo descargado será "lipsum.pdf".
Ejecute el siguiente script para ver el número de páginas en el archivo:
import PyPDF2

mypdf = open(r'D:\lipsum.pdf', mode='rb')  
pdf_document = PyPDF2.PdfFileReader(mypdf)  
pdf_document.numPages  
En la salida, 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 de lenguaje natural. En este artículo, explicamos cómo podemos trabajar con los archivos de texto y PDF usando Python. Vimos cómo leer y escribir texto y archivos PDF.
En el próximo artículo , comenzaremos nuestra discusión acerca de algunas otras tareas de PNL, como la derivación, la lematización, la tokenización con la biblioteca spaCy.

Acerca de: Programator

Somos Instinto Programador

0 comentarios:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Con tecnología de Blogger.