zoukankan      html  css  js  c++  java
  • dictionary.go

    package sego

    import "github.com/adamzy/cedar-go"

    // Dictionary结构体实现了一个字串前缀树,一个分词可能出现在叶子节点也有可能出现在非叶节点
    type Dictionary struct {
        trie           *cedar.Cedar // Cedar 前缀树
        maxTokenLength int          // 词典中最长的分词
        tokens         []Token      // 词典中所有的分词,方便遍历
        totalFrequency int64        // 词典中所有分词的频率之和
    }

    func NewDictionary() *Dictionary {
        return &Dictionary{trie: cedar.New()}
    }

    // 词典中最长的分词
    func (dict *Dictionary) MaxTokenLength() int {
        return dict.maxTokenLength
    }

    // 词典中分词数目
    func (dict *Dictionary) NumTokens() int {
        return len(dict.tokens)
    }

    // 词典中所有分词的频率之和
    func (dict *Dictionary) TotalFrequency() int64 {
        return dict.totalFrequency
    }

    // 向词典中加入一个分词
    func (dict *Dictionary) addToken(token Token) {
        bytes := textSliceToBytes(token.text)
        _, err := dict.trie.Get(bytes)
        if err == nil {
            return
        }

        dict.trie.Insert(bytes, dict.NumTokens())
        dict.tokens = append(dict.tokens, token)
        dict.totalFrequency += int64(token.frequency)
        if len(token.text) > dict.maxTokenLength {
            dict.maxTokenLength = len(token.text)
        }
    }

    // 在词典中查找和字元组words可以前缀匹配的所有分词
    // 返回值为找到的分词数
    func (dict *Dictionary) lookupTokens(words []Text, tokens []*Token) (numOfTokens int) {
        var id, value int
        var err error
        for _, word := range words {
            id, err = dict.trie.Jump(word, id)
            if err != nil {
                break
            }
            value, err = dict.trie.Value(id)
            if err == nil {
                tokens[numOfTokens] = &dict.tokens[value]
                numOfTokens++
            }
        }
        return
    }

  • 相关阅读:
    linux修改host文件
    SpringBoot RocketMQ 整合使用和监控
    Linux的五个查找命令
    github 在线创建文件和创建文件夹
    nginx 配置
    JetBrains 里不为人知的秘密(3)--快捷键篇
    java.lang.NoClassDefFoundError: Lorg/springframework/beans/factory/access/BeanFactoryReference;
    【数论】P1029 最大公约数和最小公倍数问题
    ST表学习笔记
    树状数组学习笔记
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7462008.html
Copyright © 2011-2022 走看看