Python中文分词组件 jieba

MIT
Python 查看源码»
跨平台
2012-10-03
fxsjy

jieba

"结巴"中文分词:做最好的Python中文分词组件 "Jieba" 

Feature

  • 支持三种分词模式:

    • 精确模式,试图将句子最精确地切开,适合文本分析;

    • 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;

    • 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。

  • 支持繁体分词

  • 支持自定义词典

在线演示

http://jiebademo.ap01.aws.af.cm/

(Powered by Appfog)

Python 2.x 下的安装

  • 全自动安装:easy_install jieba 或者 pip install jieba

  • 半自动安装:先下载http://pypi.python.org/pypi/jieba/ ,解压后运行python setup.py install

  • 手动安装:将jieba目录放置于当前目录或者site-packages目录

  • 通过import jieba 来引用 (第一次import时需要构建Trie树,需要几秒时间)

Python 3.x 下的安装

  • 目前master分支是只支持Python2.x 的

  • Python3.x 版本的分支也已经基本可用: https://github.com/fxsjy/jieba/tree/jieba3k

    git clone https://github.com/fxsjy/jieba.git
    git checkout jieba3k
    python setup.py install

Algorithm

  • 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)

  • 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

  • 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法

功能 1):分词

  • jieba.cut方法接受两个输入参数: 1) 第一个参数为需要分词的字符串 2)cut_all参数用来控制是否采用全模式

  • jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细

  • 注意:待分词的字符串可以是gbk字符串、utf-8字符串或者unicode

  • jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode),也可以用list(jieba.cut(...))转化为list

代码示例( 分词 )

#encoding=utf-8
import jieba

seg_list = jieba.cut("我来到北京清华大学",cut_all=True)
print "Full Mode:", "/ ".join(seg_list) #全模式

seg_list = jieba.cut("我来到北京清华大学",cut_all=False)
print "Default Mode:", "/ ".join(seg_list) #精确模式

seg_list = jieba.cut("他来到了网易杭研大厦") #默认是精确模式
print ", ".join(seg_list)

seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") #搜索引擎模式
print ", ".join(seg_list)

Output:

【全模式】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学

【精确模式】: 我/ 来到/ 北京/ 清华大学

【新词识别】:他, 来到, 了, 网易, 杭研, 大厦    (此处,“杭研”并没有在词典中,但是也被Viterbi算法识别出来了)

【搜索引擎模式】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造

功能 2) :添加自定义词典

  • 开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词。虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率

  • 用法: jieba.load_userdict(file_name) # file_name为自定义词典的路径

  • 词典格式和dict.txt一样,一个词占一行;每一行分三部分,一部分为词语,另一部分为词频,最后为词性(可省略),用空格隔开

  • 范例:

  • "通过用户自定义词典来增强歧义纠错能力" --- https://github.com/fxsjy/jieba/issues/14

功能 3) :关键词提取

  • jieba.analyse.extract_tags(sentence,topK) #需要先import jieba.analyse

  • setence为待提取的文本

  • topK为返回几个TF/IDF权重最大的关键词,默认值为20

代码示例 (关键词提取)

https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py

功能 4) : 词性标注

  • 标注句子分词后每个词的词性,采用和ictclas兼容的标记法

  • 用法示例

    >>> import jieba.posseg as pseg
    >>> words =pseg.cut("我爱北京天安门")
    >>> for w in words:
    ...    print w.word,w.flag
    ...
    我 r
    爱 v
    北京 ns
    天安门 ns

功能 5) : 并行分词

  • 原理:将目标文本按行分隔后,把各行文本分配到多个python进程并行分词,然后归并结果,从而获得分词速度的可观提升

  • 基于python自带的multiprocessing模块,目前暂不支持windows

  • 用法:

    • jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程数

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

  • 例子: https://github.com/fxsjy/jieba/blob/master/test/parallel/test_file.py

  • 实验结果:在4核3.4GHz Linux机器上,对金庸全集进行精确分词,获得了1MB/s的速度,是单进程版的3.3倍。

功能 6) : Tokenize:返回词语在原文的起始位置

  • 注意,输入参数只接受unicode

  • 默认模式

result = jieba.tokenize(u'永和服装饰品有限公司')
for tk in result:
    print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
word 永和                start: 0                end:2
word 服装                start: 2                end:4
word 饰品                start: 4                end:6
word 有限公司            start: 6                end:10
  • 搜索模式

result = jieba.tokenize(u'永和服装饰品有限公司',mode='search')
for tk in result:
    print "word %s\t\t start: %d \t\t end:%d" % (tk[0],tk[1],tk[2])
word 永和                start: 0                end:2
word 服装                start: 2                end:4
word 饰品                start: 4                end:6
word 有限                start: 6                end:8
word 公司                start: 8                end:10
word 有限公司            start: 6                end:10

功能 7) : ChineseAnalyzer for Whoosh搜索引擎


其他词典

  1. 占用内存较小的词典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small

  2. 支持繁体分词更好的词典文件 https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big

