TF-IDF算法可用来提取文档的关键词,关键词在文本聚类、文本分类、文献检索、自动文摘等方面有着重要应用。

算法原理

TF:Term Frequency,词频

IDF:Inverse Document Frequency,逆文档频率

词频(TF):某一个词在该文件中出现的频率

计算方法为:

逆文档频率(IDF):总文件数目除以包含该词的文件数目

计算方法为:

分母加1是为了防止该词不在语料库中而导致被除数为零

最后,TF-IDF的计算方式为:

TF-IDF 的主要思想为:

如果某个词在一篇文档中出现的频率高(即 TF 高),并且在语料库中其他文档中很少出现(即 IDF 高),则认为这个词具有很好的类别区分能力

算法过程:先计算出文档中每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词作为关键词进行输出

算法优点:

原理简单,能满足大多数实际需求

算法缺点:

  1. 单纯以 “词频” 衡量一个词的重要性,不够全面(文档频率小的词就越重要,文档频率大的词就越无用,显然这并不是完全正确的)
  2. TF-IDF值的计算没有加入词的位置信息,不够严谨(出现在文档标题、第一段、每一段的第一句话中的词应给予较大的权重)

Python实现

jieba

jieba内置了TF-IDF算法,调用非常简单,例:

sen = '自然语言处理是人工智能和语言学领域的分支学科,此领域探讨如何处理及运用自然语言,包括多方面和步骤。'
print(' jieba extract:', jieba.analyse.extract_tags(sen, topK=topK)) # ['自然语言', '领域', '处理']

topK:返回 TF-IDF 值最大的关键词个数,此处为 3

更详细用法可参考官方文档:https://github.com/fxsjy/jieba

sklearn

关键词提取需用到 CountVectorizer 和 TfidfVectorizer,示例代码:

corpus = [  # 语料
'自然语言处理是人工智能和语言学领域的分支学科,此领域探讨如何处理及运用自然语言,包括多方面和步骤。',
'计算机视觉是一门研究如何使机器“看”的科学,用摄影机和计算机代替人眼对目标进行识别、跟踪和测量。',
'机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。'
]
corpus = [jieba.lcut(sen) for sen in corpus]
with open('stop_words.txt', encoding='utf8') as f:
stop_words = [line.strip() for line in f.readlines()]
corpus = [' '.join(filter_stop_words(sen, stop_words)) for sen in corpus] cvec = CountVectorizer()
cvec.fit_transform(corpus)
feature_words = cvec.get_feature_names()
feature_words = np.array(feature_words) tvec = TfidfVectorizer()
tvec = tvec.fit_transform(corpus)
first_sen = tvec.toarray()[0]
max_indices = np.argsort(-first_sen)[:topK]
print('sklearn extract:', feature_words[max_indices]) # ['自然语言' '领域' '语言学']

完整项目地址:https://github.com/cyandn/practice/tree/master/TF-IDF

参考:

https://www.jianshu.com/p/b0ba00ccaf9c

http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

https://blog.csdn.net/Eastmount/article/details/50323063

https://blog.csdn.net/m0_37324740/article/details/79411651

TF-IDF算法简析的更多相关文章

  1. tf–idf算法解释及其python代码实现(下)

    tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...

  2. tf–idf算法解释及其python代码实现(上)

    tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...

  3. 55.TF/IDF算法

    主要知识点: TF/IDF算法介绍 查看es计算_source的过程及各词条的分数 查看一个document是如何被匹配到的         一.算法介绍 relevance score算法,简单来说 ...

  4. Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据

    相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...

  5. tf–idf算法解释及其python代码

    tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...

  6. DiskGenius注册算法简析

    初次接触DiskGenius已经成为遥远的记忆,那个时候还只有DOS版本.后来到Windows版,用它来处理过几个找回丢失分区的案例,方便实用.到现在它的功能越来越强大,成为喜好启动技术和桌面支持人员 ...

  7. 25.TF&IDF算法以及向量空间模型算法

    主要知识点: boolean model IF/IDF vector space model     一.boolean model     在es做各种搜索进行打分排序时,会先用boolean mo ...

  8. 基于DFA敏感词查询的算法简析

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要对敏感词做一个过滤,首先有几个方案可以选择: a.直 ...

  9. SHA安全散列算法简析

    1 SHA算法简介 1.1 概述 SHA (Secure Hash Algorithm,译作安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院(NIST) 发布的一系列密码散 ...

随机推荐

  1. 软件开发的生产力vs质量

    在<人月神话>里看到引用的一篇论文,<没有银弹:软件工程的本质性与附属性工作>(英语:No Silver Bullet-Essence and Accidents of Sof ...

  2. Windows 10 蓝牙管理页面"添加蓝牙或其他设备"选项点击无响应的解决方案

    解决方案1(简单,但不解决根本问题): 通过"控制面板→设备和打印机→添加设备"进行添加. 解决方案2: 造成这种现象的原因应该是因为启用了 Administrator 账户,在其 ...

  3. Python——EM(期望极大算法)教学(附详细代码与注解)

    今天,我们详细的讲一下EM算法. 前提准备 Jupyter notebook 或 Pycharm 火狐浏览器或谷歌浏览器 win7或win10电脑一台 网盘提取csv数据 需求分析 实现高斯混合模型的 ...

  4. linux线程回收

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), v ...

  5. 未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f351905198cb3”或它的某一个依赖项。未能授予最小权限请求

    问题:运行程序执行到代码报错:未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f3519051 ...

  6. maven仓库报错 sqljdbc4、ojdbc6、tomcat-jdbc-8.5.14

    报错:Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0  和  Missing artifact com.microsoft.sqlserver: ...

  7. ubuntu 18.04 设置静态ip方法

    1. 前言 本教程将会演示如何设置Ubuntu16.04 Server版和Ubuntu18.04 Server版系统的静态固定IP地址. 2. 确认你要修改的网卡号 先确认你要修改的网卡号,假设你的服 ...

  8. Leetcode周赛164

    目录 访问所有点的最小时间 思路 代码 统计参与通信的服务器 思路 代码 搜索推荐系统 思路 代码 停在原地的方案数 思路 代码 访问所有点的最小时间 思路 由于每次移动有水平方向移动一格.竖直方向移 ...

  9. fiddler常用功能

    原理 Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(cookie,html,js,css等). ...

  10. 01-C#笔记-hello_world

    /* * 主文件是 xxx.cs * 基本的 hello world 程序如下: */ using System; using System.Collections.Generic; using Sy ...