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') #搜索模式