jieba库中基于 TextRank 算法的关键词抽取——源代码分析(四)
2021/10/29 17:11:37
本文主要是介绍jieba库中基于 TextRank 算法的关键词抽取——源代码分析(四),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
2021SC@SDUSC
2021SC@SDUSC
Text Rank第二步——以固定窗口大小,词之间的共现关系,构建图
在源代码分析(一)、(二)、(三)中主要针对TextRank算法中第一步——分词,进行分析。从本篇文章中开始继续分析textrank.py进行分析。
def textrank(self, sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False): """ Extract keywords from sentence using TextRank algorithm. Parameter: - topK: return how many top keywords. `None` for all possible words. - withWeight: if True, return a list of (word, weight); if False, return a list of words. - allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v']. if the POS of w is not in this list, it will be filtered. - withFlag: if True, return a list of pair(word, weight) like posseg.cut if False, return a list of words """ self.pos_filt = frozenset(allowPOS) #初始化关键字词性过滤条件 g = UndirectWeightedGraph() #定义无向有权图 cm = defaultdict(int) #定义共现词典 words = tuple(self.tokenizer.cut(sentence)) #分词,使用cut方法
这些代码,尤其是分词部分,之前已经在文章中详细分析过,那么接着往下进行分析。
接下来是for循环,主要是对第一步分词得到的结果进行遍历处理,实现TextRank的第二步,词之间的共现,也就是词之间的连接,因为TextRank的算法中计算词rank需要基于上下文中词的rank。
for i, wp in enumerate(words): #遍历cut之后的分词结果(i,wp),对其进行处理 if self.pairfilter(wp): #判断词wp是否符合代提取关键词的条件 #span是滑动窗口,在这里取的j是i词的下文,这里实现词的共现,即词之间的连接关系 for j in xrange(i + 1, i + self.span): if j >= len(words): #判断词的范围是否在分词结果中 break #判断i词的后向词j词是否也符合关键词的条件,不符合,则跳过 if not self.pairfilter(words[j]): continue #将i词和j词作为关键词,出现的次数作为值,添加到共现词典中 #即在第三步中,将两词作为无向有权图中一条边的两个节点,出现的次数作为权重 if allowPOS and withFlag: cm[(wp, words[j])] += 1 else: cm[(wp.word, words[j].word)] += 1
这里主要是细节部分,首先在进行词的共现时,要先判断词是否符合关键词的提取条件,并且不仅i词,j词也要判断,因为TextRank中考虑的是关键词之间的联系,而不是与任意关键词之间的联系。
那么这就是TextRank实现过程中的第二步——实现词的共现的主要代码及分析,下篇文章我们会主要分析TextRank第三步无向有权图部分。
这篇关于jieba库中基于 TextRank 算法的关键词抽取——源代码分析(四)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27JavaScript面试真题详解与解答
- 2024-12-27掌握JavaScript大厂面试真题:新手入门指南
- 2024-12-27JavaScript 大厂面试真题详解与解析
- 2024-12-26网络攻防资料入门教程
- 2024-12-26SQL注入资料详解:入门必读教程
- 2024-12-26初学者指南:数据库服务漏洞项目实战
- 2024-12-26网络安全项目实战:新手入门指南
- 2024-12-26网络攻防项目实战入门教程
- 2024-12-26信息安全项目实战:从入门到初步应用
- 2024-12-26SQL注入项目实战:初学者指南