Ngrams é um Índice N-Gram simples capaz de aprender com um corpus de dados e gerar uma saída aleatória no mesmo estilo. Os sistemas de índice e tokenização são implementados como interfaces, para que você possa rolar sua própria solução.
Você pode testar ngrams executando o pequeno servidor da web em cmd/rest/trigrams.go . Há também um exemplo GRPC-proto no 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
O servidor da web servirá dois pontos de extremidade:
localhost:8080/learn Indexos um corpo de dados de texto simples. Os textos de treinamento podem ser encontrados no 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] Gera uma saída aleatória dos ngrams aprendidos. O parâmetro de consulta limit pode ser usado para alterar o número de tokens usados para criar a saída (padrão 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
}
Um exemplo de uso como uma biblioteca pode ser encontrado no cmd/rest/trigrams.go . O exemplo do TriGrams usa o tokenizers.DefaultWord Tokenizer, que analisará e formatará ngrams com base nas regras gerais de alfabetes latinos.
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 ) Os mecanismos de armazenamento de dados e tokenização para o indexador podem ser substituídos pela satisfação das interfaces da loja e do tokenizador, permitindo que o indexador seja ajustado para diferentes fins. O índice suporta bigrams, trigramas, quadgrgrams, etc., por meio de alterar o valor 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 ),
}) Um tokenizer consiste em um método Tokenize que é usado para analisar os dados de entrada nos tokens ngram e um método Format que os recupera em um formato esperado. A biblioteca usa o tokenizers.DefaultWord Tokenizer por padrão, que é um tokenizador simples para analisar a maioria dos idiomas em latim (inglês, francês, etc.) em tokens ngram.
O método Format executará uma tentativa de melhor esforço de reunir quaisquer tokens Ngram selecionados em conjunto de uma maneira gramaticalmente correta (ou o que for apropriado para o tipo de tokenização que está sendo realizada).
Os novos tokenizadores podem ser criados satisfazendo a interface tokenizers.Tokenizer , como para a tokenização de conjuntos de dados CJK ou sequências amino.
Por padrão, o índice usa uma loja na memória, stores.MemoryStore . Este é um armazenamento básico de memória que armazena os Ngrams AS-IS. É ótimo para pequenos exemplos, mas se você estivesse indexando milhões de tokens, seria bom pensar em compressão ou alias.
Novas lojas podem ser criadas satisfazendo as stores.Store interface.
As contribuições para ngrams são incentivadas. Abra um problema para relatar um bug ou fazer uma solicitação de recurso. Os pedidos de tração bem considerados são bem-vindos!
Mit.
Os textos de treinamento são provenientes do Projeto Gutenberg.