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第三步无向有权图部分。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值