Ngrams ist ein einfacher N-Gramm-Index, der aus einem Datenkorpus lernen und eine zufällige Ausgabe im gleichen Stil generiert. Die Index- und Tokenisierungssysteme werden als Schnittstellen implementiert, sodass Sie Ihre eigene Lösung rollen können.
Sie können ngrams testen, indem Sie den Small Rest -Webserver in cmd/rest/trigrams.go ausführen. Es gibt auch ein GRPC-Proto-Beispiel in cmd/grpc .
$ git clone https://github.com/mochi-co/ngrams.git
$ cd ngrams
$ go test -cover ./...
$ go build cmd/rest/trigrams.go
or
$ go run cmd/rest/trigrams.go
Der Webserver dient zwei Endpunkten:
localhost:8080/learn Indiziert eine Datenklasse von Daten. Trainingstexte finden Sie im training .
$ curl --data-binary @"training/pride-prejudice.txt" localhost:8080/learn
# {"parsed_tokens":139394}
curl -d 'posting a string of text' -H "Content-Type: text/plain" -X POST localhost:8080/learn
# {"parsed_tokens":5}
localhost:8080/generate[?limit=n] Erzeugt eine zufällige Ausgabe aus den gelehrten Ngrams. Mit dem Param für den limit kann die Anzahl der Token geändert werden, die zum Erstellen der Ausgabe verwendet werden (Standard 50).
$ curl localhost:8080/generate
# {
"body": "They have solaced their wretchedness, however, and had a most conscientious
and polite young man, that might be able to keep him quiet. The arrival of the
fugitives. Not so much wickedness existed in the only one daughter will be
having a daughter married.",
"limit": 50
}
$ curl localhost:8080/generate?limit=10
# {
"body": "Of its late possessor, she added, so untidy.",
"limit": 10
}
Ein Beispiel für die Nutzung als Bibliothek finden Sie in cmd/rest/trigrams.go . Das Beispiel des Trigramms verwendet die tokenizers.DefaultWord -Tokenizer, die Ngrams anhand allgemeiner lateinamerikanischer Alphabetregeln analysiert und formatiert.
import "github.com/mochi-co/ngrams" // Initialize a new ngram index for 3-grams (trigrams), with default options.
index = ngrams . NewIndex ( 3 , nil )
// Parse and index ngrams from a dataset.
tokens , err := index . Parse ( "to be or not to be, that is the question." )
// Generate a random sequence from the indexed ngrams.
out , err := index . Babble ( "to be" , 50 ) Sowohl die Datenspeicher- als auch die Tokenisierungsmechanismen für den Indexer können ersetzt werden, indem die Speicher- und Tokenizer -Schnittstellen erfüllt werden, sodass der Indexer für verschiedene Zwecke eingestellt werden kann. Der Index unterstützt Bigrams, Trigramme, Quadgrams usw., um den Wert von NewIndex n (3) zu ändern.
// Initialize with custom tokenizers and memory stores.
// The DefaultWordTokenizer take a bool to strip linebreaks in parsed text.
index = ngrams . NewIndex ( 3 , ngrams. Options {
Store : stores . NewMemoryStore (),
Tokenizer : tokenizers . NewDefaultWordTokenizer ( true ),
}) Ein Tokenizer besteht aus einer Tokenize -Methode, mit der die Eingangsdaten in NGRAM -Token analysiert werden, und eine Format , die sie in einem erwarteten Format wieder zusammenzieht. Die Bibliothek verwendet die tokenizers.DefaultWord .
Die Format führt einen besten Versuch durch, ausgewählte NGRAM -Token grammatikalisch korrekt zusammenzusetzen (oder welcher Art der Tokenisierung geeignet ist).
Neue Tokenizer können erstellt werden, indem die Schnittstelle tokenizers.Tokenizer -Schnittstelle erfüllt wird, z. B. für die Tokenisierung von CJK -Datensätzen oder Aminosequenzen.
Standardmäßig verwendet der Index einen In-Memory-Store, stores.MemoryStore . Dies ist ein grundlegender Speicher, in dem die NGRAMS AS-IS gespeichert sind. Es ist großartig für kleine Beispiele, aber wenn Sie Millionen von Token indizieren würden, wäre es gut, über Komprimierung oder Aliasing nachzudenken.
Neue Geschäfte können erstellt werden, indem die Schnittstelle zwischen stores.Store erfüllt wird.
Beiträge zu ngrams werden gefördert. Öffnen Sie ein Problem, um einen Fehler zu melden oder eine Funktionsanforderung zu stellen. Gut überlegte Pull-Anfragen sind willkommen!
MIT.
Schulungstexte stammen von Project Gutenberg.