jieba分词
支持四种分词模式
- 精确模式 试图将句子最精确地切开,适合文本分析;
- 全模式 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 搜索引擎模式 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
- paddle模式 利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。 paddle模式使用需安装paddlepaddle-tiny.
jieba分词安装
1. 全自动安装
pip install jieba
2. 半自动安装
先下载 http://pypi.python.org/pypi/jieba/
解压后运行 python setup.py install
3. 手动安装
将 jieba 目录放置于当前目录或者 site-packages 目录
通过 import jieba
来引用
如果需要使用paddle模式下的分词和词性标注功能,请先安装paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1
。
主要功能
分词
1、基本步骤
初始化
初始化时,先加载词典文件dict.txt,遍历每一行,生成词语-词数的键值对和总词数,并将生成结果保存到cache中,下次直接从cache中读取即可。
初始化可以简单理解为,读取词典文件,构建词语-词数键值对,方便后面步骤中查词典,也就是字符串匹配。
切分短语
- 首先进行将语句转换为UTF-8或者GBK。
- 然后根据用户指定的模式,是否全模式,是否采用HMM隐马尔科夫,来设置cut方式。
- 然后根据正则,将输入文本分为一个个语句。
- 最后遍历语句,对每个语句单独进行分词。
构建DAG
看构建DAG的过程。
先遍历一个个切分好的短语,对这些短语来进行分词。
首先要构建短语的有向无环图DAG。查词典进行字符串匹配的过程中,可能会出现好几种可能的切分方式,将这些组合构成有向无环图,如下图所示:
得到语句的有向无环图DAG,DAG中记录了某个词的开始位置和它可能的结束位置。开始位置作为key,结束位置是一个list。
上面语句的完整DAG为: { 0: [1, 2], 1: [2], 2: [3, 4, 5], 3: [4], 4: [5] }
比如位置0的DAG表达为 {0: [1, 2]}, 也就是说0位置为词的开始位置时,1, 2位置都有可能是词的结束位置。
动态规划构建Route,计算从语句末尾到语句起始,DAG中每个节点到语句结束位置的最大路径概率,以及概率最大时节点对应词语的结束位置。
def calc(self, sentence, DAG, route):
N = len(sentence)
route[N] = (0, 0)
logtotal = log(self.total)
for idx in xrange(N - 1, -1, -1):
# route[idx] = (该汉字到最后一个汉字的最大路径概率,
# 最大路径概率时该汉字对应的词语结束位置).
# 遍历DAG中该汉字节点的结束位置,也就是DAG[idx],
# 计算idx到x之间构成的词语的概率,然后乘以x到语句结束位置的最大概率,
# 即可得到idx到语句结束的路径最大概率.
route[idx] = max(
(log(self.FREQ.get(sentence[idx:x + 1]) or 1)
- log(total)