参考链接:
文本可视化[二]——《今生今世》人物关系可视化python实现
实验过程
绘制《玩偶之家》中的人物关系网
代码实现分为三步
-
人物出场次数统计
对文本进行针对性分词,需要准备两份特殊词典
(1)
关心的人物词典:
海尔茂 10 nr
托伐 10 nr
娜拉 10 nr
爱伦 10 nr
安娜 10 nr
阮克 10 nr
林丹 10 nr
克立斯替纳 10 nr
柯洛克斯泰 10 nr
伊娃 10 nr
爱密 10 nr
巴布 10 nr
尼尔 10 nr
(2)
人物别称映射词典:
海尔茂 托伐
海尔茂先生 托伐
鸟儿 娜拉
小鸟儿 娜拉
小松鼠儿 娜拉
海尔茂太太 娜拉
阮克大夫 阮克
阮克医生 阮克
林丹 克立斯替纳
尼尔 柯洛克斯泰 -
人物关系统计
-
格式化输出。
实现代码:
# -*- coding: GBK -*-
from __future__ import print_function
"""
人物关系网
"""
import jieba
import codecs
from collections import defaultdict
#定义文件路径常量和初始化全局变量
TEXT_PATH = 'F:/geany_python_codes/analysis_py/textminingprojects/doll_house.txt' # 文本路径
DICT_PATH = 'F:/python35/Lib/site-packages/jieba/dict_doll_house_person.txt' # 人物词典路径,保存我们关心的人物
SYNONYMOUS_DICT_PATH = 'F:/python35/Lib/site-packages/jieba/synonymous_dict.txt' # 同义词词典路径,保存人物别称
SAVE_NODE_PATH = 'F:/geany_python_codes/analysis_py/textminingprojects/node.csv' #输出的节点数据
SAVE_EDGE_PATH = 'F:/geany_python_codes/analysis_py/textminingprojects/edge.csv' #输出的边数据
class RelationshipView:
def __init__(self, text_path, dict_path, synonymous_dict_path):
self._text_path = text_path
self._dict_path = dict_path
self._synonymous_dict_path = synonymous_dict_path
'''
person_counter是一个计数器,用来统计人物出现的次数。{'a':1,'b':2}
person_per_paragraph每段文字中出现的人物[['a','b'],[]]
relationships保存的是人物间的关系。key为人物A,value为字典,包含人物B和权值。
'''
self._person_counter = defaultdict(int)
self._person_per_paragraph = []
self._relationships = {
}
self._synonymous_dict = {
}