jieba分词基础(一)

这篇博客写一些结巴分词的基础操作,参考网站http://github.com/fxsjy/jieba/blob/master/README.md


1.分词

我们对“张三是云计算领域的专家”这句话进行分词,如何让分词达到理想化,就需要自定义词典的引用,并且定期维护词典。

#jieba精确分词
import jieba

sent = "张三是云计算领域的专家"
seg = jieba.cut(sent,cut_all = False)
print("Default Mode:","/".join(seg))

#加载用户词典 userdict.txt{张三\n 是\n}
jieba.load_userdict("./userdict.txt")
seg = jieba.cut(sent,cut_all = False)
print("Userdict Mode:","/".join(seg))

#动态调整用户词典
jiaba.add_word("云计算")
seg = jieba.cut(sent,cut_all = False)
print("AddDict Mode:","/".join(seg))

output:
Default  Mode: 张三是//计算/领域//专家
Userdicr Mode: 张三///计算/领域//专家
AddDict  Mode: 张三//云计算/领域//专家

2.关键词提取

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

import jieba.analyse
jieba.analyse.extract_tags(sentence,topK = 20,withWeigth = False,allowPos = 0)

关键词提取用到jieba.analyse类,其中

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

sent = "虽然绝大部分国家都有类似的纪念日,但是由于复杂的政治关系,部分国家的这一节日不能够称为国庆日,比如美国只有独立日,没有国庆日,但是两者意义相同。"

seg = jieba.analyse.extract_tags(sent,4,withWeight = True)

for s in seg:
	print(s)

output:
('国庆日', 0.9093258546384615)
('纪念日', 0.37847056313192307)
('但是', 0.32104838408307695)
('国家', 0.30772656862769227)

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

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

基本思想:

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

sent = "虽然绝大部分国家都有类似的纪念日,但是由于复杂的政治关系,部分国家的这一节日不能够称为国庆日,比如美国只有独立日,没有国庆日,但是两者意义相同。"

seg = jieba.analyse.textrank(sent,topK = 4,withWeight = False,allowPOS=('n')) #只抽取名词

for s in seg:
	print(s)

output:
部分
意义
政治
国家

3.词性标注

import jieba.posseg 

sent = "我们中出了一个叛徒"

words = jieba.posseg.cut(sent)

for word,flag in words:
	print(word," ",flag)

output:
我们   r
中   f
出   v
了   ul
一个   m
叛徒   n

4.Tokenize 返回词语原文的起始位置

import jieba

sent = "我们中出了一个叛徒"

result = jieba.tokenize(sent)

for tk in result:
	print("wrod %s \t\t start: %d \tt end:%d" %(tk[0],tk[1],tk[2]))

output:
wrod 我们 		 start: 0 	t end:2
wrod 中出 		 start: 2 	t end:4
wrod 了 		 start: 4 	t end:5
wrod 一个 		 start: 5 	t end:7
wrod 叛徒 		 start: 7 	t end:9

result = jieba.tokenize(sent,mode = 'search') #搜索模式
发布了15 篇原创文章 · 获赞 2 · 访问量 2199

猜你喜欢

转载自blog.csdn.net/Mr_WangYC/article/details/101367527