GolangNote

Golang笔记

golang 中文分词库比较

Permalink

以前在项目里用到中文分词,对中文分词库做了一些比较。

golang 中文分词库比较

前面3个都是纯 go 实现,优势是使用方便;最后一个底层由C++实现,性能和消耗资源比较少,但不能跨平台编译。

因为 go-ego/gse 是后来出现并借鉴前两者,还在开发中,功能较多,就拿它与 yanyiwu/gojieba 做个简单的测试:

Go: 中文分词性能测试 gse VS gojieba
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
func BenchmarkExtractorJieba(b *testing.B) {
	// equals with:
	// x := NewExtractor(DICT_PATH, HMM_PATH, USER_DICT_PATH, IDF_PATH, STOP_WORDS_PATH)
	x := gojieba.NewJieba()
	defer x.Free()
	s := "我是拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上CEO,走上人生巅峰。"
	b.ResetTimer()
	// Stop Timer before x.Free()
	defer b.StopTimer()
	for i := 0; i < b.N; i++ {
		//x.Extract(s, 10)
		x.ExtractWithWeight(s, 10)
	}
}

func BenchmarkExtractorGse(b *testing.B) {
	x,_ := gse.New()
	var te idf.TagExtracter
	te.WithGse(x)
	_ = te.LoadIdf()
	defer x.Empty()

	s := "我是拖拉机学院手扶拖拉机专业的。不用多久,我就会升职加薪,当上CEO,走上人生巅峰。"
	b.ResetTimer()
	defer b.StopTimer()
	for i := 0; i < b.N; i++ {
		te.ExtractTags(s, 10)
	}
}

测试

Bash: bench
1
go test -bench "Extractor" -benchmem -benchtime 10s

结果:

plaintext:
1
2
3
4
5
6
goos: darwin
goarch: amd64
pkg: fenci
cpu: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz
BenchmarkExtractorJieba-8   	  427759	     28719 ns/op	     856 B/op	      17 allocs/op
BenchmarkExtractorGse-8     	  210597	     52466 ns/op	   16439 B/op	     247 allocs/op

结论

如果没有特别的原因不能进入虚拟机里编译,还是继续使用 yanyiwu/gojiebago-ego/gse 是后来者,功能强大,又支持多种语言,继续保持关注。

本文网址: https://golangnote.com/topic/292.html 转摘请注明来源

Related articles

Golang 生成防识别的图片验证码

验证码 captcha 是对抗密码强力破解、垃圾信息的有效方式,一般用于用户注册、登录,当检测到频繁发帖时也会启用验证码。下面介绍用golang 生成防机器识别的图片验证码。...

Golang http IPv4/IPv6 服务

Golang 的网络服务,如果不指定IPv4 或 IPv6,如果VPS 同时支持 IPv4 和 IPv6,`net.Listen()` 只会监听 IPv6 地址。但这不影响客户端使用 IPv4 地址来访问。...

golang共享数据用Mutex 或 Channel

在go 里,多线程对共享数据的操作一般要使用Mutex 或 Channel 来加锁或隔离通信。下面是一个使用Mutex 和 Channel 比较的例子。...

Write a Comment to "golang 中文分词库比较"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.22.3 Processed in 0ms