jieba textrank关键词提取 python_jieba 分词使用

65d966863c2a19cb7d44a7944e6399f8.png

jieba

基于python坏境下最好(最方便)的中文分词。支持3种分词模式。

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

全模式/精准模式

jieba.cut/jieba.lcut

jiaba.lcut 和jieba.cut的区别:

jieba.lcut返回的是list

d1a109b23272af57387f1450264ce5cd.png

jieba.cut返回的是generator

4361c94aa824888457f16013a732cacb.png
  • 需要分词的字符串(unicode 或 UTF-8 字符串、GBK 字符串)
  • cut_all 参数:是否使用全模式,默认值为 False
  • HMM 参数:用来控制是否使用 HMM 模型,默认值为 True
string=jieba.cut("我的父亲在阿里巴巴工作",cut_all=True) 
print("【全模式】:"+"/" .join(string))  

【全模式】:我/的/父亲/在/阿里/阿里巴巴/巴巴/工作

阿里巴巴分成了3个,阿里,阿里巴巴,巴巴。我们用精准模式看看

string=jieba.cut("我的父亲在阿里巴巴工作",cut_all=False) 
print("【全模式】:"+"/" .join(string))  

【全模式】:我/的/父亲/在/阿里巴巴/工作

阿里巴巴被准确识别为一个词了。

搜索引擎模式

jieba.cut_for_search/jieba.lcut_for_search
string=jieba.cut_for_search("我的父亲在阿里巴巴工作") 
print("【搜索引擎模式】:"+"/" .join(string))  

【搜索引擎模式】:我/的/父亲/在/阿里/巴巴/阿里巴巴/工作

貌似和全模式差不多,再来一句复杂一点的,看看全模式和搜索引擎模式的区别。

string1=jieba.cut("我的父亲在阿里巴巴工作,他最喜欢的是鲜肉蛋挞和鲜花花朵",cut_all=True) 
print("【全模式】:"+"/" .join(string))  

string2=jieba.cut_for_search("我的父亲在阿里巴巴工作,他最喜欢的是鲜肉蛋挞和鲜花花朵") 
print("【搜索引擎模式】:"+"/" .join(string))  

【全模式】:我/的/父亲/在/阿里/阿里巴巴/巴巴/工作/,/他/最/喜欢/的/是/鲜肉/肉蛋/挞/和/鲜花/花花/花朵

【搜索引擎模式】:我/的/父亲/在/阿里/巴巴/阿里巴巴/工作/,/他/最/喜欢/的/是/鲜肉/蛋挞/和/鲜花/花朵

可以看到,全模式的一个字会重复使用,肉/花重复使用了,而搜索引擎模式在找到其搭配的词后, 便放弃了对其的重复使用。

自定义添加词典

有一些可能结巴里没有,你可以自己定义,比如你定义:鲜肉蛋挞 为一个新词。

jieba.load_userdict(file_name)
jieba.load_userdict("C:Users24977Desktopdic.txt")

dic 里面的内容是:词语,词频(可省略),词性(可省略)

因此我在dic添加的就是

鲜肉蛋挞

#未添加前
string=jieba.cut("我的父亲在阿里巴巴工作,他最喜欢的是鲜肉蛋挞和鲜花花朵") 
print("【未添加】:"+"/" .join(string))  
#添加后
jieba.load_userdict(r"C:Users24977Desktopdic.txt")
string2=jieba.cut("我的父亲在阿里巴巴工作,他最喜欢的是鲜肉蛋挞和鲜花花朵")
print("【添加后】:"+"/" .join(string2))  

【未添加】:我/的/父亲/在/阿里巴巴/工作/,/他/最/喜欢/的/是/鲜肉/蛋挞/和/鲜花

【添加后】:我/的/父亲/在/阿里巴巴/工作/,/他/最/喜欢/的/是/鲜肉蛋挞/和/鲜花/花朵

关键词提取

  • 基于TF-IDF的算法

计算公式:TF-IDF = TF * IDF

TF(Term Frequency,缩写为TF)也就是词频,即一个词在文中出现的次数,统计出来就是词频TF。

IDF(inverse document frequency, IDF):逆文件频率,如果包含词条的文件越少,则说明词条具有很好的类别区分能力。

如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0(比如”的 /得 /地“)。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。

jieba.analyse.extract_tags(sentence,topK=20,withWeight=False)
  • sentence:为待提取的文本
  • topK:为返回几个 TF/IDF 权重最大的关键词,默认值为 20
  • withWeight:是否一并返回关键词权重值,默认值为 False
  • allowPOS:仅包括指定词性的词,默认值为空
import jieba.analyse
sentence="秋意渐凉,中秋渐近,又到了一年中秋佳节。我眼前不由浮现出儿时过中秋的情景,那种记忆挥之不去,总觉得儿时的月亮最大最圆,儿时里的月饼最香甜也最可口,儿时的任何节日都是最有意义也最值得去回味。"
for x, w in jieba.analyse.extract_tags(sentence, topK=20, withWeight=True):
    print(x, w)

儿时 1.4192772054206897
中秋 0.5899013876731034
渐凉 0.4793337121379311
秋意 0.4554320852206897
中秋佳节 0.38833173525517245
挥之不去 0.34806948835172413
香甜 0.32737787602448276
回味 0.3230371778903448
渐近 0.3169361189882759
月饼 0.31256537051793104
可口 0.3086868193655173
浮现 0.288255658855862
不由 0.2668056154462069
节日 0.26181307622310346
月亮 0.2616251588172414
记忆 0.25728714761655175
情景 0.2470654357837931
眼前 0.2111339664013793
值得 0.20750373450586207
那种 0.20586592405999998

  • 基于 TextRank 算法的关键词提

jieba.analyse.textrank其与 jieba.analyse.extract_tags有一样的参数。

for x, w in jieba.analyse.textrank(sentence, withWeight=True): 
    print(x, w)

值得 1.0
记忆 0.8912986067997157
觉得 0.8855082365794966
秋意 0.6743735316436007
渐凉 0.6698096886939636
意义 0.508612815560427
回味 0.508612815560427
情景 0.45705862271340436
月亮 0.45365253232880354

词频统计

s=open(r"C:Users24977Desktop文档.txt","r",encoding='UTF-8').read()
counts={}
for word in jieba.lcut(s):
    if len(word)!=1:#排除了只有一个字的词
        counts[word] = counts.get(word,0) + 1
print(counts)    

966f923ed92ff391c12620f99b0074b5.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值