学习 nltk —— TF-IDF

本文介绍了TF-IDF算法的基本概念及应用,详细解释了TF-IDF的计算公式,并通过实例展示了如何使用nltk库进行TF-IDF计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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=knk,jni,jidfi=log{j:tidj}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} = 100knk,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^7D=107,其中 1000 篇出现了单词 baby,∣{j:ti∈dj}∣=103|\{j:t_i\in d_j\}|=10^3{j:tidj}=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
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值