TF-IDF 原理与实现

目录

1.原理

2.伪代码

3.实现

1.原理

\[TF-IDF = tf_{t,d} \times idf_{t}\\
tf_{t,d} = \frac{术语t在文档d中出现的次数}{文档d的总术语数}\\
idf_{t} = \log(\frac{文档d总数}{包含术语t的文档数})
\]

2. 伪代码

3.实现

同级目录下需要有 documents 文件夹,在该文件夹下存放文档集。

# !/usr/bin/python
# -*- coding: utf-8 -*- import os
import math def set_doc():
docs = dict()
for d in os.listdir(os.getcwd() + os.sep + "documents"):
docs[d] = list()
with open(os.getcwd() + os.sep + "documents" + os.sep + d, encoding="ANSI") as f:
for line in f:
for word in line.strip().split(" "):
docs[d].append(word)
return docs def tf(docs, keyword):
tfs = dict()
for doc in docs:
for word in docs[doc]:
if keyword in word:
try:
tfs[doc] = tfs[doc] + 1
except KeyError:
tfs[doc] = 1
try:
tfs[doc] = tfs[doc] / len(docs[doc])
except KeyError:
tfs[doc] = int(0)
return tfs def idf(docs, keyword):
doc_with_keyword = set()
for doc in docs:
for word in docs[doc]:
if keyword in word:
doc_with_keyword.add(doc)
return math.log(len(docs) / len(doc_with_keyword)) def tf_idf(tfs, term_idf):
term_tf_idf = dict()
for doc in tfs:
term_tf_idf[doc] = tfs[doc] * term_idf
return term_tf_idf if __name__ == "__main__":
keyword = "people"
docs = set_doc()
tfs = tf(docs, keyword)
term_idf = idf(docs, keyword)
term_tf_idf = tf_idf(tfs, term_idf)
term_tf_idf = sorted(term_tf_idf.items(), key=lambda d:d[1], reverse=True)
print(term_tf_idf)

References

[1] 数学之美, 吴军, 人民邮电出版社

[2] 信息检索导论, Christopher D. Manning, 人民邮电出版社

TF-IDF原理与实现的更多相关文章

  1. Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据

    相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...

  2. 基于TF/IDF的聚类算法原理

        一.TF/IDF描述单个term与特定document的相关性TF(Term Frequency): 表示一个term与某个document的相关性. 公式为这个term在document中出 ...

  3. 信息检索中的TF/IDF概念与算法的解释

    https://blog.csdn.net/class_brick/article/details/79135909 概念 TF-IDF(term frequency–inverse document ...

  4. tf idf公式及sklearn中TfidfVectorizer

    在文本挖掘预处理之向量化与Hash Trick中我们讲到在文本挖掘的预处理中,向量化之后一般都伴随着TF-IDF的处理,那么什么是TF-IDF,为什么一般我们要加这一步预处理呢?这里就对TF-IDF的 ...

  5. TF/IDF(term frequency/inverse document frequency)

    TF/IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明. 一. TF/IDF描述单个term与特定document的相 ...

  6. 使用solr的函数查询,并获取tf*idf值

    1. 使用函数df(field,keyword) 和idf(field,keyword). http://118.85.207.11:11100/solr/mobile/select?q={!func ...

  7. TF/IDF计算方法

    FROM:http://blog.csdn.net/pennyliang/article/details/1231028 我们已经谈过了如何自动下载网页.如何建立索引.如何衡量网页的质量(Page R ...

  8. tf–idf算法解释及其python代码实现(下)

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

  9. tf–idf算法解释及其python代码实现(上)

    tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...

  10. 文本分类学习(三) 特征权重(TF/IDF)和特征提取

    上一篇中,主要说的就是词袋模型.回顾一下,在进行文本分类之前,我们需要把待分类文本先用词袋模型进行文本表示.首先是将训练集中的所有单词经过去停用词之后组合成一个词袋,或者叫做字典,实际上一个维度很大的 ...

随机推荐

  1. C++编译变更stlport到使用g++的stl经验总结

    . 花了几天时间,需要把经验给记下来. 1. 需要支持C++11的编译器,最方便的方式就是 yum -y install devtoolset-6 在/usr/local/bin中增加gcc6.sh ...

  2. Cocos2d-JS studio基础控件的使用

    在studio里把几个基础控件往场景文件一拖,然后导出json格式的资源文件 逻辑代码如下: 1 var HelloWorldLayer = cc.Layer.extend({ 2 sprite:nu ...

  3. Django Form(表单)

    前台用 get 或 post 方法向后台提交一些数据. GET方法: html示例(保存在templates文件夹中): <!DOCTYPE html> <html> < ...

  4. 46.HTML---18个学习 flexbox 的优质资源

    大家都在谈论的“flexbox”是什么呢?它能帮我们解决什么问题呢?现在你可以在你的项目中使用“flexbox”吗?这些指南.教程.网站和工具会告诉你你需要知道的关于“flexbox”的知识. Lea ...

  5. MFC AfxMessageBox MessageBox MessageBoxA 默认标题修改

    在工程的资源里添加String Table资源,AFX_IDS_APP_TITLE,然后设置其值即可,AFX_IDS_APP_TITLE的值就是AfxMessageBox.MessageBox.Mes ...

  6. LeetCode168.Excel表列名称

    给定一个正整数,返回它在 Excel 表中相对应的列名称. 例如, 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> ...

  7. lua元表学习

    a = {, } b= {, } vector2 = {} function vector2.Add(v1, v2) if(v1 == nil or v2 == nil)then return nil ...

  8. sitecore系列教程之Sitecore个性化-配置文件,模式和角色

    这是利用Sitecore规则引擎实现数字化转换的三部分系列的第二部分.阅读上一篇文章,通过为您的个性化体验定义内容策略来设置基础.   Sitecore有一个非常强大的规则引擎,可以帮助推动个性化的用 ...

  9. Python - 1. Built-in Atomic Data Types

    From:http://interactivepython.org/courselib/static/pythonds/Introduction/GettingStartedwithData.html ...

  10. 查看完整的 Unicode 字符集

    https://unicode-table.com/cn/ 这个链接是我想要查的 格式如下图 先放这里收藏,我也不知道怎么搜索