使用python做tf-idf算法实践

【TF-IDF算法+工具】实战分析关键词排名 相信好多学黑帽SEO的同学都听过百度算法,今天博主就为大家带来一种算法,那就是TF-IDF算法。我们讲算法从来不只讲理论,更多的是实战。如果只是学理论,不实战,那学起来还有什么意义? 一、TF-IDF算法简介 TF-IDF算法包含两个值,一个是TF值,另一个则是IDF值。 TF值我们这里可以理解为关键词密度(布局相关),只要相关度足够高、可以直接修改某个关键词... 阅读详情

引入

信息内容安全课杨老师讲了一个tf-idf算法,用于提取一篇文档的关键词。觉得蛮好玩又正好练习python,所以就试着写了一下,特此记录,各位看官请轻拍板砖。

tf-idf 算法及其原理

偷个懒,直接贴维基百科的解释:

这里写图片描述

至于原理,同样贴图(没错,我就这么懒了怎么样吧。。→_→) :

tf-idf原理

如果看维基还是了解不清楚的话,推荐阮一峰大神的博客,这个也是我们的老师上课讲的东西。

至于其中的数学原理,从维基的原理就很容易看出来,基础还是“贝叶斯定理”,另外一点就是idf的值这里使用到了熵的概念。推荐这篇博客的介绍 : TF-IDF模型的概率解释

(少壮不努力, 老大学数学。。。囧rz)

实践准备

操作系统 : ubuntu16.04
python版本 :python3.5.2
引入的python组件 :

  • jieba – 用于中文分词,jieba分词组件组件介绍, 可以通过sudo pip3 install jieba3k 直接安装
  • numpy, 科学计算库,通过sudo pip3 install numpy 安装
  • scipy, 科学计算库 + 1,, 通过 sudo pip3 install scipy 安装
  • scikit-learn, 数据挖掘库, 可以通过 sudo pip3 install scikit-learn 安装

语料库准备, 努努书坊-鲁迅-伪自由书 。当然是用爬虫爬喽~

爬虫爬取语料库

如果对爬虫理解有问题可参考本人之前的博客 —— 第一个爬虫:爬去古诗中带‘月’的诗句 。爬去的方法并没有很大的改进 (太弱只能写基础的。。。orz)

三步走 :

  1. 分析之前给出的鲁迅-伪自由书, 获得《伪自由书》中所有文章的链接,并存入一个list ;
  2. for循环遍历链接list, 从新的url获得《伪自由书》中的文章 ;
  3. 将获得的文章存入一个文件夹。

附上代码

#!usr/bin/python3
#coding=utf-8

import re
import os
from urllib.request import urlopen
from urllib.error import HTTPError
from bs4 import BeautifulSoup

def geturl(url):
	try :
		html = urlopen(url)
	except HTTPError as e :
		return None
	try :
		bsObj = BeautifulSoup(html, 'lxml')
	except AttributeError as e :
		return None
	return bsObj

def getArticle(url, f) :
	articlePage = geturl(url)
	article = articlePage.findAll('p')
	for paragraph in article :
		print (paragraph.get_text(), file = f)

start = "http://www.kanunu8.com/book/4433/"

page = geturl(start)
tr = page.findAll('tr', {'bgcolor' : '#ffffff'})
links = (re.findall(r'<td><a href="(.*?)">(.*?)</a></td>', str(tr)))

if not os.path.isdir('article') :
	os.mkdir('article')

for link in links :
	with open('./article/' + link[1] + '.txt', 'wt+') as f :
		f.write(link[1])
		getArticle(start + link[0], f)
	print ('---< ' , link[1], ' > get ---')
	

这个爬虫只是在之前的基础上加了一点新功能,将爬去结果都放在了一个文件夹下,使用到了 os 模块的 os.path.isdir(str) 函数和 os.mkdir(str) 函数。 前者用于检查 str 这个文件夹是否存在,后者用于创建一个名为 str 的文件夹 。

爬去的结果如下:
这里写图片描述

