当前访客身份:游客 [ 登录 | 加入开源中国 ]

开源项目

当前位置:添加开源项目»
项目分类 » 中文分词库 » jieba

Python中文分词组件 jieba 编辑/纠错

分享到: 
已用    +5
收藏 +0

#广州# OSC源创会第31期(12月27日)开始报名,OSC自曝家丑!

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

jieba 的相关新闻,共20
  • 结巴分词 0.34 发布,Python 中文分词组件

    sunjunyi发布于2个月前,8回/1308阅

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

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

    sunjunyi发布于4个月前,1回/781阅

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

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

    sunjunyi发布于10个月前,3回/1002阅

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

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

    sunjunyi发布于1年前,1回/1215阅

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

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

    sunjunyi发布于1年前,0回/934阅

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

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

    sunjunyi发布于2年前,1回/1061阅

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

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

    sunjunyi发布于2年前,11回/2303阅

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

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

    sunjunyi发布于2年前,8回/1529阅

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

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

    sunjunyi发布于2年前,8回/1742阅

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

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

    sunjunyi发布于2年前,3回/2307阅

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

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

    sunjunyi发布于2年前,3回/746阅

    结巴分词:做最好的中文分词组件 0.24版的更新如下: 1) 解决了没有标点的长句子分词效果差的问题。问题在于连续的小概率乘法可能会导致浮点下溢或为0。现在已经改为对数加法的方式,详见:issue19: https://git... 查看全文

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

    sunjunyi发布于2年前,7回/851阅

    结巴分词:做最好的中文分词组件 0.23版主要修复了之前版本不能识别中英混合词语的问题。 由于之前的版本在"初分"阶段便把中文和英文分开了,所以不能识别中英混合的词语, 比如“B超”,“T恤”。 现在,用户还可... 查看全文

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

    sunjunyi发布于2年前,0回/1453阅

    结巴分词: 做最好的Python中文分词组件:-) 此次0.22版主要包含两个更新: 1) 新增jieba.cut_for_search方法, 该方法在精确分词的基础上对“长词”进行再次切分,适用于搜索引擎领域的分词,比精确分词模式有更高... 查看全文

  • 结巴分词 0.21 发布 Python 中文分词组件

    sunjunyi发布于2年前,0回/608阅

    结巴分词:做最好的Python中文分词组件:-) jieba 0.21 主要包含以下两点更新: 1)修复了全模式分词中散字过多的问题      有网友在结合搜索引擎whoosh和jieba的过程中,发现cut_all=True这种模式下切分的散字... 查看全文

  • 结巴分词 0.20 发布 Python 中文分词组件

    sunjunyi发布于2年前,15回/2035阅

    结巴分词: 做最好的Python中文分词组件 有很多网友提了issue,希望jieba支持词性标注,因为他们做文本分析有时只需要某种词性的词,比如名词。 结巴0.20版增加了词性标注功能,由于是纯Python实现,对算法做了很多... 查看全文

  • 结巴分词 0.19 发布 Python 中文分词组件

    sunjunyi发布于2年前,0回/744阅

    结巴分词: 做最好的Python中文分词组件 jieba 0.19主要包含以下两个更新: 1) 提升了模块加载的速度。 "import jieba"除了第一次以外,加载时间缩短了75%,在主流PC Server上可以实现一秒以内加载完毕。 工作机... 查看全文

  • 结巴分词 0.18 发布 Python 中文分词组件

    sunjunyi发布于2年前,8回/1549阅

    “结巴分词” 自推出以来收到了很多网友的反馈,其中“关键词提取”是一个被普遍要求加入的功能。 jieba 0.18已经有了一个简单的关键词提取功能,基本原理是对文本分词后,按照tf/idf的权重进行排序,然后取权重较... 查看全文

  • 结巴 0.17 版发布 Python中文分词组件

    sunjunyi发布于2年前,5回/1007阅

    "结巴"中文分词:做最好的Python中文分词组件。 此release主要包含以下两点更新: 1) 将词典文件dict.txt排序后存储,提升了Trie树构建速度,使得组件初始化时间缩短了10%; 2)   增强了人名词语的训练,增强了... 查看全文

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

    sunjunyi发布于2年前,2回/902阅

    jieba是一款纯Python编写的中文分词组件。 此次0.16版主要包括下面两点更新: 1)将求最优切分路径的记忆化递归搜索算法改用循环实现,使分词速度提高了15% 2)  修复了Viterbi算法实现上的一个Bug  ... 查看全文

  • 结巴分词 0.14 版发布,Python 中文分词库

    sunjunyi发布于2年前,4回/2120阅

    主要更新如下: 1. 结巴分词被发布到了pypi,用户可以通过easy_install或者pip快速安装该组件; 2. 合并了搜狗开源词库2006版,删除了一些低频词 3. 优化了代码,缩短了程序初始化时间。 4. 增加了在线效果演示 ... 查看全文

sunjunyi 作者:@sunjunyi
发送私信 我要提问/分享
已发布:)
  • xiaoxiha xiaoxiha请问“结巴”输入数据文件的数据量大小有限制么?比如文件很大 jieba 1年前 (1评)
  • Jandison Jandison请教下语料库是怎么训练的?通过什么方法? jieba 2年前 (1评)
  • IdleMan IdleMan你好。能否增加一个开关,用来关闭对“对于未登录词的处理”。这幅神奇的全景图还把远在法国境内的浮日山脉及远在德国境内的黑森林也都囊括在内。 格莱宾登地区的风干牛肉片以及提契诺的意大利特产。这两句话居然出现了新词“及远”“宾登”太难理解了 jieba 2年前 (7评)
  • 从前 从前有没有考虑jieba实现 whoosh的分词接口 jieba 2年前 (5评)
  • csilc csilc请问我要在一段文字里筛选出tag,怎么处理呢?比如我一段商品介绍,自动生成10关键字做tag jieba 2年前 (1评)
显示所有 » 共有 42 个类似软件
相关软件