开源的GSE golang的高效分词库,支持英文、中文、日文等
1. 开源项目地址
2. 信息
GSE
词典用双数组 trie(Double-Array Trie)实现, 分词器算法为基于词频的最短路径加动态规划。
支持 HMM 分词, 使用 viterbi 算法.
支持普通和搜索引擎两种分词模式,支持用户词典、词性标注,可运行 JSON RPC 服务。
分词速度单线程 9MB/s,goroutines 并发 42MB/s(8核 Macbook Pro)。
3. 安装/更新
1go get -u github.com/go-ego/gse
4. 开始一个新程序
1re gse my-gse
5. 运行
1cd my-gse && re run
6. 使用
1package main
2
3import (
4 "fmt"
5
6 "github.com/go-ego/gse"
7)
8
9func main() {
10 var seg gse.Segmenter
11 // 加载默认字典
12 seg.LoadDict()
13 // 载入词典
14 // seg.LoadDict("your gopath"+"/src/github.com/go-ego/gse/data/dict/dictionary.txt")
15
16 text := "你好世界, Hello world."
17
18 hmm := seg.Cut(text, true)
19 fmt.Println("hmm cut: ", hmm)
20
21 hmm = seg.CutSearch(text, true)
22 fmt.Println("hmm cut: ", hmm)
23
24 hmm = seg.CutAll(text)
25 fmt.Println("cut all: ", hmm)
26
27 // 分词文本
28 tb: = []byte("山达尔星联邦共和国联邦政府")
29
30 // 处理分词结果
31 // 支持普通模式和搜索模式两种分词,见代码中 ToString 函数的注释。
32 // 搜索模式主要用于给搜索引擎提供尽可能多的关键字
33 fmt.Println("输出分词结果, 类型为字符串, 使用搜索模式: ", seg.String(tb, true))
34 fmt.Println("输出分词结果, 类型为 slice: ", seg.Slice(tb))
35
36 segments := seg.Segment(tb)
37 // 处理分词结果
38 fmt.Println(gse.ToString(segments))
39
40 text1 := []byte("深圳地标建筑, 深圳地王大厦")
41 segments1 := seg.Segment([]byte(text1))
42 fmt.Println(gse.ToString(segments1, true))
43}