tfidf算法,TF-IDF模型

  tfidf算法,TF-IDF模型

  

目录

  1.TF-IDF算法简介

  (1)TF是词频。

  (2) IDF是逆文档频率。

  (3)TF-IDF实际上是:TF * IDF

  2.TF-IDF应用程序

  3.Python3实现了TF-IDF算法

  4.NLTK实现TF-IDF算法

  5.Sklearn实现TF-IDF算法

  6.杰霸实现TF-IDF算法

  7.TF-IDF算法的缺点

  8.TF-IDF算法改进了——TF-IWF算法

  

1、TF-IDF算法介绍

TF-IDF(term frequencyinverse document frequency,词频-逆向文件频率)

是信息检索和文本挖掘常用的

加权技术

  TF-IDF是一种统计方法,用于评估一个单词对文档集合或语料库中的一个文档的重要性。

字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。

  

TF-IDF的主要思想是

:如果一个词在一篇文章中出现的频率TF较高,在其他文章中很少出现,则认为这个词或短语分类能力较好,适合分类。

  

(1)TF是词频(Term Frequency)

词频(TF)

表示词条(关键字)在文本中出现的频率

  这个数字通常是归一化的(通常是词频除以文章总字数),防止偏向长文件。

  

公式:

即:

  其中

ni,j

为该词在文档

dj

中出现的次数,分母为所有词在文档dj中出现的次数之和;

  

(2) IDF是逆向文件频率(Inverse Document Frequency)

逆向文件频率 (IDF)

:特定单词的IDF可以是

总文件数目除以包含该词语的文件的数目

再将得到的商取对数得到

  如果包含术语T的文档数量越少,IDF越大,这意味着该术语具有良好的分类能力。

  

公式:

  其中

D

是语料库中的文件总数

{j:tidj}表示包含词语ti的文件数目

(即ni,j0的文件数)。如果该词不在语料库中,分母将为零,因此

一般情况下使用1+{j:tidj}

  

即:

  

(3)TF-IDF实际上是:TF * IDF

特定文件中的高频词和整个文件集中的低频词可以产生高权重的TF-IDF。所以TF-IDF倾向于过滤掉常用词,保留重要词。

  

公式:

  

  

注:

TF-IDF算法非常容易理解和实现,但其结构简单,没有考虑到词的语义信息,因此无法处理一词多义和多义现象。

  

2、TF-IDF应用

(1)搜索引擎;(2)关键词提取;(3)文本相似性;(4)文本摘要

  

3、Python3实现TF-IDF算法

注意:该代码tf计算使用的是整个语料,这里只是举个简单的例子,大家在写的时候按文档计算词频即可!我这里就不做修改了

  # -*-编码:utf-8-*-从集合导入默认值字典导入马蒂姆波特运算符函数说明:创建数据样本返回:数据集-实验样本切分的词条类别c -类别标签向量 def loadDataSet():数据集=[ [我的,狗,有,跳蚤,问题,救命,请],#切分的词条[也许,不是,拿,他,到,狗,朴],[我,达尔马辛,是,所以,可爱,我,爱,他],[停,贴,笨,没出息,垃圾],[先生,舔,吃了,我,牛排,如何,到,停,他],[戒,买,没出息,狗,食物,笨] ] classVec=[0,1,0,0,1]类别标签向量,1代表好,0代表不好返回数据集, classVec 函数说明:特征选择词频反算法参数:list_words:词列表返回:字典_特征_选择:特征选择词字典 def feature _ select(list _ words):#总词频统计doc _ frequency=list _ words中word _ list的default dict(int):for I in word _ list:doc _ frequency[I]=1 #计算每个词的法国南部(法国南部领地的缩写)值word_tf={} #存储没个词的法国南部(法国南部领地的缩写)值对于doc _ frequency中的I:word _ TF[I]=doc _ frequency[I]/sum(doc _ frequency。values())#计算每个词的综合资料的文件(集成数据文件)值doc _ num=len(list _ words)word _ IDF={ } #存储每个词的综合资料的文件(集成数据文件)值word_doc=defaultdict(int) #存储包含该词的文档数for I in doc _ frequency:for j in list _ words:if I in j:word _ doc[I]=1 for I in doc _ frequency:word _ IDF[I]=math。log(文档编号/(单词文档[I]1))#计算每个词的TF*IDF的值word _ TF _ IDF={ } for I in doc _ frequency:word _ TF _ IDF[I]=word _ TF[I]* word _ IDF[I]#对字典按值由大到小排序dict _ feature _ select=sorted(word _ TF _ IDF。items(),key=operator.itemgetter(1),reverse=True)return dict _ feature _ selectif _ _ name _ _= _ _ main _ _ :data _ list,label_list=loadDataSet() #加载数据特征=特征选择(数据列表)#所有词的词频反值打印(功能)打印(镜头(功能))

