1:首先需要将需要分词统计的文本保存在.txt文件中,比如word.txt,如下
2:分词过程需要用一个分词字典,字典中有所有分词的词组,比如中国,美国,中美等。
分词字典使用的现成的网络库,github.com/huichen/sego/data/dictionary.txt,代码运行阶段会把分词文件加载到内存中。
然后会通过分词字典,把待分词的文本,分解成n个词组。分词有两种输出模式,以"中华人民共和国"为例
普通模式(searchMode=false)输出一个分词"[中华人民共和国]"
,索模式(searchMode=true) 输出普通模式的再细致切分:"[中华 人民 共和 共和国 人民共和国 中华人民共和国]”,搜索模式主要用于给搜索引擎提供尽可能多的关键字,本次使用的是搜索模式。output := sego.SegmentsToSlice(segments, true)
true参数代表搜索,false代表普通,
分好的词或存放在一个切片里,通过遍历切片,写入到map里,memory := make(map[string]int, 10000)
key是分词,value是出现的次数,比如map[“你好”]
=10,代表你好出现10次。统计好后根据频次进行排序。
PariList实现了sort接口,可以使用sort.Sort对其排序
type PairList []Pair
func (p PairList) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
func (p PairList) Len() int { return len(p) }
func (p PairList) Less(i, j int) bool { return p[j].Value < p[i].Value } // 逆序
最终可以通过运行命令执行程序,go run ./main.go test4.txt | head -n 20000>detail.txt
test4.txt 代表分词文件,head -n 20000代表只获取前20000行,>detail.txt表示结果会写入到detail.txt文件中。