jieba分词的框架图:

特点:

1、支持四种分词模式:
(1)精确模式:试图将句子最精确地切开,适合文本分析;
(2)全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
(3)搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
(4)paddle模式:利用Paddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。paddle模式使用需安装paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1。paddle官网
目前paddle模式支持jieba v0.40及以上版本。jieba v0.40以下版本需要升级jieba:

pip install jieba --upgrade

2、支持繁体分词
3、支持自定义词典
4、MIT 授权协议

安装说明:

代码兼容 Python 2/3
对python3:

  • 全自动安装: pip install jieba:
  • 半自动安装:先下载 http://pypi.python.org/pypi/jieba/ ,解压后运行 python setup.py
  • install 手动安装:将 jieba 目录放置于当前目录或者 site-packages 目录
  • 通过 import jieba来引用
  • 如果需要使用paddle模式下的分词和词性标注功能,请先安装paddlepaddle-tiny,pip install paddlepaddle-tiny==1.6.1。

算法

  • 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
  • 采用了动态规划查找最大概率路径,找出基于词频的最大切分组合
  • 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法

主要功能

1、分词

  • jieba.cut 方法接受四个输入参数: 需要分词的字符串;cut_all 参数用来控制是否采用全模式;HMM 参数用来控制是否使用 HMM 模型;use_paddle 参数用来控制是否使用paddle模式下的分词模式,paddle模式采用延迟加载方式,通过enable_paddle接口安装paddlepaddle-tiny,并且import相关代码;

  • jieba.cut_for_search 方法接受两个参数:需要分词的字符串;是否使用 HMM 模型。该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细

  • 待分词的字符串可以是 unicode 或 UTF-8 字符串、GBK 字符串。注意:不建议直接输入 GBK 字符串,可能无法预料地错误解码成 UTF-8

  • jieba.cut 以及 jieba.cut_for_search 返回的结构都是一个可迭代的 generator,可以使用 for 循环来获得分词后得到的每一个词语(unicode),或者用jieba.lcut 以及 jieba.lcut_for_search 直接返回 list

  • jieba.Tokenizer(dictionary=DEFAULT_DICT) 新建自定义分词器,可用于同时使用不同词典。jieba.dt 为默认分词器,所有全局分词相关函数都是该分词器的映射。

2、添加自定义词典

载入词典

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

  • 用法: jieba.load_userdict(file_name) # file_name 为文件类对象或自定义词典的路径
  • 词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
  • 词频省略时使用自动计算的能保证分出该词的词频。
调整词典
  • 使用 add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典。二者效果对比如下:
 add_word(word, freq=None, tag=None):向词典中添加一个词。freq 和 tag 可以省略,freq 默认为一个计算值例如:
>>> jieba.add_word("江大桥", freq = 20000, tag = None)
>>> print( "/".join(jieba.cut("江州市长江大桥参加了长江大桥的通车仪式。")))
江州/市长/江大桥/参加/了/长江大桥/的/通车/仪式/。
 del_word(word):在词典中删除一个词。>>> jieba.del_word("江大桥")
>>> print( "/".join(jieba.cut("江州市长江大桥参加了长江大桥的通车仪式。")))
江州/市/长江大桥/参加/了/长江大桥/的/通车/仪式/。
  • 使用 suggest_freq(segment, tune=True) 可调节单个词语的词频,使其能(或不能)被分出来。
    ① 由下边例子可见,刚开始“中将”被识别成了一个词,通过调整词频使“中”、“将”分开:
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中将/出错/。
>>> jieba.suggest_freq(('中', '将'), True)
494
>>> print('/'.join(jieba.cut('如果放到post中将出错。', HMM=False)))
如果/放到/post/中/将/出错/。

② 由下边例子可见,刚开始“台中”被识别成了两个词,通过调整词频使二者合为一个词:

>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台/中/」/正确/应该/不会/被/切开
>>> jieba.suggest_freq('台中', True)
69
>>> print('/'.join(jieba.cut('「台中」正确应该不会被切开', HMM=False)))
「/台中/」/正确/应该/不会/被/切开
  • 注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。

3、关键词提取

(1)基于 TF-IDF 算法的关键词抽取:

import jieba.analyse
  • jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 为待提取的文本
topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选
  • jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 实例,idf_path 为 IDF 频率文件

(2)基于 TextRank 算法的关键词抽取:

  • jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=(‘ns’, ‘n’, ‘vn’, ‘v’)) 直接使用,接口相同,注意默认过滤词性。
  • jieba.analyse.TextRank() 新建自定义 TextRank 实例

基本思想:

  • 将待抽取关键词的文本进行分词
  • 以固定窗口大小(默认为5,通过span属性调整),词之间的共现关系,构建图
  • 计算图中节点的PageRank,注意是无向带权图

4、词性标注

  • jieba.posseg.POSTokenizer(tokenizer=None) 新建自定义分词器,tokenizer参数可指定内部使用的 jieba.Tokenizer 分词器。jieba.posseg.dt 为默认词性标注分词器。
  • 标注句子分词后每个词的词性,采用和 ictclas 兼容的标记法。
  • 除了jieba默认分词模式,提供paddle模式下的词性标注功能。paddle模式采用延迟加载方式,通过enable_paddle()安装paddlepaddle-tiny,并且import相关代码;
  • 用法示例
>>> import jieba
>>> import jieba.posseg as pseg
>>> words = pseg.cut("我爱北京天安门") #jieba默认模式
>>> jieba.enable_paddle() #启动paddle模式。 0.40版之后开始支持,早期版本不支持
>>> words = pseg.cut("我爱北京天安门",use_paddle=True) #paddle模式
>>> for word, flag in words:
...    print('%s %s' % (word, flag))
...
我 r
爱 v
北京 ns
天安门 ns

paddle模式词性标注对应表如下:

paddle模式词性和专名类别标签集合如下表,其中词性标签 24 个(小写字母),专名类别标签 4 个(大写字母)。

5、并行分词

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

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

用法:
- jieba.enable_parallel(4) # 开启并行分词模式,参数为并行进程
- jieba.disable_parallel() # 关闭并行分词模式

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 搜索引擎

引用: from jieba.analyse import ChineseAnalyzer

8、命令行分词

使用示例:python -m jieba news.txt > cut_result.txt

使用: python -m jieba [options] filename结巴命令行界面。固定参数:filename              输入文件可选参数:-h, --help            显示此帮助信息并退出-d [DELIM], --delimiter [DELIM]使用 DELIM 分隔词语,而不是用默认的' / '。若不指定 DELIM,则使用一个空格分隔。-p [DELIM], --pos [DELIM]启用词性标注;如果指定 DELIM,词语和词性之间用它分隔,否则用 _ 分隔-D DICT, --dict DICT  使用 DICT 代替默认词典-u USER_DICT, --user-dict USER_DICT使用 USER_DICT 作为附加词典,与默认词典或自定义词典配合使用-a, --cut-all         全模式分词(不支持词性标注)-n, --no-hmm          不使用隐含马尔可夫模型-q, --quiet           不输出载入信息到 STDERR-V, --version         显示版本信息并退出如果没有指定文件名,则使用标准输入。

延迟加载机制

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

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

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

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

参考链接:https://github.com/fxsjy/jieba

