python数据分析:关键字提取方式
作者:泛泛之素 发布时间:2022-03-08 09:23:37
TF-IDF
TF-IDF(Term Frequencey-Inverse Document Frequency)指词频-逆文档频率,它属于数值统计的范畴。使用TF-IDF,我们能够学习一个词对于数据集中的一个文档的重要性。
TF-IDF的概念
TF-IDF有两部分,词频和逆文档频率。首先介绍词频,这个词很直观,词频表示每个词在文档或数据集中出现的频率。等式如下:
TF(t)=词t在一篇文档中出现的次数/这篇文档的总词数
第二部分——逆文档频率实际上告诉了我们一个单词对文档的重要性。这是因为当计算TF的时候,我们对每个词赋予了同等的重要性,它出现得越多,它的TF就越高,如果它出现了100次,也许相比其他出现更少的词,它并不携带那么多信息,因此我们需要赋予它们权重,决定每个词的重要性。使用下面的等式得到IDF:
IDF(t)=(log10文档的篇数/包含词t文档的篇数)
那么,计算TF-IDF的方法如下:
TF * IDF=(词t在一篇文档中出现的次数/这篇文档的总词数)* log10(文档的篇数/包含词t文档的篇数)
应用
TF-IDF可以应用于如下场景:
通常可以使用TF-IDF进行文本数据分析,得到最准确的关键词信息。
如果你正开发一个文本摘要应用,并正在进行统计,TF-IDF是生成摘要最重要的特征。
TF-IDF权重的变动常用于搜索引擎,以求出文档的得分以及同用户检索的相关性。
文本分类应用将TF-IDF和BOW一起使用。
TextRank
TextRank 算法是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法, 通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本身的信息即可实现关键词提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先对多篇文档进行学习训练, 因其简洁有效而得到广泛应用。
基于TextRank的关键词提取
关键词抽取的任务就是从一段给定的文本中自动抽取出若干有意义的词语或词组。TextRank算法是利用局部词汇之间关系(共现窗口)对后续关键词进行排序,直接从文本本身抽取。其主要步骤如下:
把给定的文本T按照完整句子进行分割,即
对于每个句子,进行分词和词性标注处理,并过滤掉停用词,只保留指定词性的单词,如名词、动词、形容词,即,其中是保留后的候选关键词。
构建候选关键词图G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后采用共现关系(co-occurrence)构造任两点之间的边,两个节点之间存在边仅当它们对应的词汇在长度为K的窗口中共现,K表示窗口大小,即最多共现K个单词。
根据上面公式,迭代传播各节点的权重,直至收敛。
对节点权重进行倒序排序,从而得到最重要的T个单词,作为候选关键词。
python实现:
# 导入库
import jieba.analyse # 导入关键字提取库
import pandas as pd # 导入pandas
import newspaper
# 读取文本数据
# 获取文章 银保监会 * 新政为例
article = newspaper.Article('https://finance.sina.com.cn/money/bank/bank_hydt/2019-02-25/doc-ihsxncvf7656807.shtml', language='zh')
# 下载文章
article.download()
# 解析文章
article.parse()
# 对文章进行nlp处理
article.nlp()
# nlp处理后的文章拼接
string_data = "".join(article.keywords)
# 关键字提取
def get_key_words(string_data, how=''):
# topK:提取的关键字数量,不指定则提取全部;
# withWeight:设置为True指定输出词对应的IF-IDF权重
if how == 'textrank':
# 使用TextRank 算法
tags_pairs = jieba.analyse.textrank(string_data, topK=5, withWeight=True) # 提取关键字标签
else:
# 使用TF-IDF 算法
tags_pairs = jieba.analyse.extract_tags(string_data, topK=5, withWeight=True) # 提取关键字标签
tags_list = [] # 空列表用来存储拆分后的三个值
for i in tags_pairs: # 打印标签、分组和TF-IDF权重
tags_list.append((i[0], i[1])) # 拆分三个字段值
tags_pd = pd.DataFrame(tags_list, columns=['word', 'weight']) # 创建数据框
return tags_pd
keywords = get_key_words(string_data)
print("#####################TF-IDF####################")
print(keywords)
keywords_tr = get_key_words(string_data, how='textrank')
print("#####################textrank####################")
print(keywords_tr)
结果如下:
#####################TF-IDF####################
word weight
0 民营企业 0.327466
1 贷款 0.112652
2 融资 0.089557
3 商业银行 0.084860
4 服务 0.072322
#####################textrank####################
word weight
0 民营企业 1.000000
1 要 0.553043
2 贷款 0.493173
3 融资 0.379846
4 服务 0.371273
来源:https://blog.csdn.net/tonydz0523/article/details/87932900
猜你喜欢
- 这种方案是通过对代码进行加密,然后利用C语音写解密的PHP扩展。破解难度会有提升,但依然是会被破解的。 从网上找过各种代码加密的开源方案。
- 我们前期开发了一个只有公司客服人员才能使用的系统——有限的几个客服人员。就是这有限的几个客服人员前几天突然就提出这样的问题:我们每隔很短一段
- 以下是通过Excel 的VBA连接Oracle并操作Oracle相关数据的示例Excel 通过VBA连接数据库需要安装相应的Oracle客户
- itchat是python开源第三方库,用于搭建微信机器人,几十行代码就能帮你实现自动的处理所有信息。比如,添加好友,搭建自动回复机器人,还
- 感谢AKA及作者。Perl 中的正则表达式正则表达式的三种形式正则表达式中的常用模式正则表达式的 8 大原则 &nbs
- 想做个和IBM公司一样的网站LOGO,试了半天也没有做出来,郁闷之下,只好求高手帮助!先在这里谢谢了!方法一1、写上IBM,调节字号颜色2、
- 当成功安装了PHP,MYSQL后,我们一般要安装phpMyAdmin来管理你的mysql。本文介绍了phpMyAdmin 2.10.2的配置
- 介绍本文主要介绍Python中set的基本知识和使用。Python中什么是setdict的作用是建立一组 key 和一组 value 的映射
- 导言GridView是由一组字段(Field)组成的,它们都指定的了来自DataSource中的什么属性需要用到自己的输出呈现中。最简单的字
- 编写程序的时候,经常要处理字符串,最基本就是字符串的查找,在php检测字符串中是否包含指定字符串可以使用正则,如果你对正则不了解,那么有几个
- 继上篇博客Python实现简易通讯录后,我就想写一个复杂点的学生信息管理系统,这次实现的功能有1.学生信息的录入管理;2.学生选课操作;3.
- 很多朋友对FrontPage2003中增加的网页布局功能很感兴趣,现在我们一起来深入了解这一实用功能。用FrontPage2003的“布局表
- 使用 Response.Redirect "aspxhome.asp" 转向方法的HTTP Status Code 为3
- NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。
- Python 风格规范(Google)本项目并非 Google 官方项目, 而是由国内程序员凭热情创建和维护。如果你关注的是 Google
- 在安装好MYSQL ODBD的驱动程序后,应如何建立ASP文件连接数据库?我们有两种方法:一种是在ODBC数据源中建立一个DSN。具体方法是
- 方法一1. 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的;2. 重命名自己的mysql的data目录下的mysql文件
- 如何制作一个小巧的购物车?主程序如下:cartkit.aspClass CartKitSub CreateCart()&
- 前言对Python游戏有所了解的朋友都知道,在2D的游戏制作中,经常会用到一个模块pygame,他能帮助我们实现很多方便使用的功能,例如绘制
- asp之家注:作为一个学习asp的爱好者,相信一定接触过session,我们经常使用session来作为会员登录的验证,当然也可以使用COO