| | |
| | | "github.com/blevesearch/bleve/v2/registry" |
| | | ) |
| | | |
| | | func analyzerConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.Analyzer, error) { |
| | | tokenizerName, ok := config["tokenizer"].(string) |
| | | if !ok { |
| | | return nil, errors.New("must specify tokenizer") |
| | | } |
| | | tokenizer, err := cache.TokenizerNamed(tokenizerName) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | |
| | | jbtk, ok := tokenizer.(*JiebaTokenizer) |
| | | if !ok { |
| | | return nil, errors.New("tokenizer must be of type jieba") |
| | | } |
| | | alz := &JiebaAnalyzer{ |
| | | Tokenizer: jbtk, |
| | | } |
| | | return alz, nil |
| | | } |
| | | |
| | | func init() { |
| | | registry.RegisterAnalyzer("gojieba", analyzerConstructor) |
| | | } |
| | | |
| | | // JiebaAnalyzer from analysis.DefaultAnalyzer |
| | | type JiebaAnalyzer struct { |
| | | // SegoAnalyzer from analysis.DefaultAnalyzer |
| | | type SegoAnalyzer struct { |
| | | CharFilters []analysis.CharFilter |
| | | Tokenizer *JiebaTokenizer |
| | | Tokenizer *SegoTokenizer |
| | | TokenFilters []analysis.TokenFilter |
| | | } |
| | | |
| | | func (a *JiebaAnalyzer) Analyze(input []byte) analysis.TokenStream { |
| | | func (a *SegoAnalyzer) Analyze(input []byte) analysis.TokenStream { |
| | | if a.CharFilters != nil { |
| | | for _, cf := range a.CharFilters { |
| | | input = cf.Filter(input) |
| | |
| | | return tokens |
| | | } |
| | | |
| | | func (a *JiebaAnalyzer) Free() { |
| | | if a.Tokenizer != nil { |
| | | a.Tokenizer.Free() |
| | | } else { |
| | | panic("JiebaAnalyzer.Tokenizer is nil, this should not happen") |
| | | func analyzerConstructor(config map[string]interface{}, cache *registry.Cache) (analysis.Analyzer, error) { |
| | | tokenizerName, ok := config["tokenizer"].(string) |
| | | if !ok { |
| | | return nil, errors.New("must specify tokenizer") |
| | | } |
| | | tokenizer, err := cache.TokenizerNamed(tokenizerName) |
| | | if err != nil { |
| | | return nil, err |
| | | } |
| | | |
| | | segoTokenizer, ok := tokenizer.(*SegoTokenizer) |
| | | if !ok { |
| | | return nil, errors.New("tokenizer must be of type sego") |
| | | } |
| | | alz := &SegoAnalyzer{ |
| | | Tokenizer: segoTokenizer, |
| | | } |
| | | return alz, nil |
| | | } |
| | | |
| | | func init() { |
| | | registry.RegisterAnalyzer("sego", analyzerConstructor) |
| | | } |