Ngrams -это простой индекс N-GRA, способный учиться на корпусе данных и генерировать случайный выход в том же стиле. Системы индекса и токенизации реализованы в виде интерфейсов, поэтому вы можете свернуть свое собственное решение.
Вы можете проверить ngrams , запустив небольшой WebServer в cmd/rest/trigrams.go . Есть также пример GRPC-Proto в 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
Вебсервер будет обслуживать две конечные точки:
localhost:8080/learn Индексирует простое текстовое тело данных. Обучающие тексты можно найти на 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] Генерирует случайный выход из изученных NGRAM. Прайский запрос на limit запрос может использоваться для изменения количества токенов, используемых для создания выхода (по умолчанию 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
}
Пример использования как библиотеки можно найти в cmd/rest/trigrams.go . В примере Trigrams используется токенизатор tokenizers.DefaultWord , который будет анализировать и форматировать NGRAM на основе общих правил латинского алфавита.
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 ) Механизмы как хранения данных, так и механизмов токенизации для индексера могут быть заменены, удовлетворив интерфейсы хранилища и токенизатора, что позволяет регулировать индексатор для различных целей. Индекс поддерживает Bigrams, Trigrams, Quadgrams и т. Д., Путем изменения значения 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 ),
}) Токенизатор состоит из метода Tokenize , который используется для анализа входных данных в токены NGRAM, и метода Format , который собирает их вместе в ожидаемом формате. Библиотека по умолчанию использует tokenizers.DefaultWord Tokenizer, который является простым токенизатором для анализа большинства латинских языков (английский, французский и т. Д.) На токены NGRAM.
Метод Format выполнит наилучшую попытку подключить любые выбранные токены NGRAM грамматически правильным образом (или любое, что подходит для типа выполняемой токенизации).
Новые токенизаторы могут быть созданы путем удовлетворения интерфейса tokenizers.Tokenizer , например, для токенизации наборов данных CJK или амино -последовательностей.
По умолчанию индекс использует магазин в памяти, stores.MemoryStore . Это базовый хранилище памяти, в котором хранится NGRAMS AS IS. Это отлично подходит для небольших примеров, но если бы вы индексировали миллионы жетонов, было бы хорошо подумать о сжатии или псевдониме.
Новые магазины могут быть созданы путем удовлетворения интерфейса stores.Store .
Вклады в ngrams рекомендуется. Откройте проблему, чтобы сообщить об ошибке или сделать запрос на функцию. Хорошо продуманные запросы на притяжение приветствуются!
Грань
Обучающие тексты поставляются от проекта Гутенберга.