输入关键字 抓取所有网页(TF-IDF和逆文档频率的重要性文档的篇数 )
优采云 发布时间: 2021-10-13 14:05输入关键字 抓取所有网页(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 可以应用于以下场景:
文本排名
TextRank 算法是一种基于图的文本排序算法。基本思想来自 Google 的 PageRank 算法。通过将文本划分为若干个组成单元(词、句子)并构建图模型,采用投票机制对文本的重要组成部分进行排序,只能使用单个文档本身的信息。实现关键词抽取和摘要。与LDA、HMM等模型不同,TextRank不需要提前学习和训练多个文档,因其简单有效而被广泛使用。
关键词 基于TextRank的抽取
关键词提取的任务是从给定的文本中自动提取一些有意义的词或短语。TextRank算法利用局部词(共现窗口)之间的关系,直接从文本本身对后续的关键词进行排序。主要步骤如下:
根据完整的句子对给定文本T进行拆分,即对每个句子进行分词和词性标注,过滤掉停用词,只保留指定的词性词,如名词、动词、形容词、即预约后的Candidates 关键词 在哪里。构造候选关键词图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