小白在Long Long ago研究过一段时间的结巴分词,当时是因为工作需要,很长时间过去了,有一点点生疏,现把之前学习的笔记整理一下,以便以后的使用,也分享一下~
首先,需要先安装结巴分词包。
使用Anaconda prompt进行安装
pip install jieba
spyder安装第三方包可参考小白之前的博客哦(https://blog.csdn.net/Jarry_cm/article/details/90479078)
结巴分词支持三种分词模式:
精确模式:将句子最精确地切开,适合文本分析;
全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
来一个栗子~
import jieba
seg_list1 = jieba.cut("我最喜欢吃冰糖葫芦",cut_all = True)#全模式
seg_list2 = jieba.cut("我最喜欢吃冰糖葫芦",cut_all = False)#精确模式,默认状态下也是精确模式
seg_list3 = jieba.cut("我最喜欢吃冰糖葫芦")#默认
seg_list4 = jieba.cut_for_search("我最喜欢吃冰糖葫芦")#搜索引擎模式
print ("Full Mode:" + " ".join(seg_list1))
print ("Precise Mode:" + " ".join(seg_list2))
print ("Search Mode:" + " ".join(seg_list3))
print ("Default Mode:" + " ".join(seg_list4))
看一下结果:
Full Mode:我 最 喜欢 吃 冰糖 冰糖葫芦 糖葫芦 葫芦
Precise Mode:我 最 喜欢 吃 冰糖葫芦
Search Mode:我 最 喜欢 吃 冰糖葫芦
Default Mode:我 最 喜欢 吃 冰糖 葫芦 糖葫芦 冰糖葫芦
从结果可以看出,全模式是将所有可能的分词都展示出来,精确模式是将一句话精准的切分开,函数默认是使用精确模式的,搜索引擎模式,是在精确模式的基础上,又将冰糖葫芦拆分成可能的分词,对于这句话,和全模式是一样的,只是词的顺序不同。
理一下两个函数的用法:
jieba.cut该方法接受三个输入参数:
(1)需要分词的字符串;
(2)cut_all 参数用来控制是否采用全模式;
(3)HMM 参数用来控制是否使用 HMM 模型。
jieba.cut_for_search 方法接受两个参数:
(1)需要分词的字符串;
(2)是否使用 HMM 模型。
该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8。
jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用 jieba.lcut 以及 jieba.lcut_for_search 直接返回 list。
seg_list5 = jieba.lcut_for_search("我最喜欢吃冰糖葫芦")#搜索引擎模式
seg_list6 = jieba.lcut("我最喜欢吃冰糖葫芦")
print (seg_list5)
print (seg_list6)
结果为:
['我', '最', '喜欢', '吃', '冰糖', '葫芦', '糖葫芦', '冰糖葫芦']
['我', '最', '喜欢', '吃', '冰糖葫芦']
小白这次就先总结这几个模式的区别以及用法,之后会再分享jieba联合自定义词典的使用,这个也是在语义分析中用的比较多的。