mirror of
https://github.com/fumiama/jieba.git
synced 2026-06-05 00:32:51 +08:00
pass tests & update readme
This commit is contained in:
83
README.md
83
README.md
@@ -1,19 +1,18 @@
|
||||
#结巴分词 Go 语言版:jieba
|
||||
|
||||
[](https://godoc.org/github.com/fumiama/jieba)
|
||||
|
||||
[](https://travis-ci.org/wangbin/jieba) [](https://godoc.org/github.com/fumiama/jieba)
|
||||
[结巴分词](https://github.com/fxsjy/jieba) 是由 [@fxsjy](https://github.com/fxsjy) 使用 Python 编写的中文分词组件,本仓库是结巴分词的 Golang 语言实现,修改于[jiebago](https://github.com/wangbin/jiebago),优化了速度与性能,增加了从`fs.File`加载字典等功能。
|
||||
|
||||
[结巴分词](https://github.com/fxsjy/jieba) 是由 [@fxsjy](https://github.com/fxsjy) 使用 Python 编写的中文分词组件,Iiebago 是结巴分词的 Golang 语言实现。
|
||||
|
||||
|
||||
## 安装
|
||||
|
||||
```
|
||||
go get github.com/fumiama/jieba/...
|
||||
```
|
||||
|
||||
## 使用
|
||||
|
||||
```
|
||||
go get -d github.com/fumiama/jieba
|
||||
```
|
||||
|
||||
## 示例
|
||||
|
||||
```
|
||||
package main
|
||||
|
||||
@@ -23,53 +22,47 @@ import (
|
||||
"github.com/fumiama/jieba"
|
||||
)
|
||||
|
||||
var seg jieba.Segmenter
|
||||
func main() {
|
||||
seg, err := LoadDictionaryAt("dict.txt")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
func init() {
|
||||
seg.LoadDictionary("dict.txt")
|
||||
}
|
||||
fmt.Print("【全模式】:")
|
||||
fmt.Println(seg.CutAll("我来到北京清华大学"))
|
||||
|
||||
func print(ch <-chan string) {
|
||||
for word := range ch {
|
||||
fmt.Printf(" %s /", word)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
fmt.Print("【精确模式】:")
|
||||
fmt.Println(seg.Cut("我来到北京清华大学", false))
|
||||
|
||||
func Example() {
|
||||
fmt.Print("【全模式】:")
|
||||
print(seg.CutAll("我来到北京清华大学"))
|
||||
fmt.Print("【新词识别】:")
|
||||
fmt.Println(seg.Cut("他来到了网易杭研大厦", true))
|
||||
|
||||
fmt.Print("【精确模式】:")
|
||||
print(seg.Cut("我来到北京清华大学", false))
|
||||
|
||||
fmt.Print("【新词识别】:")
|
||||
print(seg.Cut("他来到了网易杭研大厦", true))
|
||||
|
||||
fmt.Print("【搜索引擎模式】:")
|
||||
print(seg.CutForSearch("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", true))
|
||||
fmt.Print("【搜索引擎模式】:")
|
||||
fmt.Println(seg.CutForSearch("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", true))
|
||||
}
|
||||
```
|
||||
输出结果:
|
||||
|
||||
```
|
||||
【全模式】: 我 / 来到 / 北京 / 清华 / 清华大学 / 华大 / 大学 /
|
||||
|
||||
【精确模式】: 我 / 来到 / 北京 / 清华大学 /
|
||||
|
||||
【新词识别】: 他 / 来到 / 了 / 网易 / 杭研 / 大厦 /
|
||||
|
||||
【搜索引擎模式】: 小明 / 硕士 / 毕业 / 于 / 中国 / 科学 / 学院 / 科学院 / 中国科学院 / 计算 / 计算所 / , / 后 / 在 / 日本 / 京都 / 大学 / 日本京都大学 / 深造 /
|
||||
【全模式】:[我 来到 北京 清华 清华大学 华大 大学]
|
||||
【精确模式】:[我 来到 北京 清华大学]
|
||||
【新词识别】:[他 来到 了 网易 杭研 大厦]
|
||||
【搜索引擎模式】:[小明 硕士 毕业 于 中国 科学 学院 科学院 中国科学院 计算 计算所 , 后 在 日本 京都 大学 日本京都大学 深造]
|
||||
```
|
||||
|
||||
更多信息请参考[文档](https://godoc.org/github.com/fumiama/jieba)。
|
||||
|
||||
## 分词速度
|
||||
|
||||
- 2MB / Second in Full Mode
|
||||
- 700KB / Second in Default Mode
|
||||
- Test Env: AMD Phenom(tm) II X6 1055T CPU @ 2.8GHz; 《金庸全集》
|
||||
|
||||
## 许可证
|
||||
|
||||
MIT: http://wangbin.mit-license.org
|
||||
```c
|
||||
goos: darwin
|
||||
goarch: amd64
|
||||
pkg: github.com/fumiama/jieba
|
||||
cpu: Intel(R) Core(TM) i5-8265U CPU @ 1.60GHz
|
||||
BenchmarkCutNoHMM-8 50101 22889 ns/op 4.67 MB/s 24492 B/op 148 allocs/op
|
||||
BenchmarkCut-8 47473 25152 ns/op 4.25 MB/s 31310 B/op 185 allocs/op
|
||||
BenchmarkCutAll-8 81760 14286 ns/op 7.49 MB/s 22746 B/op 75 allocs/op
|
||||
BenchmarkCutForSearchNoHMM-8 49009 24371 ns/op 4.39 MB/s 26421 B/op 157 allocs/op
|
||||
BenchmarkCutForSearch-8 44643 26597 ns/op 4.02 MB/s 33224 B/op 194 allocs/op
|
||||
PASS
|
||||
ok github.com/fumiama/jieba 8.769s
|
||||
```
|
||||
|
||||
@@ -32,9 +32,6 @@ func worker() {
|
||||
}
|
||||
|
||||
func Example_parallelCut() {
|
||||
// Set the number of goroutines
|
||||
runtime.GOMAXPROCS(numThreads)
|
||||
|
||||
// open file for segmentation
|
||||
file, err := os.Open("README.md")
|
||||
if err != nil {
|
||||
@@ -83,6 +80,7 @@ func Example_parallelCut() {
|
||||
}
|
||||
|
||||
t1 := time.Now()
|
||||
close(result)
|
||||
|
||||
// Write the segments into a file for verify
|
||||
outputFile, _ := os.OpenFile("parallelCut.log", os.O_CREATE|os.O_WRONLY, 0600)
|
||||
|
||||
@@ -22,10 +22,10 @@ func Example() {
|
||||
fmt.Print("【搜索引擎模式】:")
|
||||
fmt.Println(seg.CutForSearch("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", true))
|
||||
// Output:
|
||||
// 【全模式】: 我 / 来到 / 北京 / 清华 / 清华大学 / 华大 / 大学 /
|
||||
// 【精确模式】: 我 / 来到 / 北京 / 清华大学 /
|
||||
// 【新词识别】: 他 / 来到 / 了 / 网易 / 杭研 / 大厦 /
|
||||
// 【搜索引擎模式】: 小明 / 硕士 / 毕业 / 于 / 中国 / 科学 / 学院 / 科学院 / 中国科学院 / 计算 / 计算所 / , / 后 / 在 / 日本 / 京都 / 大学 / 日本京都大学 / 深造 /
|
||||
// 【全模式】:[我 来到 北京 清华 清华大学 华大 大学]
|
||||
// 【精确模式】:[我 来到 北京 清华大学]
|
||||
// 【新词识别】:[他 来到 了 网易 杭研 大厦]
|
||||
// 【搜索引擎模式】:[小明 硕士 毕业 于 中国 科学 学院 科学院 中国科学院 计算 计算所 , 后 在 日本 京都 大学 日本京都大学 深造]
|
||||
}
|
||||
|
||||
func Example_suggestFrequency() {
|
||||
@@ -67,15 +67,15 @@ func Example_suggestFrequency() {
|
||||
fmt.Print("After:")
|
||||
fmt.Println(seg.Cut(sentence, false))
|
||||
// Output:
|
||||
// Before: 超敏 / C / 反应 / 蛋白 / 是 / 什么 / ? /
|
||||
// Before:[超敏 C 反应 蛋白 是 什么 ?]
|
||||
// 超敏C反应蛋白 current frequency: 0.000000, suggest: 1.000000.
|
||||
// After: 超敏C反应蛋白 / 是 / 什么 / ? /
|
||||
// Before: 如果 / 放到 / post / 中将 / 出错 /
|
||||
// After:[超敏C反应蛋白 是 什么 ?]
|
||||
// Before:[如果 放到 post 中将 出错]
|
||||
// 中将 current frequency: 763.000000, suggest: 494.000000.
|
||||
// After: 如果 / 放到 / post / 中 / 将 / 出错 /
|
||||
// Before: 今天天气 / 不错 /
|
||||
// After:[如果 放到 post 中 将 出错]
|
||||
// Before:[今天天气 不错]
|
||||
// 今天天气 current frequency: 3.000000, suggest: 0.000000.
|
||||
// After: 今天 / 天气 / 不错 /
|
||||
// After:[今天 天气 不错]
|
||||
}
|
||||
|
||||
func Example_loadUserDictionary() {
|
||||
@@ -93,6 +93,6 @@ func Example_loadUserDictionary() {
|
||||
fmt.Print("After:")
|
||||
fmt.Println(seg.Cut(sentence, true))
|
||||
// Output:
|
||||
// Before: 李小福 / 是 / 创新 / 办 / 主任 / 也 / 是 / 云 / 计算 / 方面 / 的 / 专家 /
|
||||
// After: 李小福 / 是 / 创新办 / 主任 / 也 / 是 / 云计算 / 方面 / 的 / 专家 /
|
||||
// Before:[李小福 是 创新 办 主任 也 是 云 计算 方面 的 专家]
|
||||
// After:[李小福 是 创新办 主任 也 是 云计算 方面 的 专家]
|
||||
}
|
||||
|
||||
@@ -791,6 +791,7 @@ func TestLoadUserDictionary(t *testing.T) {
|
||||
|
||||
func BenchmarkCutNoHMM(b *testing.B) {
|
||||
sentence := "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
|
||||
b.SetBytes(int64(len(sentence)))
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
seg.Cut(sentence, false)
|
||||
@@ -799,6 +800,7 @@ func BenchmarkCutNoHMM(b *testing.B) {
|
||||
|
||||
func BenchmarkCut(b *testing.B) {
|
||||
sentence := "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
|
||||
b.SetBytes(int64(len(sentence)))
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
seg.Cut(sentence, true)
|
||||
@@ -807,6 +809,7 @@ func BenchmarkCut(b *testing.B) {
|
||||
|
||||
func BenchmarkCutAll(b *testing.B) {
|
||||
sentence := "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
|
||||
b.SetBytes(int64(len(sentence)))
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
seg.CutAll(sentence)
|
||||
@@ -815,6 +818,7 @@ func BenchmarkCutAll(b *testing.B) {
|
||||
|
||||
func BenchmarkCutForSearchNoHMM(b *testing.B) {
|
||||
sentence := "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
|
||||
b.SetBytes(int64(len(sentence)))
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
seg.CutForSearch(sentence, false)
|
||||
@@ -823,6 +827,7 @@ func BenchmarkCutForSearchNoHMM(b *testing.B) {
|
||||
|
||||
func BenchmarkCutForSearch(b *testing.B) {
|
||||
sentence := "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"
|
||||
b.SetBytes(int64(len(sentence)))
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
seg.CutForSearch(sentence, true)
|
||||
|
||||
Reference in New Issue
Block a user