jieba分词

本文介绍了中文分词的重要性及jieba分词器的基本概念、使用方法。详细讲解了jieba分词器的三种模式,并演示了如何使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值