java jieba tfidf_【NLP】【三】jieba源码分析之关键字提取(TF-IDF/TextRank)

本文介绍了jieba库中基于TF-IDF和TextRank算法的关键字提取方法。TF-IDF完全基于词频统计,TextRank则考虑词的上下文和相关性。jieba的TF-IDF实现包括加载idf值、计算词频和TF-IDF值;TextRank通过构建无向图计算节点权重。两者在算法原理和性能上有不同特点。
摘要由CSDN通过智能技术生成

【一】综述

利用jieba进行关键字提取时,有两种接口。一个基于TF-IDF算法,一个基于TextRank算法。TF-IDF算法,完全基于词频统计来计算词的权重,然后排序,在返回TopK个词作为关键字。TextRank相对于TF-IDF,基本思路一致,也是基于统计的思想,只不过其计算词的权重时,还考虑了词的上下文(通过窗口滑动来实现),而且计算词的权重时,也考虑了相关联系词的影响。可以说,TextRank实际上是依据位置与词频来计算词的权重的。下面,结合基于jieba源码,来分别解释两种算法的实现。

【二】TF-IDF

1. 原理解析

假设,共有N篇文档,分别用 d1,d2,d3,,,,,,,dn来表示。

TF = 某个词在di篇文章中出现的次数/di篇文章的总词数 = count(W in di)/ count(di)。因此,TF计算的是单个词在单个文档中出现的词频。

IDF = 总的文档数 / 出现词W的文档数 。 IDF其实反映了词W在文档之间的区别度。如果W在仅在一篇文档中出现,则说明可以使用W将该文档与其他文档区别开来。即IDF可以反映W的独特性 。

TF*IDF,可以得到词的重要性。比如: 北京和西安在同一篇文档中的词频均为20%,那如何估计北京是该文的关键字,还是西安呢?如果同时有10篇文章均提到了北京,恰好只有这篇文章提到了西安,则西安作为这篇文章的关键字更为合理。

2. idf.txt

jieba有统计好的idf值,在 jieba/analyse/idf.txt中。

劳动防护 13.900677652

生化学 13.900677652

奥萨贝尔 13.900677652

考察队员 13.900677652

岗上 11.5027823792

倒车档 12.2912397395

3. idf.txt 加载

代码在 jieba/analyse/tfidf.py

class IDFLoader(object):

def __init__(self, idf_path=None):

self.path = ""

self.idf_freq = {}

# 初始化idf的中位数值

self.median_idf = 0.0

if idf_path:

# 解析idf.txt

self.set_new_path(idf_path)

def set_new_path(self, new_idf_path):

if self.path != new_idf_path:

self.path = new_idf_path

content = open(new_idf_path, 'rb').read().decode('utf-8')

self.idf_freq = {}

# 解析 idf.txt,拿到词与idf的对应值࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值