2017-02-04 9 views
1

次の2つの文の依存関係解析結果(Stanford Parserを使用)は以下のとおりです。Pythonの共通ノードで2つのドットグラフをマージする

文1 -

digraph G{ 
edge [dir=forward] 
node [shape=plaintext] 

0 [label="0 (None)"] 
0 -> 5 [label="root"] 
1 [label="1 (John)"] 
2 [label="2 (is)"] 
3 [label="3 (a)"] 
4 [label="4 (computer)"] 
5 [label="5 (scientist)"] 
5 -> 2 [label="cop"] 
5 -> 4 [label="compound"] 
5 -> 3 [label="det"] 
5 -> 1 [label="nsubj"] 
} 

グラフ - - enter image description here

文2 - ジョンはメアリーという名前の姉を持つジョンはコンピュータ科学者

ドット形式です。

ドットフォーマット -

digraph G{ 
edge [dir=forward] 
node [shape=plaintext] 

0 [label="0 (None)"] 
0 -> 2 [label="root"] 
1 [label="1 (John)"] 
2 [label="2 (has)"] 
2 -> 5 [label="dobj"] 
2 -> 1 [label="nsubj"] 
3 [label="3 (an)"] 
4 [label="4 (elder)"] 
5 [label="5 (sister)"] 
5 -> 6 [label="acl"] 
5 -> 3 [label="det"] 
5 -> 4 [label="amod"] 
6 [label="6 (named)"] 
6 -> 7 [label="dobj"] 
7 [label="7 (Mary)"] 
} 

グラフ - enter image description here

今私は共通ノード、Johnでこれらのグラフをマージしたい 。私は現在、このよう

from graphviz import Source 
s = Source(dotGraph, filename=filepath, format="png") 

dotグラフをインポートするgraphvizのを使用してでもGraphviz、またはNetworkxでグラフをマージする何の機能もないように思わしています。では、どうやってこれを行うことができますか?

答えて

0

enter image description here

二つのグラフは、2つのサブグラフを有する単一の有向グラフを定義することになるマージする方法。

from graphviz import Source 

clusters = """ 
digraph G{ 

subgraph cluster0 { 
    edge [dir=forward] 
    node [shape=plaintext] 

    0 [label="0 (None)"] 
    0 -> 5 [label="root"] 
    1 [label="1 (John)"] 
    2 [label="2 (is)"] 
    3 [label="3 (a)"] 
    4 [label="4 (computer)"] 
    5 [label="5 (scientist)"] 
    5 -> 2 [label="cop"] 
    5 -> 4 [label="compound"] 
    5 -> 3 [label="det"] 
    5 -> 1 [label="nsubj"] 
} 

subgraph cluster1 { 
edge [dir=forward] 
node [shape=plaintext] 

0 [label="0 (None)"] 
0 -> 2 [label="root"] 
1 [label="1 (John)"] 
2 [label="2 (has)"] 
2 -> 5 [label="dobj"] 
2 -> 1 [label="nsubj"] 
3 [label="3 (an)"] 
4 [label="4 (elder)"] 
5 [label="5 (sister)"] 
5 -> 6 [label="acl"] 
5 -> 3 [label="det"] 
5 -> 4 [label="amod"] 
6 [label="6 (named)"] 
6 -> 7 [label="dobj"] 
7 [label="7 (Mary)"] 
} 
} 
""" 



src = Source(clusters, format='png') 
src.render("graphing1", view=True) 
+0

あなたはこの問題に関する議論を通じてより多くのを見たい場合:http://stackoverflow.com/questions/2012036/graphviz-how-to-connect-subgraphs – SkinnyTok

+0

どのように私は間の共通のノードを見つけるのですか2つのグラフ?いくつかのトラバーサル手法がありますか?そして、合併時に、冗長性がないように参照を変更しなければならない。どうすればよいのだろうか? –

+0

一般的なノードを見るにはリンクを定義する場所を見て、ノード2に何がリンクされているかを見たいと思うと、cluster0(5 - > 2)とcluster1(2 - > 5,2 - > 1 ) – SkinnyTok

関連する問題