forked from go-ego/gse
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample.go
executable file
·84 lines (65 loc) · 1.94 KB
/
example.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package main
import (
"flag"
"fmt"
"log"
"github.com/go-ego/gse"
)
var (
seg gse.Segmenter
text = "《复仇者联盟3:无限战争》是全片使用IMAX摄影机拍摄"
text1 = flag.String("text", text, "要分词的文本")
text2 = []byte("上海地标建筑, 上海东方明珠广播电视塔")
)
func main() {
flag.Parse()
// 加载默认词典
seg.LoadDict()
// seg.LoadDict("../data/dict/dictionary.txt")
//
// 使用自定义字典
// seg.LoadDict("zh,../../testdata/test_dict.txt,../../testdata/test_dict1.txt")
addToken()
cut()
segCut()
}
func addToken() {
seg.AddToken("《复仇者联盟3:无限战争》", 100, "n")
seg.AddToken("上海中心大厦", 100)
seg.AddTokenForce("上海东方明珠广播电视塔", 100, "n")
//
seg.AddToken("东方明珠广播电视塔", 100)
seg.CalcToken()
}
// 使用 DAG 或 HMM 模式分词
func cut() {
// use DAG and HMM
hmm := seg.Cut(text, true)
fmt.Println("cut use hmm: ", hmm)
//
cut := seg.Cut(text)
fmt.Println("cut: ", cut)
hmm = seg.CutSearch(text, true)
fmt.Println("cut search use hmm: ", hmm)
//
cut = seg.CutSearch(text)
fmt.Println("cut search: ", cut)
cut = seg.CutAll(text)
fmt.Println("cut all: ", cut)
}
// 使用最短路径和动态规划分词
func segCut() {
segments := seg.Segment([]byte(*text1))
fmt.Println(gse.ToString(segments, true))
segs := seg.Segment(text2)
// log.Println(gse.ToString(segs, false))
log.Println(gse.ToString(segs))
// 上海/ns 地标/n 建筑/n ,/x /x 上海/ns 东方明珠/nr 电视塔/n
// 搜索模式主要用于给搜索引擎提供尽可能多的关键字
// segs := seg.ModeSegment(text2, true)
log.Println("搜索模式: ", gse.ToString(segs, true))
// 搜索模式: 上海/ns 地标/n 建筑/n ,/x /x 上海/ns 东方/s 明珠/nr 东方明珠/nr 电视/n 塔/j 电视塔/n
log.Println("to slice", gse.ToSlice(segs, true))
fmt.Println(seg.String(text2, true))
fmt.Println(seg.Slice(text2, true))
}