Ngrams 데이터 코퍼스에서 학습하고 같은 스타일로 임의의 출력을 생성 할 수있는 간단한 N-Gram 지수입니다. 인덱스 및 토큰 화 시스템은 인터페이스로 구현되므로 고유 한 솔루션을 굴릴 수 있습니다.
cmd/rest/trigrams.go 에서 작은 REST 웹 서버를 실행하여 ngrams 테스트 할 수 있습니다. cmd/grpc 에는 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 Tokenizer를 사용합니다. 이는 일반 라틴어 알파벳 규칙을 기반으로 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 ) 인덱서에 대한 데이터 저장 및 토큰 화 메커니즘은 매장 및 토큰 화기 인터페이스를 만족시켜 대체 할 수 있으므로 인덱서를 다른 목적으로 조정할 수 있습니다. 이 지수는 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 ),
}) 토큰 화기는 입력 데이터를 NGRAM 토큰으로 구문 분석하는 데 사용되는 Tokenize 방법과 예상 형식으로 다시 함께 조각하는 Format 방법으로 구성됩니다. 이 라이브러리는 tokenizers.DefaultWord 사용합니다 .Defaultword Tokenizer는 기본적으로 대부분의 라틴어 기반 언어 (영어, 프랑스어 등)를 NGRAM 토큰으로 구문 분석하기위한 간단한 토 케이저입니다.
Format 방법은 선택한 NGRAM 토큰을 문법적으로 올바른 방식으로 함께 묶는 데 최선의 노력을 기울일 것입니다 (또는 수행되는 토큰 화 유형에 적합한 것).
CJK 데이터 세트 또는 아미노 시퀀스의 토큰 화과 같은 tokenizers.Tokenizer 화제를 만족시킴으로써 새로운 토큰 화제를 만들 수 있습니다.
기본적으로 인덱스는 메모리 내 매장 인 stores.MemoryStore 사용합니다. 이것은 ngrams를 as-is를 저장하는 기본 메모리 저장소입니다. 작은 예제에 좋지만 수백만 개의 토큰을 색인화하고 있다면 압축 또는 별명에 대해 생각하는 것이 좋습니다.
stores.Store 만족시켜 새로운 매장을 만들 수 있습니다.
ngrams 에 대한 기여가 권장됩니다. 버그를보고하거나 기능 요청을 할 문제를여십시오. 잘 고려 된 풀 요청을 환영합니다!
MIT.
교육 텍스트는 Project Gutenberg에서 제공됩니다.