python实现textrank关键词提取

用python写了一个简单版本的textrank,实现提取关键词的功能。

import numpy as np
import jieba
import jieba.posseg as pseg 

class TextRank(object): 

  def __init__(self, sentence, window, alpha, iternum):
    self.sentence = sentence
    self.window = window
    self.alpha = alpha
    self.edge_dict = {} #记录节点的边连接字典
    self.iternum = iternum#迭代次数 

  #对句子进行分词
  def cutSentence(self):
    jieba.load_userdict('user_dict.txt')
    tag_filter = ['a','d','n','v']
    seg_result = pseg.cut(self.sentence)
    self.word_list = [s.word for s in seg_result if s.flag in tag_filter]
    print(self.word_list) 

  #根据窗口,构建每个节点的相邻节点,返回边的集合
  def createNodes(self):
    tmp_list = []
    word_list_len = len(self.word_list)
    for index, word in enumerate(self.word_list):
      if word not in self.edge_dict.keys():
        tmp_list.append(word)
        tmp_set = set()
        left = index - self.window + 1#窗口左边界
        right = index + self.window#窗口右边界
        if left < 0: left = 0
        if right >= word_list_len: right = word_list_len
        for i in range(left, right):
          if i == index:
            continue
          tmp_set.add(self.word_list[i])
        self.edge_dict[word] = tmp_set 

  #根据边的相连关系,构建矩阵
  def createMatrix(self):
    self.matrix = np.zeros([len(set(self.word_list)), len(set(self.word_list))])
    self.word_index = {}#记录词的index
    self.index_dict = {}#记录节点index对应的词 

    for i, v in enumerate(set(self.word_list)):
      self.word_index[v] = i
      self.index_dict[i] = v
    for key in self.edge_dict.keys():
      for w in self.edge_dict[key]:
        self.matrix[self.word_index[key]][self.word_index[w]] = 1
        self.matrix[self.word_index[w]][self.word_index[key]] = 1
    #归一化
    for j in range(self.matrix.shape[1]):
      sum = 0
      for i in range(self.matrix.shape[0]):
        sum += self.matrix[i][j]
      for i in range(self.matrix.shape[0]):
        self.matrix[i][j] /= sum 

  #根据textrank公式计算权重
  def calPR(self):
    self.PR = np.ones([len(set(self.word_list)), 1])
    for i in range(self.iternum):
      self.PR = (1 - self.alpha) + self.alpha * np.dot(self.matrix, self.PR) 

  #输出词和相应的权重
  def printResult(self):
    word_pr = {}
    for i in range(len(self.PR)):
      word_pr[self.index_dict[i]] = self.PR[i][0]
    res = sorted(word_pr.items(), key = lambda x : x[1], reverse=True)
    print(res) 

