数据集中的一个文档的重要性——TF-IDF
优采云 发布时间: 2021-06-22 02:57数据集中的一个文档的重要性——TF-IDF
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 算法是一种基于图的文本排序算法。基本思想来自 Google 的 PageRank 算法。通过将文本划分为若干个组成单元(词、句子)并构建图模型,采用投票机制对文本的重要组成部分进行排序,只能使用单个文档本身的信息。实现关键词提取和抽象。与LDA、HMM等模型不同,TextRank不需要提前学习和训练多个文档,因其简单有效而被广泛使用。
关键词extraction 基于 TextRank
关键词提取的任务是从给定的文本中自动提取一些有意义的词或短语。 TextRank算法利用局部词(共现窗口)之间的关系,直接从文本本身对后续关键词进行排序。主要步骤如下:
根据完整的句子对给定的文本T进行切分,即
对每个句子进行分词和词性标注,过滤掉停用词,只保留指定词性的词,如名词、动词、形容词,即保留候选关键词。
构造候选关键词graph G = (V,E),其中V为节点集,由(2)生成的候选关键词组成,然后利用共现构造任意两点有两个节点之间的一条边。只有当它们对应的词在长度为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数据分析:关键词提取方法是小编分享的全部内容,希望给大家参考。