golang-jieba分词|青训营笔记

1,372 阅读3分钟

golang-jieba分词|青训营笔记

这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记

本文将介绍jieba分词的学习

分词技术在搜索引擎中的重要性

分词技术就是搜索引擎针对用户提交查询的关键词串进行的查询处理后根据用户的关键词串用各种匹配方法进行分词的一种技术。

中文分词(Chinese Word Segmentation)指的是将一个汉字序列(句子)切分成一个一个的单独的词,分词就是将连续的字序列按照一定的规则重新组合成词序列的过程。

现在分词方法大致有三种:基于字符串配置的分词方法、基于理解的分词方法和基于统计的分词方法。

jieba的分词原理分析

  • 初始化。加载词典文件,获取每个词语和它出现的词数
  • 切分短语。利用正则,将文本切分为一个个语句,之后对语句进行分词
  • 构建DAG。通过字符串匹配,构建所有可能的分词情况的有向无环图,也就是DAG
  • 构建节点最大路径概率,以及结束位置。计算每个汉字节点到语句结尾的所有路径中的最大概率,并记下最大概率时在DAG中对应的该汉字成词的结束位置。
  • 构建切分组合。根据节点路径,得到词语切分的结果,也就是分词结果。
  • HMM新词处理:对于新词,也就是jieba词典中没有的词语,我们通过统计方法来处理,jieba中采用了HMM(隐马尔科夫模型)来处理。
  • 返回分词结果:通过yield将上面步骤中切分好的词语逐个返回。yield相对于list,可以节约存储空间。

HMM模型:隐马尔可夫模型

jieba的特点

jieba的三种分词模式

Jieba支持三种分词模式

  • 精确模式:把文本精确的切分开,不存在冗余单词。
  • 全模式:把文本中所有可能的词语都扫描出来,有冗余。
  • 搜索引擎模式:在精确模式基础上,对长词再次切分。

我们用一个案例来演示一下jieba的三种模式

#结巴分词 Go 语言版:Jiebago

Build Status GoDoc

结巴分词 是由 @fxsjy 使用 Python 编写的中文分词组件,Iiebago 是结巴分词的 Golang 语言实现。

安装

go get github.com/wangbin/jiebago/...

安装

go get github.com/wangbin/jiebago/...

使用

package main

import (
        "fmt"

        "github.com/wangbin/jiebago"
)

var seg jiebago.Segmenter

func init() {
        seg.LoadDictionary("dict.txt")
}

func print(ch <-chan string) {
        for word := range ch {
                fmt.Printf(" %s /", word)
        }
        fmt.Println()
}

func Example() {
        fmt.Print("【全模式】:")
        print(seg.CutAll("我来到北京清华大学"))

        fmt.Print("【精确模式】:")
        print(seg.Cut("我来到北京清华大学", false))

        fmt.Print("【新词识别】:")
        print(seg.Cut("他来到了网易杭研大厦", true))

        fmt.Print("【搜索引擎模式】:")
        print(seg.CutForSearch("小明硕士毕业于中国科学院计算所,后在日本京都大学深造", true))
}

输出结果:

【全模式】: 我 / 来到 / 北京 / 清华 / 清华大学 / 华大 / 大学 /

【精确模式】: 我 / 来到 / 北京 / 清华大学 /

【新词识别】: 他 / 来到 / 了 / 网易 / 杭研 / 大厦 /

【搜索引擎模式】: 小明 / 硕士 / 毕业 / 于 / 中国 / 科学 / 学院 / 科学院 / 中国科学院 / 计算 / 计算所 / , / 后 / 在 / 日本 / 京都 / 大学 / 日本京都大学 / 深造 /

更多信息请参考文档

分词速度

  • 2MB / Second in Full Mode
  • 700KB / Second in Default Mode
  • Test Env: AMD Phenom(tm) II X6 1055T CPU @ 2.8GHz; 《金庸全集》