author:weizhendong

data:2019.12.19

func:绘制三国演义人物关系图

"""

import codecs

import jieba.posseg as pseg

import xlwt

def excel_write(names,workbook):

# 创建一个worksheet

worksheet = workbook.add_sheet('node')

worksheet.write(0, 0, label='ID')

worksheet.write(0, 1, label='Label')

worksheet.write(0, 2, label='Weight')

i=1

for name, times in names.items():

if times > 10:

worksheet.write(i, 0, label=str(name))

worksheet.write(i, 1, label=str(name))

worksheet.write(i, 2, label=str(times))

i = i+1

# 创建一个worksheet

worksheet1 = workbook.add_sheet('edge')

worksheet1.write(0, 0, label='Source')

worksheet1.write(0, 1, label='Target')

worksheet1.write(0, 2, label='Weight')

i=1

for name, edges in relationships.items():

for v, w in edges.items():

if w > 10:

worksheet1.write(i, 0, label=name)

worksheet1.write(i, 1, label=v)

worksheet1.write(i, 2, label=str(w))

i = i+1

workbook.save('People_node.xls')

names = {}# 保存人物,键为人物名称,值为该人物在全文中出现的次数

relationships = {}#保存人物关系的有向边,键为有向边的起点,值为一个字典 edge ,edge 的键为有向边的终点,值是有向边的权值

lineNames = []# 缓存变量,保存对每一段分词得到当前段中出现的人物名称

excludes = {'将军', '却说', '令人', '赶来', '徐州', '不见', '下马', '喊声', '因此', '未知', '大败', '百姓', '大事', '一军', '之后', '接应', '起兵',

'成都', '原来', '江东', '正是', '忽然', '原来', '大叫', '上马', '天子', '一面', '太守', '不如', '忽报', '后人', '背后', '先主', '此人',

'城中', '然后', '大军', '何不', '先生', '何故', '夫人', '不如', '先锋', '二人', '不可', '如何', '荆州', '不能', '如此', '主公', '军士',

'商议', '引兵', '次日', '大喜', '魏兵', '军马', '于是', '东吴', '今日', '左右', '天下', '不敢', '陛下', '人马', '不知', '都督', '汉中',

'一人', '众将', '后主', '只见', '蜀兵','马军','黄巾','立功','白发','大吉','红旗','士卒','钱粮','于汉','郎舅', '龙凤', '古之', '白虎',

'古人云', '尔乃', '马飞报', '轩昂', '史官', '侍臣', '列阵','玉玺','车驾','老夫','伏兵','都尉','侍中','西凉','安民','张曰','文武','白旗',

'祖宗','寻思'} # 排除的词汇

with codecs.open("111111.txt",'r',encoding='utf-8',errors='ignore') as f:

for line in f.readlines():

poss = pseg.cut(line) # 分词,返回词性

lineNames.append([]) # 为本段增加一个人物列表

for w in poss:

if w.flag != 'nr' or len(w.word) < 2 or w.word in excludes:

或该词词性不为nr(人名)时认为该词不为人名

elif w.word == '孔明' or w.word == '孔明曰' or w.word == '卧龙先生':

real_word = '诸葛亮'

elif w.word == '云长' or w.word == '关公曰' or w.word == '关公':

real_word = '关羽'

elif w.word == '玄德' or w.word == '玄德曰' or w.word == '玄德甚' or w.word == '玄德遂' or w.word == '玄德兵' or w.word == '玄德领' \

or w.word == '玄德同' or w.word == '刘豫州' or w.word == '刘玄德':

real_word = '刘备'

elif w.word == '孟德' or w.word == '丞相' or w.word == '曹贼' or w.word == '阿瞒' or w.word == '曹丞相' or w.word == '曹将军':

real_word = '曹操'

elif w.word == '高祖':

real_word = '刘邦'

elif w.word == '光武':

real_word = '刘秀'

elif w.word == '桓帝':

real_word = '刘志'

elif w.word == '灵帝':

real_word = '刘宏'

elif w.word == '公瑾':

real_word = '周瑜'

elif w.word == '伯符':

real_word = '孙策'

elif w.word == '吕奉先' or w.word == '布乃' or w.word == '布大怒' or w.word == '吕布之':

real_word = '吕布'

elif w.word == '赵子龙' or w.word == '子龙':

real_word = '赵云'

elif w.word == '卓大喜' or w.word == '卓大怒':

real_word = '董卓'

else:

real_word = w.word

lineNames[-1].append(real_word) # 为当前段的环境增加一个人物

if names.get(real_word) is None: # 如果某人物(w.word)不在人物字典中

names[real_word] = 0

relationships[real_word] = {}

names[real_word] += 1

# 输出人物出现次数统计结果

# for name, times in names.items():

# print(name, times)

。这种方法将产生很多的冗余边,这些冗余边将在最后处理。

for line in lineNames:

for name1 in line:

for name2 in line:

if name1 == name2:

continue

if relationships[name1].get(name2) is None:

relationships[name1][name2] = 1

else:

relationships[name1][name2] = relationships[name1][name2] + 1

# 由于分词的不准确会出现很多不是人名的“人名”,从而导致出现很多外汇返佣冗余边,

,即当边出现10次以上则认为不是冗余

# 创建一个workbook 设置编码

workbook = xlwt.Workbook(encoding = 'utf-8')

# 数据存储

excel_write(names,workbook)

原文链接:https://blog.csdn.net/wei_zhen_dong/article/details/103586780

java&plus;数据库&plus;D3&period;js 实时查询人物关系图

先看下 效果 某个用户,邀请了自己的朋友 ,自己的朋友邀请了其他朋友,1 展示邀请关系,2 点击头像显示邀请人和被邀请人的关系.(网上这种资料很少, 另外很多都是从JSON文件取 数据, 这里是从数据 ...

红楼梦人物关系图,一代大师成绝响,下回分解待何人,kindle读书摘要

人物关系图: https://www.cnblogs.com/images/cnblogs_com/elesos/1120632/o_2033091006.jpg 红楼梦 (古典名著普及文库) ( ...

【 D3&period;js 高级系列 — 2&period;0 】 机械图 &plus; 人物关系图

机械图(力路线图)结合老百姓的关系图中的生活,这是更有趣. 本文将以此为证据,所列的如何图插入外部的图像和文字的力学. 在[第 9.2 章]中制作了一个最简单的力学图.其后有非常多朋友有疑问,基本的问 ...

Python绘制wav文件音频图&lpar;静态&rpar;&lbrack;matplotlib&sol;wave&rsqb;

#!/usr/bin/env python # -*- coding: utf-8 -*- """ 绘制波形图 plottingWaveform.py "&qu ...

