Python

So extrahieren Sie Sätze aus Text mit dem NLTK-Python-Modul

So extrahieren Sie Sätze aus Text mit dem NLTK-Python-Modul
Das Natural Language Toolkit (NLTK) ist ein Sprach- und Textverarbeitungsmodul für Python. NLTK kann Text, der in vielen verschiedenen Sprachen verfügbar ist, mithilfe seiner integrierten Korpora-Bibliothek und eines großen Pools an lexikalischen Daten analysieren, verarbeiten und tokenisieren. Python ist eine der beliebtesten Programmiersprachen in der Datenwissenschaft und Sprachverarbeitung, hauptsächlich aufgrund der Vielseitigkeit der Sprache und der Verfügbarkeit nützlicher Module wie NLTK. Dieser Artikel erklärt, wie man mit NLTK Sätze aus Textabsätzen extrahiert. Der Code in dieser Anleitung wurde mit Python 3 getestet.8.2 und NLTK 3.4.5 auf Ubuntu 20.04 LTS.

Installieren von NLTK unter Linux

Um NLTK in Ubuntu zu installieren, führen Sie den folgenden Befehl aus:

$ sudo apt install python3-nltk

NLTK-Pakete sind in allen gängigen Linux-Distributionen verfügbar. Suchen Sie im Paketmanager nach dem Stichwort „NLTK“, um die Pakete zu installieren. Wenn NLTK aus irgendeinem Grund nicht in den Repositorys Ihrer Distribution verfügbar ist, können Sie es über den pip-Paketmanager installieren, indem Sie den folgenden Befehl ausführen:

$ pip install --user -U nltk

Beachten Sie, dass Sie zuerst pip von Ihrem Paketmanager installieren müssen, damit der obige Befehl funktioniert. Bei einigen Distributionen kann es pip3 heißen. Sie können auch die detaillierten Installationsanweisungen befolgen, die auf der offizielle Website von NLTK.

Extrahieren von Sätzen aus einem Absatz mit NLTK

Für Absätze ohne komplexe Satzzeichen und Abstände können Sie den integrierten NLTK-Satz-Tokenizer namens „Punkt-Tokenizer“ verwenden, der mit einem vortrainierten Modell geliefert wird. Sie können auch Ihre eigenen trainierten Datenmodelle verwenden, um Text in Sätze zu tokenisieren. Individuell trainierte Datenmodelle sind nicht Gegenstand dieses Artikels, daher verwendet der folgende Code den integrierten englischen Tokenizer von Punkt. Um die Punkt-Ressourcendatei herunterzuladen, führen Sie die folgenden drei Befehle nacheinander aus und warten Sie, bis der Download abgeschlossen ist:

$ python3
$ importieren nltk
$ nltk.herunterladen('punkt')

Im folgenden Codebeispiel wird ein Absatz aus „Alice's Adventures in Wonderland“ verwendet:

nltk importieren
para = "Entweder war der Brunnen sehr tief, oder sie fiel sehr langsam, denn sie hatte she
viel Zeit, als sie hinunterging, um sich umzusehen und sich zu fragen, was los war
als nächstes passieren. Zuerst versuchte sie nach unten zu schauen und zu erkennen, worauf sie hinaus wollte,
aber es war zu dunkel, um etwas zu sehen; dann schaute sie auf die Seiten des Brunnens, und
bemerkte, dass sie mit Schränken und Bücherregalen gefüllt waren; hier und da sie
sah Karten und Bilder an Haken aufgehängt. Sie nahm ein Glas aus einem der Regale
als sie vorbeiging; es war mit 'ORANGE MARMALADE' beschriftet, aber zu ihrer großen Enttäuschung war es
war leer: Sie ließ das Glas nicht gerne fallen, aus Angst, jemanden zu töten, also schaffte es
um es in einen der Schränke zu legen, als sie daran vorbei fiel."
Token = nltk.sent_tokenize (Absatz)
für t in Token:
drucken (t, "\n")

Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe:

Entweder war der Brunnen sehr tief, oder sie stürzte sehr langsam, denn sie hatte viel Zeit als
Sie ging hinunter, um sich umzusehen und sich zu fragen, was als nächstes passieren würde.
Zuerst versuchte sie nach unten zu schauen und zu erkennen, was sie erreichen wollte, aber es war zu dunkel
etwas sehen; Dann sah sie sich die Seiten des Brunnens an und bemerkte, dass sie
gefüllt mit Schränken und Bücherregalen; hier und da sah sie Karten und Bilder aufgehängt
auf Heringe.
Sie nahm im Vorbeigehen ein Glas von einem der Regale; es war mit "ORANGEMARMALADE" beschriftet,
aber zu ihrer großen Enttäuschung war es leer: sie ließ das Glas nicht gerne fallen aus Angst
jemanden zu töten, also schaffte es sie, es in einen der Schränke zu legen, als sie daran vorbeifiel.

