パスワードを忘れた? アカウント作成
13924829 journal
日記

yasuokaの日記: 「望遠鏡で泳ぐ彼女を見た」の係り受け構造をGraphvizで可視化する 1

日記 by yasuoka

『GraphvizでStanfordNLPの係り受け構造を描画』に触発されて、私(安岡孝一)もGraphvizを触ってみた。例として「望遠鏡で泳ぐ彼女を見た」

1    望遠鏡    望遠鏡    NOUN    _    _    6    obl    _    SpaceAfter=No
2    で    で    ADP    _    _    1    case    _    SpaceAfter=No
3    泳ぐ    泳ぐ    VERB    _    _    4    acl    _    SpaceAfter=No
4    彼女    彼女    PRON    _    _    6    obj    _    SpaceAfter=No
5    を    を    ADP    _    _    4    case    _    SpaceAfter=No
6    見    見る    VERB    _    _    0    root    _    SpaceAfter=No
7    た    た    AUX    _    _    6    aux    _    SpaceAfter=No

の係り受け構造を、Graphvizで可視化してみたいと思う。GraphvizではDOTという描画言語を使うらしいので、↑のUniversal DependenciesをDOTで書き直せばいいはずだ。

digraph G{
  w1[shape=record,label="{NOUN|望遠鏡}"];
  w2[shape=record,label="{ADP|で}"];
  w3[shape=record,label="{VERB|泳ぐ}"];
  w4[shape=record,label="{PRON|彼女}"];
  w5[shape=record,label="{ADP|を}"];
  w6[shape=record,label="{VERB|見}"];
  w7[shape=record,label="{AUX|た}"];

  r1[label="obl"];
  r2[label="case"];
  r3[label="acl"];
  r4[label="obj"];
  r5[label="case"];
  r6[label="root"];
  r7[label="aux"];

  w6->r1[dir=none];r1->w1;
  w1->r2[dir=none];r2->w2;
  w4->r3[dir=none];r3->w3;
  w6->r4[dir=none];r4->w4;
  w4->r5[dir=none];r5->w5;
  r6->w6;
  w6->r7[dir=none];r7->w7;

  {rank=source;r6}
  {rank=sink;w1;w2;w3;w4;w5;w6;w7}
  r4->r5->w6[style=invis];
  r1->r4->r2->w3[style=invis];
}

Graphviz Onlineで見ると、こんな感じ。各単語をw1w7のノードで、各係り受けタグをr1r7のノードで表して、それらに係り受け関係の枝を付けたものである。ただ、それだけだと、ノードが勝手気ままに並んでしまう(こんな感じ)ので、rootノードをrank=sourceに、単語ノードをrank=sinkに並べた上で、見えない枝を5本ほど張って、各ノードをうまく整列させている。あとは「dot -T png ファイル.dot -o ファイル.png」なり何なりで、画像ファイルが得られるはずだ。

こうして見ると、以前、私が作った「SVGによるUniversal Dependencies可視化ツール」に遜色ないようだ。ただ、Graphvizでの見えない枝を、どうシステマティックに張るのかは、一工夫必要だろう。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

アレゲは一日にしてならず -- アレゲ研究家

読み込み中...