jieba分词

juypter notebook使用jieba分词

1、什么是中文分词

中文分词:分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂得多、困难得多。    

中文分词并不追求完美,而是通过关键字识别技术,抽取句子中最关键的部分,从而达到理解句子的目的。

2、什么是jieba

 jieba 是一个python实现的中文分词组件,在中文分词界非常出名,支持简、繁体中文,用户还可以加入自定义词典以提高分词的准确率。

jieba分词的三种模式:

  1. 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
  2. 精确模式,试图将句子最精确地切开,适合文本分析;
  3. 搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

jieba自带有关键词摘取算法:

  1. 基于 TF-IDF 算法的关键词抽取
  2. 基于 TextRank 算法的关键词抽取

3、jieba几个常用功能

(1)中文分词

三种模式中文分词举例:

全模式

import jieba

#全模式
#全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义问题;
text1="我来自广州中医药大学"
seg_list = jieba.cut(text1, cut_all=True)
print(u"[全模式]: ", "  ".join(seg_list))

 输出结果为:

[全模式]:  我  来自  广州  中医  中医药  中医药大学  医药  大学

精确模式

#精确模式:试图将句子最精确地切开,适合文本分析
seg_list = jieba.cut(text1, cut_all=False)
print(u"[精确模式]: ", "  ".join(seg_list))

# 默认是精确模式
seg_list = jieba.cut(text1)
print(u"[默认模式]: ", "  ".join(seg_list))

  输出结果为:

[精确模式]:  我  来自  广州  中医药大学
[默认模式]:  我  来自  广州  中医药大学

搜索引擎模式

# 搜索引擎模式
#搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
seg_list = jieba.cut_for_search(text1)
print(u"[搜索引擎模式]: ", "   ".join(seg_list))

输出结果:

[搜索引擎模式]:  我   来自   广州   中医   医药   大学   中医药   中医药大学

 对一个TXT文件进行分词并保存

将test.txt文件导入jupyter notebook中并进行精确模式分词,将文件另存为result.txt

#读取一个TXT文档分词
import jieba

fR = open('test.txt', 'r', encoding='UTF-8')

sent = fR.read()
sent_list = jieba.cut(sent)

fW = open('result.txt', 'w', encoding='UTF-8')
fW.write(' '.join(sent_list))

fR.close()
fW.close()

(2)添加自定义词典

#自定义词典,实现新词识别
#词典格式和 dict.txt 一样,一个词占一行;每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
#file_name 若为路径或二进制方式打开的文件,则文件必须为 UTF-8 编码。
jieba.load_userdict(r"D:\anaconda\Lib\site-packages\jieba\mydict.txt")


text = "故宫的著名景点包括乾清宫、太和殿和黄琉璃瓦等"

# 全模式
seg_list = jieba.cut(text, cut_all=True)
print(u"[全模式]: ", "/ ".join(seg_list))

# 精确模式
seg_list = jieba.cut(text, cut_all=False)
print(u"[精确模式]: ", "  ".join(seg_list))/

# 搜索引擎模式
seg_list = jieba.cut_for_search(text)
print(u"[搜索引擎模式]: ", "/ ".join(seg_list))

#没有认出"乾清宫"和"黄琉璃瓦"。也就是说专有名词"乾清宫"和"黄琉璃瓦"可能因分词而分开,这也是很多分词工具的一个缺陷。
#所以需要自定义词典

输出结果:

[全模式]:  故宫/ 的/ 著名/ 著名景点/ 景点/ 包括/ 乾清宫/ 清宫/ / / 太和/ 太和殿/ 和/ 黄琉璃瓦/ 琉璃/ 琉璃瓦/ 等
[精确模式]:  故宫  的  著名景点  包括  乾清宫  、  太和殿  和  黄琉璃瓦  等
[搜索引擎模式]:  故宫/ 的/ 著名/ 景点/ 著名景点/ 包括/ 清宫/ 乾清宫/ 、/ 太和/ 太和殿/ 和/ 琉璃/ 琉璃瓦/ 黄琉璃瓦/ 等

