risparmio NLTK parse disegnato albero di file immagine
Esiste un modo per salvare l'immagine draw da tree.draw() in un file immagine di programmazione? Ho provato a cercare nella documentazione, ma non ho trovato nulla.
risparmio NLTK parse disegnato albero di file immagine
Esiste un modo per salvare l'immagine draw da tree.draw() in un file immagine di programmazione? Ho provato a cercare nella documentazione, ma non ho trovato nulla.
Ho avuto esattamente lo stesso bisogno, e guardando nel codice sorgente di nltk.draw.tree
ho trovato una soluzione:
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()
Il file di output è un poscritto, e si può convertirlo in un file di immagine utilizzando ImageMagick su terminale:
$ convert tree.ps tree.png
Penso che questa sia una soluzione rapida e sporca; potrebbe essere inefficiente in quanto visualizza la tela e la distrugge in un secondo momento (forse c'è un'opzione per disabilitare la visualizzazione, che non ho potuto trovare). Per favore fatemi sapere se c'è un modo migliore.
Per aggiungere alla risposta di Minjoon, è possibile modificare i font ei colori della albero a guardare più come la .draw()
versione NLTK come segue:
tc['node_font'] = 'arial 14 bold'
tc['leaf_font'] = 'arial 14'
tc['node_color'] = '#005990'
tc['leaf_color'] = '#3F8F57'
tc['line_color'] = '#175252'
prima (a sinistra) e dopo (a destra):
Questo è utile, non solo per impostare lo stile in modo che corrisponda alla versione 'draw()', ma anche per mostrare come può essere personalizzato in generale. – alexis
Sì, la documentazione è sottile ed è necessario guardare molto attentamente attraverso il codice sorgente per capire quali opzioni sono disponibili. Sono rimasto stupito quando ha effettivamente funzionato. –
Uso dell'oggetto nltk.draw.tree.TreeView
per creare automaticamente la tela telaio:
>>> 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')
Poi:
>>> import os
>>> os.system('convert output.ps output.png')
[output.png]:
Forse 'print_to_file', per' CanvasFrame's. – keyser