Vous avez probablement croisé quelques-uns de ces gros manuels et remarqué l'index à la fin. Avec une copie papier, il est agréable de disposer d’un tel index pour naviguer rapidement vers la page souhaitée. J'ai récemment publié un livre très court et, lorsqu'il a fallu définir l'index, la tâche semblait ardue, même si le livre est très court. Le livre n'a pas encore d'index.
Si vous avez suivi mes articles, vous remarquerez que je parle principalement de Python et de la façon dont cela peut nous aider à résoudre différents problèmes de manière simple. Voyons maintenant comment définir un index de livre à l'aide de Python.
Sans plus tarder, commençons.
je suisJe suis sûr que la plupart d'entre vous savent ce qu'est un index de livres, mais je veux juste clarifier rapidement ce concept..
UNE index de livre est simplement un ensemble de mots et / ou de phrases considérés comme importants pour le livre, ainsi que leur emplacement dans le livre. L'index ne contient pas tous les mots / phrases du livre. La raison en est montrée dans la section suivante.
Et si vous aviez un index grâce auquel vous pouvez trouver l’emplacement de chaque mot ou phrase du livre? Cela ne serait-il pas considéré comme un indice de choix? Faux!
L'indice de choix, ou ce qui serait considéré comme un bon indice, est celui qui pointe vers les mots et les phrases importants du livre. Vous vous demandez peut-être pourquoi. Prenons un exemple. Disons que nous avons un livre qui ne comprend que la phrase suivante:
Mon livre est court
Que se passerait-il si nous essayions d'indexer chaque mot et chaque phrase dans cette phrase très courte, en supposant que l'emplacement correspond au numéro du mot dans la phrase? Voici l'indice que nous aurions dans ce cas:
mon livre est court: 1 mon livre est: 1 mon livre: 1 mon: 1 court: 4 est court: 3 est: 3 livre est court: 2 livre c'est: 2 livre: 2
Dans l'exemple ci-dessus, nous pouvons voir qu'un tel index serait plus grand que le livre lui-même! Donc, un bon index serait celui qui contiendrait les mots et les phrases considérés comme importants pour le lecteur..
Dans ce didacticiel, nous allons utiliser la bibliothèque NLTK (Natural Language Toolkit), qui permet de travailler avec des données en langage humain. Comme mentionné dans la documentation, NLTK a été qualifié de «formidable outil d’enseignement et de travail en linguistique informatique utilisant Python» et de «formidable bibliothèque pour jouer avec le langage naturel».
J'écris actuellement ce tutoriel à partir de ma machine Ubuntu, et les étapes pour installer NLTK dans cette section seront pertinentes pour le système d'exploitation Ubuntu. Mais ne vous inquiétez pas, vous pouvez trouver les étapes pour installer NLTK sur d’autres systèmes d’exploitation sur le site Web de NLTK..
Pour installer NLTK, je vais utiliser pip. Si vous n'avez pas déjà installé pip, vous pouvez utiliser la commande suivante dans votre terminal pour installer pépin
:
sudo easy_install3 pip
Pour vous assurer que pip est installé, tapez la commande suivante:
pip --version
Vous devriez obtenir quelque chose de similaire à ce qui suit:
pip 8.1.2 à partir de /usr/local/lib/python3.5/dist-packages/pip-8.1.2-py3.5.egg (python 3.5)
Maintenant, pour installer NLTK, exécutez simplement la commande suivante dans votre terminal:
sudo pip installer -U nltk
Vous pouvez tester l’installation de nltk en tapant python
, puis en important nltk dans votre terminal. Si vous obtenez ImportError: Aucun module nommé nltk
, ce fil pourrait vous aider.
À ce stade, nous avons besoin d’un fichier test (livre) à utiliser pour créer un index de livre. Je vais prendre ce livre: Le taux de variation du taux de variation par l'EFF. Vous pouvez télécharger le fichier texte du livre à partir de Dropbox. Vous pouvez bien sûr utiliser n'importe quel livre de votre choix; vous avez juste besoin de quelque chose à expérimenter dans ce tutoriel.
Commençons par la partie intéressante de ce tutoriel, le programme qui nous aidera à former l’index des livres. La première chose que nous voulons faire est de trouver le mot fréquence dans le livre. J'ai montré comment nous pouvons le faire dans un autre tutoriel, mais je veux vous montrer comment nous pouvons le faire en utilisant la bibliothèque NLTK.
Cela peut être fait comme suit:
importer nltk, collections de nltk.collocations importer * fréquences = collections.Counter () avec open ('bigd10.txt') comme livre: read_book = book.read () words = nltk.word_tokenize (read_book) pour w en mots: fréquences [w] + = 1 empreinte (fréquences)
Lorsque vous exécuterez le programme, vous remarquerez que nous aurons une très longue liste de mots et leurs fréquences..
Avant d'aller plus loin, analysons un peu le code ci-dessus. Dans la ligne suivante:
fréquences = collections.Counter ()
Nous essayons d'utiliser le Compteur()
fonctionne pour obtenir les fréquences de mots dans le livre (combien de fois le mot s'est produit dans le livre).
word_tokenize
, d'autre part, divise les phrases en leurs parties constituantes. Prenons un exemple simple pour voir comment word_tokenize
fonctionne réellement:
from nltk.tokenize import word_tokenize sentence = 'Mon nom est Abder. J'aime Python. C'est un joli langage de programmation 'print (word_tokenize (phrase))
La sortie du script ci-dessus est la suivante:
['My', 'name', 'est', 'Abder', '.', 'I', 'like', 'Python', '.', 'It', '' ',', 'joli', 'gentil', 'programmation', 'langue']
Nous parcourons ensuite les mots et trouvons la fréquence d'apparition de chaque mot.
Qu'en est-il des phrases (combinaison de mots)? Ceux qui s'appellent collocations (une séquence de mots qui apparaissent souvent ensemble). Un exemple de collocations est bigrammes, c'est une liste de paires de mots. Semblable à cela est trigrammes (une combinaison de trois mots), et ainsi de suite (c'est-à-dire n-grammes).
Disons que nous voulons extraire les bigrammes de notre livre. Nous pouvons le faire comme suit:
bigram = nltk.collocations.BigramAssocMeasures () finder = BigramCollocationFinder.from_words (mots) finder.apply_freq_filter (2)
Le nombre 2
dans le apply_freq_filter ()
la fonction nous dit d'ignorer tous les bigrammes qui se produisent moins de deux fois dans le livre.
Si nous voulons trouver le 30
bigrammes les plus fréquents dans le livre, nous pouvons utiliser l'instruction de code suivante:
print (finder.nbest (bigram.pmi, 30))
Enfin, si nous souhaitons trouver l’emplacement, c’est-à-dire dans notre cas où le mot ou l’expression apparaît dans le livre (et non le numéro de page), nous pouvons procéder comme suit:
print (read_book.index ('computer')) print (read_book.index ('Assisted Reporting'))
Les déclarations ci-dessus semblent renvoyer le mot location dans une phrase, semblable à ce que nous avons vu dans notre exemple court au début du didacticiel..
Mettons ce que nous avons appris dans un seul script Python. Le script suivant lira notre livre et renverra les fréquences de mots, ainsi que les 30 bigrammes les plus présents dans le livre, ainsi que l'emplacement d'un mot et d'une phrase dans le livre:
importer nltk, collections de nltk.collocations importer * fréquences = collections.Counter () avec open ('bigd10.txt') comme livre: read_book = book.read () words = nltk.word_tokenize (read_book) pour w en mots: fréquences [w] + = 1 bigram = nltk.collocations.BigramAssocMeasures () finder = BigramCollocationFinder.from_words (words) finder.apply_freq_filter (2) print ('Ce sont les mots et leur fréquence d'apparition dans le livre:') print (fréquences) ) impression ('############################################## ################### ') print (' Ce sont les 30 plus bigrammes présents dans le livre: ') print (finder.nbest (bigram.pmi, 30)) print (read_book.index ('computer')) print (read_book.index ('Assisted Reporting'))
Comme nous l'avons vu dans ce didacticiel, même un texte court peut être très décourageant lorsqu'il s'agit de créer un index pour ce texte. En outre, un moyen automatisé de construire l’index optimal pour le livre pourrait ne pas être suffisamment réalisable..
Nous avons pu résoudre ce problème en utilisant Python et la bibliothèque NLTK, où nous pouvions choisir les meilleurs mots et expressions pour l’index des livres en fonction de leur fréquence (c’est-à-dire de leur importance) dans le livre..
Bien entendu, vous pouvez faire plus avec NLTK, comme indiqué dans la documentation de la bibliothèque. Vous pouvez également vous reporter au livre Traitement du langage naturel avec Python si vous souhaitez aller plus loin dans cette bibliothèque..