podstawie this odpowiedź:
import os
from IPython.display import Image, display
from nltk.draw import TreeWidget
from nltk.draw.util import CanvasFrame
def jupyter_draw_nltk_tree(tree):
cf = CanvasFrame()
tc = TreeWidget(cf.canvas(), tree)
tc['node_font'] = 'arial 13 bold'
tc['leaf_font'] = 'arial 14'
tc['node_color'] = '#005990'
tc['leaf_color'] = '#3F8F57'
tc['line_color'] = '#175252'
cf.add_widget(tc, 10, 10)
cf.print_to_file('tmp_tree_output.ps')
cf.destroy()
os.system('convert tmp_tree_output.ps tmp_tree_output.png')
display(Image(filename='tmp_tree_output.png'))
os.system('rm tmp_tree_output.ps tmp_tree_output.png')
trochę powolny, ale spełnia swoje zadanie. Jeśli robisz to zdalnie, nie zapomnij, aby uruchomić sesję ssh z -X
klucza (jak ssh -X [email protected]
), tak aby mogła zainicjować się Tk (no display name and no $DISPLAY environment variable
-kind błędu)
UPD: wydaje się, że ostatnie wersje z jupyter i nltk ładnie ze sobą współpracują, więc możesz po prostu zrobić IPython.core.display.display(tree)
, aby uzyskać ładnie wyglądający rendering drzewa osadzony w danych wyjściowych.
Wygląda na to, że implementuje własny rysunek oparty na Tkinter. Jeśli tak jest, nie ma prostego sposobu na wprowadzenie go do notebooka. –