(3)关键词提取

基于TF-IDF算法的关键词提取

jieba.analyse.extract_tags(sentence, topK = 20,withWeight = False, allowPOS = ())

sentence为待提取文本
topK为返回几个TF-IDF权重最大的关键词,默认值为20
withWeight为是否一并返回关键词权重值,默认值为FALSE
allowPOS仅包括指定词性的词,默认值为空,即不筛选

#提取关键字
import jieba
import jieba.analyse
 
file_name = "result.txt"  #使用上文中保留的分词文件,提取关键字
content = open(file_name, "r", encoding='UTF-8').read()
tags = jieba.analyse.extract_tags(content, topK=10)
print("  ".join(tags))

 输出结果:  

10g  恶性肿瘤  15g  良性肿瘤  NOS  先天性  20g  中毒  通络  30g

关键词提取所使用的停用词文本语料库可以切换成自定义语料库的路径path

#自定义语料库提取关键字
import jieba
import jieba.analyse
 
file_name = "result.txt"
content = open(file_name, "r", encoding='UTF-8').read()
jieba.analyse.set_idf_path("path")
tags = jieba.analyse.extract_tags(content, topK=10)
print("  ".join(tags))

 获取关键词的权重

#提取关键字
import jieba
import jieba.analyse
 
file_name = "病历汇总result.txt"
content = open(file_name, "r", encoding='UTF-8').read()
tags = jieba.analyse.extract_tags(content, topK=10, withWeight=True)
for tag in tags:
    print("tag:%s\t\t weight:%f" % (tag[0], tag[1]))

 输出结果:

tag:10g		 weight:0.162985
tag:恶性肿瘤		 weight:0.126455
tag:15g		 weight:0.095097
tag:良性肿瘤		 weight:0.086129
tag:NOS		 weight:0.084103
tag:先天性		 weight:0.064658
tag:20g		 weight:0.063490
tag:中毒		 weight:0.053615
tag:通络		 weight:0.051480
tag:30g		 weight:0.051396

基于TextRank算法的关键词抽取

jieba.analyse.textrank(sentence, topK = 20, withWeight = False, allowPOS = ('ns', 'n', 'vn', 'v'))

直接使用,接口相同,注意默认过滤词性

import jieba
import jieba.analyse
import jieba.posseg
 
s = "用剂后府行明显好转,次数减少,或成形,或不成形,特别是便秘较顽同,但口腔似有牙龈炎,起疙瘩,左腹部或有隐痛。甲亢手术(2年前),他弟有糖尿病上周肠梗阻又复发,刚出院。府行一二日一次,量少,不成形,肠粘连,受凉则腹胀,月经期十天,提前。"
for x, w in jieba.analyse.extract_tags(s, withWeight=True):
    print("%s %s" % (x, w))

 输出结果:

不成形 0.6567353394611111
牙龈炎 0.36687584642777776
肠粘连 0.36687584642777776
用剂 0.33207687508055556
后府行 0.33207687508055556
顽同 0.33207687508055556
他弟 0.33207687508055556
府行 0.33207687508055556
量少 0.33207687508055556
甲亢 0.30291514940000003
肠梗阻 0.3002676444055556
月经期 0.2978506617111111
隐痛 0.2925939395
受凉 0.2829751551472222
一二日 0.26933291757166666
腹胀 0.2573874628819445
明显好转 0.25581471582638887
复发 0.24946379794861112
成形 0.24639554807166666
似有 0.24463687364361114

(4)标注词性

#标注词性
import jieba.posseg as pseg
 
words = pseg.cut("特别是便秘较顽同,但口腔似有牙龈炎,起疙瘩,左腹部或有隐痛。")
for word, flag in words:
    print("%s %s" % (word, flag))

输出结果

