TF-IDF算法详解

词频-逆文档频率(Term Frequency-Inverse Docment Frequency, TF-IDF)是一种用于咨询检索与文本挖掘的常用加权技术。
TF-IDF是一种统计方法,它是用来统计一个字词对于一个语料库或者一个文件集在一个文件中的重要性,词语随着在文件中的出现的次数成正比,但是随着在语料库中或文件集中出现的频率成反比。
TFIDF = TF * IDF

该方法的主要思想是,如果一个词在一个文件中出现的频率过高,而在其他文件中出现的次数很少则说明该词是一个很好的分类区分词。
该方法的加权通常用来在索索引擎上作为用户和文件之间的向导作用。

TF词频公式及代码:
T F i , j = n i , j n ∗ , j TF_{i,j}=\frac{n_{i,j}}{n_{*,j}} TFi,j=n,jni,j

def computeTF(wordDict,bow):
    #用一个字典对象记录tf
    tfDict = {}
    nbowCount = len(bow)
    
    for word,count in wordDict.items():
        tfDict[word] = count / nbowCount
    return tfDict
tfA = computeTF(wordDictA,bowA)
tfB = computeTF(wordDictB,bowB)

IDF逆向频率文件公式及代码:

I D F i = log ⁡ ( N + 1 n i + 1 ) IDF_i=\log(\frac{N+1}{n_i+1}) IDFi=log(ni+1N+1)

def computeIDF(wordDictList):
    #用一个字典对象保存idf结果,每个词作为Key,初始值为0
    idfDict = dict.fromkeys(wordDictList[0],0)
    N = len(wordDictList)
    import math
    
    for wordDict in wordDictList:
        #遍历字典中的每个词汇,统计Ni
        for word,count in wordDict.items():
            if count > 0:
                #先把Ni增加1,存入到idfDict
                idfDict[word]+=1
                
        #已经得到所有词汇i对应的Ni,现在根据公式把它替换成idf值
        for word,ni in idfDict.items():
            idfDict[word] = math.log10((N+1)/(ni+1))
            
        return idfDict
    
idfs = computeIDF([wordDictA,wordDictB])
idfs
         

最后是计算TFIDF:

def computeTFIDF(tf,idfs):
    tfidf = {}
    for word ,tfval in tf.items():
        tfidf[word] = tfval*idfs[word]
    return tfidf
tfidfA =computeTFIDF(tfA,idfs)
tfidfB = computeTFIDF(tfB,idfs)

pd.DataFrame(tfidfA,tfidfB)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值