Vorbereiten eines Buchindex mit Python

Sie sind wahrscheinlich auf einige dieser großen Lehrbücher gestoßen und haben am Ende den Index bemerkt. Mit einem Ausdruck ist es schön, wenn Sie über einen solchen Index schnell zur gewünschten Seite navigieren können. Ich habe kürzlich ein sehr kurzes Buch veröffentlicht, und wenn es darum ging, den Index festzulegen, schien die Aufgabe entmutigend zu sein, obwohl das Buch sehr kurz ist. Das Buch hat sowieso noch keinen Index.

Wenn Sie meine Artikel verfolgt haben, werden Sie feststellen, dass ich hauptsächlich über Python schreibe und wie es uns helfen kann, verschiedene Probleme auf einfache Weise zu lösen. Schauen wir uns also an, wie wir einen Buchindex mit Python setzen können.

Lass uns ohne weiteres anfangen.

Was ist ein Buchindex??

Ich binIch bin mir ziemlich sicher, dass die meisten von Ihnen wissen, was ein Buchindex ist, aber ich möchte dieses Konzept nur kurz klären.

EIN Der Buchindex ist einfach eine Sammlung von Wörtern und / oder Sätzen, die für das Buch als wichtig erachtet werden, sowie deren Positionen im Buch. Der Index enthält nicht jedes Wort / jede Phrase im Buch. Der Grund dafür wird im nächsten Abschnitt gezeigt.

Was macht einen guten Buchindex aus??

Was wäre, wenn Sie einen Index hätten, durch den Sie die Position jedes Wortes oder Satzes im Buch finden können? Würde das nicht als Auswahlindex gelten? Falsch!

Der Index der Wahl, oder was als guter Index angesehen wird, ist derjenige, der auf die wichtigen Wörter und Ausdrücke im Buch verweist. Sie könnten den Grund dafür in Frage stellen. Nehmen wir ein Beispiel. Angenommen, wir haben ein Buch, das nur aus dem folgenden Satz besteht:

Mein Buch ist kurz

Was würde passieren, wenn wir versuchen, jedes Wort und jede Phrase in diesem sehr kurzen Satz zu indizieren, vorausgesetzt, der Ort ist die Wortnummer im Satz? Dies ist der Index, den wir in diesem Fall haben würden:

mein buch ist kurz: 1 mein buch ist: 1 mein buch: 1 mein: 1 kurz: 4 ist kurz: 3 ist: 3 buch ist kurz: 2 buch ist: 2 buch: 2

Aus dem obigen Beispiel können wir erkennen, dass ein solcher Index größer ist als das Buch selbst! Ein guter Index wäre also ein Index, der die für den Leser als wichtig erachteten Wörter und Ausdrücke enthält.

Konfiguration

Natural Language Toolkit (NLTK)

In diesem Lernprogramm verwenden wir die Natural Language Toolkit (NLTK) -Bibliothek, die zum Arbeiten mit Daten in der menschlichen Sprache verwendet wird. Wie in der Dokumentation erwähnt, wurde NLTK als "ein wunderbares Werkzeug für das Unterrichten und Arbeiten in der Computerlinguistik mit Python" und "eine erstaunliche Bibliothek zum Spielen mit natürlicher Sprache" bezeichnet.

Derzeit schreibe ich dieses Tutorial von meinem Ubuntu-Computer aus. Die Schritte zum Installieren von NLTK in diesem Abschnitt sind für das Ubuntu-Betriebssystem relevant. Aber keine Sorge, die Schritte zur Installation von NLTK auf anderen Betriebssystemen finden Sie auf der NLTK-Website.

Um NLTK zu installieren, benutze ich pip. Wenn Sie pip noch nicht installiert haben, können Sie zur Installation den folgenden Befehl in Ihrem Terminal verwenden Pip:

sudo easy_install3 pip

Geben Sie den folgenden Befehl ein, um sicherzustellen, dass Pip installiert ist:

Pip - Version

Sie sollten etwas Ähnliches wie das Folgende bekommen:

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

Um NLTK zu installieren, führen Sie einfach den folgenden Befehl in Ihrem Terminal aus:

sudo pip install -U nltk

Sie können die nltk-Installation testen, indem Sie Folgendes eingeben Python, und importieren Sie dann nltk in Ihr Terminal. Wenn du bekommst ImportError: Kein Modul mit dem Namen nltk, Dieser Thread könnte Ihnen helfen.

Datei testen

An dieser Stelle benötigen wir eine Testdatei (Buch), um ein Buchverzeichnis zu erstellen. Ich werde dieses Buch nehmen: Die Änderungsrate der Änderungsrate von der EFF. Sie können die Textdatei des Buches von Dropbox herunterladen. Sie können natürlich jedes Buch Ihrer Wahl verwenden. Sie benötigen nur etwas zum Experimentieren in diesem Tutorial.

Programm

Beginnen wir mit dem interessanten Teil dieses Tutorials, dem Programm, das uns beim Bilden des Buchindex helfen wird. Als erstes wollen wir die Worthäufigkeit im Buch finden. Ich habe gezeigt, wie wir das in einem anderen Tutorial machen können, aber ich möchte Ihnen zeigen, wie wir dies mit der NLTK-Bibliothek tun können.

