2017-02-04 6 views
1

다음 두 문장 중 종속성 구문 분석 결과 (Stanford Parser 사용)는 다음과 같습니다.파이썬의 공통 노드에서 두 도트 그래프를 병합하십시오.

문장 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

문장이 - 존은 언니가 마리아라는 이름이 존은 컴퓨터 과학자에게

도트 형식입니다.

도트 형식 -

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에서 이러한 그래프를 병합 할 . 나는 현재이 같은 dot 그래프,

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

를 가져올은 GraphVIZ를 사용하지만 Graphviz, 또는 Networkx에 그래프를 병합 할 기능은없는 것 같다입니다. 그러면 어떻게 할 수 있습니까?

답변

0

enter image description here

방법은 두 개의 그래프가 서브 그래프를 갖는 단일 이중 음자를 정의 될 합류.

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

나는 일반 노드 사이를 어떻게 찾을 수 있습니까 두 개의 그래프? 어떤 트래버스 기법이 있습니까? 그리고 병합 할 때 중복성이 없도록 참조를 변경해야합니다. 어떻게 수행 할 수 있습니까? –

+0

일반적인 노드를 보려면 : 링크를 정의하는 위치를보고, 노드 2에 링크 된 것을보고 싶은 경우 cluster0 (5 -> 2) 및 cluster1 (2 -> 5, 2 -> 1) – SkinnyTok