python 分析人物关系_基于共现发现人物关系的python实现
基于共现发现人物关系的python实现
1.共现关系
在文献计量学中,关键词的共词方法常用来确定该文献集所代表学科中各主题之间的关系。而在这里,我们需要通过分析一篇小说或剧本,来分析剧中各个角色之间的人物关系。两者有很相同的地方。
一般我们认为,在一篇文章中的同一段出现的两个人物之间,一定具有某种关联,因此我们的程序的大致流程也可以确定下来。我们可以先做分词,将每一段中的人物角色抽取出来,然后以段落为单位,统计两个角色同时出现的出现次数,并把结果存在一个二维矩阵之中。这个矩阵也可以作为关系图的矩阵,矩阵中的元素(统计的出现次数)就是边的权值。
举个例子,比如,现有三个段落的分词结果如下:a/b/c,b/a/f,a/d/c,那么就是ab共现2次,ac共现2次,以此类推。
同时,为了方便,我们把人物和人物关系也通过文件记录,我们要分析的人物关系则来自于人名的名义(小说)
2.jieba分词
jieba分词的原理和语法可以参考这篇文章《中文分词的基本原理以及jieba分词的用法》
虽然有jieba分词可以对文章进行分析,但是仍然不是很准。比如,人名名义中有一个角色叫“易学习”,“易”是副词,“学习”是动词,因此很难将这个人名分出来。不过好在结巴分词提供了自定义字典,我们就可以根据之前的分词结果,一点一点去修正自己的字典即可。当然,我建议在构建自定义字典的时候,最好先直接把人名的名义的角色表直接抄一份过来,词性全部标记成nr(人名)。
这样我们就可以通过先分词,然后筛选词性的方式,把名字筛选出来。筛选出之后,就记录到每一段的一个list中,用于后面的矩阵构成。
这个过程我们是以段落为单位进行的,因此可以设置一个全局字典来记录每一个角色的权重(即词频统计)。代码如下:
# 将剧本进行分词,并将表示人名的词提出,将其他停用词和标点省略
# 提出人名的同时,同name字典记录下来,作为矩阵的行和列
def cut_word(text):
words=pseg.cut(text)
L_name=[]
for x in words :
if x.flag!='nr' or len(x.word) < 2:
continue
if not Names.get(x.word):
Names[x.word]=1
else:
Names[x.word]=Names[x.word]+1
L_name.append(x.word)
return L_name
# 建立词频字典和每段中的人物列表
def namedict_built():
global Names
with open('e:/PY/relationship_find/test.txt','r') as f:
for l in f.readlines():
n=cut_word(l)
if len(n)>=2: # 由于要计算关系,空list和单元素list没有用
Lines.append(n)
Names=dict(sorted(Names.items(),key = lambda x:x[1],reverse = True)[:36])
# print(Line)
3.构建矩阵
虽然嘴上说着矩阵,但实际上在代码里使用二维字典完成的,因为这样访问起来比较快。统计也很简(bao)单(li),就是把我们在上面得出的每一段的人物list都遍历一遍。。.
由于,分词结果总是会有一些奇怪的词,所以,我们在构建矩阵的时候,直接以上面代码中的Names中的人物为基准,滤掉其他不在Names中的词,不然会有其他东西乱入。代码如下:
# 通过遍历Lines来构建贡献矩阵
def relation_built():
for key in Names:
relationships[key]={}
for line in Lines:
for name1 in line:
if not Names.get(name1):
continue
for name2 in line:
if name1==name2 or (not Names.get(name2)):
continue
if not relationships[name1].get(name2):
relationships[name1][name2]= 1
else:
relationships[name1][name2] = relationships[name1][name2]+ 1
# print(relationships)
做出来的图。。
python 分析人物关系_基于共现发现人物关系的python实现相关推荐
- 【转载】基于共现发现人物关系的python实现
转载自:基于共现发现人物关系的python实现 作者:大邓[公众号:大邓和他的python] 本篇文章是阅读实验楼 Foerc的"python基于共现提取<釜山行>人物关系&qu ...
- python红楼梦人物统计_基于共现使用Python来分析《红楼梦》中贾宝玉与金陵十二钗的关系...
上一篇,我们使用Python分析了<三国演义>中人物出现次数(罗贯中的<三国演义>中到底谁是主角?我们使用Python来分析一下),文中我们仅仅从人物出现次数,来推断出这部作品 ...
- 基于共现发现人物关系的python实现+gephi人物关系网+tableau词云
今天做的是小说人物关系图,小说是我最喜欢的一本,我看了好多遍,闲听落花的<盛华>. 共现:将每一段中的人物角色抽取出来,然后以段落为单位,统计两个角色同时出现的出现次数,并把结果存在一个二 ...
- 高中python课程实施方法_基于学科核心素养的高中信息技术Python教学探析
龙源期刊网 http://www.qikan.com.cn 基于学科核心素养的高中信息技术 Python 教学探析 作者:张明华 来源:<新课程 · 上旬> 2020 年第 07 期 摘 ...
- 利用python分析电商_基于Word2Vec+SVM对电商的评论数据进行情感分析
Word2Vec-sentiment 基于Word2Vec+SVM对电商的评论数据进行情感分析 首先是利用word2vec对正负评论数据进行词向量训练,然后利用SVM分类器对语料进行分类,具体的过程如 ...
- R语言 基于共现提取《雪中悍刀行》人物关系并画网络图
概述 雪中悍刀行作为现象级的网文,电视剧版即将上映,作为曾经的一员"妖孽"书粉,按捺不住想做点啥.最近在研究知识图谱,就以此为契机展开相关研究吧. 本文将基于简单共现关系,编写 R ...
- 基于共现关系的人物关系图
共现,顾名思义 ,共同出现.共现分析有多种,比如分析参考文献.作者.词汇对(关键词).作者机构等同时出现的情况,分析两者之间的密切联系. 在科研中貌似出现最多的是共词分析,即根据词汇在同一篇论文中共同 ...
- 基于共现提取人民的民义人物关系
"` -- coding: utf-8 -- import os,sys import re import jieba,codecs,math import jieba.posseg as ...
- 水文分析提取河网_基于图的河网段地理信息分析排序算法
水文分析提取河网 The topic of this article is the application of information technologies in environmental s ...
最新文章
- POJ -1573 Robot Motion
- 反函数计算 python
- 李永乐线性代数手写笔记-特征值和特征向量
- human-robotic eco system
- Javascript第四章函数function也是数据类型第六课
- 如何用纯 CSS 创作一个记事本翻页动画
- 厉害了:tcgames电脑玩手游助手新功能强势上线,可编程游戏按键
- 微型计算机主机内部结构,微型计算机主机由什么组成
- css过渡、动画3D环绕相册
- java socket 读取文件_java中ServerSocket读取文件流不是分行读取
- 基于stm32的物联网、智能家居控制系统
- 这两天净鼓捣新买的PALM680了!
- CDOJ 1144 Big Brother 二分图匹配
- Fragment底部导航栏的实现
- pop3工作原理和命令
- 燃气管道泄漏监测监控报警管理系统软件解决方案
- 淘宝SEO几个重要的步骤
- 变电所运维云平台在贵州某电力工程有限公司的设计与应用
- httpd的安装及HTML文件和cgi文件的测试
- python调用hypermesh调用tcl_TCL/TK编程之语法与hypermesh api讲解