LemminflectEin Python -Modul für englische Lemmatisierung und Beugung.
Lemminflect verwendet einen Wörterbuchansatz, um englische Wörter zu lemmatisieren und sie in Formulare zu unterdrücken, die von einem Benutzer angegeben wurden, der universelle Abhängigkeiten oder Penn -Treebank -Tags zugelassen hat. Die Bibliothek arbeitet mit OV-Wörtern (Out-of-Vocabulary) zusammen, indem sie neuronale Netzwerktechniken anwenden, um Wortformen zu klassifizieren und die entsprechenden Morphing-Regeln auszuwählen.
Das System fungiert als eigenständiges Modul oder als Erweiterung des Spacy NLP -Systems.
Die Regeln für Wörterbuch- und Morphologie stammen aus dem Spezialist des NIH, das umfangreiche festgelegte Informationen zu englischen Wortformen enthält.
Ein einfacheres System, das nur ein System mit Pyinflect erhältlich ist. Lemminflect wurde erstellt, um einen Teil des Mankos dieses Projekts zu beheben und Funktionen hinzuzufügen, wie beispielsweise ...
Die neueste Dokumentation finden Sie in Redethedocs .
Die Genauigkeit von Lemminflect und mehreren anderen beliebten NLP -Versorgungsunternehmen wurde unter Verwendung der automatisch generierten Ferection -Datenbank (AGID) als Basislinie getestet. Dies ist kein "goldener" Standard -Datensatz, aber es hat eine umfangreiche Liste von Lemmas und deren entsprechende Beugungen und scheint allgemein ein "gutes" Set für das Testen zu sein. Jede Beugung wurde von der Testsoftware lemmatisiert und dann mit dem ursprünglichen Wert im Korpus verglichen. Der Test umfasste 119.194 verschiedene gebogene Wörter.
| Package | Verb | Noun | ADJ/ADV | Overall | Speed |
|-----------------------------------------------------------------------------|
| LemmInflect 0.2.3 | 96.1% | 95.4% | 93.9% | 95.6% | 42.0 uS |
| Stanza 1.5.0 + CoreNLP 4.5.4 | 94.0% | 96.4% | 93.1% | 95.5% | 30.0 us |
| spaCy 3.5.0 | 79.5% | 88.9% | 60.5% | 84.7% | 393.0 uS |
| NLTK 3.8.1 | 53.3% | 52.2% | 53.3% | 52.6% | 12.0 uS |
|-----------------------------------------------------------------------------|
Die Geschwindigkeit ist in Mikrosekunden pro Lemma und wurde auf einer i9-7940x CPU durchgeführt. Beachten Sie, dass Stanza an der Java CoreLP -Software Anrufe tätigt, alle 120 -K -Testfälle in einen einzigen Anruf unterteilt wurden. Für Spacy wurden alle Pipeline -Komponenten mit Ausnahme des Lemmatizers deaktiviert. Die Hoch pro Lemma -Zeit spiegelt wahrscheinlich den allgemeinen Overhead der Pipeline -Architektur wider.
Die einzige externe Anforderung, Lemminflect zu betreiben, ist numpy , das für die Matrixmathematik verwendet wird, die die neuronalen Netze antreibt. Diese Netze sind relativ klein und erfordern keine signifikante CPU -Leistung zum Laufen.
Zu installieren do ..
pip3 install lemminflect
Das Projekt wurde unter Python 3 und Ubuntu aufgebaut und getestet, sollte jedoch unter Linux, Windows, Mac usw. ausgeführt werden. Es ist unter Python 2 ungetestet, kann aber in dieser Umgebung mit minimalen oder keinen Änderungen funktionieren.
Die Codebasis enthält auch Bibliotheksfunktionen und Skripte, um die verschiedenen Datendateien und neuronalen Netze zu erstellen. Dies schließt solche Dinge wie ...
Nichts davon ist für den Betrieb der Laufzeit erforderlich. Wenn Sie jedoch das System ändern möchten, finden Sie in der Dokumentation weitere Informationen.
Um ein Wort zu lemmatisieren, verwenden Sie die Methode getLemma() . Dies nimmt ein Wort und ein universelles Abhängigkeits -Tag und gibt die Lemmas als Liste möglicher Schreibweisen zurück. Das Wörterbuchsystem wird zuerst verwendet, und wenn kein Lemma gefunden wird, wird das Regelnsystem verwendet.
> from lemminflect import getLemma
getLemma('watches', upos='VERB')
('watch',)
Verwenden Sie zum Unterfassen von Wörtern die Methode getInflection . Dies erfordert ein Lemma und ein Penn -Treebank -Tag und gibt ein Tupel der spezifischen Beugung (en) zurück, die mit diesem Tag verbunden sind. Ähnlich wie oben wird das Wörterbuch zuerst verwendet und dann werden Beugungsregeln bei Bedarf angewendet.
> from lemminflect import getInflection
> getInflection('watch', tag='VBD')
('watched',)
> getInflection('xxwatch', tag='VBD')
('xxwatched',)
Die Bibliothek bietet Funktionen auf niedrigerer Ebene, um direkt auf das Wörterbuch und die OOV-Regeln zuzugreifen. Eine detaillierte Beschreibung finden Sie in Lemmatizer oder Beugungen.
Um als Erweiterung zu verwenden, benötigen Sie Spacy Version 2.0 oder höher. Versionen 1.9 und früher unterstützen die hier verwendeten Erweiterungsmethoden nicht.
Um die Erweiterung einzurichten, importieren Sie den ersten importieren lemminflect . Dadurch werden neue lemma und inflect -Methoden für jedes Spacy Token erzeugt. Die Methoden arbeiten ähnlich wie die oben beschriebenen Methoden, mit der Ausnahme, dass eine Zeichenfolge zurückgegeben wird, die die häufigste Schreibweise und nicht die Tupel enthält.
> import spacy
> import lemminflect
> nlp = spacy.load('en_core_web_sm')
> doc = nlp('I am testing this example.')
> doc[2]._.lemma()
test
> doc[4]._.inflect('NNS')
examples
Wenn Sie einen Fehler finden, melden Sie ihn bitte in der GitHub -Ausgabenliste. Beachten Sie jedoch, dass bei der Rückgabe der richtigen Flexion eine Reihe verschiedener Arten von Problemen auftreten können. Einige davon sind nicht ohne weiteres behoben. Zu den Problemen mit gebogenen Formen gehören ...
Ein häufiges Problem ist, dass einige Formen des Verbs "" nicht vollständig vom Treekbank -Tag festgelegt sind. Zum Beispiel BE/VBD fischt entweder "oder" waren "und sein/vbp zu entweder" am "oder" sind ". Um diese Formen zu disambiguieren, müssen andere Wörter im Satz inspiziert werden. Zu diesem Zeitpunkt enthält Lemminflect diese Funktionalität nicht.