准备工作

jieba中文分词库的安装(Anaconda没有集成)

win + r 运行cmd 输入 pip install jieba 这个命令可能会安装失败

用国内镜像就行:cmd 命令输入: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba

如果你安装Anaconda 时没有配制环境变量建议通过以下方法安装

1、点击开始菜单,找到Anaconda3文件夹;

2、展开文件夹,找到并打开Anaconda Prompt;

3、执行    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jieba

人物字典dict.txt

林震南
林平之
王夫人
史镖头
郑镖头
方人智
余观主
宛儿
陈七
白二
崔镖头
季镖头
高镖头
褚镖头
林福
黄夫子
狄镖头
霍镖头
于人豪
贾人达 

笑傲江湖 TXT 文件

脚本文件简介

relationship.py 是人物关系的生成,会自动生成 xiaoao_edge.txt 和 xiaoao_node.txt 两个文件

test.py 是生成人物关系网的主要部分

实现功能

1、读入小数数据和角色词典后,对数据分词后生成角色关系数据(有向关系数据)

2、无需gephi绘图即可制作绚丽角色关系网络图。

代码

1.relationship.py

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 22 21:45:01 2020@author: 陈建兵
"""import jieba, codecs
import jieba.posseg as pseg#================================================================
#返回人物列表
def node_ren() :ren_list=[]    # 打开文件fo = open("dict.txt", "r", encoding='utf-8-sig')print ("文件名为: ", fo.name)for line in fo.readlines():                          #依次读取每行  line = line.strip()                             #去掉每行头尾空白#line = line.split(" ")ren_list.append(line)#print ("读取的数据为: %s" % (line))return ren_list# 关闭文件fo.close()names = {}          # 姓名字典
relationships = {} # 关系字典
lineNames = []     # 每段内人物关系
myList = node_ren()
#print(myList)# count names
jieba.load_userdict("dict.txt")       # 加载字典
with codecs.open("笑傲江湖.txt", "r", "utf8") as f:for line in f.readlines():poss = pseg.cut(line)       # 分词并返回该词词性lineNames.append([])     # 为新读入的一段添加人物名称列表for w in poss:# 当分词长度小于2或不在我们提供的字典列表里的分词认为该词不为人名if len(w.word) < 2 or w.word not in myList:continue         lineNames[-1].append(w.word)        # 为当前段的环境增加一个人物if names.get(w.word) is None:names[w.word] = 0relationships[w.word] = {}names[w.word] += 1                   # 该人物出现次数加 1# explore relationships
for line in lineNames:                  # 对于每一段for name1 in line:                   for name2 in line:              # 每段中的任意两个人if name1 == name2:continueif relationships[name1].get(name2) is None:      # 若两人尚未同时出现则新建项relationships[name1][name2]= 1else:relationships[name1][name2] = relationships[name1][name2]+ 1       # 两人共同出现次数加 1# output
with codecs.open("xiaoao_node.txt", "w", "gbk") as f:#f.write("Id Label Weight\r\n")for name, times in names.items():f.write(name + " " + "\r\n")with codecs.open("xiaoao_edge.txt", "w", "gbk") as f:#f.write("Source Target Weight\r\n")for name, edges in relationships.items():for v, w in edges.items():if w > 3:f.write(name + " " + v + "\r\n")

2.test.py

# -*- coding: utf-8 -*-
"""
Created on Sun Nov 22 21:54:45 2020@author: 陈建兵
"""
#导入networkx,matplotlib包
import networkx as nx
import matplotlib.pyplot as plt
#导入random包
import random#==============================================================
#统计文件行数
def countLine(filePath):count = -1for count,line in enumerate(open(filePath,'r')):passcount += 1return count#================================================================
#返回人物节点列表
def node() :node_list=[]    # 打开文件fo = open("xiaoao_node.txt", "r")print ("文件名为: ", fo.name)for line in fo.readlines():                          #依次读取每行  line = line.strip()                             #去掉每行头尾空白  node_list.append(line)#print ("读取的数据为: %s" % (line))return node_list# 关闭文件fo.close()
#========================================================================
#返回人物节点关系
def edge() :#================================================================edge_list=[]    # 打开文件fo = open("xiaoao_edge.txt", "r")print ("文件名为: ", fo.name)for line in fo.readlines():                          #依次读取每行  line = line.strip()                             #去掉每行头尾空白      line_tup = tuple(line.split(" "))edge_list.append(line_tup)#print ("读取的数据为: %s" % (line))return edge_list# 关闭文件fo.close()
#=====================================================================
#颜色生成
colorNum = countLine('xiaoao_node.txt')
def randomcolor():colorArr = ['1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']color = ""for i in range(6):color += colorArr[random.randint(0,14)]return "#"+colordef color_list():colorList = []for i in range(colorNum):colorList.append(randomcolor())return colorList#========================画图开始=================================
colors = color_list()
#有向图
DG = nx.DiGraph()
#一次性添加多节点,输入的格式为列表
DG.add_nodes_from(node())
#添加边,数据格式为列表
DG.add_edges_from(edge())
#作图,设置节点名显示,节点大小,节点颜色
nx.draw(DG,with_labels=True, node_size=900, node_color = colors, font_family ='YouYuan')
#保存图表
plt.savefig('笑傲江湖人物关系网.png',bbox_inches='tight')
plt.show()

运行结果

代码下载

https://download.csdn.net/download/qq_42324086/13159703

python实现笑傲江湖人物关系网相关推荐

  1. python笑傲江湖_python实现笑傲江湖人物关系网

    准备工作 jieba中文分词库的安装(Anaconda没有集成) win + r 运行cmd 输入 pip install jieba 这个命令可能会安装失败 用国内镜像就行:cmd 命令输入: pi ...

  2. 基于共现发现人物关系的python实现+gephi人物关系网+tableau词云

    今天做的是小说人物关系图,小说是我最喜欢的一本,我看了好多遍,闲听落花的<盛华>. 共现:将每一段中的人物角色抽取出来,然后以段落为单位,统计两个角色同时出现的出现次数,并把结果存在一个二 ...

  3. python红楼梦人物统计_Python分析红楼梦,宝玉和十二钗的人物关系

    红楼梦出场人物很多,人物关系极其复杂,这次我们用Python来分析主人公贾宝玉和他的姐妹们,金陵十二钗之间的关系,做一个简要的分析. 出场率 由于我们只统计宝玉和十二钗(正册)这些人物,因此我们需要实 ...

  4. python 小说人物分析_用python分析小说人物关系(二)——实战篇

    用到的工具jieba jieba分词,最好用的开源中文分词工具.他最主要的两个功能是分词和关键词的抽取.在这里我们需要用他的分词功能来提取文本中的人名. gephi gephi是一个开源的复杂网络数据 ...

  5. python实现3d人物建模_放心的python实现3d人物建模容易学吗?,zbrush不规则金属硬边...

    湖南知了教育科技有限公司是一家以用心做教育为宗旨的互联网教育机构,让所有想学习的人获得蜕变,成为一家极具有口碑的教育企业,为社会的进步和发展做贡献,既为经师,更为人师.以身传道,用心授业.企业总部坐落 ...

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

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

  7. python人物关系抽取小说_用python分析小说人物关系(一)——理论篇

    1.工具介绍 jieba jieba分词,最好用的开源中文分词工具.他最主要的两个功能是分词和关键词的抽取.在这里,我们需要用他的分词功能来提取文本中的人名. gephi gephi是一个开源的复杂网 ...

  8. python统计小说人物_Python数据分析之基情的择天记

    人一生都可能无法逆天改命,但你却是要去奋斗一把 本文章主要通过最简单的共线性关系,利用gephi工具绘制择天记的人物关系图. 准备工作在网上下载<择天记>小说以及创建小说人物的txt. j ...

  9. 怎样用Python控制图片人物动起来?一文就能Get!

    作者 | 李秋键 责编 | 李雪敬 头图 | CSDN 下载自视觉中国 出品 | AI科技大本营(ID:rgznai100) 引言:近段时间,一个让梦娜丽莎图像动起来的项目火遍了朋友圈.而今天我们就将 ...

最新文章

  1. Login rule 权限规则设置自动跳转页面
  2. 数据结构 python的书推荐-java数据结构书一般推荐看什么好?
  3. 用boolalpha输出true或false的问题
  4. Redis 基本操作一
  5. android异步更新UI
  6. mysql两个表查询修改_MySQL:查询、修改(二)
  7. 新一代数据安全的制胜法宝-UBA
  8. 3.15 Ext JS 之 Tooltip 的基本使用
  9. win10 桌面设置为远程桌面
  10. 微信公众号自定义分享踩坑
  11. 团购网站大缩水:5058家团购网站 只剩176家
  12. 将Ubuntu装入移动硬盘
  13. ZeroTier 和 FRP 速度对比实验(附搭建方法)
  14. BOC保护的色氨酸卟啉化合物(TAPP-Trp-BOC)桃红色固体162.8mg供应-齐岳供应
  15. vue移动端h5中a标签下载/预览文件
  16. Excel笔记(3)常用函数11-20
  17. android怎么监听当前应用被卸载
  18. 2020文献积累:计算机 [1] Reinforcement learning in Economics and Finance
  19. pip更新python版本_Python pip版本升级
  20. linux查看usb设备卷标,Linux findfs命令实例讲解(查找指定卷标或者UUID的文件系统对应的设备文件)...

热门文章

  1. 远程电脑复制粘贴用不了怎么解决?
  2. 聚焦“元宇宙+会展”新业态,赋能数字经济发展新动能
  3. Oracle之将常驻内存的程序恢复为默认缓冲池
  4. excelize-golang中excel表格内容读取
  5. 15个前端开发/网页设计师必备的Bookmarklet
  6. Tomcat9的安装教程及部署自己的第一个网页
  7. C#WebBrowser控件使用教程与技巧收集--苏飞收集
  8. [导航教程] [C#基类库大全]官方产品发布与源码下载---苏飞版
  9. 【opencv】调用caffe、tensorflow、darknet模型
  10. 荔枝派进入u-boot