然后是爬取结果的一部分 :
爬取结果2

tf-idf算法实现

仍然是三步走 :

  1. 使用jieba给所有的文章分词;
  2. 使用sklearn(即 scikit-learn模块) 中的CountVectorizer()类 和 TfidfTransformer()类 完成对词语的词频分析并获得每篇文章对应的词语的idf值, 可参考[python] 使用scikit-learn工具计算文本TF-IDF值这篇文章的第三部分;
  3. 设定关键字个数,取出每篇文章中tf-idf值最大的值作为对应文章的关键词

先附上代码,然后作说明 :

#coding: utf-8

import os
import jieba
import jieba.posseg as pseg
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer

path = './article/'
titlelist, wordslist = [], []
for fileName in os.listdir(path) :
	titlelist.append(''.join(fileName[:-4].split()))
	with open(path + fileName) as f :
		text = f.read()
		text = ''.join(text.split())
		seg_list = jieba.cut(text)
		wordslist.append(' '.join(seg_list))

vec = CountVectorizer()
wordFrequence = vec.fit_transform(wordslist)
words = vec.get_feature_names()

trans = TfidfTransformer()
tfidf = trans.fit_transform(wordFrequence)
wordsWeight = tfidf.toarray()

n = int(input('输入关键字的个数 : '))
while(n > 5 or n < 0) :
	n = int(input('输入数字应大于零并且小于等于5 : '))

for (title, weight) in zip(titlelist, wordsWeight) :
	print (title, ' : ')
	weightlist = weight.tolist()
	for i in range(n) :
		loc = weightlist.index(max(weightlist))
		print('\t#' + str(i + 1) + ':', words[loc])
		del weightlist[loc]
	print()

input('any key to continue...')

