Gitter ist Chatraum für Entwickler.
nlpnet --- natürliche Sprachverarbeitung mit neuronalen Netzwerken nlpnet ist eine Python -Bibliothek für Aufgaben der natürlichen Sprachverarbeitung, die auf neuronalen Netzwerken basiert. Derzeit führt es ein Teil des Speech-Taggings, die semantische Rollenmarkierung und die Abhängigkeitsanalyse durch. Der größte Teil der Architektur ist sprachunabhängig, aber einige Funktionen wurden speziell für die Arbeit mit Portugiesisch zugeschnitten. Dieses System wurde von Senna inspiriert.
Wichtig: Um die geschulten Modelle für portugiesisches NLP zu verwenden, müssen Sie die Daten von http://nilc.icmc.usp.br/nlpnet/models.html herunterladen.
nlpnet benötigt NLTK und Numpy. Darüber hinaus müssen einige Daten von NLTK heruntergeladen werden. Nach dem Installieren rufen Sie an
>>> nltk.download()
Gehen Sie zur Registerkarte "Modelle" und wählen Sie den Punkt -Tokenizer. Es wird verwendet, um den Text in Sätze zu teilen.
Cython wird verwendet, um C -Erweiterungen zu erzeugen und schneller zu laufen. Sie brauchen es wahrscheinlich nicht, da die generierte .c -Datei bereits mit NLPNET versehen ist, aber Sie benötigen einen C -Compiler. Auf Linux- und Mac -Systemen sollte dies kein Problem sein, aber möglicherweise unter Windows sein, da Setuptools den Microsoft C -Compiler standardmäßig benötigt. Wenn Sie es noch nicht haben, ist es normalerweise einfacher, Mingw zu installieren und die Anweisungen hier zu befolgen.
nlpnet kann sowohl als Python -Bibliothek als auch als eigenständige Skripte verwendet werden. Beide Verwendungen werden unten erläutert.
Sie können nlpnet als Bibliothek in Python -Code wie folgt verwenden:
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]] Im obigen Beispiel erhält der POSTagger das erste Argument des Verzeichnisses, in dem sich sein geschultes Modell befindet. Das zweite Argument ist der zwei Buchstaben -Sprachcode (derzeit Onle pt und en werden unterstützt). Dies hat nur Auswirkungen auf die Tokenisierung.
Das Aufrufen eines Annotationstools ist ziemlich einfach. Die bereitgestellten sind POSTagger , SRLTagger und DependencyParser , alle mit einem Methoden tag , das Saiten mit dem zu markierten Text empfängt (in DependencyParser gibt es einen Alias für die parse , die angemessener klingt). Der Tagger spaltet den Text in Sätze und tokenisiert dann jeden einzelnen (daher ist die Rückgabe der Postagger eine Liste von Listen).
Die Ausgabe des srltagger ist etwas komplizierter:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
Anstelle einer Liste von Tupeln werden Sätze durch Fälle der SRLAnnotatedSentence dargestellt. Diese Klasse dient im Grunde genommen als Datenhalter und hat zwei Attribute:
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
Das arg_structures ist eine Liste, die alle Prädikat-Argument-Strukturen im Satz enthält. Der einzige in diesem Beispiel ist für das Verb Roeu. Es wird durch ein Tupel mit dem Prädikat und einem Wörterbuch zu semantischen Rollenbezeichnungen für die Tokens dargestellt, die das Argument darstellen.
Beachten Sie, dass das Verb als erstes Mitglied des Tupels und auch als Inhalt von Etikett 'V' angezeigt wird (das für Verb steht). Dies liegt daran, dass einige Prädikate MultiWords sind. In diesen Fällen erscheint das "Haupt" -Prädikatwort (normalerweise das Verb selbst) in arg_structures[0] , und alle Wörter werden unter dem Schlüssel 'V' angezeigt.
Hier ist ein Beispiel mit dem Abhängigkeits:
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
Die Methode to_conll() von ParsedSententy -Objekten druckt sie in der Conll -Notation. Die Token, Etiketten und Kopfindizes sind über Mitgliedsvariablen zugänglich:
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
Die Variable heads ist ein numpy Array. Die i-te Position im Array enthält den Index des Kopfes des I-Th-Tokens, mit Ausnahme des Wurzel-Tokens, der einen Kopf von -1 hat. Beachten Sie, dass diese Indizes 0 basieren, während die in der Funktion to_conll() gezeigten 1-basiert sind.
nlpnet stellt auch Skripte zum Markieren von Text, Schulung neuer Modelle und Testen bereit. Sie werden in die Skripte -Unterverzeichnis Ihrer Python -Installation kopiert, die in die Systempfadvariable aufgenommen werden kann. Sie können sie aus der Befehlszeile anrufen und einige Texteingaben geben.
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU Wenn --data nicht gegeben ist, sucht das Skript nach den geschulten Modellen im aktuellen Verzeichnis. --lang standardmäßig zu en . Wenn Sie bereits Text tokenisiert haben, können Sie die Option -t verwenden. Es geht davon aus, dass Token durch Whitespaces getrennt werden.
Mit semantischer Rollenkennzeichnung:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeuDie erste Zeile wurde vom Benutzer eingegeben, und die zweite ist das Ergebnis der Tokenisierung.
Und Abhängigkeits Parsen:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 PWeitere Informationen zum Training und Testen neuer Modelle und anderer Funktionen finden Sie in der Dokumentation unter http://nilc.icmc.usp.br/nlpnet
Die folgenden Referenzen beschreiben das Design von NLPNET sowie die durchgeführten Experimente. Seit ihrer Veröffentlichung wurden einige Verbesserungen des Codes implementiert.