运行结果:

  

4、NLTK实现TF-IDF算法

来自nltk.text导入来自nltk的文本集合。令牌大小导入word_tokenize#首先,构建语料库corpussents=[这是第一句,这是第二句,这是第三句]sents=[word _ token ize(sent)for sents in sents]#对每个句子进行分词打印(发送)#输出分词后的结果corpus=TextCollection(sents) #构建语料库打印(文集)#输出语料库#计算语料库中一个的法国南部(法国南部领地的缩写)值tf=corpus.tf(one ,corpus) # 1/12print(tf)#计算语料库中一个的综合资料的文件(集成数据文件)值IDF=语料库。IDF(一)#日志(3/1)打印(IDF)#计算语料库中一个的文档频率值tf_idf=corpus.tf_idf(one ,corpus)print(tf_idf)

运行结果:

  

5、Sklearn实现TF-IDF算法

从sk学习。特征提取。sk learn的文本导入计数矢量器。特征提取。text import tfidfttransformer x _ train=[ TF-IDF主要思想是,算法一个重要特点可以脱离语料库背景, 如果一个网页被很多其他网页链接说明网页重要]x_test=[原始文本进行标记,主要思想]#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j]表示j词在我类文本下的词频矢量器=计数矢量器(最大功能=10)#该类会统计每个词语的文档频率权值TF _ IDF _ transformer=tfidfttransformer()#将文本转为词频矩阵并计算TF-idftf _ IDF=TF _ IDF _ transformer。fit _ transform(矢量器。拟合_变换(x _训练))#将文档频率矩阵抽取出来,元素a[i][j]表示j词在我类文本中的文档频率权重x _ train _ weight=TF _ IDFto array()#对测试集进行文档频率权重计算TF _ IDF=TF _ IDF _ transformer转换(矢量器。transform(x _ test))x _ test _ weight=TF _ IDF。to array()#测试集词频反权重矩阵打印(输出x _火车文本向量:)打印(x _火车_重量)打印(输出x _测试文本向量:)打印(x _测试_重量)

运行结果:

  

6、Jieba实现TF-IDF算法

进口洁霸。analysetext=关键字是可以表达文档中心内容的词。它们常用于计算机系统中索引论文的内容特征、信息检索和系统收集,供读者查阅。关键词抽取是文本挖掘领域的一个分支,是文本检索、文档比较、摘要生成、文档分类和聚类等文本挖掘研究的基础工作 keywords=jieba . analyze . extract _ tags(text,topk=5,with weight=false,allow pos=())print(keywords)

运行结果:

  

注:

  

jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())

句子是要提取的文本。topK是TF/IDF权重最大的关键词。默认值为20withWeight。默认值为FalseallowPOS仅包含具有指定词性的单词。默认值为空。也就是说,没有筛选7。TF-IDF算法的缺点TF-IDF使用文本IDF的倒频作为关键词,但是IDF的结构简单,不能有效反映词的重要性和特征词的分布,因此不能很好地调整权重。因此,TF-IDF算法的准确率不是很高,尤其是在文本集已经分类的情况下。

  IDF本质上是一种试图压制噪音的加权,简单的认为文本频率低的词更重要,文本频率高的词更没用。这对于大多数短信来说并不完全正确。IDF的简单结构不能使提取的关键词有效地反映词的重要性和特征词的分布,从而不能很好地调整权重。特别是在相似的语料库中,这种方法有很大的弊端,相似文本的一些关键词往往会被覆盖。

  

TF-IDF算法实现简单快速,但是仍有许多不足之处:

  (1)没有考虑通过特征词的位置来区分文本。当条目出现在文档中的不同位置时,它们对区分的贡献是不同的。

  (2)根据传统的TF-IDF,一些生僻字往往具有较高的IDF(反文档频率),因此这些生僻字往往被误认为文档关键词。

  (3)传统TF-IDF的IDF部分只考虑了特征词与其出现的文本数量之间的关系,而忽略了特征项在一个类别中不同类别之间的分布。

  (4)文档中出现频率较低的重要名称和地名的提取效果不好。

  8.TF-IDF算法3354 TF-IWF算法的改进。详细的改进方法参见论文:

改进的 TF-IDF 关键词提取方法

  

交流学习资料共享欢迎入QQ群:955817470

tfidf算法,TF-IDF模型