golang分词工具sego的使用 - Go语言中文社区

golang分词工具sego的使用


使用的库是:github.com/huichen/sego


    // 载入词典
    var segmenter sego.Segmenter
    //自带的分词库信息
    segmenter.LoadDictionary("../github.com/huichen/sego/data/dictionary.txt")

    // 分词
    text := []byte("使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大")
    segments := segmenter.Segment(text)

    // 处理分词结果
    // 支持普通模式和搜索模式两种分词,见代码中SegmentsToString函数的注释。
    fmt.Println(sego.SegmentsToString(segments, false))

//可以使用以下方法过滤敏感词
var (
    replaceTo   = "*"
    replaceByte = []byte(strings.Repeat(replaceTo, 1024))
)
func (self *WordFilter) Filter(input string) (string, error) {
    bin := []byte(input)
    segments := self.segmenter.Segment(bin)
    cleanString := make([]byte, 0, len(bin))
    for _, seg := range segments {
        word := bin[seg.Start():seg.End()]
        fmt.Println(seg.Token().Text())
        if self.dirtyWords[strings.ToUpper(string(word))] {
            cleanString = append(cleanString, replaceByte[:utf8.RuneCount(word)]...)
        } else {
            cleanString = append(cleanString, word...)
        }
    }
    return string(cleanString), nil
}
//其中dirtyWords是map[string]bool类型,是否为敏感词。


dictionary.txt词库文件:是从github.com/fxsjy/jieba里复制出来的。文件里以空隔分开,第一个是词,第二个是词频,第三个是词性。sego默认不加载词频小于2的词;


没有提供添加额外词的方法,可以把github.com/huichen/sego/segmenter.go里的加载词库的方法LoadDictionary改为从nosql(个人感觉mongodb最合适,没必要放在关系型数据库)里加载,再增加一个添加新词的方法就更好了。

转载于:https://my.oschina.net/wolf2leader/blog/1573309

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_34238642/article/details/92601938
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-02 19:04:18
  • 阅读 ( 1649 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