Preparando un índice de libros usando Python

Probablemente se haya topado con algunos de esos grandes libros de texto y haya notado el índice al final. Con una copia impresa, es bueno tener un índice para navegar rápidamente a la página deseada. Recientemente publiqué un libro muy corto, y cuando se trató de establecer el índice, la tarea me pareció desalentadora, aunque el libro es muy corto. El libro todavía no tiene un índice de todos modos..

Si ha estado siguiendo mis artículos, notará que principalmente escribo sobre Python y cómo puede ayudarnos a resolver diferentes problemas de una manera sencilla. Así que veamos cómo podemos establecer un índice de libro usando Python.

Sin más preámbulos, comencemos..

¿Qué es un índice de libros??

soyEstoy bastante seguro de que la mayoría de ustedes sabe qué es un índice de libros, pero solo quiero aclarar rápidamente este concepto..

UNA El índice del libro es simplemente una colección de palabras y / o frases que se consideran importantes para el libro, junto con sus ubicaciones en el libro. El índice no contiene cada palabra / frase en el libro. El motivo de ello se muestra en la siguiente sección..

Lo que hace un buen índice de libros?

¿Qué sucede si tiene un índice a través del cual puede encontrar la ubicación de cada palabra o frase en el libro? ¿No sería eso considerado como el índice de elección? Incorrecto!

El índice de elección, o lo que se consideraría un buen índice, es el que apunta a las palabras y frases importantes en el libro. Usted podría estar cuestionando la razón de eso. Tomemos un ejemplo. Digamos que tenemos un libro que consta solo de la siguiente oración:

Mi libro es corto

¿Qué pasaría si tratamos de indexar cada palabra y frase en esa oración tan corta, suponiendo que la ubicación es el número de palabra en la oración? Este es el índice que tendríamos en este caso:

mi libro es corto: 1 mi libro es: 1 mi libro: 1 mi: 1 corto: 4 es corto: 3 es: 3 libro es corto: 2 libro es: 2 libro: 2

¡Del ejemplo anterior, podemos ver que tal índice sería más grande que el libro mismo! Por lo tanto, un buen índice sería uno que contenga las palabras y frases consideradas importantes para el lector..

Preparar

Kit de herramientas de lenguaje natural (NLTK)

En este tutorial, utilizaremos la biblioteca del kit de herramientas de lenguaje natural (NLTK), que se utiliza para trabajar con datos en lenguaje humano. Como se menciona en la documentación, NLTK ha sido llamada “una herramienta maravillosa para enseñar y trabajar en lingüística computacional usando Python” y “una biblioteca increíble para jugar con lenguaje natural”.

Actualmente estoy escribiendo este tutorial desde mi máquina Ubuntu, y los pasos para instalar NLTK en esta sección serán relevantes para el sistema operativo Ubuntu. Pero no se preocupe, puede encontrar los pasos para instalar NLTK en otros sistemas operativos en el sitio web de NLTK..

Para instalar NLTK, voy a utilizar pip. Si aún no tiene instalado pip, puede usar el siguiente comando en su terminal para instalar pipa:

sudo easy_install3 pip

Para asegurarse de que tiene instalado pip, escriba el siguiente comando:

pip --version

Deberías obtener algo similar a lo siguiente:

pip 8.1.2 de /usr/local/lib/python3.5/dist-packages/pip-8.1.2-py3.5.egg (python 3.5)

Ahora, para instalar NLTK, simplemente ejecute el siguiente comando en su terminal:

instalación de sudo pip -U nltk

Puede probar la instalación de nltk escribiendo pitón, y luego importando nltk en su terminal. Si lo consigues ImportError: No hay módulo llamado nltk, este hilo puede ayudarte.

Archivo de prueba

En este punto, necesitamos un archivo de prueba (libro) para usar para crear un índice de libro. Agarraré este libro: La tasa de cambio de la tasa de cambio por la EFF. Puedes descargar el archivo de texto del libro desde Dropbox. Por supuesto, puede utilizar cualquier libro de su elección; Solo necesitas algo para experimentar en este tutorial..

Programa

Comencemos con la parte interesante de este tutorial, el programa que nos ayudará a formar el índice del libro. Lo primero que queremos hacer es encontrar la frecuencia de palabras en el libro. He mostrado cómo podemos hacer eso en otro tutorial, pero quiero mostrarle cómo podemos hacerlo usando la biblioteca NLTK.

