中文自然语言处理(NLP)(一)python jieba模块

1.jieba分词的安装

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

2.jieba分词的介绍

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

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

jieba分词模块的主要方法是jieba.cut(),精确模式和全模式的区别主要在于其中的参数不同

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

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

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

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

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

需要调用jieba.cut_for_search()方法

仅仅是看这些东西,看不出个所以然来,接下来对三种分词的模式进行测试:

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

上述代码运行结果:

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

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

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

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

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

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

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

这个例子当中的文本为“南京市长江大桥是一座大桥”,我们希望提取出来的分词结果应当为:“南京市长江大桥”,或者说,最次也应该是“南京市”和“长江大桥”两个词语,上述代码的运行结果为:

全模式分词结果:南京,南京市,京市,市长,长江,长江大桥,大桥,是,一座,大桥

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

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

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

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

中文分词的方法大致可以分为三类:基于字典、词库匹配的分词方法;基于词频度统计的分词方法和基于知识理解的分词方法(另外还有逐词遍历法,但是因为不论文本有多么短,词库多么大都要逐词遍历一遍,效率过低,所以说大部分情况不予采用)。一般的中文分词模块使用基于字典、词库的分词方法,全模式使用的策略为(设词典中最长词的长度为n):从字段的第一个字符开始,向后读取1,2,...n个字符,并且到词典当中去对应,如果能对应上,就将其取出来,这样就可以达到将所有可以成词的字段提取出来(并且有重复部分)的目的;而相应的,精确模式的分词策略则可能是尽可能将取词窗口扩大,也就是在可能含有重复的长度从1到n的这些词中,取最长的一个输出。

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

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

中文分词常常用于许多特定的语境,相应的也就需要添加一些特定语境下的词典,比如上一部分的“南京市长江大桥”就属于“地标建筑”之类的词典,如果分词将其分为“南京市”和“长江大桥”就有可能不能完全反映出原文本的重点(毕竟南京市的东西很多,长江大桥也不止南京市有),这种时候我们就需要添加自定义的词典来提高分词的质量。

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

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

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

主要的改变在于全模式和搜索引擎模式直接加入了这个词,而精确模式则是将新加词的子集词(姑且这么称呼)取代了,这也符合上一部分的假设。

这大概就是第一天的成果了,内容其实是几个月之前学习到的,今天拿出来整理一下,希望今后也可以继续坚持下去吧。

原文地址:https://www.cnblogs.com/aLieb/p/11129774.html

时间: 2024-11-06 09:58:51

中文自然语言处理(NLP)(一)python jieba模块的相关文章

python json模块 字典 输出中文

json.dumps({'text':"中文"},ensure_ascii=False,indent=2) python json模块 字典得到字符串,输出中文

用python做中文自然语言预处理

这篇博客根据中文自然语言预处理的步骤分成几个板块.以做LDA实验为例,在处理数据之前,会写一个类似于实验报告的东西,用来指导做实验,OK,举例: 一,实验数据预处理(python,结巴分词)1.对于爬取的评论做分词和词性标注处理(mac-result.txt)2.对于结果只用公版的停用词表去停用词,不进行人工筛选(mac-result1.txt)3.保留:名词,名词短语(两者为评论描述主题) 形容词,动词,动词短语(对主题的描述)以及其他可能有实意的词   去除:副词,标点,拟声词等无实意词包括

#19 re&jieba模块

前言 在Python中,需要对字符串进行大量的操作,有时需要从一个字符串中提取到特定的信息,用切片肯定是不行的,所有这一节记录两个强大的文本处理模块,一个是正则表达式re模块,另一个是中文处理模块jieba,Here wo go! 一.re模块 re模块的出现使得Python完全支持正则表达式,在学re模块之前,先来认识一下正则表达式 正则表达式使用单个字符串来描述.匹配出特定句法的字符串,在文本编辑中,正则表达式常用来检索.替换那些特定匹配模式的文本.正则表达式使用起来十分繁琐,但是它带来的功

jieba模块基本介绍

一.jieba模块基本介绍 1.1 jieba模块的作用 jieba是优秀的第三方中文词库 中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词.分词就是将连续的字序列按照一定的规范重新组合成词序列的过程 1.2 jieba模块的安装 pip install jieba #cmd命令行 二.jieba库的使用说明 2.1 jieba分词的三种模式 精确模式:将句子最精确的分开,适合文本分析(无冗余) 全模式:句子中所有可以成词的词语都扫描出来

Java自然语言处理NLP工具包

自然语言处理 1. Java自然语言处理 LingPipe LingPipe是一个自然语言处理的Java开源工具包.LingPipe目前已有很丰富的功能,包括主题分类(Top Classification).命名实体识别(Named Entity Recognition).词性标注(Part-of Speech Tagging).句题检测(Sentence Detection).查询拼写检查(Query Spell Checking).兴趣短语检测(Interseting Phrase Dete

【HanLP】HanLP中文自然语言处理工具实例演练

HanLP中文自然语言处理工具实例演练 作者:白宁超 2016年11月25日13:45:13 摘要:HanLP是hankcs个人完成一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用.HanLP具备功能完善.性能高效.架构清晰.语料时新.可自定义的特点. 在提供丰富功能的同时,HanLP内部模块坚持低耦合.模型坚持惰性加载.服务坚持静态提供.词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的语料.笔者坚定支持开源的项目,本文初衷是使用自然语言

python 各模块

01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支持模块 12 _ _builtin_ _ 模块 121 使用元组或字典中的参数调用函数 1211 Example 1-1 使用 apply 函数 1212 Example 1-2 使用 apply 函数传递关键字参数 1213 Example 1-3 使用 apply 函数调用基类的构造函数 122

实战篇一 python常用模块和库介绍

# [email protected] coding: utf-8 [email protected] -- Python 常用模块和库介绍 第一部分:json模块介绍 import json 将一个Python数据结构转换为JSON: dict_ = {1:2, 3:4, "55":"66"} # test json.dumps print type(dict_), dict_ json_str = json.dumps(dict_) print "js

python 各模块学习

核心模块 1.1. 介绍 1.2. _ _builtin_ _ 模块 1.3. exceptions 模块 1.4. os 模块 1.5. os.path 模块 1.6. stat 模块 1.7. string 模块 1.8. re 模块 1.9. math 模块 1.10. cmath 模块 1.11. operator 模块 1.12. copy 模块 1.13. sys 模块 1.14. atexit 模块 1.15. time 模块 1.16. types 模块 1.17. gc 模块