Dies kann wie folgt durchgeführt werden:

nltk importieren, kollektionen aus nltk.collocations importieren *frequenzen = Collections.Counter () mit open ('bigd10.txt') als Buch: read_book = book.read () words = nltk.word_tokenize (read_book) für w in words: Frequenzen [w] + = 1 Druck (Frequenzen) 

Wenn Sie das Programm ausführen, werden Sie feststellen, dass wir eine sehr lange Liste von Wörtern und deren Häufigkeit haben werden.

Bevor wir weitergehen, analysieren wir den obigen Code etwas. In der folgenden Zeile:

Frequenzen = Sammlungen. Zähler ()

Wir versuchen das zu benutzen Zähler() Funktion, um die Worthäufigkeiten im Buch zu erhalten (wie oft das Wort im Buch vorkam).

word_tokenize, teilt die Sätze dagegen in ihre Bestandteile auf. Nehmen wir ein einfaches Beispiel, um zu sehen, wie word_tokenize funktioniert eigentlich:

von nltk.tokenize import word_tokenize satz = 'Mein Name ist Abder. Ich mag Python. Es ist eine ziemlich schöne Programmiersprache 'print (word_tokenize (Satz))

Die Ausgabe des obigen Skripts lautet wie folgt:

['Mein', 'Name', 'ist', 'Abder', '.', 'Ich', 'wie', 'Python', '.', 'Es', '' ',' a ', 'hübsch', 'schön', 'programmieren', 'sprache']

Wir durchlaufen dann die Wörter und ermitteln die Häufigkeit des Auftretens jedes Wortes.
Was ist mit Phrasen (Kombination von Wörtern)? Die werden gerufen Kollokationen (eine Folge von Wörtern, die oft zusammen vorkommen). Ein Beispiel für Kollokationen ist Bigrams, das ist eine Liste von Wortpaaren. Ähnlich ist das Trigramme (eine Kombination aus drei Wörtern) usw. (d. h. n-Gramm).

Nehmen wir an, wir möchten die Bigramme aus unserem Buch extrahieren. Wir können das wie folgt machen:

bigram = nltk.collocations.BigramAssocMeasures () finder = BigramCollocationFinder.from_words (Wörter) finder.apply_freq_filter (2)

Die Nummer 2 in dem apply_freq_filter () Die Funktion sagt uns, dass alle Bigramme, die weniger als zweimal im Buch vorkommen, ignoriert werden.

Wenn wir das finden wollen 30 Bei den meisten Bigrammen, die im Buch vorkommen, können wir die folgende Code-Anweisung verwenden:

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

Wenn wir den Ort finden möchten, bei dem das Wort oder der Satz in unserem Buch vorkommt (nicht die Seitennummer), können wir Folgendes tun:

print (read_book.index ('computer')) drucken (read_book.index ('Assisted Reporting'))

Die obigen Aussagen scheinen den Wortstandort in einem Satz zurückzugeben, ähnlich wie wir es in unserem kurzen Satzbeispiel zu Beginn des Tutorials gesehen haben.

Alles zusammenfügen

Lassen Sie uns das, was wir gelernt haben, in ein einzelnes Python-Skript einfügen. Das folgende Skript wird unser Buch lesen und die Worthäufigkeiten sowie die 30 am häufigsten vorkommenden Bigramme in dem Buch sowie die Position eines Wortes und eines Satzes in dem Buch zurückgeben:

nltk importieren, kollektionen aus nltk.collocations importieren *frequenzen = Collections.Counter () mit open ('bigd10.txt') als Buch: read_book = book.read () words = nltk.word_tokenize (read_book) für w in words: Frequenzen [w] + = 1 bigram = nltk.collocations.BigramAssocMeasures () finder = BigramCollocationFinder.from_words (words) finder.apply_freq_filter (2) print ('Dies sind die Wörter und ihre Häufigkeit des Auftretens im Buch:') print (Häufigkeit) ) drucken ('############################################## ################### ') print (' Das sind die 30 am häufigsten vorkommenden Bigramme im Buch: ') print (finder.nbest (bigram.pmi, 30)) print (read_book.index ('computer')) drucken (read_book.index ('Assisted Reporting')) 

Fazit

Wie wir in diesem Tutorial gesehen haben, kann selbst ein kurzer Text sehr entmutigend sein, wenn es darum geht, einen Index für diesen Text zu erstellen. Möglicherweise ist ein automatisierter Weg zum Erstellen des optimalen Index für das Buch möglicherweise nicht durchführbar.

Wir konnten dieses Problem mithilfe von Python und der NLTK-Bibliothek lösen, in der wir die besten Wörter und Phrasen für den Buchindex basierend auf ihrer Häufigkeit (d. H. Wichtigkeit) in dem Buch auswählen konnten.

Natürlich können Sie mit NLTK mehr tun, wie in der Dokumentation der Bibliothek gezeigt. Sie können auch auf das Buch Natural Language Processing mit Python verweisen, wenn Sie in dieser Bibliothek tiefer einsteigen möchten.