提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

TF-IDF 算法

  • 前言
  • 一、TF-IDF 是什么?
    • 含义理解:
  • 二、算法步骤
    • 1.统计每一篇文档中词的出现次数
    • 2.计算词频(TF)
    • 3.计算逆文档频率(IDF)
    • 4.计算TF-IDF
  • 总结

前言

提示:这里可以添加本文要记录的大概内容:

TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术。TF是词频(Term Frequency),IDF是逆文本频率指数(Inverse Document Frequency)。


提示:以下是本篇文章正文内容,下面案例可供参考

一、TF-IDF 是什么?

TF-IDF 全称为 term frequency–inverse document frequency
算法分为两部分: 词频(TF) 和 逆文档频率(IDF)

1词频(TF) = 某个词在文章中的出现次数 / 文章总词数
2逆文档频率(IDF) = log( 文章总数 / (包含该词的文章数+1))

分成两部分理解的话就是,一个词的词频越高说明它越重要,逆文档频率越高说明它越普遍,越普遍则代表性越差。所以,词频与最终的权重呈正比,逆文档频率与最终的权重呈反比。

在使用 TF-IDF 算法之前,需要先对文本进行预处理,如分词、去除停用词。在运算之前,需要先统计每篇文章中的每个词语出现的次数。

含义理解:

就将下面三张图,用代码表示出来


二、算法步骤

1.统计每一篇文档中词的出现次数

docList 是一个列表,包含整份数据(包含多篇文章)的信息;其中,列表的元素是字典类型,即列表包含多个字典元素,其中字典的结构为 词语:出现次数 ,所以,每个列表储存着一篇文章中词语出现次数的信息

def countWord(doc):2    '''3    依次对所有文章进行统计,统计每篇文章中每个词的出现次数4    doc: list  列表中一个元素为一篇文章的文本数据,str类型,空格间隔,含换行符5    '''6    docList = []7    for item in doc:8        wordDic = {}9        wordList = item.strip().split()  #将字符串转换成列表,一个元素一个词
10        for word in wordList:
11            wordDic[word] = wordDic.setdefault(word, 0)+1
12        docList.append(wordDic)
13    return docList

2.计算词频(TF)

词频(TF) = 某个词在文章中的出现次数 / 文章总词数

1例如:
2文章一:‘图书’: 34, ‘评论’: 12, ‘重视’: 2
3文章二:‘评论’: 7, ‘活动’: 4, ‘出版’: 5
4文章三:‘导致’: 2, ‘图书’: 12, ‘评论’: 9
5
6则 词频(TF) 为:
7文章一:‘图书’: 34/(34+12+2), ‘评论’: 12/(34+12+2), ‘重视’: 2/(34+12+2)
8文章二:‘评论’: 7/(7+4+5), ‘活动’: 4/(7+4+5), ‘出版’: 5/(7+4+5)
9文章三:‘导致’: 2/(2+12+9), ‘图书’: 12/(2+12+9), ‘评论’: 9/(2+12+9)

 1def computeTF(wordDic):2    '''3    计算一篇文章中每个词的词频4    wordDic: dict 为 docList 的元素5    '''6    #计算 total7    total = sum(wordDic.values())8    #计算词频9    tfDic = {}
10    for word, value in wordDic.items():
11        tfDic[word] = value / total
12
13    return tfDic
14 TF = [] #所有文章的词频
15 for wordDic in docList:TF.append(computeTF(wordDic))

3.计算逆文档频率(IDF)

计算逆文档频率(IDF)

例如:
2文章一:‘图书’: 34, ‘评论’: 12, ‘重视’: 2
3文章二:‘评论’: 7, ‘活动’: 4, ‘出版’: 5
4文章三:‘导致’: 2, ‘图书’: 12, ‘评论’: 9
5
6则 逆文档频率(IDF) 为:
7’图书’: log(3/(2+1)), ‘评论’: log(3/(3+1)), ‘重视’: log(3/(1+1)), ‘活动’: log(3/(1+1)), ‘出版’: log(3/(1+1)), ‘导致’: log(3/(1+1))
8
9针对 ‘评论’: log(3/(3+1)) 这个数据:
10分子 3 是一共有三篇文章;分母 3 是其中有三篇文章包含了词语 ‘评论’;分母 1 是防止分母为 0 的一种做法,如果能保证分母不为 0,此处不加一也无妨。

def computeIDF(docList):2    '''3    计算每个词的逆文档频率4    docList: list5    '''6    #计算 total7    total = len(docList)8    #计算逆文档频率9    idfDic = {}
10    for wordDic in docList:
11        for word, value in wordDic.items():
12            if value > 0:
13                idfDic[word] = idfDic.setdefault(word, 0)+1
14    for word, value in idfDic.items():
15        idfDic[word] = math.log(total/value+1)  #要先引入 math 库
16
17    return idfDic

4.计算TF-IDF

TF-IDF = 词频(TF) * 逆文档频率(IDF)

对于每篇文章,将文章中的每个词对应的词频和逆文档频率相乘,结果就是 TF-IDF 的值

