浅谈python jieba分词模块的基本用法


Posted in Python onNovember 09, 2017

jieba(结巴)是一个强大的分词库,完美支持中文分词,本文对其基本用法做一个简要总结。

特点

  1. 支持三种分词模式:
    1. 精确模式,试图将句子最精确地切开,适合文本分析;
    2. 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
    3. 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
  2. 支持繁体分词
  3. 支持自定义词典
  4. MIT 授权协议

安装jieba

pip install jieba

简单用法

结巴分词分为三种模式:精确模式(默认)、全模式和搜索引擎模式,下面对这三种模式分别举例介绍:

精确模式

import jieba
s = u'我想和女朋友一起去北京故宫博物院参观和闲逛。'
cut = jieba.cut(s)

print '【Output】'
print cut
print ','.join(cut)
【Output】
<generator object cut at 0x7f8dbc0efc30>
我,想,和,女朋友,一起,去,北京故宫博物院,参观,和,闲逛,。

可见分词结果返回的是一个生成器(这对大数据量数据的分词尤为重要)。

全模式

print '【Output】'
print ','.join(jieba.cut(s,cut_all = True))
【Output】
我,想,和,女朋友,朋友,一起,去,北京,北京故宫,北京故宫博物院,故宫,故宫博物院,博物,博物院,参观,和,闲逛,,

可见全模式就是把文本分成尽可能多的词。

搜索引擎模式

print '【Output】'
print ','.join(jieba.cut_for_search(s))
【Output】
我,想,和,朋友,女朋友,一起,去,北京,故宫,博物,博物院,北京故宫博物院,参观,和,闲逛,。

获取词性

每个词都有其词性,比如名词、动词、代词等,结巴分词的结果也可以带上每个词的词性,要用到jieba.posseg,举例如下:

import jieba.posseg as psg
print '【Output】'
print [(x.word,x.flag) for x in psg.cut(s)]

# 输出:
'''
[(u'我', u'r'), (u'想', u'v'), (u'和', u'c'), (u'女朋友', u'n'), (u'一起', u'm'), 
(u'去', u'v'), (u'北京故宫博物院', u'ns'), (u'参观', u'n'), (u'和', u'c'), (u'闲逛', u'v'), (u'。', u'x')]
'''

可以看到成功获取到每个词的词性,这对于我们对分词结果做进一步处理很有帮助,比如只想获取分词结果列表中的名词,那么就可以这样过滤:

print [(x.word,x.flag) for x in psg.cut(s) if x.flag.startswith('n')]

# 输出:
'''
[(u'女朋友', u'n'), (u'北京故宫博物院', u'ns'), (u'参观', u'n')]
'''

至于词性的每个字母分别表示什么词性,jieba分词的结果可能有哪些词性,就要去查阅词性对照表了,本文结尾附了一份从网上搜到的词性对照表,想了解更详细的词性分类信息,可以到网上搜索"结巴分词词性对照"。

并行分词

在文本数据量非常大的时候,为了提高分词效率,开启并行分词就很有必要了。jieba支持并行分词,基于python自带的multiprocessing模块,但要注意的是在Windows环境下不支持。

用法:

# 开启并行分词模式,参数为并发执行的进程数
jieba.enable_parallel(5)

# 关闭并行分词模式
jieba.disable_parallel()

举例:开启并行分词模式对三体全集文本进行分词

santi_text = open('./santi.txt').read()
print len(santi_text)

2681968

可以看到三体全集的数据量还是非常大的,有260多万字节的长度。

jieba.enable_parallel(100)
santi_words = [x for x in jieba.cut(santi_text) if len(x) >= 2]
jieba.disable_parallel()

获取出现频率Top n的词

还是以上面的三体全集文本为例,假如想要获取分词结果中出现频率前20的词列表,可以这样获取:

from collections import Counter
c = Counter(santi_words).most_common(20)
print c

# 输出:
'''
[(u'\r\n', 21805), (u'一个', 3057), (u'没有', 2128), (u'他们', 1690), (u'我们', 1550), 
(u'这个', 1357), (u'自己', 1347), (u'程心', 1320), (u'现在', 1273), (u'已经', 1259), 
(u'世界', 1243), (u'罗辑', 1189), (u'可能', 1177), (u'什么', 1176), (u'看到', 1114), 
(u'知道', 1094), (u'地球', 951), (u'人类', 935), (u'太空', 930), (u'三体', 883)]
'''

可以看到结果中'\r\n'居然是出现频率最高的词,还有'一个'、'没有'、'这个'等这种我们并不想要的无实际意义的词,那么就可以根据前面说的词性来进行过滤,这个以后细讲。

使用用户字典提高分词准确性

不使用用户字典的分词结果:

txt = u'欧阳建国是创新办主任也是欢聚时代公司云计算方面的专家'
print ','.join(jieba.cut(txt))

欧阳,建国,是,创新,办,主任,也,是,欢聚,时代,公司,云,计算,方面,的,专家

使用用户字典的分词结果:

jieba.load_userdict('user_dict.txt')
print ','.join(jieba.cut(txt))

欧阳建国,是,创新办,主任,也,是,欢聚时代,公司,云计算,方面,的,专家

可以看出使用用户字典后分词准确性大大提高。

注:其中user_dict.txt的内容如下:

欧阳建国 5

