jieba结巴分词库

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

安装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

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

词语 词频 词性

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

附:结巴分词词性对照表

  • 按词性英文首字母排序

形容词

类型 二级类型 标签 解释
形容词 一类 a 形容词
形容词 二类 a 形容词
形容词 二类 ad 副形词
形容词 二类 an 名形词
形容词 二类 ag 形容词性语素
形容词 二类 al 形容词性惯用语
区别词 一类 b 区别词
区别词 二类 bl 区别词性惯用语

名词

类型 二级类型 标签 解释
名词 一类 n 名词
名词 二类 nr 人名
名词 三类 nr1 汉语姓氏
名词 三类 nr2 汉语名字
名词 三类 nrj 日语人名
名词 三类 nrf 音译人名
名词 二类 ns 地名
名词 三类 nsf 音译地名
名词 二类 nt 机构团体名
名词 二类 nz 其它专名
名词 二类 nl 名词性惯用语
名词 二类 ng 名词性语素

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

标签 解释
r 代词
rr 人称代词
rz 指示代词
rzt 时间指示代词
rzs 处所指示代词
rzv 谓词性指示代词
ry 疑问代词
ryt 时间疑问代词
rys 处所疑问代词
ryv 谓词性疑问代词
rg 代词性语素

助词(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 单位符号,全角:¥ $ £ ° ℃ 半角:$

其它

类型 二级类型 标签 解释
连词 一类 c 连词
连词 二类 cc 并列连词
副词 一类 d 副词
叹词 一类 e 叹词

| 方位词|一类|f |方位词

| 前缀|一类)|h |前缀|

| 后缀|一类|k 后缀|

| 数词|一类,1个二类|

| 数词|一类|m |数词|

| 数词|二类|mq |数量词|

拟声词(1个一类)

标签 解释
o 拟声词

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

|p |介词|

|pba |介词“把”|

|pbe|i 介词“被”|

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

标签 解释
q 量词
qv 动量词
qt 时量词

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

标签 解释
x 字符串
xx 非语素字
xu 网址URL

语气词(1个一类)

标签 解释
y 语气词(delete yg)

状态词(1个一类)

标签 解释
z 状态词

处所词(1个一类)

标签 解释
s 处所词

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

标签 解释
t 时间词
tg 时间词性语素

模块 jieba结巴分词库 中文分词的更多相关文章

  1. python 读写txt文件并用jieba库进行中文分词

    python用来批量处理一些数据的第一步吧. 对于我这样的的萌新.这是第一步. #encoding=utf-8 file='test.txt' fn=open(file,"r") ...

  2. 中文分词中的战斗机-jieba库

    英文分词的第三方库NLTK不错,中文分词工具也有很多(盘古分词.Yaha分词.Jieba分词等).但是从加载自定义字典.多线程.自动匹配新词等方面来看. 大jieba确实是中文分词中的战斗机. 请随意 ...

  3. Pullword 中文分词

    安装 npm install pullword   使用 var defaultOptions = { url: 'http://api.pullword.com/post.php', /* api ...

  4. Python分词模块推荐:jieba中文分词

    一.结巴中文分词采用的算法 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合对于未登录词,采 ...

  5. 结巴(jieba)中文分词及其应用实践

    中文文本分类不像英文文本分类一样只需要将单词一个个分开就可以了,中文文本分类需要将文字组成的词语分出来构成一个个向量.所以,需要分词. 这里使用网上流行的开源分词工具结巴分词(jieba),它可以有效 ...

  6. python基础===jieba模块,Python 中文分词组件

    api参考地址:https://github.com/fxsjy/jieba/blob/master/README.md 安装自行百度 基本用法: import jieba #全模式 word = j ...

  7. jieba中文分词的.NET版本:jieba.NET

    简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以 ...

  8. jieba中文分词(python)

    问题小结 1.安装 需要用到python,根据python2.7选择适当的安装包.先下载http://pypi.python.org/pypi/jieba/ ,解压后运行python setup.py ...

  9. .net 的一个分词系统(jieba中文分词的.NET版本:jieba.NET)

    简介 平时经常用Python写些小程序.在做文本分析相关的事情时免不了进行中文分词,于是就遇到了用Python实现的结巴中文分词.jieba使用起来非常简单,同时分词的结果也令人印象深刻,有兴趣的可以 ...

随机推荐

  1. 全栈前端入门必看 koa2+mysql+vue+vant 构建简单版移动端博客

    koa2+mysql+vue+vant 构建简单版移动端博客 具体内容展示 开始正文 github地址 <br/> 觉得对你有帮助的话,可以star一下^_^必须安装:<br/> ...

  2. 关于org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.atguigu.crud.dao.DepartmentMapper.insertSelective的错误

    今天我在使用mybatis逆向工程的时候,由于一个疏忽字打错了..结果花了一早上才把错误找全..广大小伙伴们一定要小心啊(能复制粘贴就别手打) 关于org.apache.ibatis.binding. ...

  3. IDEA激活码(可用2100年,亲测有效)

    三步骤: 1.下载rar包 2.将rar中bin包内容替换IDEA安装目录下bin内容,然后编辑idea.exe.vmoptions和idea64.exe.vmoptions文件,编辑内容一样 将最后 ...

  4. Java基础篇(02):特殊的String类,和相关扩展API

    本文源码:GitHub·点这里 || GitEE·点这里 一.String类简介 1.基础简介 字符串是一个特殊的数据类型,属于引用类型.String类在Java中使用关键字final修饰,所以这个类 ...

  5. 等宽字体的妙用-loading 点点点动画

    原理 ch等宽字体 + text-indent 动画负缩进 显示效果如 loading . loading .. loading ... loading . loading .. loading .. ...

  6. java面试题汇总四

    第三部分 Java SE基础 3.1 java多线程 3.1.1 线程的实现方式,怎么启动线程怎么区分线程? 1.线程的实现方式: 有 4 种方式可以用来创建线程: 2.继承 Thread 类   2 ...

  7. Python基础类型(1)

    整数 整数在Python中的关键字用int来表示; 整型在计算机中运于计算和比较 在32位机器上int的范围是:  -2**31-2**31-1,即-2147483648-2147483647 在64 ...

  8. Markdown试用

    目录 今天又是充满希望的一天 一.是什么 二.为什么 三.怎么做 代码 这世界上好人坏人都很多,我不是一个坏人. 我不是个英雄,我只是个拿

  9. synchronized实现原理及其优化-(自旋锁,偏向锁,轻量锁,重量锁)

    1.synchronized概述: synchronized修饰的方法或代码块相当于并发中的临界区,即在同一时刻jvm只允许一个线程进入执行.synchronized是通过锁机制实现同一时刻只允许一个 ...

  10. 解决 微信包含emoji表情的昵称,直接用sql语句可以写入而在yii2框架写却写不成功的 问题

    背景: 首先是emoji表情写入不成功,在网上查了许多资料,包括配置mysql,重启mysql等等,这样之后发现还是写入失败. 将sql语句复制出来,直接粘贴到mysql客户端执行,发现没问题.而通过 ...