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
    }

  • 相关阅读:
    Sketch Missing Fonts 页面样式混乱研究
    SFDC_01(google map)
    SFDC_02(google map)
    SFDC_04(system.debug();)
    umbraco简体中文语言包for4.5及以下版本
    7.22武汉日全食自拍留念
    IIS7(windows 2008)恐怖问题,大家谨慎,血的教训啊~~~~
    【视频】自己录制的Umbraco入门3——如何构建网站导航,推荐给玩CMS的朋友
    分享,个人代码知识管理程序
    【视频】自己录制的Umbraco入门2如果构建网页,推荐给玩CMS的朋友
  • 原文地址:https://www.cnblogs.com/zhangboyu/p/7462008.html
Copyright © 2011-2022 走看看