jieba分词工具的使用(自用)相关推荐

  1. 2.5.jieba分词工具、Jieba安装、全模式/精确模式、添加自定义词典、关键词抽取、词性标注、词云展示

    2.5.jieba分词工具 2.5.1.Jieba安装 2.5.2.全模式/精确模式 2.5.3.添加自定义词典 2.5.4.关键词抽取 2.5.5.词性标注 2.5.6.词云展示 2.5.jieba ...

  2. Jieba分词工具介绍及相关API使用方法

    Jieba Introduction Project description jieba分词算法使用了基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能生成词情况所构成的有向无环图(DAG), 再 ...

  3. jieba分词工具的使用方法

    20210401 https://www.cjavapy.com/article/745/ jieba并行分词 作为我这样的萌新,python代码的第一步是:#coding=utf-8 环境:pyth ...

  4. 分词工具使用系列——jieba使用

    分词工具使用系列 第一章 sentencepiece使用 第二章 jieba工具使用 分词工具使用系列--jieba使用 分词工具使用系列 一.Jieba工具是什么 二.jieba分词和sentenc ...

  5. 结巴(jieba)分词器入门

    安装jieba # pip install jieba 分词工具 import jieba input="我来到北京大学" seg_list=jieba.cut(input) pr ...

  6. 详细介绍NLP中文分词原理及分词工具

    基于词表的分词方法 正向最大匹配算法FMM 从左到右扫描文本,得到词的最大匹配. 案例分析: 用正向最大匹配法对"秦皇岛今天晴空万里"进行中文分词,见下表. 词典 :"秦 ...

  7. 中文分词工具使用方法及比较

    中文分词工具 分词背景介绍 安装及介绍(jieba.hanlp.pkuseg.thulac.snownlp.nlpir) windowst系统分词工具安装 Linux系统分词工具安装 使用方法介绍 数 ...

  8. Jieba分词Python简单实现

    为什么80%的码农都做不了架构师?>>>    上一章分享了IK Analyzer中文分词及词频统计基于Hadoop的MapReducer框架Java实现.这次将与大家分享Jieba ...

  9. 中文分词工具jieba分词器的使用

    1.常见的中文分词工具 中科院计算所的NLPIR 哈工大LTP 清华大学THULAC 斯坦福分词器 Hanlp分词器 jieba分词 IKAnalyzer 2.jieba分词算法主要有以下三种: 1. ...

最新文章

  1. Python-列表和元组
  2. Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信
  3. Eclipse 的一些调试技巧
  4. python 乱码转码_Python解决乱码问题
  5. matlab 二值化_撸了一份 ostu二值化,需要的小伙伴请拿走
  6. c++容器定义、初始化、赋值
  7. Ubuntu gnome 14.10下MySQLdb安装
  8. Sentinel授权规则及规则持久化
  9. spring注解式参数校验
  10. r2dbc_使用Spring Data R2DBC进行异步RDBMS访问
  11. nmake错误:VC\bin\cl.EXE: 返回代码“0xc0000135“
  12. Could not create the view: An unexpected exception was thrown.
  13. mysql 5.7 ddl 原子_mysql 8 新特性二DDL操作的原子化
  14. c语言程序与设计第三版-苏小红--第一轮学习笔记、难点整理
  15. Java之序列化和反序列化
  16. Aizu0189 Convenient Location【Floyd算法】
  17. Logic Pro for Mac(音频制作软件)V10.6.2中文版 支持M1芯片版mac
  18. 安装及卸载CrossOver for Mac
  19. 神经网络——IoU & NMS 正负样本均衡
  20. 力扣编程题-解法汇总

热门文章

  1. 最新ChatGPT GPT-4 NLU应用之实体分类识别与模型微调(附ipynb与python源码及视频)——开源DataWhale发布入门ChatGPT技术新手从0到1必备使用指南手册(六)
  2. 李勇 湖南大学计算机通信学院,刘彩苹-湖大信息科学与工程学院
  3. Python中with用法详解
  4. oracle中Start with 用法
  5. 2019-CVPR 缺陷/瑕疵检测论文介绍及基于pytorch实现的代码
  6. 2023最新互联网公司时长排行榜出炉!
  7. java中onclick的用法_JavaScript onclick事件使用方法详解
  8. 数据库(DB)和数据仓库(DW)的区别
  9. R语言使用dweibull函数生成威布尔(韦伯分布)分布密度数据、使用plot函数可视化威布尔分布密度数据(Weibull Distribution)
  10. 更多单词/词组/短语补充和总结(二)