1. TF-IDF简介
TF-IDF(Term Frequency-Inverse Document Frequency)是一种统计方法,用以评估某一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF倾向于过滤掉常见的词语,保留重要的词语。TF-IDF加权的各种形式常被搜寻引擎应用,作为文件与用户查询之间相关程度的度量或评级。在本文中,主要用TF-IDF来实现文本自动打标。
2. 应用案例
(1)应用案例1:找出文章最具代表性的词
# -*- coding: utf-8 -*-
"""
Created on Thu Aug 31 22:48:55 2017
@author: Administrator
"""
from math import log
#tf计算
def tf(word,doc):
all_num = sum([doc[key] for key in doc])
return float(doc[word]) / all_num
#idf计算
def idf(word,doc_list):
all_num = len(doc_list)
word_count = 0
for doc in doc_list:
if word in doc:
word_count += 1
return log(all_num/word_count)
#tfdif计算(tfidf = tf * idf)
def tfidf(word,doc,doc_list):
score = tf(word,doc)*idf(word,doc_list)
return score
if __name__ == '__main__':
doc1 = {'at':16,'tell':132,'soft':42,'let':53,'this':32}
doc2 = {'tell':53,'be':46,'tea':43,'what':46,'foot':65,'hack':32}
doc3 = {'soft':65,'this':67,'tell':78,'how':124,'foot':54}
doc_list = [doc1,doc2,doc3]
i = 1
for doc in doc_list:
print('-'*30)
print("doc{}中各单词的tfidf值:".format(i))
#循环输出每个文档中每个单词的tfidf值
for word in doc:
print('"{}":{}'.format(word,tfidf(word,doc,doc_list)))
i += 1
运行结果如下图所示:
根据上图中各文档中各个单词的tfidf值大小可以选出doc1、doc2、doc3三个文档中最具代表性的单词分别为:”let”,”be”,”how”。当然,上述案例只是tfidf应用的简单示例,后面会进一步介绍tfidf在实际业务中的应用。