Der eingebaute Punkt-Satz-Tokenizer funktioniert gut, wenn Sie einfache Absätze tokenisieren möchten. Nach dem Importieren des NLTK-Moduls müssen Sie nur noch die Methode „sent_tokenize()“ auf einem großen Textkorpus verwenden. Der Punkt-Satz-Tokenizer erkennt jedoch möglicherweise Sätze nicht richtig, wenn es einen komplexen Absatz gibt, der viele Satzzeichen, Ausrufezeichen, Abkürzungen oder sich wiederholende Symbole enthält. Es ist nicht möglich, einen Standardweg zur Überwindung dieser Probleme zu definieren. Sie müssen benutzerdefinierten Code schreiben, um diese Probleme mit Regex, String-Manipulation oder durch Training Ihres eigenen Datenmodells zu lösen, anstatt das integrierte Punkt-Datenmodell zu verwenden.

Sie können auch versuchen, das vorhandene Punkt-Modell zu optimieren, um eine falsche Tokenisierung zu beheben, indem Sie einige zusätzliche Parameter verwenden. Befolgen Sie dazu die offizielle verfügbare Dokumentation zur Punkt-Tokenisierung Hier. Um Ihre eigenen benutzerdefinierten Optimierungen zu verwenden, ist eine geringfügige Änderung des Codes erforderlich:

von nltk.tokenisieren.punkt import PunktSentenceTokenizer, PunktParameters
para = "Entweder war der Brunnen sehr tief, oder sie stürzte sehr langsam, denn sie hatte genug
Zeit, als sie hinunterging, um sich umzusehen und sich zu fragen, was wohl passieren würde
Nächster. Zuerst versuchte sie nach unten zu schauen und zu erkennen, was sie erreichen wollte, aber es war…
zu dunkel, um etwas zu sehen; Dann schaute sie auf die Seiten des Brunnens und bemerkte
dass sie mit Schränken und Bücherregalen gefüllt waren; hier und da sah sie Karten
und Bilder aufgehängt. Sie nahm ein Glas von einem der Regale, als sie
bestanden; es war mit 'ORANGE MARMALADE' beschriftet, aber zu ihrer großen Enttäuschung war es das
leer: Sie ließ das Glas nicht gerne fallen, aus Angst, jemanden zu töten, also schaffte es
lege es in einen der Schränke, als sie daran vorbei fiel."
punkt_params = PunktParameters()
punkt_params.abbrev_types = set(['Herr', 'Frau', 'LLC'])
tokenizer = PunktSentenceTokenizer(punkt_params)
Token = Tokenisierer.tokenisieren (Absatz)
für t in Token:
drucken (t, "\n")

Der obige Code macht die gleiche Aufgabe wie die Methode „sent_tokenize()“. Sie können jetzt jedoch mit integrierten Methoden eigene Regeln definieren und als Argumente übergeben, wie in der Dokumentation beschrieben described. Zum Beispiel wurden dem obigen Code einige Abkürzungen hinzugefügt. Wenn auf diese Abkürzungen Satzzeichen folgen, werden sie nicht in einen neuen Satz umgebrochen. Das normale Verhalten besteht darin, einen Punkt oder Punkt als Hinweis auf das Ende eines Satzes zu verwenden.

Fazit

NLTK und seine Tokenisierungsmethoden sind sehr effizient bei der Tokenisierung und Verarbeitung von Textdaten. Die vortrainierten Modelle funktionieren jedoch möglicherweise nicht zu 100% mit verschiedenen Texttypen. Möglicherweise müssen Sie die vorhandenen Modelle verbessern, Ihre eigenen Modelle trainieren und bereitstellen oder Ihren eigenen Code schreiben, um Anomalien zu beheben.

Beste Spiele zum Spielen mit Handtracking
Oculus Quest hat kürzlich die großartige Idee des Hand-Trackings ohne Controller vorgestellt. Mit einer ständig steigenden Anzahl von Spielen und Akti...
So zeigen Sie OSD-Overlay in Vollbild-Linux-Apps und -Spielen an
Das Spielen von Spielen im Vollbildmodus oder die Verwendung von Apps im ablenkungsfreien Vollbildmodus kann Sie von relevanten Systeminformationen ab...
Top 5 Karten zur Spielaufnahme
Wir alle haben Streaming-Gameplays auf YouTube gesehen und geliebt. PewDiePie, Jakesepticye und Markiplier sind nur einige der Top-Gamer, die Millione...