在之前分词的基础上进一步分析人物的关系。
首先先把每一行小说里面的人物名字统计出来,只需在之前统计各人物出场次数的基础上增加一点代码即可:
sentence = []
for line in f.readlines():
seg_list = jieba.cut(line,cut_all=False)
unique_list = []
linenames.append([])
for i in seg_list:
if i not in STOPWORD:
unique_list.append(i)
if i in all_names:
linenames[-1].append(i)
if names.get(i) is None:
names[i] = 0
relationships[i] = {}
names[i] += 1
sentence.append(unique_list)
在linenames
这个列表里存储的即为每一行出现的各人物名字,同时给每一个人物添加一个关系元组,用来分析其他人物与该人物的亲密关系。
for line in linenames:
for name1 in line:
for name2 in line:
if name1 in relationships:
if name1 == name2:
continue
if relationships[name1].get(name2) is None:
relationships[name1][name2]=1
else:
relationships[name1][name2] += 1
根据每一行小说里某一人物与其他人物同时出现的次数来分析该人物与其他人物的亲密关系:
for line in linenames:
for name1 in line:
for name2 in line:
if name1 in relationships:
if name1 == name2:
continue
if relationships[name1].get(name2) is None:
relationships[name1][name2]=1
else:
relationships[name1][name2] += 1
现在来打印输出看看relationships
里的数据:
{'路明非': {'路鸣泽': 108, '古德里安': 76, '楚子航': 75, '陈雯雯': 147, '诺诺': 311, '陈墨瞳': 21, '诺玛': 13, '芬格尔': 146, '富山雅史': 22, '恺撒': 114, '曼施坦因': 35, '诺顿': 7, '昂热': 4}, '康斯坦丁': {'诺顿': 1}, '路鸣泽': {'路明非': 108, '楚子航': 9, '古德里安': 3, '陈墨瞳': 1, '芬格尔': 2, '陈雯雯': 6, '诺诺': 2, '诺顿': 1, '恺撒': 2}, '古德里安': {'诺玛': 3, '路明非': 76, '路鸣泽': 3, '诺诺': 13, '陈墨瞳': 1, '芬格尔': 9, '富山雅史': 12, '曼施坦因': 42, '楚子航': 4}, '诺玛': {'古德里安': 3, '路明非': 13, '诺诺': 4, '芬格尔': 3, '曼施坦因': 7, '恺撒': 6, '楚子航': 1, '诺顿': 1, '陈墨瞳': 1}, '楚子航': {'路鸣泽': 9, '路明非': 75, '陈雯雯': 5, '恺撒': 100, '曼施坦因': 14, '昂热': 1, '诺顿': 3, '诺诺': 10, '古德里安': 4, '苏茜': 7, '芬格尔': 9, '诺玛': 1}, '陈雯雯': {'路明非': 147, '楚子航': 5, '陈墨瞳': 2, '诺诺': 31, '芬格尔': 2, '路鸣泽': 6, '恺撒': 1}, '诺诺': {'路明非': 311, '古德里安': 13, '陈墨瞳': 4, '陈雯雯': 31, '诺玛': 4, '恺撒': 68, '芬格尔': 13, '楚子航': 10, '诺顿': 6, '曼施坦因': 13, '苏茜': 8, '路鸣泽': 2}, '昂热': {'曼施坦因': 1, '楚子航': 1, '恺撒': 2, '诺顿': 2, '路明非': 4}, '陈墨瞳': {'诺诺': 4, '古德里安': 1, '路明非': 21, '陈雯雯': 2, '路鸣泽': 1, '芬格尔': 2, '恺撒': 10, '诺顿': 8, '曼施坦因': 3, '诺玛': 1}, '芬格尔': {'路明非': 146, '古德里安': 9, '诺顿': 4, '诺诺': 13, '陈墨瞳': 2, '恺撒': 41, '路鸣泽': 2, '陈雯雯': 2, '诺玛': 3, '曼施坦因': 4, '楚子航': 9, '富山雅史': 2, '苏茜': 3}, '富山雅史': {'路明非': 22, '古德里安': 12, '恺撒': 1, '芬格尔': 2}, '曼施坦因': {'古德里安': 42, '路明非': 35, '恺撒': 22, '楚子航': 14, '昂热': 1, '诺玛': 7, '诺诺': 13, '芬格尔': 4, '诺顿': 2, '陈墨瞳': 3}, '恺撒': {'富山雅史': 1, '路明非': 114, '楚子航': 100, '诺诺': 68, '曼施坦因': 22, '昂热': 2, '陈墨瞳': 10, '芬格尔': 41, '诺顿': 14, '苏茜': 3, '陈雯雯': 1, '诺玛': 6, '路鸣泽': 2}, '诺顿': {'芬格尔': 4, '恺撒': 14, '楚子航': 3, '诺诺': 6, '苏茜': 1, '路明非': 7, '曼施坦因': 2, '昂热': 2, '诺玛': 1, '康斯坦丁': 1, '陈墨瞳': 8, '路鸣泽': 1}, '苏茜': {'楚子航': 7, '恺撒': 3, '诺诺': 8, '诺顿': 1, '芬格尔': 3}}
从这里即可看出某一人物与其他人物的亲密关系。