golang分詞工具sego的使用

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

使用的庫是: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最合適,沒必要放在關係型資料庫)裡載入,再增加一個添加新詞的方法就更好了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.