本文整理汇总了Golang中github.com/huichen/sego.Segmenter.Segment方法的典型用法代码示例。如果您正苦于以下问题:Golang Segmenter.Segment方法的具体用法?Golang Segmenter.Segment怎么用?Golang Segmenter.Segment使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/huichen/sego.Segmenter
的用法示例。
在下文中一共展示了Segmenter.Segment方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: main
func main() {
flag.Parse()
var seg sego.Segmenter
seg.LoadDictionary("../data/dictionary.txt")
segments := seg.Segment([]byte(*text))
fmt.Println(sego.SegmentsToString(segments, true))
}
示例2: tokenize
func tokenize(doc string, sgmt *sego.Segmenter) []string {
var terms []string
for _, seg := range sgmt.Segment([]byte(doc)) {
term := seg.Token().Text()
if !AllPunctOrSpace(term) {
terms = append(terms, term)
}
}
return terms
}
示例3: main
func main() {
// 载入词典
var segmenter sego.Segmenter
segmenter.LoadDictionary("/home/bryce/code/gocode/src/github.com/huichen/sego/data/dictionary.txt")
// 分词
text := []byte("中华人民共和国中央人民政府")
segments := segmenter.Segment(text)
// 处理分词结果
// 支持普通模式和搜索模式两种分词,见代码中SegmentsToString函数的注释。
fmt.Println(sego.SegmentsToString(segments, true))
}
示例4: main
func main() {
var seg sego.Segmenter
seg.LoadDictionary("data/dictionary.txt")
text1 := "我喜欢看电视,也喜欢接电话"
text2 := "我不喜欢看电视,也不喜欢看电影"
type num struct {
V, W int
}
var words = make(map[string]*num, 10)
segments1 := seg.Segment([]byte(text1))
segments2 := seg.Segment([]byte(text2))
for _, v := range sego.SegmentsToSlice(segments1, true) {
_, ok := words[v]
if ok {
p := words[v]
p.V = p.V + 1
words[v] = p
} else {
words[v] = &num{1, 0}
}
}
for _, v := range sego.SegmentsToSlice(segments2, true) {
_, ok := words[v]
if ok {
p := words[v]
p.W = p.W + 1
words[v] = p
} else {
words[v] = &num{0, 1}
}
}
//余弦相似度计算
var a, b, c int
for k, v := range words {
a = a + v.V*v.W
b = b + v.V*v.V
c = c + v.W*v.W
fmt.Println(k, v)
}
fmt.Println(a, b, c, float64(a)/(math.Sqrt(float64(b))*math.Sqrt(float64(c))))
}
示例5: main
func main() {
// 确保单线程,因为Go从1.5开始默认多线程
runtime.GOMAXPROCS(1)
// 解析命令行参数
flag.Parse()
// 记录时间
t0 := time.Now()
var segmenter sego.Segmenter
segmenter.LoadDictionary("../data/dictionary.txt")
// 记录时间
t1 := time.Now()
log.Printf("载入词典花费时间 %v", t1.Sub(t0))
// 写入内存profile文件
if *memprofile != "" {
f, err := os.Create(*memprofile)
if err != nil {
log.Fatal(err)
}
pprof.WriteHeapProfile(f)
defer f.Close()
}
// 打开将要分词的文件
file, err := os.Open("../testdata/bailuyuan.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 逐行读入
scanner := bufio.NewScanner(file)
size := 0
lines := [][]byte{}
for scanner.Scan() {
var text string
fmt.Sscanf(scanner.Text(), "%s", &text)
content := []byte(text)
size += len(content)
lines = append(lines, content)
}
// 当指定输出文件时打开输出文件
var of *os.File
if *output != "" {
of, err = os.Create(*output)
if err != nil {
log.Fatal(err)
}
defer of.Close()
}
// 记录时间
t2 := time.Now()
// 打开处理器profile文件
if *cpuprofile != "" {
f, err := os.Create(*cpuprofile)
if err != nil {
log.Fatal(err)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
}
// 分词
for i := 0; i < numRuns; i++ {
for _, l := range lines {
segments := segmenter.Segment(l)
if *output != "" {
of.WriteString(sego.SegmentsToString(segments, false))
of.WriteString("\n")
}
}
}
// 停止处理器profile
if *cpuprofile != "" {
defer pprof.StopCPUProfile()
}
// 记录时间并计算分词速度
t3 := time.Now()
log.Printf("分词花费时间 %v", t3.Sub(t2))
log.Printf("分词速度 %f MB/s", float64(size*numRuns)/t3.Sub(t2).Seconds()/(1024*1024))
}