TextRank实现步骤如下:     #这一段是抄了别人的

(1)把给定的文本按照完整的句子进行分割;

(2)对每个句子进行分词和词性标注,过滤停用词,只保留特定词性;

(3)构建候选关键词图G=(V, E),首先生成关键词集((2)生成),然后采用共现关系构造两点之间的边,两个节点之间边

仅在对应词汇长度为K的窗口中出现,K表示窗口大小;

(4)迭代传播各节点的权重,直至收敛

(5)对节点权重进行排序,得到最重要的T看词;

(6)由(5)得到的T各词,在原始文本进行标记,若形成相邻词组,则组合成多词关键词。

import jieba
import jieba.posseg
from collections import defaultdict#定义无向有权图
class UndirectWeightGraph:d = 0.05def __init__(self):self.graph = defaultdict(list)def addEdge(self, start, end, weight):  #添加无向图边self.graph[start].append((start, end, weight))self.graph[end].append((end, start, weight))def rank(self):   #根据文本无向图进行单词权重排序,其中包含训练过程ws = defaultdict(float)  #pr值列表outSum = defaultdict(float)  #节点出度列表ws_init = 1.0/(len(self.graph) or 1.0)  #pr初始值for word, edge_lst in self.graph.items():   #pr, 出度列表初始化ws[word] = ws_initoutSum[word] = sum(edge[2] for edge in edge_lst)sorted_keys = sorted(self.graph.keys())for x in range(10):                        #多次循环计算达到马尔科夫稳定for key in sorted_keys:s = 0for edge in self.graph[key]:s += edge[2]/outSum[edge[1]] * ws[edge[1]]ws[key] = (1 - self.d) + self.d * smin_rank, max_rank = 100, 0for w in ws.values():   #归一化权重if min_rank > w:min_rank = wif max_rank < w:max_rank = wfor key, w in ws.items():ws[key] = (w - min_rank)*1.0/(max_rank - min_rank)return wsimport os
class KeywordExtractor(object):   #加载停用词表stop_words = set()def set_stop_words(self, stop_word_path):if not os.path.isfile(stop_word_path):raise Exception("jieba: file does not exit: " + stop_word_path)f = open(stop_word_path, "r", encoding="utf-8")for lineno, line in enumerate(f):self.stop_words.add(line.strip("\n"))return self.stop_wordsclass TextRank(KeywordExtractor):def __init__(self, stop_word_path=None):self.tokenizer = self.postokenizer = jieba.posseg.dtif not stop_word_path:stop_word_path = r"E:\学习相关资料\NLP\停用词表\stopwords-master\百度停用词表.txt"self.stop_words = KeywordExtractor.set_stop_words(self, stop_word_path=stop_word_path)self.pos_filter = frozenset(("ns", "n", "vn", "v"))self.span = 5def pairfilter(self, wp):  # wp 格式为 (flag, word)state = (wp.flag in self.pos_filter) and (len(wp.word.strip()) >= 2) and (wp.word.lower() not in self.stop_words)#print("1:", state)return statedef textrank(self, sentence, topK=20, withWeight=False, allowPOS=("ns", "n", "vn", "v")):self.pos_filt = frozenset(allowPOS)g = UndirectWeightGraph()word2edge = defaultdict(int)words = tuple(self.tokenizer.cut(sentence))for i, wp in enumerate(words):        #将句子转化为边的形式#print(wp.flag, wp.word)if self.pairfilter(wp):for j in range(i+1, i+self.span):if j >= len(words):breakif not self.pairfilter(words[j]):continueword2edge[(wp.word, words[j].word)] += 1for terms, w in word2edge.items():g.addEdge(terms[0], terms[1], w)nodes_rank = g.rank()if withWeight:tags = sorted(nodes_rank.items(), key=lambda x: x[1], reverse=True)else:tags = sorted(nodes_rank)if topK:return tags[: topK]else:tagsstop_word_path = r"E:\学习相关资料\NLP\停用词表\stopwords-master\百度停用词表.txt"
sentence = r"上海一银行女员工将银行1亿多人民币据为已有,海内外购置10多套房产"
extract_tags = TextRank(stop_word_path=stop_word_path).textrank
print(extract_tags(sentence=sentence, topK=2, withWeight=False))

对应的百度停用词表可以直接使用CSDN搜索资源,或者到github上下载