下载你所需要的词典,然后覆盖jieba/dict.txt 即可或者用jieba.set_dictionary('data/dict.txt.big')

模块初始化机制的改变:lazy load (从0.28版本开始)

jieba采用延迟加载,"import jieba"不会立即触发词典的加载,一旦有必要才开始加载词典构建trie。如果你想手工初始jieba,也可以手动初始化。

import jieba
jieba.initialize() #手动初始化(可选)

在0.28之前的版本是不能指定主词典的路径的,有了延迟加载机制后,你可以改变主词典的路径:

jieba.set_dictionary('data/dict.txt.big')

例子: https://github.com/fxsjy/jieba/blob/master/test/test_change_dictpath.py

分词速度

  • 1.5 MB / Second in Full Mode

  • 400 KB / Second in Default Mode

  • Test Env: Intel(R) Core(TM) i7-2600 CPU @ 3.4GHz;《围城》.txt

常见问题

1)模型的数据是如何生成的?https://github.com/fxsjy/jieba/issues/7

2)这个库的授权是? https://github.com/fxsjy/jieba/issues/2

更多问题请点击:https://github.com/fxsjy/jieba/issues?sort=updated&state=closed

Change Log

http://www.oschina.net/p/jieba/news#list

加载中

评论(8)

xuhui666
xuhui666
我用的是mac,开了多进程反而慢了,是怎么回事呢?
hnphper
hnphper
实现php版本结巴分词扩展 https://github.com/jonnywang/jz
上官江
上官江
x
xiaoxiha
请问“结巴”输入数据文件的数据量大小有限制么?比如文件很大 jieba
Jandison
Jandison
请教下语料库是怎么训练的?通过什么方法? jieba
IdleMan
IdleMan
你好。能否增加一个开关,用来关闭对“对于未登录词的处理”。这幅神奇的全景图还把远在法国境内的浮日山脉及远在德国境内的黑森林也都囊括在内。 格莱宾登地区的风干牛肉片以及提契诺的意大利特产。这两句话居然出现了新词“及远”“宾登”太难理解了 jieba
从前
从前
有没有考虑jieba实现 whoosh的分词接口 jieba
csilc
csilc
请问我要在一段文字里筛选出tag,怎么处理呢?比如我一段商品介绍,自动生成10关键字做tag jieba

结巴分词 0.34 发布,Python 中文分词组件

结巴分词 0.34 发布,更新内容如下: 2014-10-20: version 0.34 1. 提升性能,词典结构由Trie改为Prefix Set,内存占用减少2/3, 详见:https://github.com/fxsjy/jieba/pull/187;by @gumbl...

2014/10/20 19:12

结巴分词 0.33 发布,Python 中文分词组件

2014-08-31: version 0.33 1. 支持自定义stop words; by @fukuball 2. 支持自定义idf词典; by @fukuball 3. 修复自定义词典的词性不能正常显示的bug; by @ShuraChow 4. 支持python3.x 版本的...

2014/08/31 20:14

结巴分词 0.32 发布,Python 中文分词组件

结巴分词:做最好的Python中文分词。 此次release包含以下更新: 1. 新增分词控制选项:可以关闭新词发现功能;详见:https://github.com/fxsjy/jieba/blob/master/test/test_no_hmm.py#L8 2...

2014/02/07 18:40

结巴分词 0.31 发布,Python 中文分词组件

结巴分词:做最好的Python中文分词。 此次release包含以下更新: 1. 修改了代码缩进格式,遵循PEP8标准 2. 支持Jython解析器,感谢 @piaolingxue 3. 修复中英混合词汇不能识别数字在前词语的...

2013/07/29 10:44

结巴分词 0.30 发布,Python 中文分词组件

Chagelog: 2013-07-01: version 0.30 ========================== 1) 新增jieba.tokenize方法,返回每个词的起始位置 2) 新增ChineseAnalyzer,用于支持whoosh搜索引擎 3)添加了更多的中英混...

2013/07/01 11:51

结巴分词 0.29 发布,Python 中文分词组件

从0.28版本以后的Changelog如下: 2013-06-07: version 0.29 ========================== 1) 提升了finalseg子模块命名体识别的准确度 2) 修正了一些badcase 2013-06-01: version 0.28.4 ==...

2013/06/07 18:31

结巴分词 0.28 发布,Python 中文分词组件

2013-04-27: version 0.28 ======================== 1) 新增词典lazy load功能,用户可以在'import jieba'后再改变词典的路径. 感谢hermanschaaf 2) 显示词典加载异常时错误的词条信息. 感谢...

2013/04/27 11:03

结巴分词 0.27 发布,Python 中文分词组件

本次release的主要更新: 1) 新增并行分词功能,可以在多核计算机上显著提高分词速度 2) 修正了“的”字频过高引起的bug;修正了对小数点和下划线的处理 3) 修正了python2.6存在的兼容性问题...

2013/04/22 13:07

结巴分词 0.26 发布,Python 中文分词组件

本次的主要更新: 1) 改进了对标点符号的处理,之前的版本会过滤掉所有的标点符号; 2) 允许用户在自定义词典中添加词性; 3) 改进了关键词提取的功能jieba.analyse.extract_tags; 4) 修复了一...

