TF-IDF(Term Frequency & Inverse Document Frequency),是一种用于信息检索(Information Retrieval,IR)与数据挖掘的常用加权技术。它的主要思想是:如果某个词或短语在一篇文章中出现的频率(term frequency)高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

tfi,j=ni,j∑knk,jidfi=log⁡∣D∣∣{j:ti∈dj}∣\begin{array}{ll} &\text{tf}_{i,j}=\frac{n_{i,j}}{\sum\limits_{k}n_{k,j}}\\ &\text{idf}_i=\log\frac{|D|}{|\{j:t_i\in d_j\}|} \end{array} ​tfi,j​=k∑​nk,j​ni,j​​idfi​=log∣{j:ti​∈dj​}∣∣D∣​​

  • IF 定义式的:

    • j:第 j 篇文章(文章编号);
    • i:某个待考察的单词(第 i 个单词,单词在文章中的编号);
    • kkk:第 j 篇文章的全部单词(文章中的全部单词);
  • idf 定义式:

    • j:文章编号;
    • i:待考察的单词编号;
    • ∣⋅∣|\cdot|∣⋅∣:表示集合的大小;

1. 简单举例

  • 一个文档有 100 个单词,baby 出现了 3 次;

    • 则如果该文档编号为 jjj,该文档中的单词为 kkk(∑knk,j=100\sum_k n_{k, j} = 100∑k​nk,j​=100),对于单词 baby,tfbaby,j=3100=0.03tf_{baby, j}= \frac{3}{100}=0.03tfbaby,j​=1003​=0.03
  • 现有 10m 的文档,其中有 1000 篇文档中出现了单词 baby
    • 10m 的文档,也即 ∣D∣=107|D| = 10^7∣D∣=107,其中 1000 篇出现了单词 baby,∣{j:ti∈dj}∣=103|\{j:t_i\in d_j\}|=10^3∣{j:ti​∈dj​}∣=103
    • 因此,idfbaby=log⁡107103=4idf_{baby}=\log \frac{10^7}{10^3}=4idfbaby​=log103107​=4
  • 该单词的 IF-IDF 值为 0.03*4 = 0.12

2. nltk 的计算

nltk.text 提供了 TextCollection 类以计算 tf-idf,

  • 首先构建语料库:

    from nltk.text import TextCollection
    sents = ['this is sentence one', 'this is sentence two', 'this is sentence three']
    sents = [nltk.word_tokenize(sent) for sent in sents]
    corpus = TextCollection(sents)
    
  • 计算 idf

    此时已将全部的语料库fit进去,计算 idf 只需传递要计算的 word 即可:

    >> corpus.idf('this')
    0.0         # log(3/3)
    >> corpus.idf('three')
    1.0986122886681098      # log(3/1)
    
  • 计算某单词在某文档中的 tf:

    >> corpus.tf('three', nltk.word_tokenize('one two three, go'))
    0.2         # 1/5
    >> corpus.tf_idf('three', nltk.word_tokenize('one two three, go'))
    0.21972245773362198     # 0.2 * 1.0986122886681098
    

学习 nltk —— TF-IDF相关推荐

  1. 关键词提取算法—TF/IDF算法

    关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...

  2. 随笔_从《芳华》影评到TF/IDF算法

     前两天看好多<芳华>的影评说:为什么好人没好报?于是感叹一堆世态炎凉,人性丑陋什么的.我觉得这问题是:为什么中央空调(对谁都温暖)往往不被看好.  先说说TF/IDF算法,这是一种信息处 ...

  3. 文本特征抽取的向量空间模型(VSM)和TF/IDF方法

    文本特征抽取 两组小说,一组是爱情的,另一组是科幻的.我们能否用支持向量机训练一个模型,用来识别小说类型呢? 这个并不容易.因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入.如果用它来做文 ...

  4. tf-idf词向量和bow_使用词袋Bow和TF IDF进行多标签分类

    tf-idf词向量和bow 1.加载数据 (1. Load the data) For this study, we are using Kaggle data for Toxic Comment C ...

  5. 搜索引擎:文本分类——TF/IDF算法

    原理 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类.TFIDF实际上是:TF * IDF,TF ...

  6. tf/idf_Neo4j:带密码的TF / IDF(和变体)

    tf/idf 几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wik ...

  7. Neo4j:带密码的TF / IDF(和变体)

    几周前,我写了一篇博客文章,介绍了如何使用scikit-learn在HIMYM成绩单上运行TF / IDF,以按情节找到最重要的短语,然后我很好奇在Neo4j中很难做到. 我首先将Wikipedia的 ...

  8. scitkit-learn:计算机科学论文的TF / IDF和余弦相似度

    几个月前,我下载了数千篇计算机科学论文的元数据,这样我就可以尝试编写一个迷你推荐引擎来告诉我接下来应该读什么论文. 由于我没有任何人可以阅读每篇论文的数据,因此排除了协作过滤方法,所以我认为我可以尝试 ...

  9. 使用lingpipe自然语言处理包进行文本分类/** * 使用 lingpipe的tf/idf分类器训练语料 * * @author laigood */ public class trai

    /**  * 使用 lingpipe的tf/idf分类器训练语料  *   * @author laigood  */ public class traintclassifier { //训练语料文件 ...

  10. 【笔记】手敲版 TF IDF

    注1: 1.  涉及计算向向量夹角  [笔记]向量点乘(内积)和叉乘(外积.向量积):对两个向量执行点乘运算,是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量:叉乘结果是一个向量,它垂 ...

最新文章

  1. 利用map和stringstream数据流解题
  2. iptables防火墙过滤规则
  3. eclipse新建项目时JRE的三个选项分别是什么意思?
  4. Python标准库07 信号 (signal包,部分os包)
  5. Direct2D (2) : 基本图形命令测试
  6. CTF工具(1)--- ARCHPR--含安装/使用过程
  7. Andorid之Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法总结
  8. Effective Modern C++翻译(3)-条款2:明白auto类型推导
  9. 卸载重装得会员、偷删本地文件?网易云回应了:系造谣攻击,悬赏10万找线索...
  10. android浏览在线ppt,(简单好用的在线查看文件方法)Android 使用AgentWebView在线查看wrold丶ppt丶pdf等文件...
  11. android加载海康威视(萤石sdk)摄像头
  12. 栈的基本操作(详细)
  13. 虚幻引擎3命令行参数
  14. python爬取付费音乐包_Python 收费、高品质无损音乐下载【开源】
  15. If you are using WebLogic you will need to add ‘org.slf4j‘ to prefer-application-packages in
  16. C++ decorator(装饰)模式
  17. IPD(集成产品开发)
  18. 初赛De各种各样的知识点
  19. 中国人民公安大学 网络对抗技术 15网安六区 杨益 201521460031
  20. TIA精致面板备份/恢复

热门文章

  1. Nginx增加第三方外部插件
  2. Doris之数据模型的选择建议
  3. Hive insert into小文件问题优化解决
  4. linux日志清除脚本,linux 日志清除脚本
  5. 剑指offer面试题49. 丑数
  6. Python——KNN实战(附详细代码与注解)
  7. Qt加载RGB内存数据,并显示彩色图
  8. Ajax提交表单数据(包含文件)
  9. Python - shutil模块(2)——压缩目录、文件
  10. 驰骋工作流程引擎多人待办处理模式的升级