jieba下TextRank实现相关推荐

  1. jieba分词textrank算法

    2021SC@SDUSC TextRank是一种用以关键词提取的算法,因为是基于PageRank的,所以先介绍PageRank. PageRank通过互联网中的超链接关系确定一个网页的排名,其公式是通 ...

  2. 自然语言典型工具TextBlob、Gensim、Polyglot,关键词抽取(jieba、TF-IDF、textrank)和特征提取(CountVectorizer、TfidfVectorizer)

    一.自然语言处理的典型工具 自然语言处理的三项基本技术为单词切分.句法分析.语义理解. 1. TextBlob TextBlob是自然语言处理的python库.它为常见的自然语言处理提供一个简单地AP ...

  3. python怎么安装jieba库-python环境jieba分词的安装

    我的python环境是Anaconda3安装的,由于项目需要用到分词,使用jieba分词库,在此总结一下安装方法. 安装说明 ======= 代码对 Python 2/3 均兼容 * 全自动安装:`e ...

  4. 自然语言处理之jieba分词

    在处理英文文本时,由于英文文本天生自带分词效果,可以直接通过词之间的空格来分词(但是有些人名.地名等需要考虑作为一个整体,比如New York).而对于中文还有其他类似形式的语言,我们需要根据来特殊处 ...

  5. Python中文分词--jieba的基本使用

    中文分词的原理 1.中文分词(Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词. 分词就是将连续的字序列按照一定的规范重新组合成词序列的过程 2.现有的 ...

  6. Python大数据:jieba分词,词频统计

    实验目的 学习如何读取一个文件 学习如何使用DataFrame 学习jieba中文分词组件及停用词处理原理 了解Jupyter Notebook 概念 中文分词 在自然语言处理过程中,为了能更好地处理 ...

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

    转自:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 简介 关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来.这个可以追溯到文献 ...

  8. 中文文本关键词抽取的三种方法(TF-IDF、TextRank、word2vec)

    链接地址:https://github.com/AimeeLee77/keyword_extraction 1.基于TF-IDF的文本关键词抽取方法 词频(Term Frequency,TF) 指某一 ...

  9. Jieba库基本用法

    Jieba库对中文分词的支持下较好,将文本分成粒度更细的词. 一. 特点 (一)支持三种分词模式: 1. 精确模式,试图将句子最精确地切开,适合文本分析: 2. 全模式,把句子中所有的可以成词的词语都 ...

最新文章

  1. 浅析网站SEO优化对长尾关键词保持好感度的四大技巧
  2. 【颠覆认知】为什么YouTube广告只看五秒更赚钱,微博商业产品经理深度剖析。...
  3. python调用系统api_Python调用系统底层API播放wav文件的方法
  4. LeetCode Best Time to Buy and Sell Stock II
  5. C/C++中的##用法
  6. 40个很棒的由html5开发的网络游戏案例
  7. python如何退出命令行_如何退出python命令行
  8. [jQuery] jQuery的队列是如何实现的?队列可以用在哪些地方?
  9. 基于深度卷积神经网络的目标检测研究综述
  10. python爬取CVPR2018关于detection的论文
  11. c 语言从大到小排序算法,10 大经典排序算法(动图演示+ C 语言代码)
  12. highgui java opencv_OpenCV在C Qt应用程序中的highgui
  13. 载波与载波频率,中心频率的解释
  14. 经典算法分析:n与lgn
  15. IIC上拉电阻的注意事项
  16. MathType 运行时错误‘53’:文件未找到:MathPage.WLL
  17. 详细设计的工具——PAD图
  18. 2022年武汉市级产业化投资和技术改造专项以及工业智能化改造专项申报开始!13区申报条件、1千万补助
  19. C# 中DataGridView 表头设置
  20. Warshall算法C语言实现

热门文章

  1. 【Linux基础】vi编辑器(一文详解)
  2. postman的学习(一)
  3. 程序江湖:第十六章 天上的团队建设
  4. 实现MySQL同步数据到ES构建宽表
  5. vue+elementui穿梭框+上下移动功能
  6. 深度学习推动数字人文科学发展
  7. do while(0)的妙用
  8. linux环境下shellcode的编写:32位和64位
  9. 机器学习之数据分析与特征工程
  10. 安卓10蓝牙问题_关于GN集团贝尔通助听器安卓直连技术的问题解答