TF_IDF = []
for i in TF:s = []for j in i.keys():if j in IDF.keys():s.append({j:i[j]*IDF[j]})TF_IDF.append(s)
TF_IDF

总结

相关参考链接:
TF-IDF算法介绍及实现
TF-IDF算法详解
百度百科——tf-idf

使用 TF-IDF 算法将文本向量化相关推荐

  1. 关键词提取算法—TF/IDF算法

    关键词提取算法一般可分为有监督学习和无监督学习两类. 有监督的关键词提取方法可以通过分类的方式进行,通过构建一个较为完善的词表,然后判断每个文档与词表中的每个词的匹配程度,以类似打标签的方式,达到关键 ...

  2. 随笔_从《芳华》影评到TF/IDF算法

     前两天看好多<芳华>的影评说:为什么好人没好报?于是感叹一堆世态炎凉,人性丑陋什么的.我觉得这问题是:为什么中央空调(对谁都温暖)往往不被看好.  先说说TF/IDF算法,这是一种信息处 ...

  3. 搜索引擎:文本分类——TF/IDF算法

    原理 TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类.TFIDF实际上是:TF * IDF,TF ...

  4. sklearn tfidf求余弦相似度_【基础算法 】文本相似度计算

    在自然语言处理中,文本相似度是一种老生常谈而又应用广泛的基础算法模块,可用于地址标准化中计算与标准地址库中最相似的地址,也可用于问答系统中计算与用户输入问题最相近的问题及其答案,还可用于搜索中计算与输 ...

  5. 【基础算法 】文本相似度计算

    在自然语言处理中,文本相似度是一种老生常谈而又应用广泛的基础算法模块,可用于地址标准化中计算与标准地址库中最相似的地址,也可用于问答系统中计算与用户输入问题最相近的问题及其答案,还可用于搜索中计算与输 ...

  6. tfidf算法 python_tf–idf算法解释及其python代码实现(下)

    tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...

  7. 文本特征抽取的向量空间模型(VSM)和TF/IDF方法

    文本特征抽取 两组小说,一组是爱情的,另一组是科幻的.我们能否用支持向量机训练一个模型,用来识别小说类型呢? 这个并不容易.因为支持向量机这类机器学习算法只能接受数学里面的向量作为输入.如果用它来做文 ...

  8. nlp算法文本向量化_NLP中的标记化算法概述

    nlp算法文本向量化 This article is an overview of tokenization algorithms, ranging from word level, characte ...

  9. 使用lingpipe自然语言处理包进行文本分类/** * 使用 lingpipe的tf/idf分类器训练语料 * * @author laigood */ public class trai

    /**  * 使用 lingpipe的tf/idf分类器训练语料  *   * @author laigood  */ public class traintclassifier { //训练语料文件 ...

  10. 【Python自然语言处理】文本向量化的六种常见模型讲解(独热编码、词袋模型、词频-逆文档频率模型、N元模型、单词-向量模型、文档-向量模型)

    觉得有帮助请点赞关注收藏~~~ 一.文本向量化 文本向量化:将文本信息表示成能够表达文本语义的向量,是用数值向量来表示文本的语义. 词嵌入(Word Embedding):一种将文本中的词转换成数字向 ...

最新文章

  1. Android测试原理(二)
  2. 死机一个月后,31岁的哈勃望远镜又复活了
  3. 如何记忆英语的成语、俗语等
  4. [蓝桥杯][2018年第九届真题]约瑟夫环
  5. vue-cli 脚手架开发环境搭建
  6. 计算机二级学科代码,二级学科分和代码表.doc
  7. 计算机中xp系统中qq文件,从做完xp系统怎样恢复qq文?
  8. 听见丨三星Bixby中文(普通话)版正式发布 云端服务商Scalyr获2000万美元A轮融资
  9. 国内厉害的中式风格设计师有哪些人
  10. 万网域名如何设置显性url转发和隐性URL转发
  11. 163.net邮箱,让海外邮件收发畅通无阻
  12. 人为什么活着__稻盛和夫的哲学
  13. 开发外贸客户邮箱,怎么精准开发外贸客户邮箱?
  14. oracle ebs版本查看,Oracle EBS R12 - 如何取得EBS某个文件的版本号
  15. 软件开发向大数据开发过渡_如何将职业过渡到Web开发
  16. eNSP华为模拟器使用——(1)虚拟环境配置
  17. Word字号与磅值之间的关系
  18. 一阶电路实验报告心得_《大学电路实验报告.doc
  19. 木色世界android版本,木筏世界迷你版
  20. 天府学院计算机,西南财经大学天府学院2020计算机类千万计划资助说明(本科)...

热门文章

  1. 【Oracle】批量造测试数据
  2. 继音频转换历程总结成综合
  3. python教程,python小甲鱼
  4. 读书笔记 | 财务会计理论(第7版 William R.Scott)(上)
  5. android 坡度计算器,坡度角度换算(角度和坡比对照表)
  6. 计算机编程入门先学什么最好?
  7. 实现自己选取歌曲制作手机铃声
  8. 如何在Mac上查找重复文件?
  9. php codeigniter insert,codeigniter批量插入数据(示例)
  10. 019-zabbix数据库表详解