Convertir la salida del análisis de dependencia al árbol

Estoy usando el Stanford dependency parser y obtengo el siguiente resultado de la oración

Le disparé a un elefante en mi sueño

 python dep_parsing.py [((u'shot', u'VBD'), u'nsubj', (u'I', u'PRP')), ((u'shot', u'VBD'), u'dobj', (u'elephant', u'NN')), ((u'elephant', u'NN'), u'det', (u'an', u'DT')), ((u'shot', u'VBD'), u'nmod', (u'sleep', u'NN')), ((u'sleep', u'NN'), u'case', (u'in', u'IN')), ((u'sleep', u'NN'), u'nmod:poss', (u'my', u'PRP$'))] 

Quiero convertir esto en un gráfico con nodos siendo cada token y bordes siendo la relación entre ellos.

Necesito la estructura del gráfico para un procesamiento posterior, por lo tanto, sería útil que la modificación fuera fácil y también debe ser fácilmente representable.

Aquí está mi código hasta ahora.

 from nltk.parse.stanford import StanfordDependencyParser stanford_parser_dir = 'stanford-parser/' eng_model_path = stanford_parser_dir + "stanford-parser-models/edu/stanford/nlp/models/lexparser/englishRNN.ser.gz" my_path_to_models_jar = stanford_parser_dir + "stanford-parser-3.5.2-models.jar" my_path_to_jar = stanford_parser_dir + "stanford-parser.jar" dependency_parser = StanfordDependencyParser(path_to_jar=my_path_to_jar, path_to_models_jar=my_path_to_models_jar) result = dependency_parser.raw_parse('I shot an elephant in my sleep') dep = result.next() a = list(dep.triples()) print a 

¿Cómo puedo hacer tal estructura gráfica?

Puede atravesar dep.triples() y obtener la salida deseada.

Código:

 for triple in dep.triples(): print triple[1],"(",triple[0][0],", ",triple[2][0],")" 

Salida:

 nsubj ( shot , I ) dobj ( shot , elephant ) det ( elephant , an ) nmod ( shot , sleep ) case ( sleep , in ) nmod:poss ( sleep , my ) 

Para obtener más información, puede consultar: NLTK Dependencygraph métodos triples() , to_dot() y dep.tree().draw()

Editar –

La salida de dep.to_dot() es

 digraph G{ edge [dir=forward] node [shape=plaintext] 0 [label="0 (None)"] 0 -> 2 [label="root"] 1 [label="1 (I)"] 2 [label="2 (shot)"] 2 -> 4 [label="dobj"] 2 -> 7 [label="nmod"] 2 -> 1 [label="nsubj"] 3 [label="3 (an)"] 4 [label="4 (elephant)"] 4 -> 3 [label="det"] 5 [label="5 (in)"] 6 [label="6 (my)"] 7 [label="7 (sleep)"] 7 -> 5 [label="case"] 7 -> 6 [label="nmod:poss"] }