2015-08-03 39 views
5

Per trame matplotlib in ipython/Jupyter si possono fare le trame trama notebook in linea conCome si fa a fare NLTK draw() alberi che sono in linea in ipython/Jupyter

%matplotlib inline 

Come si può fare lo stesso per NLTK disegnare() per gli alberi? Ecco la documentazione http://www.nltk.org/api/nltk.draw.html

+2

Sembra che implementa le proprie risorse di disegno basate su Tkinter. Se questo è il caso, non c'è un modo semplice per portarlo in linea nel notebook. –

risposta

6

Sulla base this risposta:

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

po 'lento, ma non il lavoro. Se stai facendo in remoto, non dimenticare di eseguire la sessione ssh con -X chiave (come ssh -X [email protected]) in modo che Tk in grado di inizializzare stesso (no display name and no $DISPLAY environment variable -kind di errore)

UPD: sembra che le ultime versioni di jupyter e nltk funzionano bene insieme, quindi puoi semplicemente fare IPython.core.display.display(tree) per ottenere un rendering dell'albero dall'aspetto piacevole incorporato nell'output.

+0

Hai bisogno di aggiungere qualche configurazione/magia? Quali versioni di jupyter, notebook e nltk stai eseguendo per ottenere il rendering ad albero incorporato? Io non riesco a farlo, appena aggiornato alla jupyter-client == 4.4.0 jupyter-core == 4.2.1 jupyterhub == 0.7.2 == notebook 4.3.1 sto ancora ricevendo tk errors: TclError: nessun nome visualizzato e nessuna variabile d'ambiente $ DISPLAY –

+0

@GenaKukartsev assicurati di aver fatto 'ssh -X' –

+0

Stai dicendo che devo ancora farlo per notebook? Per essere chiari, non sto parlando di uso da riga di comando - quella parte è chiara. Quello che voglio è che la grafica NLTK appaia in linea nel notebook IPython, simile alla grafica matplotlib. Questo potrebbe essere un problema per il mio setup: sto facendo funzionare un server multiutente jupyterhub ipython. Gli utenti accedono tramite l'interfaccia web. Dato che, se tk è ancora necessario per abilitare la grafica embedded, non sono sicuro di come configurarlo. Eventuali suggerimenti? Grazie! –