Ngrams est un simple indice N-gram capable d'apprendre à partir d'un corpus de données et de générer une sortie aléatoire dans le même style. Les systèmes d'index et de tokenisation sont implémentés sous forme d'interfaces, vous pouvez donc lancer votre propre solution.
Vous pouvez tester ngrams en exécutant le petit serveur Web REST dans cmd/rest/trigrams.go . Il y a aussi un exemple GRPC-Proto dans 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
Le serveur Web servira deux points de terminaison:
localhost:8080/learn Indexe un corps de données de texte brut. Les textes de formation peuvent être trouvés dans 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] Génère une sortie aléatoire à partir des ngrams apprises. Le param de requête limit peut être utilisé pour modifier le nombre de jetons utilisés pour créer la sortie (par défaut 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
}
Un exemple d'utilisation en tant que bibliothèque peut être trouvé dans cmd/rest/trigrams.go . L'exemple Trigrams utilise le tokenizers.DefaultWord Tokenizer, qui analysera et formatra des NGRAMS basés sur des règles générales de latine-alphabet.
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 ) Les mécanismes de stockage et de tokenisation des données pour l'indexeur peuvent être remplacés en satisfaisant les interfaces du magasin et du tokenzer, permettant à l'indexeur d'être ajusté à des fins différentes. L'indice prend en charge les bigrams, les trigrammes, les quadgrammes, etc., en modifiant la valeur NewIndex n (3).
// 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 ),
}) Un tokenzer se compose d'une méthode Tokenize qui est utilisée pour analyser les données d'entrée dans les jetons NGRAM, et une méthode Format qui les remet ensemble dans un format attendu. La bibliothèque utilise le tokenizers.DefaultWord Tokenizer par défaut, qui est un simple tokenizer pour analyser la plupart des langues latin (anglais, français, etc.) en jetons NGRAM.
La méthode Format effectuera une tentative de meilleure effort pour reconstituer tous les jetons NGRAM sélectionnés ensemble d'une manière grammaticalement correcte (ou selon le même type de tokenisation effectuée).
De nouveaux tokenzers peuvent être créés en satisfaisant l'interface tokenizers.Tokenizer , comme pour la tokenisation des ensembles de données CJK ou des séquences amino.
Par défaut, l'index utilise une boutique en mémoire, stores.MemoryStore . Il s'agit d'un magasin de mémoire de base qui stocke les NGRAMS tels quels. C'est génial pour de petits exemples, mais si vous indexiez des millions de jetons, il serait bon de penser à la compression ou à l'alias.
De nouveaux magasins peuvent être créés en satisfaisant l'interface stores.Store .
Les contributions aux ngrams sont encouragées. Ouvrez un problème pour signaler un bogue ou faire une demande de fonctionnalité. Les demandes de traction bien considérées sont les bienvenues!
Mit.
Les textes de formation proviennent du projet Gutenberg.