词频-逆文档频率(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)