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


猜你喜欢
- 使用eslint和editorconfig方式使用eslint的好处1、避免运行时因格式问题报错2、方便团队合作,代码风格统一安装eslin
- 本文实例为大家分享了TensorFlow实现Logistic回归的具体代码,供大家参考,具体内容如下1.导入模块import numpy a
- 接触php那么久,但是安装环境却很生疏,遇到了很多问题,借着百度,整理了些下面的方法问题一:mysql服务没有安装解决办法:在cmd操作下找
- Python字符串拼接的6种方法:1.加号第一种,有编程经验的人,估计都知道很多语言里面是用加号连接两个字符串,Python里面也是如此直接
- 之前写了一篇flask开发环境搭建,今天继续,进行一个实战小项目-blog系统。blog系统很简单,只有一个页面,然后麻雀虽小五脏俱全。这里
- 一、python logging日志模块简单封装项目根目录创建 utils/logUtil.pyimport loggingfrom log
- Python 操作 Excel常用工具数据处理是 Python 的一大应用场景,而 Excel 又是当前最流行的数据处理软件。因此用 Pyt
- 目录前言1. 效果图2. 原理3. 源码3.1 Numpy实现傅里叶变换3.2 OpenCV实现傅里叶变换3.3 HPF or LPF?参考
- 本文实例讲述了Flask框架模板渲染操作。分享给大家供大家参考,具体如下:from flask import render_template
- 在找寻材料的时候,会看到一些暂时用不到但是内容不错的网页,就这样关闭未免浪费掉了,下次也不一定能再次搜索到。有些小伙伴会提出可以保存网页链接
- 写这段代码的原因是昨天项目中遇到的一个问题。一同事要求 写一个效果要求鼠标掠过表格行该行颜色改变以突出显示。这个倒不难,那哥们直接为每个Tr
- 本文只考虑模板中的字符串,不考虑字符串中带标签的情况。模板中的字符串文字不会自动转义,因为这里默认模板的作者已经正确书写模板的内容。{{ d
- springboot数据库查询时出现的时区差异最近项目中使用到多数据源将MySQL库中的数据迁移到mongo库中,发现取出后的数据与原数据时
- Python3中的map()、reduce()、filter() 这3个一般是用于对序列进行操作的内置函数,它们经常需要与 匿名函数 lam
- 今天在开发一个手机短信通讯录的前端界面时,界面中使用了checkbox,来做为各项的选择控件,但是操作时,除了点差子。由于逻辑需要,需要预先
- mysql字段的数据类型支持json格式,可以直接存储json数组和json对象。一、插入json数据的方式有两种1、以普通字符串形式插入,
- 报表服务器数据库可以为一个或多个报表服务器实例提供内部存储。因为报表服务器数据库架构可能会因为推出新的 Reporting Services
- 1.建立Recordset对象Dim objMyRstSet objMyRst=Server.CreateObject(&ldquo
- em 和 strong 的区别,可以从三个层次上来谈。首先看 HTML 4.01 中的说明:EM: Indicates emphasis.S
- 我们先来实现一个简单的例子,hello world。似乎每种语言教程的第一节都会讲这个,我们也不例外。首先我们先创建一个项目目录,目录可自己