今天做的是小说人物关系图,小说是我最喜欢的一本,我看了好多遍,闲听落花的《盛华》。
共现:将每一段中的人物角色抽取出来,然后以段落为单位,统计两个角色同时出现的出现次数,并把结果存在一个二维矩阵之中。这个矩阵也可以作为关系图的矩阵,矩阵中的元素(统计的出现次数)就是边的权值。
#这个是标准语法,可以得到人物和人物出现的次数,《盛华》人物太多,且jieba.load_userdict在我这里没有反应,我改了一下代码。
import os, sys
import jieba, codecs, math
import jieba.posseg as pseg
names = {} # 姓名字典
relationships = {} # 关系字典
lineNames = [] # 每段内人物关系
jieba.load_userdict("dict.txt") # 加载字典
with codecs.open("busan.txt", "r", "utf8") 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:
continue # 当分词长度小于2或该词词性不为nr时认为该词不为人名
lineNames[-1].append(w.word) # 为当前