转自

# https://blog.csdn.net/qq_36910634/article/details/97764251
import numpy as np
import pandas as pd
import re, os, jieba
from itertools import chain# 本文要处理的新闻一共3篇,都是关于证监会主席易会满同志新官上任的报道,新闻的大致内容是易会满
# 同志怎么对中国资本市场的改革指点江山。
#
# 文档的原网页(看到百家号,不要鄙视我):
#
# https://baijiahao.baidu.com/s?id=1626615436040775944&wfr=spider&for=pc
# https://baijiahao.baidu.com/s?id=1626670136476331971&wfr=spider&for=pc
# http://finance.sina.com.cn/roll/2019-02-28/doc-ihrfqzka9798377.shtml"""第一步:把文档划分成句子"""# 文档所在的文件夹
c_root = os.getcwd() + os.sep + "cnews" + os.sepsentences_list = []
for file in os.listdir(c_root):fp = open(c_root + file, 'r', encoding="utf8")for line in fp.readlines():if line.strip():# 把元素按照[。!;?]进行分隔,得到句子。line_split = re.split(r'[。!;?]', line.strip())# [。!;?]这些符号也会划分出来,把它们去掉。line_split = [line.strip() for line in line_split ifline.strip() not in ['。', '!', '?', ';'] and len(line.strip()) > 1]sentences_list.append(line_split)
sentences_list = list(chain.from_iterable(sentences_list))
print("前10个句子为:\n")
print(sentences_list[:10])"""第二步:文本预处理,去除停用词和非汉字字符,并进行分词"""# 创建停用词列表
stopwords = [line.strip() for line in open('./stopwords.txt', encoding='UTF-8').readlines()]# 对句子进行分词
def seg_depart(sentence):# 去掉非汉字字符sentence = re.sub(r'[^\u4e00-\u9fa5]+', '', sentence)sentence_depart = jieba.cut(sentence.strip())word_list = []for word in sentence_depart:if word not in stopwords:word_list.append(word)# 如果句子整个被过滤掉了,如:'02-2717:56'被过滤,那就返回[],保持句子的数量不变return word_listsentence_word_list = []
for sentence in sentences_list:line_seg = seg_depart(sentence)sentence_word_list.append(line_seg)
print("一共有", len(sentences_list), '个句子。\n')
print("前10个句子分词后的结果为:\n", sentence_word_list[:10])# 保证处理后句子的数量不变,我们后面才好根据textrank值取出未处理之前的句子作为摘要。
if len(sentences_list) == len(sentence_word_list):print("\n数据预处理后句子的数量不变!")"""第三步:准备词向量"""word_embeddings = {}
# f = open('./sgns.financial.char', encoding='utf-8')
f = open('sgns.financial.word', encoding='utf-8')
for line in f:# 把第一行的内容去掉if '467389 300\n' not in line:values = line.split()# 第一个元素是词语word = values[0]embedding = np.asarray(values[1:], dtype='float32')word_embeddings[word] = embedding
f.close()
print("一共有" + str(len(word_embeddings)) + "个词语/字。")"""第四步:得到词语的embedding,用WordAVG作为句子的向量表示"""sentence_vectors = []
for i in sentence_word_list:if len(i) != 0:# 如果句子中的词语不在字典中,那就把embedding设为300维元素为0的向量。# 得到句子中全部词的词向量后,求平均值,得到句子的向量表示v = sum([word_embeddings.get(w, np.zeros((300,))) for w in i]) / (len(i))else:# 如果句子为[],那么就向量表示为300维元素为0个向量。v = np.zeros((300,))sentence_vectors.append(v)"""第五步:计算句子之间的余弦相似度,构成相似度矩阵"""
sim_mat = np.zeros([len(sentences_list), len(sentences_list)])from sklearn.metrics.pairwise import cosine_similarityfor i in range(len(sentences_list)):for j in range(len(sentences_list)):if i != j:sim_mat[i][j] = cosine_similarity(sentence_vectors[i].reshape(1, 300), sentence_vectors[j].reshape(1, 300))[0, 0]
print("句子相似度矩阵的形状为:", sim_mat.shape)"""第六步:迭代得到句子的textrank值,排序并取出摘要"""
import networkx as nx# 利用句子相似度矩阵构建图结构,句子为节点,句子相似度为转移概率
nx_graph = nx.from_numpy_array(sim_mat)# 得到所有句子的textrank值
scores = nx.pagerank(nx_graph)# 根据textrank值对未处理的句子进行排序
ranked_sentences = sorted(((scores[i], s) for i, s in enumerate(sentences_list)), reverse=True)# 取出得分最高的前10个句子作为摘要
sn = 10
for i in range(sn):print("第" + str(i + 1) + "条摘要:\n\n", ranked_sentences[i][1], '\n')