Esto puede hacerse de la siguiente manera:

importar nltk, colecciones de nltk.collocations importar * frequencies = collections.Counter () con open ('bigd10.txt') como libro: read_book = book.read () words = nltk.word_tokenize (read_book) para w en palabras: frequencies [w] + = 1 impresión (frecuencias) 

Cuando ejecute el programa, notará que tendremos una lista muy larga de palabras y sus frecuencias..

Antes de continuar, analicemos un poco el código anterior. En la siguiente línea:

frecuencias = colecciones.Contador ()

Estamos tratando de usar el Mostrador() función para obtener las frecuencias de palabras en el libro (cuántas veces la palabra ocurrió en el libro).

word_tokenize, por otro lado, divide las oraciones en sus partes constituyentes. Tomemos un ejemplo simple para ver cómo word_tokenize en realidad funciona:

from nltk.tokenize import word_tokenize sentence = 'Mi nombre es Abder. Me gusta el pitón. Es una impresión de lenguaje de programación bastante agradable (word_tokenize (oración))

La salida del script anterior es la siguiente:

['My', 'name', 'is', 'Abder', '.', 'I', 'like', 'Python', '.', 'It', "'s', 'a', 'bonito', 'bonito', 'programación', 'lenguaje']

Luego hacemos un bucle a través de las palabras y encontramos la frecuencia de aparición de cada palabra.
¿Qué pasa con las frases (combinación de palabras)? Los que se llaman colocaciones (una secuencia de palabras que ocurren juntas a menudo). Un ejemplo de colocaciones es bigramas, eso es una lista de pares de palabras. Similar a eso es trigramas (una combinación de tres palabras), y así sucesivamente (es decir, n-gramas).

Digamos que queremos extraer los bigramas de nuestro libro. Podemos hacer eso de la siguiente manera:

bigram = nltk.collocations.BigramAssocMeasures () finder = BigramCollocationFinder.from_words (palabras) finder.apply_freq_filter (2)

El número 2 en el apply_freq_filter () La función nos dice que ignoremos todos los bigramas que ocurren menos de dos veces en el libro..

Si queremos encontrar el 30 La mayoría de los bigramas que ocurren en el libro, podemos usar la siguiente declaración de código:

imprimir (finder.nbest (bigram.pmi, 30))

Finalmente, si nos gustaría encontrar la ubicación, que es en nuestro caso donde aparece la palabra o frase en el libro (no el número de la página), podemos hacer lo siguiente:

print (read_book.index ('computadora')) print (read_book.index ('Informes asistidos'))

Las declaraciones anteriores parecen devolver la ubicación de la palabra en una oración, similar a lo que hemos visto en nuestro ejemplo de oraciones cortas al comienzo del tutorial.

Poniendolo todo junto

Pongamos lo que hemos aprendido en un solo script de Python. La siguiente secuencia de comandos leerá nuestro libro y devolverá las frecuencias de palabras, junto con los 30 bigramas más frecuentes del libro, además de la ubicación de una palabra y una frase en el libro:

importar nltk, colecciones de nltk.collocations importar * frequencies = collections.Counter () con open ('bigd10.txt') como libro: read_book = book.read () words = nltk.word_tokenize (read_book) para w en palabras: frequencies [w] + = 1 bigram = nltk.collocations.BigramAssocMeasures () finder = BigramCollocationFinder.from_words (palabras) finder.apply_freq_filter (2) print ('Esas son las palabras y la frecuencia de aparición en el libro:') print (frecuencias) ) impresión ('############################################## ################### ') print (' Esos son los 30 bigrams que más aparecen en el libro: ') print (finder.nbest (bigram.pmi, 30)) print (read_book.index ('computadora')) print (read_book.index ('Informes asistidos')) 

Conclusión

Como hemos visto en este tutorial, incluso un texto breve puede ser muy desalentador cuando se trata de crear un índice para ese texto. Además, una forma automatizada para crear el índice óptimo para el libro podría no ser lo suficientemente viable.

Pudimos resolver este problema mediante el uso de Python y la biblioteca NLTK, donde pudimos seleccionar las mejores palabras y frases para el índice del libro en función de su frecuencia de aparición (es decir, su importancia) en el libro..

Por supuesto, puede hacer más con NLTK, como se muestra en la documentación de la biblioteca. También puede consultar el libro Procesamiento en lenguaje natural con Python si desea profundizar en esta biblioteca..