Jieba中文分词(一) ——分词与自定义字典 - 腾讯云
文章推薦指數: 80 %
Jieba中文分词(一) ——分词与自定义字典 ... 初始化时,先加载词典文件dict.txt,遍历每一行,生成词语-词数的键值对和总词数,并将生成结果保存 ...
腾讯云备案控制台云+社区专栏视频精选问答沙龙云+竞赛团队主页开发者手册腾讯云TI平台TVP实验室搜索搜索关闭创作写文章发视频提问登录注册展开腾讯云·社区登录首页专栏视频精选问答沙龙云+竞赛团队主页开发者手册腾讯云TI平台TVP返回腾讯云官网数据STUDIO216篇文章Jieba中文分词(一)——分词与自定义字典转到我的清单专栏首页数据STUDIOJieba中文分词(一)——分词与自定义字典30分享分享文章到朋友圈分享文章到QQ分享文章到微博复制文章链接到剪贴板海报分享海报分享Jieba中文分词(一)——分词与自定义字典发布于2021-06-2411:24:29阅读1.7K0jieba分词特点支持四种分词模式:精确模式
试图将句子最精确地切开,适合文本分析;全模式
把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能解决歧义;搜索引擎模式
在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
paddle模式
利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。
同时支持词性标注。
paddle模式使用需安装paddlepaddle-tiny.jieba分词安装全自动安装:pipinstalljieba(window环境)
pip3installjieba(Linux环境)半自动安装:先下载http://pypi.python.org/pypi/jieba/
解压后运行pythonsetup.pyinstall手动安装:将jieba目录放置于当前目录或者site-packages目录通过importjieba来引用如果需要使用paddle模式下的分词和词性标注功能,请先安装paddlepaddle-tiny,pipinstallpaddlepaddle-tiny==1.6.1。
主要功能分词1、基本步骤
初始化初始化时,先加载词典文件dict.txt,遍历每一行,生成词语-词数的键值对和总词数,并将生成结果保存到cache中,下次直接从cache中读取即可。
初始化可以简单理解为,读取词典文件,构建词语-词数键值对,方便后面步骤中查词典,也就是字符串匹配。
切分短语首先进行将语句转换为UTF-8或者GBK。
然后根据用户指定的模式,是否全模式,是否采用HMM隐马尔科夫,来设置cut方式。
然后根据正则,将输入文本分为一个个语句。
最后遍历语句,对每个语句单独进行分词。
构建DAG看构建DAG的过程。
先遍历一个个切分好的短语,对这些短语来进行分词。
首先要构建短语的有向无环图DAG。
查词典进行字符串匹配的过程中,可能会出现好几种可能的切分方式,将这些组合构成有向无环图,如下图所示:得到语句的有向无环图DAG,DAG中记录了某个词的开始位置和它可能的结束位置。
开始位置作为key,结束位置是一个list。
上面语句的完整DAG为:
{0:[1,2],1:[2],2:[3,4,5],3:[4],4:[5]}
比如位置0的DAG表达为{0:[1,2]},也就是说0位置为词的开始位置时,1,2位置都有可能是词的结束位置。
动态规划构建Route,计算从语句末尾到语句起始,DAG中每个节点到语句结束位置的最大路径概率,以及概率最大时节点对应词语的结束位置。
defcalc(self,sentence,DAG,route):
N=len(sentence)
route[N]=(0,0)
logtotal=log(self.total)
foridxinxrange(N-1,-1,-1):
#route[idx]=(该汉字到最后一个汉字的最大路径概率,
#最大路径概率时该汉字对应的词语结束位置).
#遍历DAG中该汉字节点的结束位置,也就是DAG[idx],
#计算idx到x之间构成的词语的概率,然后乘以x到语句结束位置的最大概率,
#即可得到idx到语句结束的路径最大概率.
route[idx]=max(
(log(self.FREQ.get(sentence[idx:x+1])or1)
-log(total)
+route[x+1][0]
,x)forxinDAG[idx])
#每个词的概率=字典中该词的词数/字典总词数。
复制对于上图构建每个节点的最大路径概率的过程如下:p(5)=1,p(4)=max(p(5)*p(4->5)),
p(3)=max(p(4)*p(3->4)),
p(2)=max(p(3)*p(2->3),p(4)*p(2->4),p(5)*p(2->5)),
对于节点2,他有2->3,2->4,2->4三条路径,我们取概率最大的路径作为节点2的路径概率,并记下概率最大时节点2的结束位置。
p(1)=max(p(2)*p(1->2))p(0)=max(p(1)*p(0->1),p(2)*p(0->2))遍历每个节点的Route,组装词语组合。
如果词语不在字典中,也就是新词,使用HMM隐马尔科夫模型进行分割。
通过yield将词语逐个返回。
2、基本方法待分词的字符串可以是unicode或UTF-8字符串、GBK字符串。
注意:不建议直接输入GBK字符串,可能无法预料地错误解码成UTF-8。
jieba.cut(sentence,
cut_all=False,
HMM=True,
use_paddle=False)
复制sentence:需要分词的字符串
cut_all:用来控制是否采用全模式
HMM:用来控制是否使用HMM模型
use_paddle:用来控制是否使用paddle模式下的分词模式,paddle模式采用延迟加载方式,通过enable_paddle接口jieba.cut_for_search(sentence,HMM=True)
复制该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细。
sentence:分词的字符串
HMM:使用HMM模型jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode)jieba.lcut以及jieba.lcut_for_search直接返回listjieba.Tokenizer(dictionary=DEFAULT_DICT)新建自定义分词器,可用于同时使用不同词典。
jieba.dt为默认分词器,所有全局分词相关函数都是该分词器的映射。
代码示例:#encoding=utf-8
importjieba
jieba.enable_paddle()#启动paddle模式。
strs=["我关注了数据STUDIO","我是数据分析师","四川大学"]
forstrinstrs:
seg_list=jieba.cut(str,use_paddle=True)#使用paddle模式
print("PaddleMode:"+'/'.join(list(seg_list)))
seg_list=jieba.cut("我毕业于四川大学,我关注了数据STUDIO",cut_all=True)
print("FullMode:"+"/".join(seg_list))#全模式
seg_list=jieba.cut("我毕业于四川大学,我关注了数据STUDIO",cut_all=False)
print("DefaultMode:"+"/".join(seg_list))#精确模式
seg_list=jieba.cut("他来到了网易杭研大厦")#默认是精确模式
print(",".join(seg_list))
seg_list=jieba.cut_for_search("我是云朵君,我关注了数据STUDIO")#搜索引擎模式
print(",".join(seg_list))
复制Paddleenabledsuccessfully......
PaddleMode:我/关注/了/数据/STUDIO
PaddleMode:我/是/数据/分析师
PaddleMode:四川大学
FullMode:我/毕业/于/四川/四川大学/大学/,/我/关注/了/数据/STUDIO
DefaultMode:我/毕业/于/四川大学/,/我/关注/了/数据/STUDIO
他,来到,了,网易,杭研,大厦
我,是,云朵,君,,,我,关注,了,数据,STUDIO添加自定义词典1、原始词典词典是基于字符串匹配的分词算法的关键所在,决定了最终分词的准确度。
jieba词典dict.txt是jieba作者采集了超大规模的语料数据,统计得到的。
有5M,包含349,046条词语。
每一行对应一个词语,包含词语词数词性三部分。
2、载入词典开发者可以指定自己自定义的词典,以便包含jieba词库里没有的词。
虽然jieba有新词识别能力,但是自行添加新词可以保证更高的正确率。
jieba.load_userdict(file_name)
复制词典格式和dict.txt一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
file_name为文件类对象或自定义词典的路径,若为路径或二进制方式打开的文件,则文件必须为UTF-8编码。
词频省略时使用自动计算的能保证分出该词的词频。
例如:创新办3i
云计算5
凱特琳nz
台中
复制更改分词器(默认为jieba.dt)的tmp_dir和cache_file属性,可分别指定缓存文件所在的文件夹及其文件名,用于受限的文件系统。
代码示例:#encoding=utf-8
importsys
sys.path.append("../")
importjieba
importjieba.possegaspseg
test_sent=(
"李小福是创新办主任也是云计算方面的专家;什么是八一双鹿\n"
"例如我输入一个带“韩玉赏鉴”的标题,在自定义词库中也增加了此词为N类\n"
"「台中」正確應該不會被切開。
mac上可分出「石墨烯」;此時又可以分出來凱特琳了。
"
)
words=jieba.cut(test_sent)
print("使用默认词库:\n{}".format('/'.join(words)))
print("="*40)
jieba.load_userdict("userdict.txt")
"""
userdict.txt
云计算5
李小福2nr
创新办3i
pip_install3eng
好用300
韩玉赏鉴3nz
八一双鹿3nz
台中
凱特琳nz
EduTrust认证2000
"""
jieba.add_word('石墨烯')
jieba.add_word('凱特琳')
jieba.del_word('自定义词')
words=jieba.cut(test_sent)
print("加载自定义词库后:\n{}".format('/'.join(words)))
print("="*40)
#带有词性的分词
result=pseg.cut(test_sent)
forwinresult:
print(w.word,"/",w.flag,",",end='')
print("\n"+"="*40)
terms=jieba.cut('pip_installisgreat')
print('/'.join(terms))
terms=jieba.cut('python的正则表达式是好用的')
print('/'.join(terms))
print("="*40)
复制使用默认词库::
李小福/是/创新/办/主任/也/是/云/计算/方面/的/专家/
加载自定义词库后:
李小福/是/创新办/主任/也/是/云计算/方面/的/专家/3、调整词典使用add_word(word,freq=None,tag=None)和del_word(word)可在程序中动态修改词典。
使用get_FREQ(word)用来统计当前词的词频。
使用suggest_freq(segment,tune=True)可调节单个词语的词频,使其能(或不能)被分出来。
注意:自动计算的词频在使用HMM新词发现功能时可能无效。
代码示例:#testfrequencytune
testlist=[
('今天天气不错',('今天','天气')),
('如果放到post中将出错。
',('中','将')),
('我们中出了一个叛徒',('中','出')),
]
forsent,segintestlist:
print('/'.join(jieba.cut(sent,HMM=False)))
word=''.join(seg)
print('%sBefore:%s,After:%s'%(word,jieba.get_FREQ(word),jieba.suggest_freq(seg,True)))
print('/'.join(jieba.cut(sent,HMM=False)))
print("-"*40)
复制今天天气/不错
今天天气Before:3,After:0
今天/天气/不错
如果/放到/post/中将/出错/
中将Before:763,After:494
如果/放到/post/中/将/出错/。
我们/中/出/了/一个/叛徒
中出Before:3,After:3
我们/中/出/了/一个/叛徒通过用户自定义词典来增强歧义纠错能力[2]参考资料[1]jieba分词:https://github.com/fxsjy/jieba[2]用户自定义词典:https://github.com/fxsjy/jieba/issues/14文章分享自微信公众号:数据STUDIO复制公众号名称本文参与腾讯云自媒体分享计划,欢迎热爱写作的你一起参与!如有侵权,请联系[email protected]删除。
展开阅读全文举报点赞3分享登录后参与评论0条评论MapReduce实现与自定义词典文件基于hanLP的中文分词详解文本分类任务的第1步,就是对语料进行分词。
在单机模式下,可以选择pythonjieba分词,使用起来较方便。
但是如果希望在Hadoop集群上通过mapredu...IT小白龙Jieba中文分词(二)——词性标注与关键词提取上一篇jieba中文分词(一)分词与自定义字典已介绍了jieba中文分词安装,分词原理,分词方法,自定义字典,添加字典等多种常用分词方法。
本篇将继续介绍jieb...数据STUDIOElasticsearch7.6.1学习(二)ik分词器的安装与测试,ik分词器增加自己的词,自定义字典elasticsearch(集群)中可以包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包
含多个文档(行),每个文档中又包含多个字段...一天不写程序难受白话Elasticsearch29-IK中文分词之IK分词器配置文件+自定义词库配置文件位置:${ES_HOME}/plugins/ik/config/IKAnalyzer.cfg.xml小小工匠jieba分词器详解及python实战版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。
...菲宇如何生成自定义的逆向文件频率(IDF)文本语料库jieba分词中,关键词提取使用逆向文件频率文本语料库时,除了使用现有的语料库外,还可以自定义生成文本语料库。
数据STUDIO文本挖掘(一)pythonjieba+wordcloud使用笔记+词云分析应用 系列介绍:文本挖掘比较常见,系列思路:1-基本情况介绍(分词,词云展示);2-根据语料库的tf-idf值及创建自己的idf文件;3-基于snownlp语料情...forxtzpythonjieba分词(结巴分词)、提取词,加载词,修改词频,定义词库“结巴”中文分词:做最好的Python中文分词组件,分词模块jieba,它是python比较好用的分词模块,支持中文简体,繁体分词,还支持自定义词库。
...学到老Python读取文件后进行词频统计Jieba库分词原理是利用一个中文词库,将待分词内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组。
除了分词,jieba库还提供增加自定义中文单...算法与编程之美Python实现jieba分词0.说在前面1.结巴分词三种模式2.自定义字典3.动态修改字典4.词性标注及关键字提取5.高级使用6.作者的话公众号guangcityElasticSearch1.7之ik(中文)分词器的自定义分词扩展方式随着数据量的越来越大,有一些定义的关键词已经不再是常用词汇,超出了ES自带的ik分词词库范围,比如:“奥利给”等别称和新闻话题词;这就出现了一些现象,如搜索“奥...陈哈哈学习使用Jieba1.Jieba2.特点3.功能4.安装5.使用6.其他中文分词工具1.Jieba
相信大多数知道NLP的人都知道什么是Jieba,但对于像我这样的新手而言,也仅限于知道而已,并没有学习过它,使用过它,打算用几天的时间来记录自己...JasonhavenDai入门中文NLP必备干货:5分钟看懂“结巴”分词(Jieba)导读:近年来,随着NLP技术的日益成熟,开源实现的分词工具越来越多,如Ansj、盘古分词等。
在本文中,我们选取了Jieba进行介绍和案例展示,主要基于以下考虑:华章科技中文分析jieba简单应用版权声明:本文为博主原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接和本声明。
...程裕强Python帮你分析孙猴子在大闹天宫时出现了几回?由于该库是第三方库,并不是Python自带的模块,因此需要通过pip命令进行安装,pip安装命令如下:灰小猿jieba分词-Python中文分词领域的佼佼者NLP(自然语言)领域现在可谓是群雄纷争,各种开源组件层出不穷,其中一支不可忽视的力量便是jieba分词,号称要·往期精选·朱卫军PythonJieba库NLP(自然语言)领域现在可谓是群雄纷争,各种开源组件层出不穷,其中一支不可忽视的力量便是jieba分词,号称要做最好的Python中文分词组件。
NikoDos更多文章数据STUDIO关注专栏文章216阅读量62.2K获赞561作者排名1709腾讯云原生专题云原生技术干货,业务实践落地。
视频公开课上线啦Vite学习指南,基于腾讯云Webify部署项目立即查看腾讯云自媒体分享计划入驻云加社区,共享百万资源包。
立即入驻广告关闭目录jieba分词特点支持四种分词模式:jieba分词安装全自动安装:半自动安装:手动安装:主要功能分词添加自定义词典参考资料社区专栏文章阅读清单互动问答技术沙龙技术快讯团队主页开发者手册腾讯云TI平台活动原创分享计划自媒体分享计划邀请作者入驻自荐上首页在线直播生态合作计划资源技术周刊社区标签开发者实验室关于视频介绍社区规范免责声明联系我们友情链接归档问题归档专栏文章归档快讯文章归档关键词归档开发者手册归档开发者手册Section归档云+社区扫码关注云+社区领取腾讯云代金券热门产品域名注册云服务器区块链服务消息队列网络加速云数据库域名解析云存储视频直播热门推荐人脸识别腾讯会议企业云CDN加速视频通话图像分析MySQL数据库SSL证书语音识别更多推荐数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移Copyright©2013-2022TencentCloud.AllRightsReserved.腾讯云版权所有京公网安备11010802017518粤B2-20090059-1扫描二维码扫码关注云+社区领取腾讯云代金券
延伸文章資訊
- 1jieba分詞、自定義詞典提取高頻詞、詞性標註及獲取詞的位置
支援自定義詞典. 演算法. 基於Trie樹結構實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG); 採用了動態規劃查詢最大概率 ...
- 2詞性標註、關鍵詞提取、添加自定義詞典完整代碼示例- 台部落
jieba 是目前最好的Python 中文分詞組件,它主要有以下3 種特性: 支持3 種分詞模式:精確模式、全模式、搜索引擎模式支持繁體分詞支持自定義詞典1 ...
- 3python jieba分詞(結巴分詞)、提取詞,載入詞,修改詞頻
載入自定義詞庫
- 4Jieba 中文分詞-一- ——分詞與自定義字典 - 閱坊
Jieba 中文分詞-一- ——分詞與自定義字典. jieba 分詞特點. 支持四種分詞模式:. 精確模式試圖將句子最精確地切開,適合文本分析;.
- 5结巴分词jieba添加自定义词典 - CSDN博客
结巴分词添加自定义词典,有时候很有必要。比如下面这段话:test_text = """我们的健康码也是绿色的, 这凭什么就限制我们的就医!