jieba是一个Python语言实现的中文分词组件,jieba库是Python中一个重要的第三方中文分词函数库
1.jieba分词的安装
Pip安装可以直接在cmd窗口中完成
2.jieba分词的介绍
街霸分词是目前较好的中文分词组件之一。杰霸分词支持三种分词模式(精准模式、全模式、搜索引擎模式),支持自定义词典(这在特定领域非常重要,有时需要根据领域的需要添加特定词典,以提高分词结果的质量)和繁体中文分词。
3.jieba分词三种分词模式及使用例子
jieba分词模块的主要方法是jieba.cut(),精确模式和全模式的区别在于参数的不同。
(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)
打印(全模式分词结果: ,)。加入(try_words))
try_words=jieba.cut(text,cut_all=False)
打印(精确模式分割结果: ,)。加入(try_words))
try _ words=jieba . cut _ for _ search(text)
打印(搜索引擎模式分词结果: ,)。join(try_words))以上代码运行结果:
全模式细分结果:北京,北京邮电大学,北京邮电大学,邮电大学,电大,大学,教育,教育部,直属,工业,和谐,信息,信息化,部,
共建,第一批,提前批,211,工科,建设,全国,重点大学
精确分词结果3360北京邮电大学是,教育部直属、工信部、部、共建、第一批、开展,“、211工程”、“建设、国家、重点、
大学
搜索引擎模式分词结果:北京,邮电,电大,大学,北京邮电大学,is,教育,教育部,直属,工业,和,信息,信息化,部,共建,第一批,进行,
“,211,工科,“,建筑,国家,重点,大学相关推荐:《Python视频教程》
通过分析上面代码的结果,我们可以看到,全模式分词是提取文本中的所有单词,单词呈现的窗口是允许重叠包含的。单词中的单词可以多次出现,但这种分词模式可能会有歧义。准确分词是指文本分割准确,构词法较长,没有构词法窗口的重叠和重复。这种分词模式产生歧义的概率比较小,但有可能是分词窗口过大,一些关键词不会单独出现在结果中。综上所述,这两种分词模式适用于不同的情况,要酌情选择。
值得一提的是,这个例子中的“工业和信息化部”应该也是一个独立的术语,但是这个词在三种分词方法中都没有出现,所以需要通过手动添加词库来实现,放在下一部分。
试试文中可能的歧义:
“南京长江大桥是一座大桥”
try_words=jieba.cut(text2,cut_all=True)
打印(全模式分词结果: ,)。加入(try_words))
try_words=jieba.cut(text2,cut_all=False)
打印(精确模式分割结果: ,)。加入(try_words))
try _ words=jieba . cut _ for _ search(text 2)
打印(搜索引擎模式分词结果: ,)。join(try_words))这个例子中的文字是“南京长江大桥是一座桥”。我们希望提取的分词结果应该是:“南京长江大桥”,或者最后一个词应该是“
南京市”和“长江大桥”两个词语,上述代码的运行结果为:
全模式分词结果:南京,南京市,京市,市长,长江,长江大桥,大桥,是,一座,大桥
分析结果:三种模式当中都没有出现我们的最佳预期(南京市长江大桥),反而在全模式和搜索引擎模式下的分词结果当中出现了歧义词(市长、京市),这跟我们的语境显然是无关的,这也恰好反映了全模式和搜索引擎模式分词的一个缺陷,也就是容易出现与语境无关的歧义词,而精确模式出现的比较少。
至于为什么会出现上述情况,我在查阅相关资料之后,认为原因如下:
中文分词的方法大致可以分为三类:
基于字典、词库匹配的分词方法;基于词频度统计的分词方法和基于知识理解的分词方法(另外还有逐词遍历法,但是因为不论文本有多么短,词库多么大都要逐词遍历一遍,效率过低,所以说大部分情况不予采用)。一般的中文分词模块使用基于字典、词库的分词方法,全模式使用的策略为(设词典中最长词的长度为n):从字段的第一个字符开始,向后读取1,2,...n个字符,并且到词典当中去对应,如果能对应上,就将其取出来,这样就可以达到将所有可以成词的字段提取出来(并且有重复部分)的目的;而相应的,精确模式的分词策略则可能是尽可能将取词窗口扩大,也就是在可能含有重复的长度从1到n的这些词中,取最长的一个输出。
(上述的“原因”只是我在使用分词模块的各个模式时的一点个人看法,不一定正确,对于项目也没有什么影响,毕竟我也没有去专门研究过源码。。。)
4.jieba分词添加自定义的词典
中文分词常常用于许多特定的语境,相应的也就需要添加一些特定语境下的词典,比如上一部分的“南京市长江大桥”就属于“地标建筑”之类的词典,如果分词将其分为“南京市”和“长江大桥”就有可能不能完全反映出原文本的重点(毕竟南京市的东西很多,长江大桥也不止南京市有),这种时候我们就需要添加自定义的词典来提高分词的质量。
jieba.add_word('工业和信息化部')
使用jieba模块的add_word()方法即可对其加入新的词,插入之后的分词结果如下:
全模式分词结果:北京,北京邮电,北京邮电大学,邮电,邮电大学,电大,大学,是,教育,教育部,直属,,,工业,工业和信息化部,信息,
主要的改变在于全模式和搜索引擎模式直接加入了这个词,而精确模式则是将新加词的子集词(姑且这么称呼)取代了,这也符合上一部分的假设。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。