Ngrams是一个简单的N-Gram索引,能够从数据语料库中学习并以相同样式生成随机输出。索引和令牌化系统是作为接口实现的,因此您可以滚动自己的解决方案。
您可以通过在cmd/rest/trigrams.go中运行小的REST网络服务器来测试ngrams 。 cmd/grpc中还有一个GRPC-Proto示例。
$ 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
Web服务器将提供两个端点:
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]从学习的NGrams生成随机输出。 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 Tokenizer,它将基于一般拉丁字母规则来解析和格式。
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 )索引器的数据存储和令牌化机制都可以通过满足商店和令牌界面来代替,从而可以为不同的目的调整索引器。该索引通过更改NewIndex n (3)值来支持Bigram,Trigrams,Quadgrams等。
// 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 nmargragen代币的简单令牌。
Format方法将尽力尝试以语法正确的方式将任何选定的Ngram令牌拼凑在一起(或适合执行的令牌化类型)。
可以通过满足tokenizers.Tokenizer界面(例如CJK数据集或氨基序列的令牌化)来创建新的Tokenizer。
默认情况下,该索引使用内存商店stores.MemoryStore 。这是一个基本的存储器存储,它存储了ngrams as-is。对于小例子来说,这是很棒的,但是如果您索引数百万个令牌,那么考虑压缩或混音会很好。
可以通过满足stores.Store界面来创建新商店。
鼓励对ngrams的贡献。打开一个问题以报告错误或提出功能请求。欢迎经过深思熟虑的拉请求!
麻省理工学院。
培训文本来自Gutenberg项目。