jieba是一个开源的中文分词库。
特点
- 三种分词模式:
a、全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
b、精确模式,试图将句子最精确地切开,适合文本分析;
c、搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 - 支持繁体分词
- 支持自定义词典
- MIT 授权协议
算法
- 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
- 采用了动态规划查找最大概率路径,找出基于词频的最大切分组合
- 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
目录说明
- analyse:几个提取文本关键词算法的实现
- posseg:自定义词典
- init.py:jieba分词的入口
- _compat.py:
- dict.txt:总的词库,记录一个词、词频和词性
- test:测试demo
分词
- jieba.cut()需要输入三个参数,sentence一个句子; cut_all 是否使用全模式;HMM是否使用HMM模型
- jieba.cut_for_search()需要输入两个参数,sentence一个句子; HMM是否使用HMM模型
- jieba.cut()和jieba.cut_for_search()返回的数据结构都是一个generator(生成器),因其函数中使用yield关键字
- jieba.lcut()和jieba.lcut_for_search()直接调用对应的cut方法,直接返回list
- jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
# encoding=utf-8
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他来到了网易杭研大厦") # 默认是精确模式
print(", ".join(seg_list))
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # 搜索引擎模式
print(", ".join(seg_list))
输出结果:
【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【精确模式】: 我/ 来到/ 北京/ 清华大学
【新词识别】:他, 来到, 了, 网易, 杭研, 大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造