基于Word2vec加TextRank算法生成中文新闻摘要(附python代码)相关推荐

  1. Word2vec加TextRank算法生成文章摘要

    依赖包:https://download.csdn.net/download/dreamzuora/10853874 代码: String document = "算法可大致分为基本算法.数 ...

  2. 【车间调度】基于改进帝国企鹅算法求解车间调度问题附matlab代码

    1 内容介绍 传统车间调度问题仅仅考虑工件的分配问题.而柔性车间调度问题在传统车间调度问题上做了一定的延伸,它更接近实际生产过程的原因是由于其在传统车间调度问题中加入了对加工机器的选择.因此对其的研究 ...

  3. 手把手教你深度学习强大算法进行序列学习(附Python代码)

    作者:NSS 翻译:陈之炎 校对:丁楠雅 本文共3200字,建议阅读10分钟. 本文将教你使用做紧致预测树的算法来进行序列学习. 概述 序列学习是近年来深度学习的热点之一.从推荐系统到语音识别再到自然 ...

  4. TSP问题解析篇之自适应大邻域搜索(ALNS)算法深度通读(附python代码)

    01 概念科普篇 关于neighborhood serach,这里有好多种衍生和变种出来的胡里花俏的算法.大家在上网搜索的过程中可能看到什么Large Neighborhood Serach,也可能看 ...

  5. 基于TextRank算法的文本摘要(附Python代码)

    基于TextRank算法的文本摘要(附Python代码): https://www.jiqizhixin.com/articles/2018-12-28-18

  6. 【负荷预测】基于灰色预测算法的负荷预测(Python代码实现)

    目录 1 概述 2 流程图 3 入门算例  4 基于灰色预测算法的负荷预测(Python代码实现) 1 概述 "由于数据列的离散性,信息时区内将出现空集(不包含信息的定时区),因此只能按近似 ...

  7. ## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)***

    ## ***电池SOC仿真系列-基于扩展卡尔曼(EKF)算法的SOC估计(内含代码等资料)*** ## 1 研究背景 电池的荷电状态(SOC)代表的是电池当前的剩余容量,数值定义是电池剩余电量与电池额 ...

  8. 联邦学习算法介绍-FedAvg详细案例-Python代码获取

    联邦学习算法介绍-FedAvg详细案例-Python代码获取 一.联邦学习系统框架 二.联邦平均算法(FedAvg) 三.联邦随梯度下降算法 (FedSGD) 四.差分隐私随联邦梯度下降算法 (DP- ...

  9. 10 种机器学习算法的要点(附 Python 和 R 代码)(转载)

    10 种机器学习算法的要点(附 Python 和 R 代码)(转载) from:https://zhuanlan.zhihu.com/p/25273698 前言 谷歌董事长施密特曾说过:虽然谷歌的无人 ...

最新文章

  1. java debug体系为什么不能debug到jdk里所有的代码
  2. python爬虫百度百科-python每日一题:网络爬虫百度百科
  3. 【全国动态】服务器列表
  4. 后宫佳丽三千,假如古代皇帝也懂负载均衡算法...
  5. y电容如何选型_开关电源中电容如何快速选型
  6. python分类算法的应用_Python使用sklearn库实现的各种分类算法简单应用小结
  7. 转载 Assert断言知识
  8. 原来你是这样的JAVA[01]-基础一瞥
  9. 【转载】RESTful 架构风格概述
  10. Sorry sir!
  11. mysql的填充因子_SQL SERVER中,什么是填充因子?
  12. 微信安全验证是不是很脑残?
  13. adb安装配置及连接手机
  14. https://start.spring.io‘ 的初始化失败请检查 URL、网络和代理设置
  15. 云服务器和VPS服务器的区别
  16. FY4A数据读取与插值
  17. 利用matlab求解非线性规划问题
  18. 1=5,2=15,3=215,4=2145那么5等于多少
  19. linux chrome 网页字体,Linux 环境下怎么使 Chrome 浏览器字体更漂亮
  20. Servlet相关练习题

热门文章

  1. Linux桌面GUI系统的调度器应该怎么做才不卡顿呢?
  2. H5视频会议,直播,通话,教学,支持Webrtc、rtmp、sip、rtsp转协议、IPCAM、白板、桌面共享、免插件、web全平台、视频融合系统研发笔记。...
  3. Java新版本的控制台不在控制面板里面显示而是躲在这
  4. 喜欢吃鱼的朋友一定要转哦
  5. 基于CUBEMX和STM32C8T6的同轴麦轮小车制作(二)——HAL库接受jy61p陀螺仪数据,并解决数据溢出卡死问题。
  6. Python字符串前缀u、r、b、f含义
  7. HTLM 零基础入门教程(详解)
  8. 如何用html制作彩虹,javascript – 如何使用HTML5画布生成彩虹圈?
  9. 网盘下载速度太慢的话请看这里!
  10. 微信订阅号之1-注册