react中使用echarts(人物关系图)

项目中有时会用到echarts,可能不同的框架中语法稍有变通,前几天在react项目中遇到,写此篇以作记录. 不同的charts语法跟支持不同,本篇"echarts": &quot ...

D3&period;js&plus;Es6&plus;webpack构建人物关系图&lpar;力导向图&rpar;

功能列表:1. 增加下载SVG转PNG功能,图片尺寸超出可视区域也能够下载全部显示出来2. 增加图谱放大缩小平移功能3. 增加图谱初始化加载时自动缩放功能4. 增加导出excel功能,配合后台工具类达 ...

D3&period;js&plus;Es6&plus;webpack构建人物关系图&lpar;力导向图&rpar;,动态更新数据,点击增加节点,拖拽增加连线&period;&period;&period;

觉得不错的麻烦加个Star:https://github.com/zhangzn3/D3-Es6 在线预览地址:https://zhangzn3.github.io/D3-Es6 功能列表:1. 增加 ...

&lbrack;wx&rsqb;雪落香杉树人物关系图

雪落香杉树 开始的时候场面比较宏大,出场的人比较多.加上外国人名字没辨识度,所以容易乱 被告人: 宫本天道 9 10 11 12月被关77天(谋杀罪,9.16日早谋杀卡尔.海因)--妻子:初枝 白色衬 ...

python实例 三国人物出场次序 jieba库

#Cal3kingdoms.py import jieba txt = open("threekingdoms.txt", "r", encoding=&quo ...

随机推荐

Android闹钟 AlarmManager的使用

Android闹钟 AlarmManager的使用 AlarmManager介绍 AlarmManager这个类提供对系统闹钟服务的访问接口. 你可以为你的应用设定一个在未来某个时间唤醒的功能. 当闹 ...

java 获取某个URL的文件扩展名的方法(非精确,精确的扩展名应该使用服务器返回的MIME-TYPE)