if __name__ == '__main__':
  s = '程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。'
  tr = TextRank(s, 3, 0.85, 700)
  tr.cutSentence()
  tr.createNodes()
  tr.createMatrix()
  tr.calPR()
  tr.printResult() 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python实现关键词提取的示例讲解

    新人小菜鸟又来写博客啦!!!没人表示不开心~~(>_<)~~ 今天我来弄一个简单的关键词提取的代码 文章内容关键词的提取分为三大步: (1) 分词 (2) 去停用词 (3) 关键词提取 分词方法有很多,我这里就选择常用的结巴jieba分词:去停用词,我用了一个停用词表. 具体代码如下: import jieba import jieba.analyse #第一步:分词,这里使用结巴分词全模式 text = '''新闻,也叫消息,是指报纸.电台.电视台.互联网经常使用的记录社会.传播信息.反映时

  • python提取内容关键词的方法

    本文实例讲述了python提取内容关键词的方法.分享给大家供大家参考.具体分析如下: 一个非常高效的提取内容关键词的python代码,这段代码只能用于英文文章内容,中文因为要分词,这段代码就无能为力了,不过要加上分词功能,效果和英文是一样的. 复制代码 代码如下: # coding=UTF-8 import nltk from nltk.corpus import brown # This is a fast and simple noun phrase extractor (based on

  • 教你用python3根据关键词爬取百度百科的内容

    前言 关于python版本,我一开始看很多资料说python2比较好,因为很多库还不支持3,但是使用到现在为止觉得还是pythin3比较好用,因为编码什么的问题,觉得2还是没有3方便.而且在网上找到的2中的一些资料稍微改一下也还是可以用. 好了,开始说爬百度百科的事. 这里设定的需求是爬取北京地区n个景点的全部信息,n个景点的名称是在文件中给出的.没有用到api,只是单纯的爬网页信息. 1.根据关键字获取url 由于只需要爬取信息,而且不涉及交互,可以使用简单的方法而不需要模拟浏览器. 可以直接

  • 浅析Python中yield关键词的作用与用法

    前言 为了理解yield是什么,首先要明白生成器(generator)是什么,在讲生成器之前先说说迭代器(iterator),当创建一个列表(list)时,你可以逐个的读取每一项,这就叫做迭代(iteration). >>> mylist = [1, 2, 3] >>> for i in mylist : ... print(i) 1 2 3 mylist 是一个可迭代的对象.当使用一个列表生成式来建立一个列表的时候,就建立了一个可迭代的对象: >>>

  • python结合shell查询google关键词排名的实现代码

    最近老婆大人的公司给老婆大人安排了一个根据关键词查询google网站排名的差事.老婆大人的公司是做seo的,查询的关键词及网站特别的多,看着老婆大人这么辛苦的重复着查询工作,心疼啊.所以花点时间用python写了一个根据关键词搜索网站排名的py脚本. 在写这个脚本之前,我也曾在网站搜索过关于在google查排名的脚本.很多是利用google的api.但是我测试了一下,不准.所以,自己写一个吧. 脚本内容如下:(关键词我在网站随便找了几个.以做测试使用) #vim keyword.py impor

  • Python 结巴分词实现关键词抽取分析

    1 简介 关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来.这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语.因此,目前依然可以在论文中看到关键词这一项. 除了这些,关键词还可以在文本聚类.分类.自动摘要等领域中有着重要的作用.比如在聚类时将关键词相似的几篇文档看成一个团簇,可以大大提高聚类算法的收敛速度:从某天所有的新闻中提取出这些新闻的关键词,就可以大致了解那天发生了什么事情:或者将某段时间内几个人的微博拼成一篇长文本,然后抽取关键词就

  • python微信公众号之关键词自动回复

    最近忙国赛的一个项目,我得做一个微信公众号.功能就是调数据并回复给用户,需要用户发送给公众号一个关键词,通过关键词自动回复消息. 这时就是查询微信公众平台文档了,地址如下: 文档 按照它的入门指南,我基本上了解了用户给公众号发送消息的一个机制,并且一旦给公众号发送消息,在开发者后台,会收到公众平台发送的一个xml,所以通过编写Python脚本进行xml的解析与自动发送功能. 如果用户给公众号发送一段text消息,比如"hello",那么后台就会收到一个xml为: <xml>

  • python实现搜索指定目录下文件及文件内搜索指定关键词的方法

    本文实例讲述了python实现搜索指定目录下文件及文件内搜索指定关键词的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python -O # -*- coding: UTF-8 -*- """ Sucht rekursiv in Dateiinhalten und listet die Fundstellen auf. """ __author__ = "Jens Diemer" __license__

  • Python抓取淘宝下拉框关键词的方法

    本文实例讲述了Python抓取淘宝下拉框关键词的方法.分享给大家供大家参考.具体如下: import urllib2,re for key in open('key.txt'): do = "http://suggest.taobao.com/sug?code=utf-8&q=%s" % key.rstrip() _re = re.findall('\[\"(.*?)\",\".*?\"\]',urllib2.urlopen(do).re

  • python通过BF算法实现关键词匹配的方法

    本文实例讲述了python通过BF算法实现关键词匹配的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: #!/usr/bin/python # -*- coding: UTF-8 # filename BF import time """ t="this is a big apple,this is a big apple,this is a big apple,this is a big apple." p="apple&q

  • python多进程提取处理大量文本的关键词方法

    经常需要通过python代码来提取文本的关键词,用于文本分析.而实际应用中文本量又是大量的数据,如果使用单进程的话,效率会比较低,因此可以考虑使用多进程. python的多进程只需要使用multiprocessing的模块就行,如果使用大量的进程就可以使用multiprocessing的进程池--Pool,然后不同进程处理时使用apply_async函数进行异步处理即可. 实验测试语料:message.txt中存放的581行文本,一共7M的数据,每行提取100个关键词. 代码如下: #codin

随机推荐