python数据分析:关键字提取方式


Posted in Python onFebruary 24, 2020

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

以上这篇python数据分析:关键字提取方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python简单获取本机计算机名和IP地址的方法
Jun 03 Python
python各种语言间时间的转化实现代码
Mar 23 Python
用pickle存储Python的原生对象方法
Apr 28 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
Python RabbitMQ消息队列实现rpc
May 30 Python
Python XML转Json之XML2Dict的使用方法
Jan 15 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
Jul 11 Python
使用python切片实现二维数组复制示例
Nov 26 Python
python 实现将list转成字符串,中间用空格隔开
Dec 25 Python
pytorch::Dataloader中的迭代器和生成器应用详解
Jan 03 Python
Jupyter Notebook 实现正常显示中文和负号
Apr 24 Python
python脚本第一行如何写
Aug 30 Python
python数据预处理 :数据共线性处理详解
Feb 24 #Python
使用python实现多维数据降维操作
Feb 24 #Python
python数据预处理 :数据抽样解析
Feb 24 #Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 #Python
Python流程控制常用工具详解
Feb 24 #Python
深入浅析Python 函数注解与匿名函数
Feb 24 #Python
python数据预处理方式 :数据降维
Feb 24 #Python
You might like
thinkphp实现图片上传功能分享
2014/03/04 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
2014/07/01 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
vue实现中部导航栏布局功能
2019/07/30 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python检查和同步本地时间(北京时间)的实现方法
2018/12/03 Python
python3中替换python2中cmp函数的实现
2019/08/20 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python实现最短路径的实例方法
2020/07/19 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
ProBikeKit澳大利亚:自行车套件,跑步和铁人三项装备
2016/11/30 全球购物
StubHub新西兰:购买和出售你的门票
2019/04/22 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
法学专业毕业生自荐信范文
2013/12/18 职场文书
八荣八耻演讲稿
2014/09/15 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
家长会后的感想
2015/08/11 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
JS前端canvas交互实现拖拽旋转及缩放示例
2022/08/05 Javascript