tfidf算法 python_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(, {'的': 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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

powerbuilder提示不是下拉窗口_为什么过去状态管理不是问题?

2-tier 架构远古时期,状态是完全由数据库管理的。数据库提供的连接是有状态的,打开页面的时候开连接,页面上的改动直接提交到当前的数据库连接。数据库连接的状态就是页面状态。3-tier 架构后来因为互联网类型的应用的发展,数据库…

mysql 查询前10门课程_数据库面试题:如何查找每门课程的前3名?

看到别人的面经里有类似这样一个问题,我自己试了下,感觉做不出来。DROP TABLE IF EXISTS SC;CREATE TABLE SC (SId varchar(10) DEFAULT NULL,CId varchar(10) DEFAULT NULL,score decimal(18,1) DEFAULT NULL);INSERT INTO SC VALUES (01, 01, 80.0);IN…

Java编程程序异常处理方法

对于java异常处理你是否都掌握了呢,如果是,你是否能在下面这段代码中,迅速找出异常处理的六个问题吗? 1、OutputStreamWriter out …   2、java.sql.Connection conn …   3、try { // ⑸   4、 Statement stat conn.…

[html] img中的src加载失败时如何用默认图片来替换呢?

[html] img中的src加载失败时如何用默认图片来替换呢? img有onerror属性,加载失败时触发error事件 但是这种解决方法在error里面替换的默认图片也加载失败的时候会导致问题,需要注意个人简介 我是歌谣,欢迎和大家一起交流前后端…

学完php在学python_写给PHP程序员的 Python学习指南(建议去看原文)

原文:https://segmentfault.com/a/1190000019710720一、背景人工智能这几年一直都比较火,笔者一直想去学习一番;因为一直是从事PHP开发工作,对于Python接触并不算多,总是在关键时候面临着 基础不牢,地动山摇…

mysql 实例复制_MYSQL教程MySQL 复制详解及简单实例

《MysqL教程MysqL 复制详解及简单实例》要点:本文介绍了MysqL教程MysqL 复制详解及简单实例,希望对您有用。如果有疑问,可以联系我们。MysqL 复制详解及简单实例主从复制技术在MysqL中被广泛使用,主要用于同步一台服务器上的数据至多台从服务…

[html] 解释下什么是CDATA?

[html] 解释下什么是CDATA? CDATA 指的是不由 XML 解析器进行解析的文本数据。XML 文档中的所有文本均会被解析器解析。只有 CDATA 区段中的文本会被解析器忽略。个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很…

kali字典_kali黑客系统wpscan工具扫描wordpress漏洞入侵攻击测试教程

WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞,并…

局部遮罩 shade(二)

其实它和全局遮罩是一样的思想&#xff0c;只不过就要用position了 <script type"text/javascript">function shade(){var p document.getElementById("shade");p.className "d";p.style.display "block";}function shadeDis…

[html] 移动端如何禁止用户手动缩放页面?

[html] 移动端如何禁止用户手动缩放页面&#xff1f; <meta name"viewport" content"widthdevice-width,initial-scale1,maximum-scale1,minimum-scale1,user-scalableno">个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易…

python怎么填充画布_如何在kivy中用图像填充画布?

矩形设置为MyPaintWidget的大小&#xff0c;在父小部件上以默认大小绘制。如果MyPaintWidget是根小部件&#xff0c;那么设置self.size将允许它占用整个窗口空间。(请注意&#xff0c;当前结构只会在on-touch-down事件上调整画布的大小。因此&#xff0c;如果调整窗口大小&…

[html] HTML5的video怎样预加载(支持全量加载)?

[html] HTML5的video怎样预加载&#xff08;支持全量加载&#xff09;&#xff1f; preload"auto"个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

mysql df_MySQL主从复制实战

什么是主从复制使用两个或两个以上的数据库&#xff0c;一部分数据库当做主数据库&#xff0c;而另一部分数据库当做从数据库。系统在主数据库中进行写操作&#xff0c;从数据库记录在主库上所有的写操作&#xff0c;使得主从数据库的数据保持一致。一旦主数据库出现问题时&…

python logistic回归_logistic回归介绍与源码分析

1. 介绍&#xff08;由线性模型引出logistic回归&#xff09;首先介绍一下什么是线性模型呢&#xff1f;线性模型的定义如下&#xff1a;给定 个属性描述的样本 &#xff0c; 代表样本在第 个属性上的取值。线性模型的目的是学习一个函数&#xff0c;它可以通过属性的线性组合来…

[html] 列举几种多列等高布局的方法

[html] 列举几种多列等高布局的方法 1, 使用table布局 .row { display: table; }.row > * { display: table-cell; }2, 使用flex布局.row { display: flex; flex-wrap: wrap; } .row > * { display: flex; flex-direction: column; }个人简介 我是歌谣&#xff0c;欢迎…

当前标签: Entity Framework

当前标签: Entity Framework在Entity Framework中使用泛型 qouoww 2012-04-29 22:39 阅读:1937 评论:4 一步一步学Entity Framework 4.x (3) qouoww 2012-04-27 17:20 阅读:2569 评论:8 一步一步学Entity Framework 4(2) qouoww 2012-04-27 09:10 阅读:2972 评论:7 一步一步…

case mybatis 不同表_解决mybatis case when 报错的问题

在mybatis中使用case when进行条件筛选判断时遇到Failed to process, please exclude the tableName or statementId.这样的报错信息&#xff0c;报错的信息是语法错误但是我在mysql的命令行中运行sql语句是没问题的//我的case when语句WHERE dept.type 1AND(CASE agent.dept_…

python c cmd_在Python cmd模块中处理CTRL-C

我发现了一些使用Ctrl-C实现所需行为的hacky方法.设置use_rawinput False并替换stdin这个(或多或少……)粘在cmd.Cmd的公共接口上.不幸的是,它禁用了readline支持.您可以将use_rawinput设置为false并传递一个不同的类文件对象来替换Cmd .__ init __()中的stdin.实际上,只在此对…

[html] 列举几种瀑布流布局的方法

[html] 列举几种瀑布流布局的方法 flex方法&#xff1a; .waterfall{ //从上到下 display: flex; flex-direction: row; } .column { //从左到右 display: flex; flex-direction: column; width: calc(100%/3); }个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。…