golang中文分词算法实现插件库gojieba的使用
GoJieba中文分词库的使用
GoJieba是"结巴"中文分词的Golang语言版本。
简介
- 支持多种分词方式,包括: 最大概率模式, HMM新词发现模式, 搜索引擎模式, 全模式
- 核心算法底层由C++实现,性能高效。
- 字典路径可配置,NewJieba(…string), NewExtractor(…string) 可变形参,当参数为空时使用默认词典(推荐方式)
安装
go get github.com/yanyiwu/gojieba
使用示例
package main
import (
"fmt"
"strings"
"github.com/yanyiwu/gojieba"
)
func main() {
var s string
var words []string
use_hmm := true
x := gojieba.NewJieba()
defer x.Free()
s = "我来到北京清华大学"
words = x.CutAll(s) // 全模式
fmt.Println(s)
fmt.Println("全模式:", strings.Join(words, "/"))
words = x.Cut(s, use_hmm) // 精确模式
fmt.Println(s)
fmt.Println("精确模式:", strings.Join(words, "/"))
s = "比特币"
words = x.Cut(s, use_hmm)
fmt.Println(s)
fmt.Println("精确模式:", strings.Join(words, "/"))
x.AddWord("比特币") // 添加自定义词
s = "比特币"
words = x.Cut(s, use_hmm)
fmt.Println(s)
fmt.Println("添加词典后,精确模式:", strings.Join(words, "/"))
s = "他来到了网易杭研大厦"
words = x.Cut(s, use_hmm) // 新词识别
fmt.Println(s)
fmt.Println("新词识别:", strings.Join(words, "/"))
s = "小明硕士毕业于中国科学院计算所,后在日本京都大学深造"
words = x.CutForSearch(s, use_hmm) // 搜索引擎模式
fmt.Println(s)
fmt.Println("搜索引擎模式:", strings.Join(words, "/"))
s = "长春市长春药店"
words = x.Tag(s) // 词性标注
fmt.Println(s)
fmt.Println("词性标注:", strings.Join(words, ","))
s = "长江大桥"
words = x.CutForSearch(s, !use_hmm)
fmt.Println(s)
fmt.Println("搜索引擎模式:", strings.Join(words, "/"))
wordinfos := x.Tokenize(s, gojieba.SearchMode, !use_hmm) // Tokenize
fmt.Println(s)
fmt.Println("Tokenize:(搜索引擎模式)", wordinfos)
keywords := x.ExtractWithWeight(s, 5) // 关键词提取
fmt.Println("Extract:", keywords)
}
输出示例
我来到北京清华大学
全模式: 我/来到/北京/清华/清华大学/华大/大学
我来到北京清华大学
精确模式: 我/来到/北京/清华大学
比特币
精确模式: 比特/币
比特币
添加词典后,精确模式: 比特币
他来到了网易杭研大厦
新词识别: 他/来到/了/网易/杭研/大厦
小明硕士毕业于中国科学院计算所,后在日本京都大学深造
搜索引擎模式: 小明/硕士/毕业/于/中国/科学/学院/科学院/中国科学院/计算/计算所/,/后/在/日本/京都/大学/日本京都大学/深造
长春市长春药店
词性标注: 长春市/ns,长春/ns,药店/n
长江大桥
搜索引擎模式: 长江/大桥/长江大桥
长江大桥
Tokenize:(搜索引擎模式) [{长江 0 6} {大桥 6 12} {长江大桥 0 12}]
Extract: [{长江大桥 8.200680] [{长江 8.200680} {大桥 8.200680}]
性能测试
go test -bench "Jieba" -test.bbenchtime 10s
go test -bench "Extractor" -test.benchtime 10s
更多关于golang中文分词算法实现插件库gojieba的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang中文分词算法实现插件库gojieba的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Gojieba: Golang中文分词库使用指南
Gojieba是jieba分词的Golang实现版本,是一个高效的中文分词组件,支持多种分词模式,适用于搜索和文本分析场景。
安装
go get github.com/yanyiwu/gojieba
基本使用
初始化分词器
package main
import (
"fmt"
"github.com/yanyiwu/gojieba"
)
func main() {
// 初始化分词器
// 参数1: 字典路径
// 参数2: HMM模型路径
// 参数3: 用户字典路径
// 如果传空字符串,则使用内置的默认字典
x := gojieba.NewJieba()
defer x.Free()
// 示例文本
text := "我来到北京清华大学"
// 精确模式
words := x.Cut(text, true)
fmt.Println("精确模式:", words)
// 全模式
words = x.CutAll(text)
fmt.Println("全模式:", words)
// 搜索引擎模式
words = x.CutForSearch(text, true)
fmt.Println("搜索引擎模式:", words)
}
主要功能
1. 精确模式分词
func exactMode(x *gojieba.Jieba, text string) {
words := x.Cut(text, true)
fmt.Println("精确模式:", words)
}
2. 全模式分词
func fullMode(x *gojieba.Jieba, text string) {
words := x.CutAll(text)
fmt.Println("全模式:", words)
}
3. 搜索引擎模式分词
func searchMode(x *gojieba.Jieba, text string) {
words := x.CutForSearch(text, true)
fmt.Println("搜索引擎模式:", words)
}
4. 关键词提取
func extractKeywords(x *gojieba.Jieba, text string) {
// 提取关键词,参数:文本,返回关键词数量,是否使用权重
keywords := x.Extract(text, 5)
fmt.Println("关键词提取:", keywords)
}
5. 词性标注
func tagWords(x *gojieba.Jieba, text string) {
tags := x.Tag(text)
fmt.Println("词性标注:", tags)
}
高级用法
自定义词典
func customDict() {
// 使用自定义词典路径
x := gojieba.NewJieba(
"path/to/dict.txt",
"path/to/hmm_model.txt",
"path/to/user_dict.txt")
defer x.Free()
text := "这是一个自定义词典的测试"
words := x.Cut(text, true)
fmt.Println(words)
}
添加新词
func addWord(x *gojieba.Jieba) {
// 动态添加新词
x.AddWord("云计算")
x.AddWord("大数据")
text := "云计算和大数据是未来趋势"
words := x.Cut(text, true)
fmt.Println("添加新词后:", words)
}
性能优化建议
- 复用Jieba实例:避免频繁创建和销毁Jieba实例
- 批量处理:对大量文本进行分词时,尽量批量处理
- 预加载词典:在服务启动时初始化分词器
完整示例
package main
import (
"fmt"
"github.com/yanyiwu/gojieba"
"strings"
)
func main() {
x := gojieba.NewJieba()
defer x.Free()
text := "我爱北京天安门"
fmt.Println("=== 基本分词 ===")
fmt.Println("精确模式:", strings.Join(x.Cut(text, true), "/"))
fmt.Println("全模式:", strings.Join(x.CutAll(text), "/"))
fmt.Println("搜索引擎模式:", strings.Join(x.CutForSearch(text, true), "/"))
fmt.Println("\n=== 高级功能 ===")
fmt.Println("关键词提取:", x.Extract(text, 5))
fmt.Println("词性标注:", x.Tag(text))
// 添加新词
x.AddWord("天安门")
fmt.Println("\n添加新词后:", strings.Join(x.Cut(text, true), "/"))
}
应用场景
- 搜索引擎分词
- 文本分类
- 关键词提取
- 情感分析
- 自动摘要
Gojieba是一个功能强大且高效的中文分词库,通过合理使用可以满足大多数中文文本处理需求。