jieba 中文分词
这里写目录标题
- 介绍 Introduction
- 模块安装 Install
- 导入模块 Import
- 机制 Mechanism
- 功能详解 Function
- 分词
- 添加自定义词典
- 载入自定义词典【词典 = 默认词典 + 自定义词典】 —————— `“给机器加词典(临时)”`
- 使用自定义词典【使用词典 = 自定义词典】 —————— `“给机器换词典(临时)”`
- 词典格式
- 调整词典(添加、删除、调整词频)
- Tokenize:分词后返回词语在原文的起止位置
- 词性标注
- 提取关键词
- 其他词典
介绍 Introduction
“结巴”中文分词:做最好的 Python 中文分词组件
特点
- 【支持四种分词模式】:
- 【精确模式】,试图将句子根据词典中有的词最精确地切开,适合文本分析;
- 【全模式】,把句子中所有的词典中存在的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 【搜索引擎模式】,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
- paddle模式,利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。paddle模式使用需安装paddlepaddle-tiny,
pip install paddlepaddle-tiny==1.6.1
。目前paddle模式支持jieba v0.40及以上版本。jieba v0.40以下版本,请升级jieba,pip install jieba --upgrade
。PaddlePaddle官网【目前paddlepaddle-tiny
仅支持python 3.7及以前部分版本,即python3.8及以上版本不支持通过paddlepaddle-tiny
使用该模式】
- 【支持繁体分词】
- 【支持自定义词典】
- MIT 授权协议
- 【支持四种分词模式】:
算法
- 基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
- 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
- 对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
功能
- 【分词】
- 【添加自定义词典】
- 【关键词提取】
- 【词性标注】
- 【并行分词】 —— 不说明
- 【Tokenize:返回词语在原文的起止位置】
- 【ChineseAnalyzer for Whoosh 搜索引擎】 —— 不说明
- 【命令行分词】 —— 不说明
分词速度
测试环境: Intel® Core™ i7-2600 CPU @ 3.4GHz;《围城》.txt
- 全模式:1.5 MB/s
- 默认模式:400 KB/s
模块安装 Install
pip install jieba
导入模块 Import
import jieba
机制 Mechanism
分词操作通过分词器进行,分词器可以配置词典。分词时,分词器根据词典内所含有的词语,对输入的中文文字,通过全模式或精确模式或搜索模式进行分词。模块本身提供了一个默认分词器(jieba = jieba.dt = jieba.Tokenizer()),该默认分词器内内置有一个默认词典。当你对默认分词器和词典不满意时,你可以新建一个包含新词典的分词器,或者为默认分词器添加新词典,或者替换默认分词器的词典(不完全替换:使用类方法 和 完全替换:文件覆盖),从而达到个性化的分词体验。
功能详解 Function
分词
jieba.cut(sentence, cut_all=False, HMM=True, use_paddle=False)
分词的主要函数。
==>
jieba.dt.cut(sentence, cut_all=False, HMM=True, use_paddle=False)
参数
【
sentence
】:str。要进行分词的句子或文段。【
cut_all=False
】:默认为False,精确模式。True表示全模式
,False表示精确模式
。HMM=True
:默认为True,使用HMM模型,即会自动发现新词,一般是使用的,即保持默认值,可忽略。True表示使用HMM模型,False表示不使用HMM模型。use_paddle=False
:默认为False,不使用paddle模式,不怎么使用,即保持默认,可忽略。True表示使用paddle模式,False表示不使用paddle模式。返回
返回可迭代的
生成器
。示例
---代码---# 待分词文段 sentence = "本学期校内选修课暂定于第3周2022年3月7日起开始上课,如有特殊调整将另行通知。"# 精确模式 result = jieba.cut(sentence, cut_all=False) # 未处理结果 print(result) # 处理结果 print(list(result))# 全模式 result = jieba.cut(sentence, cut_all=True) # 未处理结果 print(result) # 处理结果 print(list(result))---结果---精确模式未处理结果:<generator object Tokenizer.cut at 0x00000217B912FA50> 精确模式处理结果: ['本学期', '校内', '选修课', '暂定', '于', '第', '3', '周', '2022', '年', '3', '月', '7', '日起', '开始', '上课', ',', '如', '有', '特殊', '调整', '将', '另行通知', '。']全模式未处理结果:<generator object Tokenizer.cut at 0x00000217B959D2E0> 全模式处理结果: ['本学期', '学期', '校内', '选修', '选修课', '修课', '暂定', '定于', '第', '3', '周', '2022', '年', '3', '月', '7', '日', '起开', '开始', '上课', ',', '如有', '特殊', '调整', '将', '另行', '另行通知', '通知', '。']
jieba.cut_for_search(sentence, HMM=True)
搜索引擎模式
。为搜索引擎提供更精细的细分,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细==>
jieba.dt.cut_for_search(sentence, HMM=True)
参数
【
sentence
】:str。要进行分词的句子或文段。HMM=True
:默认为True,使用HMM模型,一般是使用的,即保持默认值,可忽略。True表示使用HMM模型,False表示不使用HMM模型。返回
返回可迭代的
生成器
。示例
---代码---# 待分词文段 sentence = "本学期校内选修课暂定于第3周2022年3月7日起开始上课,如有特殊调整将另行通知。"# 搜索引擎模式 result = jieba.cut_for_search(sentence) # 未处理结果 print(result) # 处理结果 print(list(result))---结果---搜索引擎模式未处理结果:<generator object Tokenizer.cut_for_search at 0x00000213FECAFA50> 搜搜引擎模式处理结果: ['学期', '本学期', '校内', '选修', '修课', '选修课', '暂定', '于', '第', '3', '周', '2022', '年', '3', '月', '7', '日起', '开始', '上课', ',', '如', '有', '特殊', '调整', '将', '另行', '通知', '另行通知', '。']
jieba.lcut(sentence, cut_all=False, HMM=True, use_paddle=False)
分词列表模式
。==>
jieba.dt.lcut(sentence, cut_all=False, HMM=True, use_paddle=False)
==>
list(jieba.cut(sentence, cut_all=False, HMM=True, use_paddle=False))
返回
列表
示例
---代码---# 待分词文段 sentence = "本学期校内选修课暂定于第3周2022年3月7日起开始上课,如有特殊调整将另行通知。"# 精确模式列表模式 result = jieba.lcut(sentence, cut_all=False) # 结果 print(result)# 全模式列表模式 result = jieba.lcut(sentence, cut_all=True) # 结果 print(result)---结果---精确模式列表模式: ['本学期', '校内', '选修课', '暂定', '于', '第', '3', '周', '2022', '年', '3', '月', '7', '日起', '开始', '上课', ',', '如', '有', '特殊', '调整', '将', '另行通知', '。']全模式列表模式: ['本学期', '学期', '校内', '选修', '选修课', '修课', '暂定', '定于', '第', '3', '周', '2022', '年', '3', '月', '7', '日', '起开', '开始', '上课', ',', '如有', '特殊', '调整', '将', '另行', '另行通知', '通知', '。']
jieba.lcut_for_search(sentence, HMM=True)
搜索引擎模式列表模式
。==>
jieba.dt.lcut_for_search(sentence, HMM=True)
==>
list(jieba.cut_for_search(sentence, HMM=True))
返回
列表
示例
---代码---# 待分词文段 sentence = "本学期校内选修课暂定于第3周2022年3月7日起开始上课,如有特殊调整将另行通知。"# 搜索引擎模式列表模式 result = jieba.lcut_for_search(sentence) # 结果 print(result)---结果---搜索引擎模式列表模式: ['学期', '本学期', '校内', '选修', '修课', '选修课', '暂定', '于', '第', '3', '周', '2022', '年', '3', '月', '7', '日起', '开始', '上课', ',', '如', '有', '特殊', '调整', '将', '另行', '通知', '另行通知', '。']
jieba.Tokenizer(dictionary=DEFAULT_DICT)
——————“换机器”
自定义分词器,这是一个分词器的类对象,以上分词函数都是该类的方法。上面出现的
jieba.dt == jieba.Tokenizer(dictionary=DEFAULT_DICT)
就是一个默认分词器,默认分词器使用默认词典。【通俗说,分词器是一个机器,而以上各函数方法是这个机器的按钮,使用哪个函数就进行何种操作。而jieba直接调用以上函数方法,使用的就是默认分词器。所以
jieba.cut() == jieba.dt.cut() == jieba.Tokenizer().cut()
】参数
dictionary=DEFAULT_DICT
:str。分词器使用的词典,默认为模块自带的默认词典。需使用自编词典时,值替换为自编词典路径。返回
创建分词器对象
。示例
---默认分词器本质---# 创建分词器 dt = jieba.Tokenizer() # 分词器操作 dt.cut() dt.lcut() dt.cut_for_search() dt.lcut_for_search()---如何自建分词器---# 自编词典路径 dic = “自建词典路径” # 如何自建词典暂不予以说明 # 创建分词器 tokenizer = jieba.Tokenizer(dictionary=dic) # 分词器操作 tokenizer.cut() tokenizer.lcut() tokenizer.cut_for_search() tokenizer.lcut_for_search()
添加自定义词典
载入自定义词典【词典 = 默认词典 + 自定义词典】 ——————
“给机器加词典(临时)”
开发者可以指定自己自定义的词典,以便包含 jieba 词库里没有的词。虽然 jieba 有新词识别能力,但是自行添加新词可以保证更高的正确率。
jieba.load_userdict(file_name)
==>
jieba.dt.load_userdict(file_name)
载入附加一个自定义词典,将自定义词典临时附加到分词器(一般默认分词器),将会产生临时缓存文件。
参数
file_name
:str or _io.TextIOWrapper。自定义词典的文件路径或open()打开的文件类对象。若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。返回
None
。示例
---代码---# 待分词文段 sentence = "本学期校内选修课暂定于第3周2022年3月7日起开始上课,如有特殊调整将另行通知。"# 不载入自定义词典进行全模式分词操作 result = jieba.lcut(sentence, cut_all=True) # 结果 print(result)# 载入自定义词典(如自定义词典dic.txt在同目录下,词典包含内容“行通 100 n”,该词在jieba默认词典中不具有) jieba.load_userdict("dic.txt") # 载入自定义词典后进行全模式分词操作 result = jieba.lcut(sentence, cut_all=True) # 结果 print(result)---结果---不载入自定义词典进行全模式分词操作: ['本学期', '学期', '校内', '选修', '选修课', '修课', '暂定', '定于', '第', '3', '周', '2022', '年', '3', '月', '7', '日', '起开', '开始', '上课', ',', '如有', '特殊', '调整', '将', '另行', '另行通知', '通知', '。']载入自定义词典后进行全模式分词操作: ['本学期', '学期', '校内', '选修', '选修课', '修课', '暂定', '定于', '第', '3', '周', '2022', '年', '3', '月', '7', '日', '起开', '开始', '上课', ',', '如有', '特殊', '调整', '将', '另行', '另行通知', '行通', '通知', '。']可见载入自定义词典后进行的分词结果中出现了默认词典中不具有的“行通”一词。
使用自定义词典【使用词典 = 自定义词典】 ——————
“给机器换词典(临时)”
jieba.set_dictionary(dictionary_path)
==>
jieba.dt.set_dictionary(dictionary_path)
等效于
jieba.Tokenizer(dictionary="词典路径")
, 但直接更改分词器词典,不需要创建新的分词器。词典格式
默认词典路径(通常)
C:\Users\“用户名”\AppData\Local\Programs\Python\Python38\Lib\site-packages\jieba\dict.txt
获取方式:
jieba.get_dict_file()
==>
jieba.dt.get_dict.file()
获取分词器所使用的词典,返回文件类对象。默认返回默认词典。
---代码---result = jieba.get_dict_file() print(result.name)---结果---'C:\\Users\\Harrison\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages\\jieba\\dict.txt'
示例
创新办 3 i 云计算 5 凱特琳 nz 台中
词性(部分)
标签 含义 标签 含义 标签 含义 标签 含义 n 普通名词 f 方位名词 s 处所名词 t 时间 nr 人名 ns 地名 nt 机构名 nw 作品名 nz 其他专名 v 普通动词 vd 动副词 vn 名动词 a 形容词 ad 副形词 an 名形词 d 副词 m 数量词 q 量词 r 代词 p 介词 c 连词 u 助词 xc 其他虚词 w 标点符号 PER 人名 LOC 地名 ORG 机构名 TIME 时间
调整词典(添加、删除、调整词频)
jieba.add_word(word, freq=None, tag=None)
==>
jieba.dt.add_word(word, freq=None, tag=None)
向分词器使用词典中添加新词
参数
word
:str。希望向词典中添加的词。freq=None
: 指定新词词频,默认为None
。词频为None
时使用自动计算的能保证分出该词的词频。tag=None
:指定新词词性,默认为None
。返回
None
。
jieba.del_word(word)
==>
jieba.dt.del_word(word)
删除分词器使用词典中的某个词
参数
word
:str。希望从词典中删除的词。返回
None
。
jieba.suggest_freq(segment, tune=False)
==>
jieba.dt.suggest_freq(segment, tune=False)
调节单个词语的词频,使其能(或不能)被分出来。(不会改变分词器使用词典内容)
参数
segment
:tuple or str。一个词期待被分成的片段,此时输入为片段的元组;如果希望该词视为整体,则输入为字符串。tune=False
:是否调整词频,默认为False。一般使用True。返回
计算机计算的
词频
。注意:自动计算的词频在使用 HMM 新词发现功能时可能无效。建议分词时HMM=False。示例
---代码---# 待分词文段 sentence = "本学期校内选修课暂定于第3周2022年3月7日起开始上课,如有特殊调整将另行通知。"# 不调整词频精确模式列表模式 result = jieba.lcut(sentence) # 结果 print(result)jieba.suggest_freq("第3周", tune=True) # 调整词频精确模式列表模式:"第","3","周" —— "第三周" result = jieba.lcut(sentence, HMM=False) # 结果 print(result)jieba.suggest_freq(("日","起"), tune=True) # 调整词频精确模式列表模式:"日起" —— "日","起" result = jieba.lcut(sentence, HMM=False) # 结果 print(result)---结果---不调整词频精确模式列表模式: ['本学期', '校内', '选修课', '暂定', '于', '第', '3', '周', '2022', '年', '3', '月', '7', '日起', '开始', '上课', ',', '如', '有', '特殊', '调整', '将', '另行通知', '。']调整词频精确模式列表模式:"第","3","周" —— "第3周" ['本学期', '校内', '选修课', '暂定', '于', '第3周', '2022', '年', '3', '月', '7', '日', '起', '开始', '上课', ',', '如', '有', '特殊', '调整', '将', '另行通知', '。']调整词频精确模式列表模式:"日起" —— "日","起" ['本学期', '校内', '选修课', '暂定', '于', '第3周', '2022', '年', '3', '月', '7', '日', '起', '开始', '上课', ',', '如', '有', '特殊', '调整', '将', '另行通知', '。']
Tokenize:分词后返回词语在原文的起止位置
jieba.tokenize(sentence, mode="default", HMM=True)
==> jieba.dt.tokenize(sentence, mode="default", HMM=True)
- 参数
sentence
:str。要进行分词的字符串。
mode="default"
:默认模式“default”
,搜索模式“search”
,默认为默认模式。
HMM=True
:默认为True,使用HMM模型,一般是使用的,即保持默认值,可忽略。True表示使用HMM模型,False表示不使用HMM模型。
返回
(word,start,end)的
生成器
,start是word在输入字符串中的开始位置,end是word在输入字符串中的结束位置。示例
---代码---# 默认模式 result = jieba.tokenize('永和服装饰品有限公司') print(result) for tk in result:print(tk)# 搜索模式 result = jieba.tokenize('永和服装饰品有限公司', mode="search") print(result) for tk in result:print(tk)---结果---默认模式: <generator object Tokenizer.tokenize at 0x0000016E5F89FA50> ('永和', 0, 2) ('服装', 2, 4) ('饰品', 4, 6) ('有限公司', 6, 10)搜索模式: <generator object Tokenizer.tokenize at 0x0000016E5FCFBD60> ('永和', 0, 2) ('服装', 2, 4) ('饰品', 4, 6) ('有限', 6, 8) ('公司', 8, 10) ('有限公司', 6, 10)
词性标注
jieba.posseg.lcut(sentence)
= list(jieba.posseg.cut(sentence))
分词后标注每个词的词性,返回jieba.posseg.pair对象(该对象可看成是一个元组)的列表或生成器。
---代码---# 导入
import jieba.posseg# 待分词文段
sentence = "本学期校内选修课暂定于第3周2022年3月7日起开始上课,如有特殊调整将另行通知。"# 返回列表
result = jieba.posseg.lcut(sentence)
# 结果
print(result)# 返回生成器
result = jieba.posseg.cut(sentence)
# 结果
print(result)---结果---返回列表:
[pair('本学期', 'n'), pair('校内', 's'), pair('选修课', 'v'), pair('暂定', 'd'), pair('于', 'p'), pair('第', 'm'), pair('3', 'm'), pair('周', 'nr'), pair('2022', 'm'), pair('年', 'm'), pair('3', 'm'), pair('月', 'm'), pair('7', 'm'), pair('日', 'm'), pair('起', 'v'), pair('开始', 'v'), pair('上课', 'v'), pair(',', 'x'), pair('如', 'v'), pair('有', 'v'), pair('特殊', 'a'), pair('调整', 'vn'), pair('将', 'd'), pair('另行通知', 'i'), pair('。', 'x')]返回生成器:
<generator object cut at 0x00000240C15F5350>
提取关键词
导入
import jieba.analyse
基于 TF-IDF 算法的关键词抽取
TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
参数
sentence
:str。为待提取的文本。topK=20
:返回TF/IDF 权重最大的关键词的数目,默认值为 20。withWeight=False
:是否一并返回关键词权重值,默认值为 False。allowPOS=()
:仅包括指定词性的词,即筛选,默认值为空,即不筛选。返回
列表
基于 TextRank 算法的关键词抽取
其思想是:通过词之间的相邻关系构建网络,然后用PageRank迭代计算每个节点的rank值,排序rank值即可得到关键词。
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))
参数
sentence
topK=20
withWeight=False
allowPOS=('ns', 'n', 'vn', 'v')
:仅包括指定词性的词,即筛选,默认值为(‘ns’, ‘n’, ‘vn’, ‘v’)。返回
列表
其他词典
占用内存较小的词典文件
https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small支持繁体分词更好的词典文件
https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big
jieba 中文分词相关推荐
- jieba分词_Jieba.el – 在Emacs中使用jieba中文分词
jieba.el 在Emacs中使用jieba中文分词 众所周知, Emacs并没有内置中文分词系统, 以至于 forward-word 和 backward-word 以及 kill-word 等以 ...
- Jieba中文分词下如何画词云图?
配置:anaconda3 + Pycharm 文章目录 WordCloud 关于Jieba分词 Jieba中文分词 +绘制词云图 案例 WordCloud 英文文本 导入第三方模块 from word ...
- jieba —— 中文分词工具 (一)
jieba 中文分词工具包 (一) 01 简介 "结巴" 中文分词:做最好的 Python 中文分词组件: "Jieba" (Chinese for " ...
- 文本分析--jieba中文分词
分词技术可以分为英文分词和中文分词: 对于英文分词而言,由于英文单词之间以空格来分隔,所以在进行英文分词的过程中,只需要针对空格进行划分就可以了. 对于中文分词而言,中文单词之 ...
- 简明Jieba中文分词教程(分词、关键词提取、词性标注、计算位置)
目录 0 引言 1 分词 1.1 全模式和精确模式 1.2 搜索引擎模式 1.3 HMM 模型 2 繁体字分词 3 添加自定义词典 3.1 载入词典 3.2 调整词典 4 关键词提取 4.1 基于 T ...
- jieba中文分词组件
目录 jieba简介 组件特点 安装方法 算法 使用jieba 分词 添加自定义词典 载入词典 调整词典 关键词提取 基于 TF-IDF 算法的关键词抽取 基于 TextRank 算法的关键词抽取 词 ...
- Lucene bm25 结合 jieba中文分词搜索
2021.10.20:增加依赖包,防止版本问题导致代码不可用 <dependencies><!--核心包--><dependency><grou ...
- 【pyspark】jieba 中文分词
:jieba分词包 https://github.com/fxsjy/jieba :python安装 pip install jieba :测试 import jieba seg_list = jie ...
- 【NLP】Jieba中文分词
[GitHub地址]https://github.com/fxsjy/jieba 特点 支持三种分词模式: 精确模式,试图将句子最精确地切开,适合文本分析: 全模式,把句子中所有的可以成词的词语都扫描 ...
- python库--jieba(中文分词)
import jieba 精确模式,试图将句子最精确地切开,适合文本分析:全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义:搜索引擎模式,在精确模式的基础上,对长词再次切 ...
最新文章
- CSS魔法堂:重拾Border之——图片作边框
- Redis分布式锁【正确实现方式】
- Parcelable最强解析
- MaxCompute实践分析
- python使用ctypes模块下的windll.LoadLibrary报OSError: [WinError 193] % 不是有效的 Win32 应用程序...
- Nginx 笔记与总结(14)expires 缓存设置
- 小程序禁用ios 左右滑动_如何在使用应用程序时禁用iOS控制中心
- 六年级计算机课学什么时候,六年级信息技术《进一步了解计算机》教学设计
- Python web开发——自定义userprofile(用户描述)
- 牛客16500 珠心算测试
- C++中拷贝构造函数
- SPFA+Dinic HDOJ 3416 Marriage Match IV
- weblogic查看版本号教程
- win7触摸板怎么关闭_win7系统如何禁用触摸板功能 win7禁用触摸板功能方法【详解】...
- 《计算机科学概论(第12版)》—第0章0.2节计算机器的由来
- k8s多节点仪表盘(web界面 ) dashboard 部署 与 谷歌浏览器访问仪表盘问题
- Java学习07–前端基础之CSS
- LoadRunner技巧之IP欺骗
- Visual Studio 2010/2008(MSDN原版下载)
- 2021-12-5 《聪明的投资者》学习笔记
热门文章
- 基于Access的学生信息管理系统设计(下):窗体设计
- 什么是TTL电平和cmos电平?ttl电平和cmos电平的区别是什么?
- 歌曲只需要伴奏,怎么消去歌声?
- VBA的表单控件初接触(2):ActiveX控件的基础功能和基础代码
- oracle ebs教学视频教程,Oracle EBS教学视频
- 宠物商店 - MLDN 李兴华老师
- matlab遗传算法工具箱及应用 pdf,MATLAB遗传算法工具箱及应用(雷英杰)
- 计算机 高新 会计电算化,会计软件应用(用友软件系列)用友通T3试题汇编 , 会计电算化员级[电子资源]...
- 利用FreeMarker生成java源代码
- 数据挖掘与python实践心得体会_数据挖掘心得体会