TF-IDF
TF-IDF(Term Frequency - Inverse Document Frequency)分为两个部分词频(Term Frequency)和逆文档频率(Inverse Document Frequency)。
词频(Term Frequency)
词频=
某
个
词
在
文
章
中
出
现
的
频
数
文
章
总
词
数
\frac{某个词在文章中出现的频数}{文章总词数}
文章总词数某个词在文章中出现的频数?,表示某个词语在某篇文章中出现的频数。某词语出现频数越高,则重要性越高。除以文章总词数是减少文章长短不同而导致的影响。
逆文档频率(Inverse Document Frequency)
逆文档频率=
log
?
语
料
库
文
档
总
数
含
有
该
词
的
文
档
数
+
1
\log_{}{\frac{语料库文档总数}{含有该词的文档数+1}}
log?含有该词的文档数+1语料库文档总数?,如果含有该词的文档数越多,则说明这个词很常见、不重要,IDF值越小。
注意:语料库文档总数≥含有该词的文档数,因此IDF值必然大于0(分母+1是为了避免分母为0,即所有文档都不含该词)
TF-IDF=词频(TF)*逆文档频率(IDF)
TF-IDF值与一个词在文档中的出现次数成正比,与该词在整个语料库中出现次数成反比。
当一个词的TF-IDF值越高,则说明这个词在这篇文章中多次出现,在其他文章中很少见,那么这个词就很可能是关键词。
优缺点
代码实现-jieba
from jieba.analyse import *
with open('sample.txt', encoding='utf-8') as f:
data = f.read()
for keyword, weight in extract_tags(data, topK=20, withWeight=True):
print('%s %s' % (keyword, weight))
基于特定语料库的TF-IDF关键词提取实现 原 - 云+社区 - 腾讯云 (tencent.com)
补充阅读:TF-IDF与余弦相似性的应用(一):自动提取关键词 - 阮一峰的网络日志 (ruanyifeng.com)
Text Rank
- 提取词汇,形成节点
- 依据词汇的关联,建立链接
- 依照连接节点的多少,给每个节点赋予一个初始的权重数值
- 开始迭代。根据某个词所连接所有词汇的权重,重新计算该词汇的权重,然后把重新计算的权重传递下去,直到这种变化达到均衡态,权重数值不再发生改变
- 根据最后的权重值,取其中排列靠前的词汇,作为关键词提取结果
代码-jieba
from jieba.analyse import *
with open('sample.txt', encoding='utf-8') as f:
data = f.read()
for keyword, weight in textrank(data, withWeight=True):
print('%s %s' % (keyword, weight))
|