Paket lingo stellt die Datenstrukturen und Algorithmen zur Verfügung, die für die Verarbeitung natürlicher Sprache erforderlich sind.
Insbesondere bietet es einen POS -Tagger ( lingo/pos ), einen Abhängigkeitsparser ( lingo/dep ) und einen grundlegenden Tokenizer ( lingo/lexer ) für Englisch. Es liefert auch Datenstrukturen zum Halten von Korpussen ( lingo/corpus ) und Baumbanks ( lingo/treebank ).
Ziel dieses Pakets ist es, eine Produktionsqualitätspipeline für die Verarbeitung natürlicher Sprache bereitzustellen.
Das Paket ist Go -Gettable: go get -u github.com/chewxy/lingo
Dieses Paket und seine Unterpackungen hängen von sehr wenigen externen Paketen ab. Hier sind sie:
| Paket | Verwendet für | Vitalität | Notizen | Lizenz |
|---|---|---|---|---|
| Gorgonia | Maschinelles Lernen | Vital. Es wird nicht schwer sein, sie neu zu schreiben, aber warum? | Gleicher Autor | Gorgonia-Lizenz (Apache 2.0-ähnlich) |
| GOGRAPHVIZ | Visualisierung von Anmerkungen und anderen graphbezogenen Visualisierungen | Entscheidend für Visualisierungen, die eine schöne Funktion sind | Die API hat zuletzt den 12. April 2017 geändert | GoGraphviz -Lizenz (Apache 2.0) |
| Fehler | Fehler | Das Paket wird ohne es nicht sterben, aber es ist sehr schön zu haben | Stabile API für das vergangene Jahr | Fehlerlizenz (MIT/BSD wie) |
| Satz | Operationen festlegen | Kann leicht ersetzt werden | Stabile API für das vergangene Jahr | Lizenz festlegen (MIT/BSD-ähnlich) |
Sehen Sie sich die einzelnen Pakete zur Verwendung an. Im cmd -Verzeichnis gibt es auch eine Reihe von ausführbaren Funktionen. Sie sollen Beispiele dafür sein, wie eine natürliche Sprachverarbeitungspipeline eingerichtet werden kann.
Eine natürliche Sprachpipeline mit diesem Paket ist stark von Kanälen angetrieben. Hier ist ein Beispiel für die Analyse von Abhängigkeiten:
func main () {
inputString: `The cat sat on the mat`
lx := lexer . New ( "dummy" , strings . NewReader ( inputString )) // lexer - required to break a sentence up into words.
pt := pos . New ( pos . WithModel ( posModel )) // POS Tagger - required to tag the words with a part of speech tag.
dp := dep . New ( depModel ) // Creates a new parser
// set up a pipeline
pt . Input = lx . Output
dp . Input = pt . Output
// run all
go lx . Run ()
go pt . Run ()
go dp . Run ()
// wait to receive:
for {
select {
case d := <- dp . Output :
// do something
case err := <- dp . Error :
// handle error
}
}
}Für bestimmte Aufgaben (POS -Tagging, Parsen, benannte Entitätserkennung usw.) finden Sie die ReadMe jedes Unterpackers. Dieses Paket selbst enthält hauptsächlich die Datenstrukturen, die die Unterpackungen verwenden werden.
Die vielleicht wichtigste Datenstruktur ist die *Annotation . Es enthält im Grunde ein Wort und die zugehörigen Metadaten für das Wort.
Bei Abhängigkeits -Parsen nimmt das Diagramm drei Formen an: *Dependency , *DependencyTree und *Annotation . Alle drei Formen sind von einem zum anderen konvertiert. TODO: Erklären Sie die Begründung für jeden Datentyp.
Eine bestimmte Eigenart, die Sie möglicherweise bemerkt haben, ist, dass die POSTag und DependencyType in als Konstanten hart codiert sind. Dieses Paket enthält tatsächlich zwei Variationen von jeweils: jeweils von Stanford/Penn Treebank und einer von universlePendencies.
Der Hauptgrund für hartnäckige Verhältnisse ist hauptsächlich aus Leistungsgründen. Wenn Sie wissen, wie viel zuzubereiten, wird eine Menge zusätzlicher Arbeit reduziert, die das Programm zu erledigen hat. Es verringert auch die Chancen, eine globale Variable zu mutieren.
Natürlich ist dies ein Kompromiss - die Programme beschränken sich auf diese beiden Optionen. Zum Glück gibt es nur eine begrenzte Anzahl von POS -Tag- und Abhängigkeitstypen. Zwei der beliebtesten (Stanford/PTB und universelle Abhängigkeiten) wurden implementiert.
Die folgenden Build -Tags werden unterstützt:
Um ein bestimmtes Tagset oder Relset zu verwenden, erstellen Sie Ihr Programm so: go build -tags='stanfordtags' .
Die Standard -Tag- und Abhängigkeits -REL -Typen sind die Version der universellen Abhängigkeiten.
Sie sollten auch beachten, dass der Tokenizer, lingo/lexer nicht Ihr üblicher gewöhnlicher NLP-Tokenizer ist. Es ist ein Tokenizer, der durch den Raum mit einigen spezifischen Regeln für Englisch token. Es wurde von Rob Pikes Gespräch über Lexers inspiriert. Ich dachte, es wäre cool, so etwas für NLP zu schreiben.
Die Testfälle in Package lingo/lexer zeigen, wie es mit Unicode und anderen pathalogischen Englisch umgeht.
Weitere Informationen finden Sie unter Beitrags.md
Dieses Paket ist unter der MIT -Lizenz lizenziert.