分享好友 最新动态首页 最新动态分类 切换频道
jieba结巴分词--关键词抽取(核心词抽取)
2024-12-27 00:27

关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词这一项。

jieba结巴分词--关键词抽取(核心词抽取)

除了这些,关键词还可以在文本聚类、分类、自动摘要等领域中有着重要的作用。比如在聚类时将关键词相似的几篇文档看成一个团簇,可以大大提高聚类算法的收敛速度;从某天所有的新闻中提取出这些新闻的关键词,就可以大致了解那天发生了什么事情;或者将某段时间内几个人的微博拼成一篇长文本,然后抽取关键词就可以知道他们主要在讨论什么话题。

总之,关键词就是最能够反映出文本主题或者意思的词语。但是网络上写文章的人不会像写论文那样告诉你本文的关键词是什么,这个时候就需要利用计算机自动抽取出关键词,算法的好坏直接决定了后续步骤的效果。

关键词抽取从方法来说大致有两种

  • 第一种是关键词分配,就是有一个给定的关键词库,然后新来一篇文档,从词库里面找出几个词语作为这篇文档的关键词
  • 第二种是关键词抽取,就是新来一篇文档,从文档中抽取一些词语作为这篇文档的关键词

目前大多数领域无关的关键词抽取算法(领域无关算法的意思就是无论什么主题或者领域的文本都可以抽取关键词的算法)和它对应的库都是基于后者的。从逻辑上说,后者比前着在实际使用中更有意义。

从算法的角度来看,关键词抽取算法主要有两类

  • 有监督学习算法,将关键词抽取过程视为二分类问题,先抽取出候选词,然后对于每个候选词划定标签,要么是关键词,要么不是关键词,然后训练关键词抽取分类器。当新来一篇文档时,抽取出所有的候选词,然后利用训练好的关键词抽取分类器,对各个候选词进行分类,最终将标签为关键词的候选词作为关键词
  • 无监督学习算法,先抽取出候选词,然后对各个候选词进行打分,然后输出topK个分值最高的候选词作为关键词。根据打分的策略不同,有不同的算法,例如TF-IDF,TextRank等算法

jieba分词系统中实现了两种关键词抽取算法,分别是基于TF-IDF关键词抽取算法和基于TextRank关键词抽取算法,两类算法均是无监督学习的算法,下面将会通过实例讲解介绍如何使用jieba分词的关键词抽取接口以及通过源码讲解其实现的原理。

下面将会依次介绍利用jieba分词系统中的TF-IDF及TextRank接口抽取关键词的过程。

基于TF-IDF算法进行关键词抽取的示例代码如下所示

 

控制台输出

 
 

基于TextRank算法进行关键词抽取的示例代码如下所示

 

控制台输出

 
 

下面将会依次分析TF-IDF算法及TextRank算法的原理。

在信息检索理论中,TF-IDF是Term Frequency - Inverse Document Frequency的简写。TF-IDF是一种数值统计,用于反映一个词对于语料中某篇文档的重要性。在信息检索和文本挖掘领域,它经常用于因子加权。

TF-IDF的主要思想就是:如果某个词在一篇文档中出现的频率高,也即TF高;并且在语料库中其他文档中很少出现,即DF的低,也即IDF高,则认为这个词具有很好的类别区分能力。

