golang分词工具sego的使用

迷路的阿修罗 · · 68 次点击 · · 开始浏览    

使用的库是: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最合适,没必要放在关系型数据库)里加载,再增加一个添加新词的方法就更好了。

本文来自:开源中国博客

感谢作者:迷路的阿修罗

查看原文:golang分词工具sego的使用

68 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传