Guardando el árbol de análisis dibujado nltk en un archivo de imagen

introduzca la descripción de la imagen aquí

¿Hay alguna forma de guardar la imagen dibujada de tree.draw () en un archivo de imagen mediante progtwigción? Intenté revisar la documentación, pero no pude encontrar nada.

Tenía exactamente la misma necesidad, y buscando en el código fuente de nltk.draw.tree encontré una solución:

 from nltk import Tree from nltk.draw.util import CanvasFrame from nltk.draw import TreeWidget cf = CanvasFrame() t = Tree.fromstring('(S (NP this tree) (VP (V is) (AdjP pretty)))') tc = TreeWidget(cf.canvas(),t) cf.add_widget(tc,10,10) # (10,10) offsets cf.print_to_file('tree.ps') cf.destroy() 

El archivo de salida es un postcript, y puede convertirlo en un archivo de imagen usando ImageMagick en el terminal:

 $ convert tree.ps tree.png 

Creo que esta es una solución rápida y sucia; podría ser ineficiente ya que muestra el canvas y lo destruye más tarde (tal vez hay una opción para deshabilitar la pantalla, que no pude encontrar). Por favor, hágamelo saber si hay alguna manera mejor.

Usando el objeto nltk.draw.tree.TreeView para crear el marco del canvas automáticamente:

 >>> from nltk.tree import Tree >>> from nltk.draw.tree import TreeView >>> t = Tree.fromstring('(S (NP this tree) (VP (V is) (AdjP pretty)))') >>> TreeView(t)._cframe.print_to_file('output.ps') 

Entonces:

 >>> import os >>> os.system('convert output.ps output.png') 

[output.png]:

introduzca la descripción de la imagen aquí

Para agregar a la respuesta de Minjoon, puede cambiar las fonts y los colores del árbol para que se parezca más a la versión .draw() siguiente manera:

 tc['node_font'] = 'arial 14 bold' tc['leaf_font'] = 'arial 14' tc['node_color'] = '#005990' tc['leaf_color'] = '#3F8F57' tc['line_color'] = '#175252' 

Antes (izquierda) y después (derecha):

antes de después