public static String getFileExtension(URL extUrl) { //URL: "http://photosaaaaa.net/photos-ak-sn ...

理解Javascript参数中的arguments对象

ECMAScript中函数没有标签名的特性,所以ECMAScript函数中没有重载. Javascript中arguments的存在可以弥补javascript中函数没有重载的不足. Javascri ...

springMvc 支持hibernate validator

SpringMVC 支持Hibernate Validator 发表于9个月前(2014-08-04 11:34)   阅读(1780) | 评论(0) 11人收藏此文章, 我要收藏 赞0 5月23日 ...

php&lowbar;中替换换行符

//php 有三种方法来解决 //1.使用str_replace 来替换换行 $str = str_replace(array("\r\n", "\r", &q ...

Android studio开多个窗口引起的问题

1.clean 的时候,intermediates删不掉 2.出现:app:compile_DebugJavaWithJavac 没有具体错误 出现以上问题的时候只要把多余的删除,记得只留一个在当前窗 ...

利用 socket 发送 get&sol;post 请求

思路:利用 fsockopen 函数与要请求的主机建立一个通信通道,再将请求行.头信息.主体信息通过这个通道传输给主机实现请求的发送.利用这种方式发送 get 请求就是常说的小偷程序,发送 post ...

JavaScript经典片段

typeof jQuery != "undefined" || importjQuery(); 判断jQuery对象是否存在,如果不存在就调用importjQuery()方法加载j ...

mysql视图和临时表的区别

视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...

python人像绘制_python 绘制三国人物关系图相关推荐

  1. python关系图谱_python 绘制三国人物关系图

    author:weizhendong data:2019.12.19 func:绘制三国演义人物关系图 """ import codecs import jieba.po ...

  2. Python 三国演义文本可视化(词云,人物关系图,主要人物出场次数,章回字数)

    文章目录 效果展示 介绍 软件架构 使用说明 导入需要的库 执行main.py 这里以三国演义为例 三国演义.txt alice_mask.png 效果展示 介绍 Python读取小说文本,绘制词云图 ...

  3. python代码电影人物关系_Python基于network模块制作电影人物关系图

    Python基于network模块制作电影人物关系图,节点,值为,模块,关系,算法 Python基于network模块制作电影人物关系图 易采站长站,站长之家为您整理了Python基于network模 ...

  4. 便捷绘制人物关系图的软件分享

    看阿加莎.东野圭吾的推理小说,或者<红楼梦><冰与火之歌>这类的史诗巨作,经常会被错综复杂的人物关系弄昏头脑. 面对这些情况,怎么办? 今天分享两款压箱底的工具,支持高效绘制人 ...

  5. 如何快速理清并绘制复杂人物关系图

    两个主要方法:分类法.代际法(两种方法经常会结合着使用),基本能够把每个故事里的复杂人物关系厘清. 01 分类法 简单来说,就是把相同阵营/家庭/组织的人物归类到一起.这么说可能还是有点抽象,下面以题 ...

  6. python实现对小说的文本分析(人物关系图,人物词云等)

    文本分析 0.效果图 这里有些"二人"."不会"等词语没用筛选掉,手动筛选即可. 1.整体思路: 调用的库:jieba,matplotlib,networkx, ...

  7. 创新教育实例之“三国人物关系模型”

    最近与一位从事高校软件工程教育的同仁(挚友)聊天,谈到如何提高学生的创新性思维,两人不免大肆吐槽一番,有谈到过目前高校教育体制.学校的培养方案等等等等,但是这些东东无论是作为我们老师还是学生,只有微不 ...

  8. python 课后习题:项目二数据分析之《冰与火之歌》全五卷人物关系图

    其实这种人物关系图网上教程一大堆,我也是照着做的.在这里说一下我出错的地方,以及需要注意的一些东西. 注意: a. 代码缩进,我照着网上抄,网上的缩进不清楚然后我抄错了都没发现,结果出现了人名出现次数 ...

  9. 有哪些思维导图或其他软件适合画人物关系图?

    先说思维导图软件(以MindMaster为例) 诚然,大部分思维导图软件都是有一个中心主题,然后向两边发散.但是也有小部分思维导图软件支持"浮动主题",比如MindMaster.所 ...

最新文章

  1. 升级鸿蒙实例,华为鸿蒙 HarmonyOS 最新动作:上线 40+ 个 Sample 示例应用
  2. 【Network Security!】关于DDOS攻击的现状分析与探索
  3. jboss eap 7_使用JBoss EAP 7的HTTP / 2
  4. DynamipsGUI下CISCO SDM的安装配置
  5. idea 2020.2 如何设置classpath_开发属于自己的第一款IDEA插件!
  6. 《Python编程从入门到实践》记录之将Python函数存储在模块中(import、import*)
  7. 汇编中寄存器加[]的意思
  8. sqlserver DBLINK
  9. owasp testing guide 2014 中文
  10. ERP系统实施之入门
  11. 「POI2012」约会 Rendezvous
  12. 如何给Excel减肥(相关技巧和注意事项)
  13. java单核cpu飙高考死_java多线程在单核CPU上,还是需要volatile synchronized吗?
  14. SDX55如何使用adb命令读写AT指令
  15. python九九乘法表的实例_python九九乘法表的实例
  16. 密码学 BugKu 这不是摩斯密码
  17. 谷歌地图api 微信小程序_使用Google的融合位置提供程序API进行实时位置跟踪
  18. 2021-10-30
  19. 2019年寒假 纪中培训总结
  20. 《中华红》一个会作词的程序员

热门文章

  1. Juniper SRX 简单命令一
  2. 【JavaSE阶段学习笔记一】数组以及数组之前的知识点
  3. iOS8 通知中心扩展制作入门
  4. 04 HTML_网页中的表单
  5. SQL条件IF函数(MySql)
  6. RT-Thread内核源码分析-线程栈结构分析
  7. Python基础十五:面向对象编程四:高级特性
  8. bzoj乱刷计划2 19/20
  9. uniapp 开发移动端对接巴法云物联网平台控制ESP8266开关灯
  10. AIGC之GPT-4:GPT-4的简介(核心原理/意义/亮点/技术点/缺点/使用建议)、使用方法、案例应用(计算能力/代码能力/看图能力等)之详细攻略