今天跟大家介绍以下知识。怎么来实现文本中的人物关系可视化?
一、软件安装
安装的软件,点击此处,整个流程及安装过程见参考博客
提醒一下:
注意下载的文件一定要和自己的python版本和电脑位数对应;特别注意一下安装的版本,可能会出现不同版本的兼容问题。以下是我自己安装的,可以参考以下:
注意安装的顺序,一定是numpy-matplotlib-scipy.三者顺序不可以乱,因为后者的包对前者有依懒性。
此外,Wordcloud安装见此处 ,点击此处。
二、利用Wordcloud来生成人物关系
先给大家附上主要的两个python文件,如下:
# -*- coding: utf-8 -*-
from __future__ import print_function
import jieba
import codecs
from collections import defaultdict
TEXT_PATH = '../jsjs.txt' # 文本路径
DICT_PATH = 'person.txt' # 人物字典路径
SYNONYMOUS_DICT_PATH = 'synonymous_dict.txt' # 同义词路径
SAVE_NODE_PATH = 'node.csv'
SAVE_EDGE_PATH = '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 = {
}
def generate(self):
self.count_person()
self.calc_relationship()
self.save_node_and_edge()
def synonymous_names(self):
'''
获取同义名字典
:return:
'''
with codecs.open(self._synonymous_dict_path, 'r', 'utf-8') as f:
lines = f.read().split('\r\n')
for l in lines:
self._synonymous_dict[l.split(