TF-IDF在实际中主要是将二者相乘,也即TF * IDF,TF为词频(Term Frequency,表示词t在文档d中出现的频率;IDF为反文档频率(Inverse Document Frequency,表示语料库中包含词t的文档的数目的倒数。

TF公式

TF计算公式为

式中,count(t)表示文档di中包含词t的个数

count(di)表示文档di的词的总数

IDF公式

IDF计算公式为

式中,num(corpus)表示语料库corpus中文档的总数

num(t)表示语料库corpus中包含t的文档的数目

应用到关键词抽取

 
 

类似于PageRank的思想,将文本中的语法单元视作图中的节点,如果两个语法单元存在一定语法关系(例如共现,则这两个语法单元在图中就会有一条边相互连接,通过一定的迭代次数,最终不同的节点会有不同的权重,权重高的语法单元可以作为关键词。

节点的权重不仅依赖于它的入度结点,还依赖于这些入度结点的权重,入度结点越多,入度结点的权重越大,说明这个结点的权重越高

TextRank迭代计算公式为

节点i的权重取决于节点i的邻居节点中i-j这条边的权重 / j的所有出度的边的权重 * 节点j的权重,将这些邻居节点计算的权重相加,再乘上一定的阻尼系数,就是节点i的权重

阻尼系数 d 一般取0.85

算法通用流程

 
  • 1.本模型使用co-occurrence关系,如果两个顶点相应的语义单元共同出现在一个窗口中(窗口大小从2-10不等,那么就连接这两个顶点

  • 2.添加顶点到图中时,需要考虑语法过滤,例如只保留特定词性(如形容词和名词)的词

应用到关键短语抽取

 
 

jieba分词的关键词抽取功能,是在jieba/analyse目录下实现的。

其中,__init__.py主要用于封装jieba分词的关键词抽取接口

tfidf.py实现了基于TF-IDF算法抽取关键词

textrank.py实现了基于TextRank算法抽取关键词

基于TF-IDF算法抽取关键词的主调函数是TFIDF.extract_tags函数,主要是在jieba/analyse/tfidf.py中实现。

其中TFIDF是为TF-IDF算法抽取关键词所定义的类。类在初始化时,默认加载了分词函数tokenizer = jieba.dt、词性标注函数postokenizer = jieba.posseg.dt、停用词stop_words = self.STOP_WORDS.copy()、idf词典idf_loader = IDFLoader(idf_path or DEFAULT_IDF)等,并获取idf词典及idf中值(如果某个词没有出现在idf词典中,则将idf中值作为这个词的idf值)。

 

然后开始通过TF-IDF算法进行关键词抽取。

首先根据是否传入了词性限制集合,来决定是调用词性标注接口还是调用分词接口。例如,词性限制集合为["ns", "n", "vn", "v", "nr"],表示只能从词性为地名、名词、动名词、动词、人名这些词性的词中抽取关键词。

1) 如果传入了词性限制集合,首先调用词性标注接口,对输入句子进行词性标注,得到分词及对应的词性;依次遍历分词结果,如果该词的词性不在词性限制集合中,则跳过;如果词的长度小于2,或者词为停用词,则跳过;最后将满足条件的词添加到词频词典中,出现的次数加1;然后遍历词频词典,根据idf词典得到每个词的idf值,并除以词频词典中的次数总和,得到每个词的tf * idf值;如果设置了权重标志位,则根据tf-idf值对词频词典中的词进行降序排序,然后输出topK个词作为关键词

2) 如果没有传入词性限制集合,首先调用分词接口,对输入句子进行分词,得到分词;依次遍历分词结果,如果词的长度小于2,或者词为停用词,则跳过;最后将满足条件的词添加到词频词典中,出现的次数加1;然后遍历词频词典,根据idf词典得到每个词的idf值,并除以词频词典中的次数总和,得到每个词的tf * idf值;如果设置了权重标志位,则根据tf-idf值对词频词典中的词进行降序排序,然后输出topK个词作为关键词

 
 

基于TextRank算法抽取关键词的主调函数是TextRank.textrank函数,主要是在jieba/analyse/textrank.py中实现。

其中,TextRank是为TextRank算法抽取关键词所定义的类。类在初始化时,默认加载了分词函数和词性标注函数tokenizer = postokenizer = jieba.posseg.dt、停用词表stop_words = self.STOP_WORDS.copy()、词性过滤集合pos_filt = frozenset(('ns', 'n', 'vn', 'v')),窗口span = 5,(("ns", "n", "vn", "v"))表示词性为地名、名词、动名词、动词。

首先定义一个无向有权图,然后对句子进行分词;依次遍历分词结果,如果某个词i满足过滤条件(词性在词性过滤集合中,并且词的长度大于等于2,并且词不是停用词,然后将这个词之后窗口范围内的词j(这些词也需要满足过滤条件,将它们两两(词i和词j)作为key,出现的次数作为value,添加到共现词典中

然后,依次遍历共现词典,将词典中的每个元素,key = (词i,词j,value = 词i和词j出现的次数,其中词i,词j作为一条边起始点和终止点,共现的次数作为边的权重,添加到之前定义的无向有权图中。

然后对这个无向有权图进行迭代运算textrank算法,最终经过若干次迭代后,算法收敛,每个词都对应一个指标值

如果设置了权重标志位,则根据指标值值对无向有权图中的词进行降序排序,最后输出topK个词作为关键词

 

其中,无向有权图的的定义及实现是在UndirectWeightedGraph类中实现的。根据UndirectWeightedGraph类的初始化函数__init__,我们可以发现,所谓的无向有权图就是一个词典,词典的key是后续要添加的词,词典的value,则是一个由(起始点,终止点,边的权重)构成的三元组所组成的列表,表示以这个词作为起始点的所有的边。

无向有权图添加边的操作是在addEdge函数中完成的,因为是无向图,所以我们需要依次将start作为起始点,end作为终止点,然后再将start作为终止点,end作为起始点,这两条边的权重是相同的。

 

执行textrank算法迭代是在rank函数中完成的。

首先对每个结点赋予相同的权重,以及计算出该结点的所有出度的次数之和

然后迭代若干次,以确保得到稳定的结果

在每一次迭代中,依次遍历每个结点;对于结点n,首先根据无向有权图得到结点n的所有
入度结点(对于无向有权图,入度结点与出度结点是相同的,都是与结点n相连的结点,在前面我们已经计算出这个入度结点的所有出度的次数,而它对于结点n的权值的贡献等于它本身的权值 乘以 它与结点n的共现次数 / 这个结点的所有出度的次数 ,将各个入度结点得到的权值相加,再乘以一定的阻尼系数,即可得到结点n的权值

迭代完成后,对权值进行归一化,并返回各个结点及其对应的权值。

 
 

jieba分词中基于TF-IDF算法抽取关键词以及基于TextRank算法抽取关键词均需要利用停用词对候选词进行过滤。实现TF-IDF算法抽取关键词的类TFIDF和实现TextRank算法抽取关键词的类TextRank都是类KeywordExtractor的子类。而在类KeywordExtractor,实现了一个方法,可以根据用户指定的路径,加载用户提供的停用词集合。

类KeywordExtractor是在jieba/analyse/tfidf.py中实现。

类KeywordExtractor首先提供了一个默认的名为STOP_WORDS的停用词集合。

然后,类KeywordExtractor实现了一个方法set_stop_words,可以根据用户指定的路径,加载用户提供的停用词集合。

可以将extra_dict/stop_words.txt拷贝出来,并在文件末尾两行分别加入“一个”和
“每个”这两个词,作为用户提供的停用词文件,使用用户提供的停用词集合进行关键词抽取的实例代码如下

 

关键词结果为

 

对比章节2.1中的关键词抽取结果,可以发现“一个”和“每个”这两个词没有抽取出来。

 

实现原理 ,这里仍然以基于TF-IDF算法抽取关键词为例。

前面已经介绍了,jieba/analyse/__init__.py主要用于封装jieba分词的关键词抽取接口,在__init__.py首先将类TFIDF实例化为对象default_tfidf,而类TFIDF在初始化时会设置停用词表,我们知道类TFIDF是类KeywordExtractor的子类,而类KeywordExtractor中提供了一个名为STOP_WORDS的停用词集合,因此类TFIDF在初始化时先将类KeywordExtractor中的STOP_WORDS拷贝过来,作为自己的停用词集合stop_words。

 

如果用户需要使用自己提供的停用词集合,则需要调用analyse.set_stop_words(stop_words_path)这个函数,set_stop_words函数是在类KeywordExtractor实现的。set_stop_words函数执行时,会更新对象default_tfidf中的停用词集合stop_words,当set_stop_words函数执行完毕时,stop_words也就是更新后的停用词集合。我们可以做个实验,验证在调用analyse.set_stop_words(stop_words_path)函数前后,停用词集合是否发生改变。

 

结果如下所示

 

说明

  • 没有加载用户提供的停用词集合之前,停用词集合就是类KeywordExtractor中的STOP_WORDS拷贝过来的
  • 加载用户提供的停用词集合之后,停用词集合在原有的基础上进行了扩

证明了我们的想法。

关键词抽取简介

TF-IDF与余弦相似性的应用(一:自动提取关键词

最新文章
职业规划大赛圆满落幕,青年才俊共绘未来蓝图
自大赛启动以来,吸引了众多学生的积极参与。参赛选手们通过自我剖析、行业调研、职业定位和目标设定等环节,精心准备了职业规划书和展示PPT。在比赛现场,他们自信满满地走上舞台,从职业背景、个人优势、目标岗位、发展路径等多个方面进
百度蜘蛛池租用:蜘蛛池助力网站SEO,揭秘如何有效提升浏览量
蜘蛛池租用服务助力网站SEO优化,通过构建庞大的虚拟爬虫网络,模拟真实用户浏览行为,有效提升网站内容在搜索引擎中的曝光度和排名,从而增加浏览量。快速提高网站流量,优化搜索引擎排名。本文目录导读:什么是蜘蛛池?蜘蛛池如何提升网
全面盘点:AI 数据分析报告与生成工具精选指南,满足多种办公需求
在当今这个数据驱动的时代有效地分析和利用数据成为了企业和个人获得竞争优势的关键。无论是企业决策者、市场分析师还是学术研究人员都需要借助强大的数据分析工具来解决和解读海量数据。本文将为您介绍几款优秀的数据分析报告与生成工具它
江阴盘龙区考研全日制培训学校咨询热线:   在线咨询: 点击交谈
新闻标题:云南江阴双龙街道考研全日制培训-考研全日制培训课程价格开班时间是什么2023年排行榜一览表江阴盘龙区附近比较好的考研培训班,考研全日制是江阴盘龙区考研全日制培训学校的重点专业,江阴市知名的考研全日制培训机构,也是国内
规模超15000亿!数字化服务市场增势强劲
数字经济蓬勃发展中,万千行业正不断强化数字化智能化能力,积极抢占数字时代先机,进而带动了数字化服务市场的日益增长和繁荣。7月23日,赛迪顾问发布《2023-2024年中国数字化服务市场研究年度报告》称,2023年,中国数字化服务市场保持强
适合学生党的头戴式耳机该如何选?|唐麦H5降噪蓝牙耳机真实测评
嗨咯,大家好呀,我是阿岚。我的表弟过几天要过生日了,我决定给他挑个耳机作为生日礼物。 本来一直在纠结是买入耳式耳机还是头戴式耳机,后来我上网查了下,发现头戴式耳机有利于保护耳道,于是我果断往这个类型挑选了。 在网上挑了很久
网站提交百度收录,网站提交百度收录方法
1. 提交网站:网站所有者可以通过百度平台提交网站,让百度搜索引擎知道网站的存在。提交后,百度会将网站加入待抓取的队列中。2. 抓取:百度的爬虫程序会定期访问提交的网站,抓取网站上的内容。这个过程依赖于网站的结构、内容更新频率以
【MIMO_OFDM】基于matlab空时分组编码MIMO_OFDM通信仿真(含QPSK调制解调,IFFT调制,空时编解码)【含Matlab源码 9767期】
⛳️座右铭:行百里者,半于九十。 更多Matlab信号处理仿真内容点击👇 ①Matlab信号处理 (进阶版) ②付费专栏Matlab信号处理(初级版) ⛳️关注CSDN海神之光,更多资源等你来!
高中英语选修课:英语文学欣赏-The-Nightingal-and-The-Rose夜莺与玫瑰-教学课件.pptVIP
TheNightingaleandTheRoseOscarWilde(1856-1900)BorninDublin,OscarWildeisanIrishpoet,dramatist,novelistandessayist,waseducatedatOxford,wherehewasgreatlyinfluencedbyhisteacherWalterPater.Bothofthemareconsideredthemostimpo
广西壮族自治区数字广西建设领导小组关于 印发《广西壮族自治区促进“互联网+ 社会服务”发展实施方案》的通知 (桂数广发〔2020〕2号)
各市、县人民政府,自治区人民政府各组成部门、各直属机构:  经自治区人民政府同意,现将《广西壮族自治区促进“互联网+社会服务”发展实施方案》印发给你们,请认真贯彻执行。  广西壮族自治区数字广西建设领导小组(代)  2020年3
相关文章
推荐文章
发表评论
0评