流程概述

  1. 在网上找到《人民的名义》剧本并下载
  2. 在网上查询《人民的名义》的一些主要人物,做一个人物字典
  3. 基于共现原理寻找人物关系
  4. 使用软件Gephi绘制关系图,将关系可视化

人物字典

在结巴分词中,人物姓名以标记”nr”来标志。

侯亮平 nr
李达康 nr
达康  nr
沙瑞金 nr
沙书记 nr
高育良 nr
育良  nr
老师  nr
祁同伟 nr
陆亦可 nr
钟小艾 nr
高小琴 nr
吴惠芬 nr
欧阳菁 nr
赵瑞龙 nr
郑西坡 nr
赵东来 nr
梁璐  nr
季昌明 nr
程度  nr
丁义珍 nr
陈海  nr
赵德汉 nr
林华华 nr
周正  nr
陈岩石 nr
陈老 nr
刘新建 nr
蔡成功 nr
王馥真 nr
易学习 nr
田国福 nr
陈清泉 nr
刘姗  nr
陈群芳 nr
田杏枝 nr
张宝宝 nr
郑胜利 nr
孙连城 nr
肖钢玉 nr
吴心怡 nr
王大路 nr
秦局长 nr
周桂春 nr
王文革 nr
白处长 nr
孙海平 nr
毛娅  nr
张树立 nr
吴春林 nr
马文明 nr
金秘书 nr
侯浩然 nr
常成虎 nr
小皮球 nr
汤成兰 nr
李梁  nr
毕敬业 nr
何阿三 nr
张天峰 nr
尤瑞星 nr
陈文强 nr
杜伯仲 nr
美女老总 nr
老程 nr

基于人物共现的人物关系挖掘

我们假设两个人物在某一长度的文本中同时出现就认为这两个人物有关系,在这里我们选取这个长度为段落。即在同一段落中出现了两个不同的文本,即认为这两个人物有关系。

处理过程中的一些问题

  • 一些词汇如“林城”、“白云”、“吕州”等,它们的属性被归到了”nr”,而且出现次数较多,和一些人物共现次数较多,如果不做处理的话,它们将会出现在绘制的关系图中。在这里可以将这些词作为停用词梳理。
  • 一些人物之间常常会以亲密的词汇称呼对方,而且出现次数非常多,如果将这些词汇忽略,关系刻画可能会出现很大的偏差,如陈海和侯亮平之间的“猴子”,高育良和侯亮平、祁同伟之前的师生称呼。所以在分词之后,我们可以判断一下如果出现了这些亲密称呼,将其替代为他的姓名。

最终代码展示

# -*- encoding:utf-8 -*-
import jieba
import jieba.posseg as pseg
import codecs
import csv
stopwords=['吕州','林城','银行卡','明白','白云','嗡嗡嘤嘤','阴云密布','雷声','陈大','谢谢您','安置费','任重道远','孤鹰岭','阿庆嫂','岳飞','师生','养老院','段子','老总']
replace_words={'师母':'吴慧芬','陈老':'陈岩石','老赵':'赵德汉','达康':'李达康','高总':'高小琴','猴子':'侯亮平','老郑':'郑西坡','小艾':'钟小艾','老师':'高育良','同伟':'祁同伟','赵公子':'赵瑞龙','郑乾':'郑胜利','孙书记':'孙连城','赵总':'赵瑞龙','昌明':'季昌明','沙书记':'沙瑞金','郑董':'郑胜利','宝宝':'张宝宝','小高':'高小凤','老高':'高育良','伯仲':'杜伯仲','老杜':'杜伯仲','老肖':'肖钢玉','刘总':'刘新建',"美女老总":"高小琴"}
names={} #姓名字典
relationships ={} #关系字典
lineNames =[] #每段内人物的关系
node=[] #存放处理后的人物
def read_txt(path): #读取剧作并分词jieba.load_userdict("person.txt") #加载人物字典(注意这个文件要用utf-8编码,可以使用sublime进行转换为utf-8编码)f=codecs.open(path,'r') #读取剧作,并将其转换为utf-8编码for line in f.readlines():poss=pseg.cut(line)  #分词并返回该词词形lineNames.append([])  #为新读入的一段添加人物名称列表for w in poss:if w.word in stopwords:  #去掉某些停用词continueif w.flag != "nr" or len(w.word) <2 : if w.word not in replace_words: continueif w.word in replace_words: #将某些在文中人物的昵称替换成正式的名字w.word=replace_words[w.word]lineNames[-1].append(w.word)  #为当前段增加一个人物if names.get(w.word) is None: #如果这个名字从来没出现过,初始化这个名字names[w.word] =0relationships[w.word] ={}names[w.word] +=1 #该人物出现次数加1for 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] +=1 #如果两个人已经出现过,则亲密度加1
def write_csv():# 在windows这种使用\r\n的系统里,不用newline=‘’的话# 会自动在行尾多添加个\r,导致多出一个空行,即行尾为\r\r\ncsv_edge_file = open("edge.csv", "w", newline="")writer = csv.writer(csv_edge_file)writer.writerow(["source", "target", "weight","type"])  # 先写入列名,"type"为生成无向图做准备for name,edges in relationships.items():for v,w in edges.items():if w>20:node.append(name)writer.writerow((name,v,str(w),"undirected"))  # 按行写入数据csv_edge_file.close()#生成node文件s=set(node)csv_node_file =open("node.csv","w",newline="")wnode =csv.writer(csv_node_file)wnode.writerow(["ID","Label","Weight"])for name,times in names.items():if name in s:wnode.writerow((name,name,str(times) ) )csv_node_file.close()if __name__=='__main__':file = "renmindemingyi.txt"edge_file="edge.txt"read_txt(file)write_csv()

