知行编程网知行编程网  2022-12-23 00:00 知行编程网 隐藏边栏  6 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python之jieba分词相关介绍的相关知识,包括python 中文分词,以及jieba分词器这些编程知识,希望对大家有参考作用。

Python的jieba分词介绍


1.jieba分词的安装

直接在cmd窗口当中pip install即可


2.jieba分词的介绍

jieba分词是目前比较好的中文分词组件之一。 jieba分词支持三种分词模式(精准模式、全模式、搜索引擎模式),支持自定义词典(这个在特定领域很重要,有时候需要根据领域的需要添加特定的词典提高分词结果质量),支持繁体中文分词。


3.jieba分词三种分词模式及使用例子

jieba分词模块的主要方法是jieba.cut()。 precise模式和full模式的区别主要在参数上。

(1)精确模式:将文本精确地切开,适用于文本分析

jieba.cut()方法里面的CUT_ALL=False

(2)全模式:将文本里面所有可以成词的词语全部提取出来,速度较快,但是不能解决歧义的问题

jieba.cut()方法里面的CUT_ALL=True

(3)搜索引擎模式:在精确模式的基础上,将长词再次切分,供搜索使用

需要调用jieba.cut_for_search()方法

只是看着这些东西,我不明白为什么。接下来测试三种分词模式:

text='北京邮电大学是教育部直属、工业和信息化部共建、首批进行“211工程”建设的全国重点大学'
try_words=jieba.cut(text,cut_all=True)
print ('全模式分词结果:'+','.join(try_words))
try_words=jieba.cut(text,cut_all=False)
print ('精确模式分词结果:'+','.join(try_words))
try_words=jieba.cut_for_search(text)
print ('搜素引擎模式分词结果:'+','.join(try_words))

上述代码运行结果:

全模式分词结果:北京,北京邮电,北京邮电大学,邮电,邮电大学,电大,大学,是,教育,教育部,直属,,,工业,和,信息,信息化,部,
共建,,,首批,进行,,211,工程,,,建设,的,全国,重点,大学
精确模式分词结果:北京邮电大学,是,教育部,直属,、,工业,和,信息化,部,共建,、,首批,进行,“,211,工程,”,建设,的,全国,重点,
大学
搜素引擎模式分词结果:北京,邮电,电大,大学,北京邮电大学,是,教育,教育部,直属,、,工业,和,信息,信息化,部,共建,、,首批,进行,
“,211,工程,”,建设,的,全国,重点,大学

分析上述代码得到的结果,我们看出全模式分词是将文本当中所有的词都提取出来,提词的窗口是允许重叠和包含的,词语当中的字眼可以出现多次,但是这种分词模式有可能会出现歧义;精确模式分词是将文本精确地分隔开,成词较长的优先,不存在成词窗口的重叠与重复的情况,这种分词模式出现歧义的概率比较小,但是有可能会出现分词窗口过大,某些重点词不会单独出现在结果当中的情况。综上所述,这两种模式的分词适用于不同的情景,应当酌情选择。

值得一提的是,这个例子当中的“工业和信息化部”也应当是一个独立的名词,但是这三种分词方法当中都没有出现这个词语,这就需要人工添加词库来实现,放在下一部分。

再对文本当中可能出现的歧义情况进行尝试:

text2='南京市长江大桥是一座大桥'
try_words=jieba.cut(text2,cut_all=True)
print ('全模式分词结果:'+','.join(try_words))
try_words=jieba.cut(text2,cut_all=False)
print ('精确模式分词结果:'+','.join(try_words))
try_words=jieba.cut_for_search(text2)
print ('搜索引擎模式分词结果:'+','.join(try_words))

本例中的文字是“南京长江大桥是一座大桥”,我们希望提取出来的分词结果应该是:“南京长江大桥”,也就是“南京市”和“长江” Bridge”应该是最后两个字,上面代码运行的结果是:

全模式分词结果:南京,南京市,京市,市长,长江,长江大桥,大桥,是,一座,大桥
精确模式分词结果:南京市,长江大桥,是,一座,大桥
搜索引擎模式分词结果:南京,京市,南京市,长江,大桥,长江大桥,是,一座,大桥

分析结果:三种模式当中都没有出现我们的最佳预期(南京市长江大桥),反而在全模式和搜索引擎模式下的分词结果当中出现了歧义词(市长、京市),这跟我们的语境显然是无关的,这也恰好反映了全模式和搜索引擎模式分词的一个缺陷,也就是容易出现与语境无关的歧义词,而精确模式出现的比较少。

至于为什么会出现上述情况,我在查阅相关资料之后,认为原因如下:


中文分词的方法大致可以分为三类:

基于词典和词库匹配的分词方法;基于词频统计的分词方法和基于知识理解的分词方法(也有逐词遍历的方法,但是因为无论文本多短,都需要逐词遍历how large thesaurus.再次,效率太低,所以大多数情况下不使用)。通用中文分词模块采用基于词典和词库的分词方法。 full模式使用的策略是(设置字典中最长单词的长度为n):从字段的第一个字符开始向后读取1,2 ,...n个字符,然后去字典对应,如果可以匹配,则取出来,这样就可以达到提取所有可以组成词的字段(且有重复部分)的目的;而对应的是,precise模式的分词策略可能是尽可能扩大选词窗口,即在长度为1到n的可能包含重复的词中,取最长的输出。

(以上“原因”只是我在使用分词模块各种模式时的个人看法,不一定正确,对项目没有影响,毕竟我没有专门研究过源码。。 .)


4.jieba分词添加自定义的词典

中文分词经常在很多特定的语境中使用,相应地也需要在特定的语境中增加一些词典。比如上一节的“南京长江大桥”,就属于“地标性建筑”的词典。把它分成“南京城”和“长江大桥”可能不能完全体现原文的重点(毕竟南京的东西很多,长江大桥不局限于南京)。在这种情况下,我们需要添加一个自定义词典来提高分割质量。

jieba.add_word('工业和信息化部')

使用jieba模块的add_word()方法为其添加新词,插入后的分词结果如下:

全模式分词结果:北京,北京邮电,北京邮电大学,邮电,邮电大学,电大,大学,是,教育,教育部,直属,,,工业,工业和信息化部,信息,
信息化,部,共建,,,首批,进行,,211,工程,,,建设,的,全国,
重点,大学
精确模式分词结果:北京邮电大学,是,教育部,直属,、,工业和信息化部,共建,、,首批,进行,“,211,工程,”,建设,的,全国,重点,
大学
搜素引擎模式分词结果:北京,邮电,电大,大学,北京邮电大学,是,教育,教育部,直属,、,工业,信息,信息化,工业和信息化部,共建,、
,首批,进行“,211,工程,”,建设,的,全国,重点,大学
全模式分词结果:南京,南京市,南京市长江大桥,京市,市长,长江,长江大桥,大桥,是,一座,大桥
精确模式分词结果:南京市长江大桥,是,一座,大桥
搜索引擎模式分词结果:南京,京市,市长,长江,大桥,南京市,南京市长江大桥,是,一座,大桥

主要变化是full模式和搜索引擎模式直接添加这个词,而precise模式替换新添加的子集词(姑且这样称呼),这也符合前面部分的假设。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享