当前位置:   article > 正文

jieba实现基于tf-idf算法的关键词提取(附完整代码)_jieba tfidf

jieba tfidf

提出问题

假设我们现在有一篇文章,需要提取这篇文章的关键词,要怎样才能通过计算机实现呢?

TF-IDF算法介绍

一篇文章的关键词基本都是能体现文章的内容,而且几乎是在文章中频繁出现的词,统计文章中各个词出现的次数,出现最多的则是这篇文章的关键词了,那具体是怎么统计呢,这里有一个专业术语叫词频(term frequency),简称TF。计算公式如下:
TF(词频) = 某次在文章中出现的次数 / 文章中的总词数
举例子:我正在学习人工智能,并且我一定会成功的。
**通过jieba分词得到分词:**我/ 正在/ 学习/ 人工智能/ 并且/ 我/ 一定/ 会/ 成功/ 的/
分词之后这句话总共出现9个分词我 2 正在 1 学习 1 人工智能 1 并且 1 一定 1 会 1 成功 1 的 1
我们计算 “人工智能”出现的词频 0.11 = 1/9

但是实际上我们肉眼就能判断出有一类词出现的很频繁,比如“的”、“了”、“在”,显然这类词根本体现不出文章的重要性,肯定不是文章的关键词,这类词有一个专业名词叫停用词(stop words),一般在处理中会将这类词过滤掉。还有一类词比如阮一峰大神举例中的“中国的蜜蜂养殖”,我们一眼就能看出,蜜蜂、养殖这类词虽然很少见,但是才是这篇文章的关键词,而“中国”,在各个文章集中经常能见到。“蜜蜂”、“养殖”的权值应该要比“中国”高才对,分词出现的权重叫做"逆文档频率"(Inverse Document Frequency,缩写为IDF),因此比较经常见到的分词应该给与较低的权限,相反比较不常见的分词则应该给与较高的权重。IDF计算方式是这样的:
IDF = log(语料库出现的文章总数 / 包含该词的文章总数+1),计算IDF的公式并不是唯一的也有其他公式。

因此 TF-IDF = TF * IDF。值越大表示该词在文章中越重要

通过jieba 的python库提取关键词

jieba 的python插件已经将TF-IDF算法封装好了,因为我们直接引用就可以直接使用。
基于 TF-IDF 算法的关键词抽取方法:
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
sentence 为待提取的文本
topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
withWeight 为是否一并返回关键词权重值,默认值为 False
allowPOS 仅包括指定词性的词,默认值为空,即不筛选

词性对应字符如下表所示:
在这里插入图片描述
基于tfidf算法的关键词提取代码如下:

import jieba
import jieba.analyse
sentence = '中华蜜蜂原产于中国,是中国的土著蜂,适应中国各地的气候和蜜源条件,适于定地饲养且稳产,尤其是在南方山区,有着其他蜂种不可替代的地位'

seg_list = jieba.cut(sentence, cut_all=True)
print(", ".join(seg_list))
keywords = jieba.analyse.extract_tags(sentence, topK=20, withWeight=True, allowPOS=('n','nr','ns'))
print(keywords)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/281581
推荐阅读
相关标签
  

闽ICP备14008679号