绘制图片

将生成的文件导入软件Gephi,简单的操作方法可以参考下面的链接
gephi学习笔记

结果展示

Python实现《人民的名义》关系可视化相关推荐

  1. ECharts 实现人民的名义关系图谱 代码开源

    1.什么是ECharts ECharts是百度开源的纯 Javascript 图表库,目前开源可以与highcharts相匹敌的一个图表库,相信有很多国内用户使用. 官网 http://echarts ...

  2. 基于python-django的neo4j人民的名义关系图谱查询系统

    简介 这个系统主要是基于neo4j的关系图谱联系使用 里面的关系是在网上找的数据文件,主要是人民的名义对应关系 首先是吧数据对应的节点和关系写入的neo4j里面 然后使用django编写了一个web服 ...

  3. python使用Networkx生成人物关系可视化详解

    一,先说实现的思路 1,将文本中出现的重要人物名字放入列表中:也可以使用自然语言处理工具将词性标记为'nr'的词语放入列表中,但一则费时费力二则准确性太差.所以,简单粗暴但高效的做法是直接从搜索引擎中 ...

  4. Week 1 中文分词及其初步应用-人民的名义词云

    本文灵感及主要内容来源于以下文章: http://www.tuicool.com/wx/mqIV73E http://blog.csdn.net/qq_21057881/article/details ...

  5. 【正一专栏】从人民的名义看失败的婚姻关系

    从人民的名义看失败的婚姻关系 人民的名义其中几对夫妻失败的婚姻关系引人关注,展示了人间百态.从中也可以看出婚姻关系确实是家庭关系的基石,婚姻关系处理不好,就会带来各种各样的问题,腐败也会随之而来.天下 ...

  6. python爬取今日头条的文章_Python3爬取今日头条有关《人民的名义》文章

    Python3爬取今日头条有关<人民的名义>文章 最近一直在看Python的基础语法知识,五一假期手痒痒想练练,正好<人民的名义>刚结束,于是决定扒一下头条上面的人名的名义文章 ...

  7. python爬取今日头条文章json中data出现none_Python3爬取今日头条有关《人民的名义》文章...

    最近一直在看Python的基础语法知识,五一假期手痒痒想练练,正好<人民的名义>刚结束,于是决定扒一下头条上面的人名的名义文章,试试技术同时可以集中看一下大家的脑洞也是极好的. 首先,我们 ...

  8. python 知识图谱 红楼_毕业设计:基于知识图谱的《红楼梦》人物关系可视化(运行篇)...

    知识图谱是个非常有趣的方向,在公司业务应用方面也非常广泛.比如对搜索推荐的优化,让推荐的内容更加丰富,甚至给用户以意外之喜.比如在智能问答方面,避免多轮对话,从用户的一个简单的问句,给用户丰富的答案, ...

  9. 人物关系可视化python实现

      今天跟大家介绍以下知识.怎么来实现文本中的人物关系可视化? 一.软件安装   安装的软件,点击此处,整个流程及安装过程见参考博客 提醒一下:   注意下载的文件一定要和自己的python版本和电脑 ...

  10. 《人民的名义》---简单的文本分析

    我们都知道进行自然语言处理的第一步就是分词,下面使用jieba模块对最近比较热的电视剧<人民的名义>进行分词,并对它进行一些简单的文本分析. 一.jieba模块中常用的方法说明(githu ...

最新文章

  1. android微博客户端下载,iBeebo微博客户端
  2. Linux操作系统下以不同颜色命名的文件类型
  3. 在scrapy中parse函数里面xpath的内容打印不出来_Scrapy中 CrawlSpider 使用
  4. 【渗透测试】一次授权的渗透测试——建议收藏
  5. LL(1)分析表的构造
  6. Python语言学习 (六)1.2
  7. HDU2009 求数列的和【入门】
  8. s10_part3_django_ORM_查询相关_非常重要
  9. [图:知识竞赛题库PPT制作] 为上海棒约翰餐饮管理有限公司定制的的知识竞赛题目及展示界面-PPT格式-双屏展示。
  10. 测试的重要性:蚊子让快递柜的触摸失灵
  11. Cityscapes数据集gtFine部分介绍
  12. 【C++ Primer Plus】第14章 C++中的代码重用
  13. 国内就能读的中国人民大学与加拿大女王大学金融硕士,为职业发展的下一个阶段积蓄能量
  14. 37d43641ef34f1a8a47c803dcf5a13793e3b9fef
  15. CAD2014学习笔记-常用绘图命令和工具
  16. 要「自我颠覆」的华为Mate 10来了
  17. FANUC机器人的通讯方式(4)TIA博途如何添加机器人组态网络
  18. 输入一个字符串,将字符串中的大写字母改成小写字母,小写字母不变,其他字符忽略,然后输出转换之后的结果。
  19. 计算机启动后 不显示桌面,电脑开机后不显示桌面怎么办?
  20. MySql 根据身份证号判断年龄所属省份与性别男女

热门文章

  1. 小鸡腿U R III 杭州2013
  2. Python学习,接上篇文章的50道基础入门练习题(附答案)
  3. python 录音vad_语音活性检测器py-webrtcvad安装使用
  4. keyshot pro 10报许可证(*.lic)对该计算机无效解决办法
  5. 微信开发者工具 设置wxml属性换行
  6. 一图囊括所有ES6知识点结构
  7. SQLSERVER的中文排序规则
  8. js的unshift()的使用
  9. 水泊梁山迎圣诞,Python 抽奖助好汉
  10. ubuntu桌面美化mac_教程:为你的linux桌面带来Mac OS Mojave的体验