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

news/2024/7/18 22:45:51

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(, {'的': 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算法解释 tf–idf, 是term frequency–inverse document frequency的缩写,它通常用来衡量一个词对在一个语料库中对它所在的文档有多重要,常用在信息 ...

tf–idf算法解释及其python代码

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

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 ...

随机推荐

图片Base64编码

我们经常在做Jquery插件的时候需要插入一些自定义的控件,比如说按钮,而我们自己又觉着button标签很丑,而且不同浏览器显示的效果还不一样,这个时候我们需要用到图片,当然,我们可以通过img标签添 ...

ubuntu下快速制作linux 系统安装盘

1. 安装unetbootin sudo apt-get install unetbooin 2. 超级系统管理员启动,选择镜像文件并安装 先插入空白USB,然后打开终端输入命令 su - 输入密码, ...

sql 作业+游标 自动备份数据库

前言 昨天有个同事在客户的服务器上面弄数据库,不小心执行了一条 sql 语句 TRUNCATE TABLE xxx 碉堡了吧,数据全没了  - - ,然后就是在网上拼命的搜索关于数据恢复的软件,搞了一 ...

java中文乱码解决之道(三)—–编码详情:伟大的创想—Unicode编码

原文出处:http://cmsblogs.com/?p=1458 随着计算机的发展.普及,世界各国为了适应本国的语言和字符都会自己设计一套自己的编码风格,正是由于这种乱,导致存在很多种编码方式,以至于 ...

今天遇到了一个Spring出现的一个未知错误,分享下

异常内容: 未知错误[COM999] 使用环境:dubbo+SpringMVC+myBatis 解决方案:检查Spring配置文件,发现配置文件在注入Service的时候写错了 com.wu.wsf. ...

JAVA面向对象-----final关键字

JAVA面向对象-–final关键字 1:定义静态方法求圆的面积 2:定义静态方法求圆的周长 3:发现方法中有重复的代码,就是PI,圆周率. 1:如果需要提高计算精度,就需要修改每个方法中圆周率. 4 ...

判断decimal 是否为整数

用了半个小时搞懂了这个问题,基础愁死我了! private static boolean isIntegerValue(BigDecimal decimalVal) { return decimalV ...

java编程高级进阶

Java内存模型 对hadoop namenode -format执行过程的探究 intellij idea 高级用法之:集成JIRA.UML类图插件.集成SSH.集成FTP.Database管理 强 ...

python的打开_记录

1. 2.7版本,安装了2.7,可以在命令符里面输入cmd,然后输入python,进入python的工作环境. 2. 3.6版本 ,anaconda版本,在F:\qhpython里边找到python. ...


http://www.niftyadmin.cn/n/712378.html

相关文章

此异常最初是在此调用堆栈中引发的:_全局监听路由堆栈变化

老孟导读:很多时候我们需要监听路由堆栈的变化,这样可以自定义路由堆栈、方便分析异常日志等。 监听路由堆栈的变化使用 RouteObserver ,首先在 MaterialApp 组件中添加 navigatorObservers: void main() {runApp(MyApp()); }Rout…

web前端学习(八)——HTML5中表格、边框的相关标签设置

1.HTML中表格边框的相关标签 ①表格由 <table> 标签来定义。 ②每个表格均有若干行&#xff08;由 <tr> 标签定义&#xff09;&#xff0c;每行被分割为若干单元格&#xff08;由 <td> 标签定义&#xff09;。字母 td 指表格数据&#xff08;table data&…

C笔记

2019独角兽企业重金招聘Python工程师标准>>> Head first C cppcourse c part K&R C Bible##Head first C P6:如果想检查program的exit status, windows使用echo %ErrorLevel%, Linux使用echo $? (钱的问题) P9:顺序执行两条命令 gcc zork.c -o zork &&…

java私有_java关键字private(私有)

private关键字&#xff1a;是一个权限修饰符&#xff1b;用于修饰成员(成员变量和成啊元函数)&#xff1b;被私有化的成员只能在本类中有效&#xff1b;常用之一&#xff1a;将成员变量私有化&#xff0c;对外提供对应的set&#xff0c;get方法对其进行访问。提高对数据访问的安…

移动安全:BYOD时代的系统升级管理

所有智能手机用户都非常熟悉系统升级过程&#xff1a;每隔一段时间&#xff0c;你的设备都会收到升级推送&#xff0c;改变用户界面或者更改控制方法。 很多人不知道的是&#xff0c;用户界面外观的变化通常也包含那些会清理安全漏洞的补丁。 在消费电子世界中&#xff0c;这并…

SpringMVC interceptor拦截器

这是和登录有关的拦截器 创建拦截器的实现类 重写它的3个方法 Component public class TestInterceptor implements HandlerInterceptor {第一个方法: 请求在进入Handler之前, 该方法会被调用. 如果返回true, 则表示该请求会继续往下执行, 也就是才会执行到Handler 如果返回fal…

常见shell操作

一、find命令详细 find命令 -- 之查找指定时间内修改过的文件 比如我们要查找linux下指定时间内做过改动的文件&#xff0c;我们可以用find命令&#xff0c;其实find命令的功能十分强大&#xff0c;下面我们通过几个简单的例子来学习下find命令的简单用法&#xff1a; find /op…

python struct 用法_Python标准库笔记struct模块的使用

最近在学习python网络编程这一块&#xff0c;在写简单的socket通信代码时&#xff0c;遇到了struct这个模块的使用&#xff0c;当时不太清楚这到底有和作用&#xff0c;后来查阅了相关资料大概了解了&#xff0c;在这里做一下简单的总结。了解c语言的人&#xff0c;一定会知道s…