介绍
这篇文章主要介绍python如何实现textrank关键词提取,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
用python写了一个简单版本的textrank,实现提取关键词的功能。
import numpy as np import jieba import jieba.posseg  as pseg , class TextRank(对象): ,, def 才能;__init__(自我,,句子,,窗口,α,iternum):, ,,,self.sentence =, sentence ,,,self.window =, window ,,,self.alpha =, alpha ,,,self.edge_dict =,{}, #记录节点的边连接字典, ,,,self.iternum =, iternum #迭代次数, , #才能对句子进行分词, def 才能cutSentence(自我):, ,,,jieba.load_userdict (& # 39; user_dict.txt& # 39;), ,,,tag_filter =,(& # 39;一个# 39;& # 39;d # 39;, & # 39; n # 39;, & # 39; v # 39;], ,,,seg_result =, pseg.cut (self.sentence), ,,,self.word_list =, (s.word for  s 拷贝seg_result if s.flag 拷贝tag_filter), ,,,印刷(self.word_list), , #才能根据窗口,构建每个节点的相邻节点,返回边的集合, def 才能createNodes(自我):, ,,,tmp_list =, [], ,,,word_list_len =, len (self.word_list), ,,,for 指数,word 列举(self.word_list):拷贝, ,,,,,if word not 拷贝self.edge_dict.keys ():, ,,,,,,,tmp_list.append(词), ,,,,,,,tmp_set =,设置(), ,,,,,,,left =, index 作用;self.window +, 1 #窗口左边界, ,,,,,,,right =, index +, self.window #窗口右边界, ,,,,,,,if left & lt;, 0:, left =, 0, ,,,,,,,if right 祝辞=,word_list_len:, right =, word_list_len ,,,,,,,for 小姐:拷贝范围(左,右):, ,,,,,,,,,if 小姐:==,指数:, ,,,,,,,,,,,continue ,,,,,,,,,tmp_set.add (self.word_list[我]), ,,,,,,,self.edge_dict[词],=,tmp_set , #才能根据边的相连关系,构建矩阵, def 才能createMatrix(自我):, ,,,self.matrix =, np.zeros ((len(设置(self.word_list)), len(设置(self.word_list)))), ,,,self.word_index =,{} #记录词的index ,,,self.index_dict =,{} #记录节点指数对应的词, , ,,,for 我,v 列举(设置(self.word_list)):拷贝, ,,,,,self.word_index [v],=,小姐: ,,,,,self.index_dict[我],=,v ,,,for key 拷贝self.edge_dict.keys ():, ,,,,,for w 拷贝self.edge_dict(例子):, ,,,,,,,self.matrix [self.word_index[主要]][self.word_index [w]],=, 1, ,,,,,,,self.matrix [self.word_index [w]] [self.word_index[主要]],=,1, ,,,#归一化, ,,,for j 拷贝范围(self.matrix.shape [1]):, ,,,,,sum =, 0, ,,,,,for 小姐:拷贝范围(self.matrix.shape [0]):, ,,,,,,,sum +=, self.matrix[我][j], ,,,,,for 小姐:拷贝范围(self.matrix.shape [0]):, ,,,,,,,self.matrix[我][j],/=, sum , #才能根据textrank公式计算权重, def 才能calPR(自我):, ,,,self.PR =, np.ones ((len(设置(self.word_list)), 1]), ,,,for 小姐:范围(self.iternum):拷贝, ,,,,,self.PR =,(1,安康;self.alpha), +, self.alpha *, np.dot (self.matrix, self.PR), , #输才能出词和相应的权重, def 才能printResult(自我):, ,,,word_pr =, {}, ,,,for 小姐:范围(len (self.PR)):拷贝, null null null null null null null null null null null nullpython如何实现textrank关键词提取