func main() { flag.Parse() var seg sego.Segmenter seg.LoadDictionary("../data/dictionary.txt") segments := seg.Segment([]byte(*text)) fmt.Println(sego.SegmentsToString(segments, true)) }
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)) }
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)) }