2013/04/07 10:36

结巴分词 0.25 发布,Python 中文分词组件

年后第一发,此次更新如下: 1)支持繁体中文的分词 2)修正了多python进程时生成cache文件失败的bug 详见: https://github.com/fxsjy/jieba/issues/25 https://github.com/fxsjy/jieba/issu...

2013/02/18 11:14

没有更多内容

加载失败,请刷新页面

1
回答
linux下使用jieba不能看到输出结果

@sunjunyi 你好,想跟你请教个问题:我在linux下运行结巴时不能输出分词结果,只输出了<generator object cut at 0x8b...

2013/04/27 19:49
4
回答
结巴有php版的吗?

@sunjunyi 你好,想跟你请教个问题:结巴有php版的吗?

2013/07/22 11:26
1
回答
结巴分词自定义字典起不到分词效果

@sunjunyi 你好,想跟你请教个问题:我现在自定义词典后,每次load后起不到作用而且运行总是这样的错误: 这是什么原因呢,另外的我字典格式类似于,...

2015/11/20 14:48
1
回答
jieba分词的Tokenize函数可以实现词性标注功能么?

@sunjunyi 你好,想跟你请教个问题:我看到结巴分词的Tokenize函数,觉得非常实用。如果再加上对词性的支持,那就更棒了。想请教一下是否已有此功...

2015/07/16 15:21
2
回答
关于并行分词的使用问题

@sunjunyi 你好,想跟你请教个并行分词的使用问题: 主页上说并行分词“将目标文本按行分隔后,把各行文本分配到多个python进程并行分词,然后归并...

2013/08/25 15:53
3
回答
jieba分词怎么用?我是小白,怎么导入需要分析的文本.提取关键词,输出?

怎么导入要分析的词语文本,(很多句子的)。- 分词-怎么提取 关键词。怎么导出? 导入文本-》分词-》提取关键词-》导出文本. 能给个脚本吗? 小白,在网...

2013/08/12 17:30
1
回答
结巴安装问题(ubuntu13+python3)

@sunjunyi 你好,想跟你请教个问题: 我是unbuntu13.04, python3, 按照网页上的命令装, 第一步:git clone http...

2013/07/31 07:29
2
回答
import jieba报错

@sunjunyi 你好,想跟你请教个问题: 我刚开始接触jieba,引入import jieba,报错: File "/usr/lib/python2....

2013/07/25 15:32
2
回答
jieba 词性标注是怎么实现的?

@sunjunyi 你好,想跟你请教个问题: 1. 最近在做分词相关的工作,看到jieba支持词性标注,不知道是怎么实现的? 2. 反观java的实现方式...

2013/07/03 18:08

没有更多内容

加载失败,请刷新页面

【NLP】【二】jieba源码分析之分词

【一】词典加载 利用jieba进行分词时,jieba会自动加载词典,这里jieba使用python中的字典数据结构进行字典数据的存储,其中key为word,value为frequency即词频。 1. jieba中的词典如下: ji...

11/02 21:41
15
0
【NLP】【一】中文分词之jieba

声明:本文参考jieba官方文档而成,官方链接:https://github.com/fxsjy/jieba 【一】jieba安装 pip install jieba 【二】jieba简介 简介可见jieba官方说明:https://pypi.org/project/jieb...

10/28 21:15
10
0
结巴分词安装

结巴分词是Python语言中效果最好的分词工具,其功能包括:分词、词性标注、关键词抽取、支持用户词表等。 官网地址:https://github.com/fxsjy/jieba 1、安装。 按照官网上的说法,有三种安装...

2016/11/24 21:13
184
0
Jieba分词Python简单实现

利用Jieba分词对红楼梦txt文档做中文分词 Jieba分词介绍:基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG),采用了动态规划查找最大概率路径, 找...

2016/05/11 14:58
458
3
中文分词工具

中文分词工具非常繁多,主要与大家分享其中几个工具,这是本人第一次接触中文分词工具,望轻喷。 中文分词工具: 1、IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。...

2016/05/10 19:16
474
2
结巴分词

结巴分词有多种语言实现的版本,从github的star数量等方面来看,python版本应是最早的一个。 另外,它也具有词性标注等功能。 python版本地址: https://github.com/fxsjy/jieba pyhton2.7安...

2014/10/01 16:25
146
0
[python] jieba 模块 -- 给中文文本分词

在文本处理时,英文文本的分词一直比中文文本要好处理许多。因为英文文本只需要通过空格就可以分割,而中文的词语往往就很难从句子中分离出来。这种时候我们往往需要一个“词典”来实现分词,...

08/22 20:27
97
0
Python中文分词—jieba分词

结巴分词github项目地址:https://github.com/fxsjy/jieba 1、安装: 全自动安装:easy_install jieba 或者 pip install jieba / pip3 install jieba 半自动安装:先下载 http://pypi.python...

2016/01/27 15:36
227
1

没有更多内容

加载失败,请刷新页面

返回顶部
顶部