赞
踩
假设我们现在有一篇文章,需要提取这篇文章的关键词,要怎样才能通过计算机实现呢?
一篇文章的关键词基本都是能体现文章的内容,而且几乎是在文章中频繁出现的词,统计文章中各个词出现的次数,出现最多的则是这篇文章的关键词了,那具体是怎么统计呢,这里有一个专业术语叫词频(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插件已经将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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。