Ngrams adalah indeks n-gram sederhana yang mampu belajar dari kumpulan data dan menghasilkan output acak dengan gaya yang sama. Sistem indeks dan tokenisasi diimplementasikan sebagai antarmuka, sehingga Anda dapat menggulung solusi Anda sendiri.
Anda dapat menguji ngrams dengan menjalankan server web kecil di cmd/rest/trigrams.go . Ada juga contoh GRPC-Proto di 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
Server web akan melayani dua titik akhir:
localhost:8080/learn Mengindeks badan data teks biasa. Teks pelatihan dapat ditemukan dalam 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] Menghasilkan output acak dari Ngrams yang dipelajari. Param kueri limit dapat digunakan untuk mengubah jumlah token yang digunakan untuk membuat output (default 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
}
Contoh penggunaan sebagai perpustakaan dapat ditemukan di cmd/rest/trigrams.go . Contoh Trigram menggunakan tokenizers.DefaultWord tokenizer, yang akan menguraikan dan memformat ngram berdasarkan aturan alfabet Latin umum.
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 ) Baik mekanisme penyimpanan data dan tokenisasi untuk pengindeks dapat diganti dengan memuaskan antarmuka toko dan tokenizer, yang memungkinkan pengindeks disesuaikan untuk tujuan yang berbeda. Indeks mendukung bigrams, trigram, quadgram, dll, dengan cara mengubah nilai 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 ),
}) Tokenizer terdiri dari metode Tokenize yang digunakan untuk menguraikan data input ke dalam token NGRAM, dan metode Format yang menyatukannya kembali dalam format yang diharapkan. Perpustakaan menggunakan tokenizers.DefaultWord Tokenizer secara default, yang merupakan tokenizer sederhana untuk parsing sebagian besar bahasa berbasis Latin (Inggris, Prancis, dll) ke dalam token Ngram.
Metode Format akan melakukan upaya upaya terbaik untuk menyatukan token Ngram yang dipilih kembali bersama -sama dengan cara yang benar secara tata bahasa (atau mana yang sesuai untuk jenis tokenisasi yang dilakukan).
Tokenizer baru dapat dibuat dengan memuaskan tokenizers.Tokenizer Interface, seperti untuk tokenisasi dataset CJK atau sekuens amino.
Secara default, indeks menggunakan toko di dalam memori, stores.MemoryStore . Ini adalah toko memori dasar yang menyimpan Ngrams AS-IS. Ini bagus untuk contoh -contoh kecil, tetapi jika Anda mengindeks jutaan token, akan lebih baik untuk memikirkan kompresi atau aliasing.
Toko baru dapat dibuat dengan memuaskan antarmuka stores.Store .
Kontribusi untuk ngrams didorong. Buka masalah untuk melaporkan bug atau membuat permintaan fitur. Permintaan tarik yang dipertimbangkan dengan baik dipersilakan!
Mit.
Teks pelatihan bersumber dari Project Gutenberg.