to top page
2012-12-26
人間関係データベースの設計と相関図作成プログラムの自動生成
人間関係データベースを作った。
基本的な考え方は、昨日の記事の最後に書いたように、相互的関係は捨て一方的関係だけを記録すること。
- 人間関係の問題――「鈴鹿山の巻」の場合

人物ごとに次の形式のテキストファイルを作る。
@name    机竜之助
お浜    妻
郁太郎    子
島田虎之助    敵意

左右のフィールドはタブで区切る。
「@」ではじまる行は本人の属性。
「@name」の行が最初になければならない。ほかに、「@職業」、「@特技」などいくつあってもいいが、今回は無用。
「@」以外ではじまる行は対人関係を表す。左側が人物名、右側が関係や感情など。
この形式のファイルの1個以上の集まりがデータベースである。
以上でデータベースの設計は終わり。
このデータベースの情報をもとに、以下の手順で人物相関図ができる。

データベースを読んで DOT 言語のプログラムを生成する Awk スクリプト db2dot。
BEGIN { print "digraph agraph {"; FS = "\t" }
/^@/ { attr[$1] = $2; next }
{ printf "\t%s -> %s [label=\"%s\"];\n", attr["@name"], $1, $2 }
END { print "}" }

データファイルの拡張子が「.data」であるとして、次のコマンドを実行すると、
awk -f db2dot *.data > temp.dot

次の DOT プログラム temp.dot ができる。
digraph agraph {
    机竜之助 -> お浜 [label="妻"];
    机竜之助 -> 郁太郎 [label="子"];
    机竜之助 -> 島田虎之助 [label="敵意"];
    お浜 -> 机竜之助 [label="夫"];
    お浜 -> 郁太郎 [label="子"];
    島田虎之助 -> 机竜之助 [label="警戒"];
}

この temp.dot を 次のコマンドで処理すれば、
dot -Tgif temp.dot -o temp.gif

このような人物相関図ができる。



ここで用意したデータは、机竜之助、お浜、島田虎之助の3人分。
郁太郎のデータファイルはないが、竜之助とお浜のデータで郁太郎に言及しているので、図には郁太郎も現れている。
上の Awk スクリプトでは、図の表現をコントロールすることはできない。しないほうがいいと思う。スクリプト自体もスクリプトの使い方もごたごたしてしまうから。

図の表現を変えたければ、自動生成した temp.dot を手で修正する。
たとえば次のようなものが可能。色を付けたり、線の太さを変えたり、タイトルを入れることもできる。
背景色を付けたり、向きを変えたりも可能。