jieba 是python的第三方库,致力于做最好的中文分词组件
特点:
支持三种分词模式:
精确模式:试图将句子最精确地切开,适合文本分析;
全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
支持繁体分词
支持自定义词典
MIT 授权协议
安装使用:
pip install jieba
import jieba
算法:
基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
主要功能
1、分词
函数接口:
注意:
待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8
def cut(self, sentence, cut_all=False, HMM=True): """ 这个函数的主要功能是切分sentence句子 :param self: :param sentence: 待切分的句子 :param cut_all: 切分模式【True:全模式切分,False:精确模式切分】 :param HMM: 是否使用Hidden Markov Model 模型 :return:返回切分结果,是一个迭代器generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode) """ def cut_for_search(self, sentence, HMM=True): """ 该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细 :param self: :param sentence:待切分的句子 :param HMM:是否使用Hidden Markov Model 模型 :return:返回切分结果,是一个迭代器generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode) """ def lcut(self, *args, **kwargs): """ 该方法和 cut方法的功能和用法完全一致,只是改方法返回的是一个列表 """ return list(self.cut(*args, **kwargs)) def lcut_for_search(self, *args, **kwargs): """ 该方法和 cut_for_search 方法的功能和用法完全一致,只是改方法返回的是一个列表 """ return list(self.cut_for_search(*args, **kwargs))
【使用案例】
import jieba seg_list = jieba.cut(sentence="我来到北京清华大学",cut_all=True,HMM=True) print(seg_list) print("【全模式】","/".join(seg_list))#全模式 seg_list = jieba.cut(sentence="我来到北京清华大学",cut_all=False,HMM=True) print("【精确模式】","/".join(seg_list)) #精确模式(默认) seg_list = jieba.cut(sentence='他来到了网易杭研大厦') print("【新词识别】",'/'.join(seg_list),' (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)') seg_list = jieba.cut_for_search(sentence='小明硕士毕业于中国科学院计算所,后在日本京都大学深造',HMM=True) print("【搜索引擎模式】",'/'.join(seg_list))
【输出】
【全模式】 我/来到/北京/清华/清华大学/华大/大学
【精确模式】 我/来到/北京/清华大学
【新词识别】 他/来到/了/网易/杭研/大厦 (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)
【搜索引擎模式】 小明/硕士/毕业/于/中国/科学/学院/科学院/中国科学院/计算/计算所/,/后/在/日本/京都/大学/日本京都大学/深造
jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。
2. 添加自定义词典
载入词典
结巴之所有可以做到正确的切词,是因为自带有很强大的词库:(如下是自带词库位置)
自带词库如下:(自带35万词库)
一个词占一行,每一行分三个部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒
虽然 jieba 有新词识别能力以及强大的词库,但是总有漏网之鱼,此时,开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词,自行添加新词可以保证更高的正确率;