对于初学者(比如我)其中可能会不太懂点:

  • os.listpath(path) 函数 返回一个list, 存的是path 文件夹的子目录中文件或文件夹的名字 ;
  • ''.join(text.split()) 将所有文章中的回车、空格删除 ;
  • 对于这一段 :
   vec = CountVectorizer()
   wordFrequence = vec.fit_transform(wordslist)
   words = vec.get_feature_names()
   
   trans = TfidfTransformer()
   tfidf = trans.fit_transform(wordFrequence)
   wordsWeight = tfidf.toarray()
   
   ```
看过给出[链接](http://blog.csdn.net/eastmount/article/details/50323063)的**第三部分**也就能很好地理解了,不再解释;
- `zip()` 用于要同时遍历两个或多个 list ,将 list 打包,使用迭代器迭代获取 list 中的值。
- `for i in range(n)` 中,每次取出当前处理文档的最大tf-idf值的索引 loc , 然后在获得的词语列表words 中取出对应的词语,取出一个删除一个,即 `del` 的作用,然后继续取词知道取满 n 个为止。

# 最终结果展示
![结果展示](http://img.blog.csdn.net/20170327195357101?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvQXJyb3dMTEw=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

以上です~
   












2、 python文本关键词提取实现(案例) 第一、理论准备 1交叉计数函数 pivot_table(value,index,columns,aggfunc,fill_value) # 参数说明 values:数据透视表中的值 index:数据透视表中的行(索引) columns;数据透视表中的列 aggfunc:统计函数 fill_value:NA值的统一替换。 # 返回只说明:    数据透视表的结果 2 IDF 公式的实现... 阅读详情

相关推荐

TF-IDF实战:用Python从零实现文本关键词提取(附完整代码)

本文详细介绍了如何使用Python从零实现TF-IDF算法进行文本关键词提取,包括基于scikit-learn的快速实现和手动从零编写的完整代码。通过实际案例演示了TF-IDF在文本处理中的应用,如关键词提取和文档相似度计算,并提供了工程优化和问题排查的实用技巧。

weixin_29055137的博客 102

python使用scikit-learn计算TF-IDF

本文转载自:Eastmount大神的文章: http://www.voidcn.com/article/p-bbabkmsv-pt.html 1 Scikit-learn下载安装 1.1 简介 1.2 安装软件 2 TF-IDF基础知识 2.1 TF-IDF概念 2.2 举例说明计算 3 Scikit-Learn中计算TF-IDF 3.1 CountVectorizer ...

和而不流 1万+

新闻文本情感分析:Python与TF-IDF、余弦相似度、情感依存算法实践

本文还有配套的精品资源,点击获取 简介:在自然语言处理中,情感分析是解读文本情感色彩的关键任务。本项目以Python为工具,运用TF-IDF、余弦相似度和情感依存分析算法对新闻文本进行情感倾向分析。首先通过TF-IDF算法识别关键词汇,再利用余弦相似度计算文本间的相似性,并结合情感依存分析深入挖掘文本情感。此项目涵盖了数据预处理、TF-IDF模型构建、余弦相似度计算以及情感...

weixin_35756373的博客 1619

TF-IDF算法-Python实现(附源代码)

一、背景 TF-IDF算法term frequency–inverse document frequency)是一种用于资讯检索与资讯探勘的常用加权技术。

zhb_bupt的专栏 4万+

基于QEMU的openEuler aarch64虚拟机快速部署与漏洞验证指南

本文提供了一份基于QEMU在个人电脑上快速部署openEuler aarch64虚拟机的详细指南。内容涵盖从软件准备、目录规划、QEMU安装、虚拟磁盘创建到系统安装与SSH配置的全过程,并以CVE-2024-1086内核漏洞为例,演示了如何在该虚拟环境中进行安全漏洞的验证与补丁测试,为安全研究和运维测试提供了一个低成本、高效率的ARM架构沙箱环境。

earth的博客 438

CCS环境下ADC采样波形的实时可视化调试技巧

本文详细介绍了在CCS环境下实现ADC采样波形实时可视化的调试技巧。通过数组缓存优化、多通道同步显示和波形测量工具的高级用法,帮助开发者高效调试嵌入式系统中的ADC采样问题,提升信号分析的准确性和效率。

weixin_33712987的博客 419

python代码实现TF-IDF

python代码实现TF-IDF

weixin_40623018的博客 1360

5、OpenClaw(龙虾助手)飞书机器人完整对接指南(2026最新版)

OpenClaw v2026.2.2+ 版本,防火墙内也能正常工作,是目前最稳定、最简单的企业内部AI助手部署方案。

欢迎光临~知1而N的博客 457

python tf-idf的实现

1.首先我们要明白tf-idf计算的数学公式:                                                                                                                   以上的三个公式就是tf-idf的计算过程,我们分三个阶段进行计算。我首先是进行词频的计算,然后根据词频中的单词去计算每个单词...

maybe_fate的博客 3349

开源浏览器插件开发实战:从零搭建多平台内容分发工具

浏览器扩展(Browser Extension)是运行在浏览器上层、通过标准Web技术增强浏览器能力的轻量级程序,其核心价值在于对页面内容的读取、操作与跨应用信息流转。在内容创作与分发场景中,创作者频繁需要在公众号、知乎、优快云、头条等平台间搬运同一篇文章,而传统SaaS分发工具往往受限于免费额度、授权托管和平台适配滞后等问题。基于Manifest V3规范,开发者可以构建一款100%开源、永久免费的浏览器插件,利用content script完成从源文章页提取标题、正文与图片,通过消息通信机制将结构化数

weixin_29882269的博客 295

OnePlus线刷救砖与OTA全量包:从故障恢复到系统升级的完整指南

本文详细介绍了OnePlus手机线刷救砖与OTA全量包的完整操作指南,包括故障诊断、线刷救砖实战教程、OTA全量包升级优势及进阶玩法。通过具体案例和实用技巧,帮助用户从系统故障恢复到安全升级,特别适合Android系统爱好者和OnePlus用户。

weixin_30338481的博客 619

TD-IDF

什么是 TF-IDF 算法? 简单来说,向量空间模型就是希望把查询关键字和文档都表达成向量,然后利用向量之间的运算来进一步表达向量间的关系。比如,一个比较常用的运算就是计算查询关键字所对应的向量和文档所对应的向量之间的 “相关度”。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gP4gwlKB-1589524736752)(imgs/TF-IDF.png)] TF (Term Frequency)—— “单词频率” 意思就是说,我们计算一个查询关键字中某一个单词在目标文档中

a362682954的博客 2602

医院批量排班实战指南(三)日期列表生成与时段批量操作

在上一篇《批量排班功能实现指南(二):日期与时段设置》中,我们完成了日期范围选择和重复规则配置的界面搭建,实现了从第一步到第二步的跳转功能。现在我们已经可以选择日期范围和重复规则,但还缺少最关键的功能——根据规则生成日期列表并进行时段配置。本篇将继续深入批量排班的核心功能——日期列表生成与时段批量操作。根据日期范围和重复规则智能生成日期列表为每个日期配置上午、下午、夜诊时段批量时段操作提升配置效率日期列表的展示与管理。

低代码布道师的博客 1346

【NLP第十二期:TF-IDF 算法详解与实践:从原理到代码解析】

本文围绕 TF-IDF 算法展开深入讲解,先剖析其原理,包括词频(TF)、逆文档频率(IDF)的计算逻辑及二者结合的意义。通过具体文档示例,详细演示 TF-IDF 值的计算过程与关键词提取方法。同时,结合 Python 中 jieba 库的使用,展示文本分词及基于 TF-IDF 思想的实践操作,帮助读者全面掌握 TF-IDF 算法在文本处理中的应用,理解其在关键词提取、文本相似度计算等场景的价值。

qq_45832651的博客 1236

【YOLOv8科研级创新】集成HS-FPN特征融合网络,让Neck模块在参数量锐减100W的同时精度跃升

打开确保模型解析器能识别HS_FPN模块。通过将HS-FPN集成到YOLOv8中,我们实现了一个“轻量级多尺度特征融合+精准检测”的目标检测模型。这个改进不仅在工程上能提升多尺度、细粒度场景的检测效果并降低部署成本,更在科研上提供了“选择性轻量级特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的Neck模块改进中,帮你在论文中打造独特的研究点。

m0_64661770的博客 137

FreeRTOS系统从入门到精通万字保姆级教程

例如,在基于ARM的硬件平台上,可能需要实现针对ARM处理器的上下文切换代码,并确保FreeRTOS能够正确地响应和处理ARM架构的中断。需要注意的是,在删除任务之前应确保任务已经完成了其所有重要的工作,并且没有其他的任务依赖于它,以避免数据丢失或系统不稳定。任务的优先级设定是其中的关键环节。在复杂的系统中,可能会有大量的任务需要同时运行,而这些任务的重要性和紧急程度各不相同。这通常包括创建初始任务(这些任务将负责系统的初始化和后续任务的调度)、设置系统时钟(以确保任务的准时调度和延时功能的正确性)等。

大模型大数据攻城狮的专栏 2070

机器学习TF-IDF算法详解

TF-IDF是一种统计方法,用于评估一个词在文档集合(语料库)中某个文档里的重要程度。词频 (Term Frequency, TF):一个词在文档中出现的次数越多,它对这个文档的重要性可能就越高。逆文档频率 (Inverse Document Frequency, IDF):一个词在所有文档中出现的文档数越少(即越稀有),它区分文档的能力就越强,重要性就越高。简单来说,TF-IDF值高的词,是那些在当前文档中频繁出现,但在整个语料库的其他文档中很少出现的词。这些词往往最能代表该文档的独特主题。

2201_75607087的博客 1519

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

tf–idf算法python代码实现这是我写的一个tf-idf的简单实现的代码,我们知道tfidf=tf*idf,所以可以分别计算tf和idf值在相乘,首先我们创建一个简单的语料库,作为例子,只有四句话,每句表示一个文档copus=['我正在学习计算机','它正在吃饭','我的书还在你那儿','今天不上班']由于中文需要分词,jieba分词是python里面比较好用的分词工具,所以选用jieba分...

weixin_39752941的博客 369

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

AIOPS最全讲解TF-IDF算法博文汇总

优快云博客 机器学习——文本分类(TF-IDF) TF-IDF原理及使用 TF-IDF及其算法 TF-IDF(java实现) TF-IDF算法总结 TF-IDF用于文章分类 TF-IDF特征提取 用sklearn提取tfidf特征 TF-IDF 自然语言处理系列之TF-IDF算法 TF-IDF原理及使用- 优快云博客 博客园 文本挖掘预处理之TF-IDF - 刘建平Pinard Python ...

夜深人静后的码农 888

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

用Python从零实现TF-IDF算法:手把手教你处理体育新闻文本

本文手把手教你从零开始用Python实现TF-IDF算法,并应用于体育新闻文本分析。通过拆解算法核心逻辑、构建完整的数据预处理管道、实现TF-IDF计算与归一化,并与Gensim库结果进行对比验证,帮助你深入理解这一经典NLP特征提取技术。

nokia的博客 849

自然语言处理系列一》TF-IDF算法原理

此文章有对应的陈敬雷老师的清华大学出版社配套书籍教材 【自然语言处理原理与实战(人工智能科学与技术丛书)】 https://item.jd.com/13951851.html 和【分布式机器学习实战(人工智能科学与技术丛书)】,对应京东自营链接地址: https://item.jd.com/12743009.html

weixin_52610848的博客 813

基于Sklearn调用TF-IDF

代码小练 from sklearn.feature_extraction.text import TfidfVectorizer tfidf = TfidfVectorizer() #语料 corpus = ['我 来 到 北京 大学', #文本[1] '他 来到 了 网易 杭研 大厦', #文本[2] '小明 硕士 毕业 于 中国 科学院', #文本[3] '我 爱 北京 天安门'] #文本[4] #都是分词后的结果 r.

hxxjxw的博客 377

机器学习-文本-基础算法tfidf

背景 之前对tfidf处于应用的层级,本博文将从原理和实战上来对其进行阐述。 原理 白话 tfidf的核心思想: 一个单词在同一个文档中出现的次数越多,说明这个词越重要 一个单词出现在不同的文档中的次数越多,说明这个词越不重要 tfidf的输入和输出: 输入:文档分词 输出:词的重要性 举例输入: 文档1:我 爱 技术 人民。 文档2:我 爱 电脑。 文档3:我 爱 加班 的 人民。 重要...

感性企鹅的专栏 594

TF-IDF算法的代码实践应用——关键词提取、文本分类、信息检索

**通过纯Python手写实现与调用`sklearn`工具包两种方式**,带你一步步完成TF-IDF在真实场景中的应用:关键词提取、文本分类、信息检索

故事猝不及防,发量秃如其来 759

Python实战:用TF-IDF算法快速实现文本分类(附完整代码)

本文提供了一份基于Python和TF-IDF算法的文本分类实战指南。通过sklearn库,文章详细演示了从数据准备、TF-IDF特征提取到逻辑回归/朴素贝叶斯分类模型构建与评估的全过程,并附有完整代码,帮助开发者快速实现高效的文本分类任务。

carrot的博客 552

[python] 基于k-means和tfidf的文本聚类代码简单实现

俗话说“外行看热闹,内行看门道“,作为一个机器学习的门外汉,刚研究python机器学习scikit-learn两周时间,虽然下面这段程序可能对于那些专研算法或机器学习的人来说非常简单,但对于一些入门的同学和我自己还是非常有帮助的。如果文章中有错误或不足之处,还请你微微一笑,原谅之;当然也非常欢迎你提出建议或指正~基本步骤包括: 1.使用...

weixin_34124939的博客 4265
上一篇: 组合数学例题:Codeforces#round404 - D(785D)
下一篇: 联合概率(翻译)
Elin_24
博客等级 码龄12年 22粉丝 14原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值