Saving nltk drawn parse tree to image file

前端 未结 3 2076
太阳男子
太阳男子 2020-12-01 13:03

\"enter

Is there any way to save the draw image from tree.draw() to an image file prog

相关标签:
3条回答
  • 2020-12-01 13:24

    To add to Minjoon's answer, you can change the fonts and colours of the tree to look more like the NLTK .draw() version as follows:

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

    Before (left) and after (right):

    0 讨论(0)
  • 2020-12-01 13:31

    Using the nltk.draw.tree.TreeView object to create the canvas frame automatically:

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

    Then:

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

    [output.png]:

    0 讨论(0)
  • 2020-12-01 13:43

    I had exactly the same need, and looking into the source code of nltk.draw.tree I found a solution:

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

    The output file is a postscript, and you can convert it to an image file using ImageMagick on terminal:

    $ convert tree.ps tree.png
    

    I think this is a quick and dirty solution; it could be inefficient in that it displays the canvas and destroys it later (perhaps there is an option to disable display, which I couldn't find). Please let me know if there is any better way.

    0 讨论(0)
提交回复
热议问题