Подтвердить что ты не робот

Сохранение nltk рисованного дерева разбора в файл изображения

enter image description here

Есть ли способ сохранить обратное изображение из файла tree.draw() в файл изображения программно? Я попытался просмотреть документацию, но ничего не нашел.

4b9b3361

Ответ 1

У меня была такая же потребность, и, глядя в исходный код nltk.draw.tree, я нашел решение:

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()

Выходной файл является постскриптумом, и вы можете преобразовать его в файл изображения с помощью ImageMagick на терминале:

$ convert tree.ps tree.png

Я думаю, что это быстрое и грязное решение; он может быть неэффективным, поскольку он отображает холст и уничтожает его позже (возможно, есть возможность отключить отображение, которого я не смог найти). Пожалуйста, дайте мне знать, если есть лучший способ.

Ответ 2

Используя объект nltk.draw.tree.TreeView для автоматического создания кадра холста:

>>> 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')

Тогда:

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

[output.png]:

введите описание изображения здесь

Ответ 3

Чтобы добавить к Minjoon ответ, вы можете изменить шрифты и цвета дерева, чтобы больше походить на версию NLTK .draw() следующим образом:

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

До (слева) и после (справа):

before after