创新办 5 i

欢聚时代 5

云计算 5

用户字典每行一个词,格式为:

词语 词频 词性

其中词频是一个数字,词性为自定义的词性,要注意的是词频数字和空格都要是半角的。

附:结巴分词词性对照表(按词性英文首字母排序)

形容词(1个一类,4个二类)

a 形容词

ad 副形词

an 名形词

ag 形容词性语素

al 形容词性惯用语

区别词(1个一类,2个二类)

b 区别词

bl 区别词性惯用语

连词(1个一类,1个二类)

c 连词

cc 并列连词

副词(1个一类)

d 副词

叹词(1个一类)

e 叹词

方位词(1个一类)

f 方位词

前缀(1个一类)

h 前缀

后缀(1个一类)

k 后缀

数词(1个一类,1个二类)

m 数词

mq 数量词

名词 (1个一类,7个二类,5个三类)

名词分为以下子类:

n 名词

nr 人名

nr1 汉语姓氏

nr2 汉语名字

nrj 日语人名

nrf 音译人名

ns 地名

nsf 音译地名

nt 机构团体名

nz 其它专名

nl 名词性惯用语

ng 名词性语素

拟声词(1个一类)

o 拟声词

介词(1个一类,2个二类)

p 介词

pba 介词“把”

pbei 介词“被”

量词(1个一类,2个二类)

q 量词

qv 动量词

qt 时量词

代词(1个一类,4个二类,6个三类)

r 代词

rr 人称代词

rz 指示代词

rzt 时间指示代词

rzs 处所指示代词

rzv 谓词性指示代词

ry 疑问代词

ryt 时间疑问代词

rys 处所疑问代词

ryv 谓词性疑问代词

rg 代词性语素

处所词(1个一类)

s 处所词

时间词(1个一类,1个二类)

t 时间词

tg 时间词性语素

助词(1个一类,15个二类)

u 助词

uzhe 着

ule 了 喽

uguo 过

ude1 的 底

ude2 地

ude3 得

usuo 所

udeng 等 等等 云云

uyy 一样 一般 似的 般

udh 的话

uls 来讲 来说 而言 说来

uzhi 之

ulian 连 (“连小学生都会”)

动词(1个一类,9个二类)

v 动词

vd 副动词

vn 名动词

vshi 动词“是”

vyou 动词“有”

vf 趋向动词

vx 形式动词

vi 不及物动词(内动词)

vl 动词性惯用语

vg 动词性语素

标点符号(1个一类,16个二类)

w 标点符号

wkz 左括号,全角:( 〔 [ { 《 【 〖 〈 半角:( [ { <

wky 右括号,全角:) 〕 ] } 》 】 〗 〉 半角: ) ] { >

wyz 左引号,全角:“ ‘ 『

wyy 右引号,全角:” ' 』

wj 句号,全角:。

ww 问号,全角:? 半角:?

wt 叹号,全角:! 半角:!

wd 逗号,全角:, 半角:,

wf 分号,全角:; 半角: ;

wn 顿号,全角:、

wm 冒号,全角:: 半角: :

ws 省略号,全角:…… …

wp 破折号,全角:—— -- ——- 半角:--- ----

wb 百分号千分号,全角:% ‰ 半角:%

wh 单位符号,全角:¥ $ £ ° ℃ 半角:$

字符串(1个一类,2个二类)

x 字符串

xx 非语素字

xu 网址URL

语气词(1个一类)

y 语气词(delete yg)

状态词(1个一类)

z 状态词

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现类继承实例
Jul 04 Python
python实现根据图标提取分类应用程序实例
Sep 28 Python
Python入门篇之列表和元组
Oct 17 Python
Python+MongoDB自增键值的简单实现
Nov 04 Python
用python制作游戏外挂
Jan 04 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
原生python实现knn分类算法
Oct 24 Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 Python
利用Python制作动态排名图的实现代码
Apr 09 Python
Python之字典对象的几种创建方法
Sep 30 Python
Python读取图像并显示灰度图的实现
Dec 01 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 #Python
python中Switch/Case实现的示例代码
Nov 09 #Python
在Python web中实现验证码图片代码分享
Nov 09 #Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 #Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 #Python
Python中scatter函数参数及用法详解
Nov 08 #Python
python实现人脸识别代码
Nov 08 #Python
You might like
PHP5 安装方法
2007/01/15 PHP
PHP 编程的 5个良好习惯
2009/02/20 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
Yii使用find findAll查找出指定字段的实现方法
2014/09/05 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
yii gridview实现时间段筛选功能
2017/08/15 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
iframe 上下滚动条如何默认在下方实现原理
2012/12/10 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
详解关于Angular4 ng-zorro使用过程中遇到的问题
2018/12/05 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
如何为你的JavaScript代码日志着色详解
2019/04/08 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
pygame学习笔记(5):游戏精灵
2015/04/15 Python
python跳出双层for循环的解决方法
2019/06/24 Python
Django的性能优化实现解析
2019/07/30 Python
python 命令行传入参数实现解析
2019/08/30 Python
python应用文件读取与登录注册功能
2019/09/23 Python
Python求解正态分布置信区间教程
2019/11/20 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
用python实现学生管理系统
2020/07/24 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
党小组推荐意见
2015/06/02 职场文书
pytorch 如何使用float64训练
2021/05/24 Python