现有方法是用Matlab生成邻接矩阵然后导入到Gephi画图,里面有手工成分,另外节点布局只能依赖Gephi的自带函数。我要做的就是实现完全自定义,和完全自动化。
也就是说,完全不依靠可视化软件,模型自己建,布局自己画......
本来打算今天写具体的实现过程和技术细节,但一直没抽出时间,所以决定在公交上写一下完成的工作还有未完成的想法。
首先是文本处理,编码转换,根据标点断句,字符分割,没什么好说的。
接下来是模型建立,使用Networkx储存字符节点,根据字符的出现频率进行节点排序;节点之间建立加权有向边。
然后是布局函数,这项工作耗时最多。Networkx画图极其简陋,箭头丑,节点和边的颜色大小只能为单一值,图像布局杂乱,所以所有画图过程以及布局函数全部手工写,将Networkx的内部封装方法彻底改造了一番。布局设计是根据节点重要性画n个同心圆,首先将所有节点分组,组长差为6(圆周对半径求导),然后对每组节点根据极坐标转换赋xy值,最后有向边也根据节点xy值来赋值。
接下来画图,节点大小、文字大小和边的宽度、透明度均根据各自的权重赋值,也是要手动去改原来的单一值,改为数组。根据布局画图并保存或显示。统计出入度。
最后是用Django实现web交互,也挺麻烦。
现在算是完成了主要工作,耗时两个下午加一个晚上。还有一些细节需要抠,文本提交接下来改为文档提交,将关联度较大的字列出,应该导出个邻接矩阵方便以后进一步的工作。