tf–idf算法解释及其python代码
tf–idf算法python代码实现
这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四句话,每句表示一个文档
copus=['我正在学习计算机','它正在吃饭','我的书还在你那儿','今天不上班']
由于中文需要分词,jieba分词是python里面比较好用的分词工具,所以选用jieba分词,文末是jieba的链接。首先对文档进行分词:
import jieba
copus=['我正在学习计算机','它正在吃饭','我的书还在你那儿','今天不上班']
copus= [[word for word in jieba.cut(doc)] for doc in copus]
print(copus)
输出结果:
[['我', '正在', '学习', '计算机'], ['它', '正在', '吃饭'], ['我', '的', '书', '还', '在', '你', '那儿'], ['今天', '不', '上班']]
文档变成我们想要的格式了,然后开始词频统计,计算tf值,这里用Counter类来把每篇文档都转换成词和词频的字典,其实就已经得到tf值了
tf = []
for doc in copus:
tf.append(Counter(doc))
print(tf)
输出结果:
[Counter({'我': 1, '正在': 1, '学习': 1, '计算机': 1}), Counter({'它': 1, '正在': 1, '吃饭': 1}), Counter({'的': 1, '书': 1, '你': 1, '在': 1, '那儿': 1, '我': 1, '还': 1}), Counter({'今天': 1, '不': 1, '上班': 1})]
计算idf值
import math
from collections import defaultdict
idf = defaultdict(int)
for doc in tf:
for word in doc:
idf[word] += 1
for word in idf:
idf[word] = math.log(len(idf)/(idf[word]+1))
print(idf)
输出结果:
defaultdict(<class 'int'>, {'的': 2.0149030205422647, '正在': 1.6094379124341003, '学习': 2.0149030205422647, '计算机': 2.0149030205422647, '今天': 2.0149030205422647, '书': 2.0149030205422647, '那儿': 2.0149030205422647, '它': 2.0149030205422647, '不': 2.0149030205422647, '在': 2.0149030205422647, '吃饭': 2.0149030205422647, '我': 1.6094379124341003, '你': 2.0149030205422647, '还': 2.0149030205422647, '上班': 2.0149030205422647})
剩下的事情就很简单了,只需要把tf和idf相乘就可以了。
下面是一个tfidf的实现代码
from collections import Counter,defaultdict
import jieba
import math def file2list(file):
'''
把文件转换成列表,并对数据进行简单的预处理
'''
with open(file) as f:
corpus = f.readlines()
corpus = [[word.replace('\n','') for word in jieba.cut(line)] for line in corpus if line.strip()]
return corpus
#c = file2list('E:\hei.txt')
def get_tf(corpus):
return [Counter(doc) for doc in corpus]#用Counter函数把每篇文档转换成词和词频的字典
def get_idf(tf_dict):
idf = defaultdict(int)
for doc in tf_dict:
for word in doc:
idf[word] += 1
for word in idf:
idf[word] = math.log(len(idf)/(idf[word]+1))#idf的公式
return idf def get_tfidf(doc_id,file):
'''doc_id是语料库中文档的id,file是txt的路径'''
corpus = file2list(file)
tf = get_tf(corpus)
idf = get_idf(tf)
if doc_id > len(tf):
print("doc_id should smaller than %i"%len(tf))
else:
id_tf= tf[doc_id-1]
for word in id_tf:
id_tf[word] = id_tf[word]*idf[word]#计算tfidf值
print(id_tf)
tf–idf算法解释及其python代码的更多相关文章
- tf–idf算法解释及其python代码实现(上)
tf–idf算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...
- tf–idf算法解释及其python代码实现(下)
tf–idf算法python代码实现 这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四 ...
- Elasticsearch由浅入深(十)搜索引擎:相关度评分 TF&IDF算法、doc value正排索引、解密query、fetch phrase原理、Bouncing Results问题、基于scoll技术滚动搜索大量数据
相关度评分 TF&IDF算法 Elasticsearch的相关度评分(relevance score)算法采用的是term frequency/inverse document frequen ...
- 55.TF/IDF算法
主要知识点: TF/IDF算法介绍 查看es计算_source的过程及各词条的分数 查看一个document是如何被匹配到的 一.算法介绍 relevance score算法,简单来说 ...
- 神经网络BP算法C和python代码
上面只显示代码. 详BP原理和神经网络的相关知识,请参阅:神经网络和反向传播算法推导 首先是前向传播的计算: 输入: 首先为正整数 n.m.p.t,分别代表特征个数.训练样本个数.隐藏层神经元个数.输 ...
- 光照问题之常见算法比较(附Python代码)
一.灰度世界算法 ① 算法原理 灰度世界算法以灰度世界假设为基础,该假设认为:对于一幅有着大量色彩变化的图像,R,G,B三个分量的平均值趋于同一灰度值Gray.从物理意义上讲,灰色世界法假设自然界景物 ...
- KNN算法原理(python代码实现)
kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...
- 25.TF&IDF算法以及向量空间模型算法
主要知识点: boolean model IF/IDF vector space model 一.boolean model 在es做各种搜索进行打分排序时,会先用boolean mo ...
- kNN算法基本原理与Python代码实践
kNN是一种常见的监督学习方法.工作机制简单:给定测试样本,基于某种距离度量找出训练集中与其最靠近的k各训练样本,然后基于这k个“邻居”的信息来进行预测,通常,在分类任务中可使用“投票法”,即选择这k ...
随机推荐
- Web协议详解与抓包实战:HTTP1协议-如何用Chrome的Network面板分析HTTP报文(1)
一.Chrome 抓包:Network 面板 1. Network 面板 • 控制器:控制面板的外观与功能 • 过滤器:过滤请求列表中显示的资源 • 按住 Command (Mac)或 Ctrl (W ...
- twig输出转义
twig输出转义--需求:传一个变量到 twig 中,需要插入几个空格,类似于下面这样:sprintf("%s%s -- %s", str_repeat(' ', $path_le ...
- Java 并发编程-不懂原理多吃亏(送书福利)
作者 | 加多 关注阿里巴巴云原生公众号,后台回复关键字"并发",即可参与送书抽奖!** 导读:并发编程与 Java 中其他知识点相比较而言学习门槛较高,从而导致很多人望而却步.但 ...
- (六)golang--变量
什么是变量? 变量相当于内存空间中一个数据存储空间的表示,可以理解为一个门的房牌号:该区域有自己的名称(变量名)和类型(数据类型) 变量的使用步骤:申明--赋值--使用 package main im ...
- C++:= delete
= delete delete的由来 如之前提到的,在没有声明默认特殊成员函数的时候,编译器会自动帮我们补充,但有时候我们并不希望存在这些函数,比如:我们不希望某个类通过拷贝的方式实例化一个新的对象. ...
- luogu p2705 小球
题目部分 题目描述 有 R 个红色盒子和 B 个蓝色盒子,还有 R 个红色小球和 B 个蓝色小球.每个盒子只能装一个小球,每个小球都要放在一个盒子里. 如果把一个红色小球放在一个红色盒子里,那么得分是 ...
- Feign切换client到okhttp无法生效天坑!(附带发生的原因)
提示:如果只看如何解决问题,请看文章的末尾如何解决这个问题 1. 场景描述 最近项目中使用了feign当做http请求工具来使用.相对于httpclient.resttemplate来说,fegin用 ...
- Fuck SELinux :rsyslog无法生成log文件,原来是selinux机制搞的鬼!
Fuck SELinux 一万年! 关闭即可.
- .net Core 学习笔记(增加Nlog日志)
https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2 (日志下载) https://github.com ...
- WPF 精修篇 动态资源
原文:WPF 精修篇 动态资源 动态资源 使用 DynamicResource 关键字 静态 就是 StaticResource 原则上是 能用静态就用静态 动态会让前台界面压力很大~ 动态资源引用 ...