基于TF-IDF算法抽取文章关键词

專 欄

yonggege,Python中文社区专栏作者

博客:https://www.zhihu.com/people/yonggege

0. 写在前面

本文目的,利用TF-IDF算法抽取一篇文章中的关键词,关于TF-IDF,可以参考TF-IDF与余弦相似性的应用(一):自动提取关键词 - 阮一峰的网络日志。

TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。(百度百科)

TF(Term Frequency)词频,某个词在文章中出现的次数或频率,如果某篇文章中的某个词出现多次,那这个词可能是比较重要的词,当然,停用词不包括在这里。

IDF(inverse document frequency)逆文档频率,这是一个词语“权重”的度量,在词频的基础上,如果一个词在多篇文档中词频较低,也就表示这是一个比较少见的词,但在某一篇文章中却出现了很多次,则这个词IDF值越大,在这篇文章中的“权重”越大。所以当一个词越常见,IDF越低。

当计算出TFIDF的值后,两个一乘就得到TF-IDF,这个词的TF-IDF越高就表示,就表示在这篇文章中的重要性越大,越有可能就是文章的关键词。

而Python的scikit-learn包下有计算TF-IDF的API,我们就用这个来简单的实现抽取文章关键词。

这里用到的文本数据材料则是《冰与火之歌》的1-5季(冰歌粉哈哈哈)

1. 数据采集

文本数据来源《冰与火之歌》小说在线阅读网站的内容爬取,这个的网站很多,这里就不贴出是哪一个了

爬取的难度不大,爬取下来之后写入本地文件

2. 文档分词

爬取了所有文档之后,后续为了计算TF和IDF值,首先要提取文档中的所有词语,利用python的jieba库可以来进行中文分词。

下面遍历所有文件里所有文档来分词

文档分词之后还需要去停用词来提高抽取准确性,这里先准备一个停用词字典。

同时,我们还可以新增自选的词典,提高程序纠错能力,例如

3. scikit-learn的TF-IDF实现

(装好anaconda之后,scikit-learn已经完成)

scikit-learn中TF-IDF权重计算方法主要用到CountVectorizer()类TfidfTransformer()类。

CountVectorizer类会将文本中的词语转换为词频矩阵。矩阵中word[ i ][ j ],它表示j词在i类文本下的词频。

fit_transform(raw_documents[, y])Learn the vocabulary dictionary and return term-document matrix.get_feature_names()Array mapping from feature integer indices to feature name

fit_transform(),学习词语词典并返回文档矩阵,矩阵中元素为词语出现的次数。

get_feature_names(),获取特征整数索引到特征名称映射的数组,即文档中所有关键字的数组。

TfidfTransformer类用于统计每个词语的TF-IDF值。

最后按权重大小顺序输出前n位的词语即可

运行结果

得到每篇文档的关键词。

4. 最后

参考资料:

[1]. TF-IDF与余弦相似性的应用(一):自动提取关键词 - 阮一峰的网络日志

[2]. Python Package Index

[3]. sklearn.feature_extraction.text.CountVectorizer - scikit-learn 0.18.1 documentation

代码GitHub:wzyonggege/tf-idf

原文发布于微信公众号 - Python中文社区(python-china)

原文发表时间:2017-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【读书笔记】基于知识库的问答:生成查询图进行语义分析

【导读】将DBPedia和Freebase这样的大规模知识库组织并存储在一个结构化的数据库,这已成为支持开放领域问题问答的重要资源。 KB-QA的大多数方法基于...

5087
来自专栏机器之心

资源 | 囊括欧亚非大陆多种语言的25个平行语料库数据集(拿走不谢!)

原文链接:https://gengo.ai/datasets/25-best-parallel-text-datasets-for-machine-transl...

2433
来自专栏iOSDevLog

Scikit-Learn教程:棒球分析 (一)

一个scikit-learn教程,通过将数据建模到KMeans聚类模型和线性回归模型来预测MLB每赛季的胜利。

2112
来自专栏Python小屋

Python计算电场中两点间的电势差

根据组合数定义,需要计算3个数的阶乘,在很多编程语言中都很难直接使用整型变量表示大数的阶乘结果,虽然Python并不存在这个问题,但是计算大数的阶乘仍需要相当多...

961
来自专栏Android 开发者

Android Smart Linkify 支持机器学习

上半周,我们发布了 Android 9 Pie,这是 Android 的最新版本,它的机器学习应用使您的手机更简单易用。 Android 9 中有一项功能是 S...

1503
来自专栏林欣哲

自然语言处理--文本处理

自然语言处理的目的是让机器试图理解和处理人类的文字。通常来说,人的语言是冗余的,含有歧义的,而机器是准确的,无歧义的,要让机器理解,这之间存在一个转换的问题。 ...

3888
来自专栏携程技术中心

干货 | ElasticSearch相关性打分机制

作者简介 孙咸伟,后端开发一枚,在携程技术中心市场营销研发部负责“携程运动”项目的开发和维护。 携程运动是携程旗下新业务,主要给用户提供羽毛球、游泳等运动项目的...

1.8K8
来自专栏AI研习社

用金庸、古龙群侠名称训练 LSTM,会生成多么奇葩的名字?

AI 研习社按:本文转载自 Magicly 博客,获作者授权。阅读原文请见:http://magicly.me/2017/04/07/rnn-lstm-gene...

40111
来自专栏AI科技大本营的专栏

开启机器学习的第一课:用Pandas进行数据分析

翻译 | AI科技大本营 参与 | 林椿眄 本课程的目的并不是要开发一门全新的机器学习或数据分析的综合入门课程,也不是想借此来取代基础教育、在线/离线课程或一...

4445
来自专栏鹅厂优文

游戏人工智能 读书笔记 (四) AI算法简介——Ad-Hoc 行为编程

本书英文版: Artificial Intelligence and Games - A Springer Textbook

26810

扫码关注云+社区

领取腾讯云代金券