特别 d
是 v
便秘 a
较 d
顽同 a
, x
但 c
口腔 n
似 d
有 v
牙龈炎 n
, x
起 v
疙瘩 n
, x
左 m
腹部 n
或 c
有 v
隐痛 a
。 x
此为学习版,请勿用于商业用途或扩散。 以下描述转至互联网。 ============== 一、CSW中分词组件简介 CSW中文分词组件,是一套可自动将一段文本按常规汉语词组进行拆分,并以指定方式进行分隔的COM组件。本组件采用独有的高效的分词引擎及拆分算法,具有准确、高速、资源占用率小等特点。为了满足客户对文本语义进行研究分析的需要,本组件同时提供词性及词频标注功能,可根据用户要求,对其拆分后的词组进行词性标注或词频标注。互联网信息检索、数据信息查询、智能聊天机器人、文本校对、自动翻译、 自动摘要、自动分类及信息加工处理等各个领域。 二、本组件特点: 1.适应性强 本组全部件采用ANSI标准C++开发,可广泛应用于当今的操作系统平台上,如:MS Windows、Linux及其它各公司出品的Unix操作系统。 2. 支持范围广 在MS Windows平台下,本组件以COM接口的DLL格式进行封装,可支持所有支持COM接口调用的编程语言及脚本语言。如:PHP、JSP、ASP、ASP.net、C/C++ 、VC6.0 、VC.net、BC、C#、VB6.0 、VB.net、Delphi、Java等。 3. 响应速度快 由于本组件采用高效特殊的算法引擎结构,每秒钟拆分可达数万字汉语文本,在对搜索关键词进行拆分情况下,其响应时间均在数毫秒之内,为搜索提供强劲动力。 4. 词组识别准确率高 采用特殊的词组拆分识别算法,可有效消除汉语词组中汉语歧义,并可识别各个行业内的特殊用语、专用词汇、公司名、地名等,并具有汉语成语、汉语短语识别功能。如:'醉翁之意不在酒'。经长期使用及大量文本测试其准确率可达到92%以上。 5. 拆分覆盖面广 含盖了IT、化工、金融、贸易、纺织、电子、制造、冶金等各行各业以及日常生活用语中的汉语词组。 6. 提供词组自定义功能 可根据用户需要自行添加汉语词组,并提单个汉字添加或从文件批量添加功能。 7.特殊字符过滤功能 可根据用户需要自行定义影响检索结果的不必要的字符。如:! % *等。 9. 具有英文分词识别功能。 本组件同时具有英文单词的分词识别功能。 10. 词性标注功能。(限企业A版) 词性:即词组在汉语语言中所表述的性质。如:计算机 /名词; 中国 / 名词,方位词 此功能可对拆分出的汉语词组进行词性标注,辅以开发人员理解分析文本序列中所包含的语义或意图。其广泛应用于互联网信息搜索以提高搜索精度、智能聊天机器人理解对方话语的含义等领域。整个分词标注以北京大学词性标注集为标准。(详细可参见词性标注表) 11. 词频标注功能。(限企业B版) 词频:即词组在广域的所有汉语词组中出现的相对频率值。 此功能可对拆分出的汉语词组进行词频标识。为开发人员在对搜索关键词的理解分析上提供有效的参考,以提高检索精度。整个词频标识是以各大报刊媒体文章为基础,经过精心的统计分析制作而成,具有相当的参考价值。 三、在线演示/免费下载 在线演示:http://61.129.81.124/csw/csw50.asp 四、各语言调用示例代码 参数一:InputString[string类型] 需进行分词的原始文本 参数二:OutputType[int整型] 输出类型 (0 标准分词输出, 1 附带词性输出, 2 附带词频输出) 参数三:DllPath[string类型] 本组件在系统中的完整路径 返回:OutputString[string类型] 输出分词后的文本序列 1. C#调用示例代码 首先运行本组件包中的install.bat文件,在系统中注册本组件。 然后在开发工具中引用CSW.dll组件 //以下为C#控制台应用程序中调用本组件示例代码. CSWLib.SplitWordClass csw = new CSWLib.SplitWordClass(); string text = csw.Split('待拆分原始文本',0,@'c:winntsystem'); Console.WriteLine(text); Console.ReadLine(); //暂停,查看输出 访问官方网站获得更多代码示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值