开发者

Tool for drawing parse trees? [closed]

开发者 https://www.devze.com 2023-02-10 13:04 出处:网络
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.

We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.

Closed 2 years ago.

Improve this question

Does anyone have a good tool for drawing parse trees arising from a context开发者_运维问答-free grammar? There is this question, but it dealt specifically with finite automata instead of parse trees. I've been using graphviz, but it's kind of annoying to have to label each node individually etc.


You can use http://ironcreek.net/phpsyntaxtree/.

Example:

Tool for drawing parse trees? [closed]

Input was:

[ROOT
  [S
    [S
      [NP [PRP It]]
      [VP [VBZ is]
        [NP
          [QP [RB nearly] [DT half] [JJ past] [CD five]]]]]
    [, ,]
    [S
      [NP [PRP we]]
      [VP [MD can] [RB not]
        [VP [VB reach]
          [NP [NN town]]
          [PP [IN before]
            [NP [NN dark]]]]]]
    [, ,]
    [S
      [NP [PRP we]]
      [VP [MD will]
        [VP [VB miss]
          [NP [NN dinner]]]]]
    [. .]]]

Also works if the string has no line breaks, e.g.:

[S [NP [DT The] [NN man]] [VP [VBZ is] [VP [VBG running] [PP [IN on] [NP [DT the] [NN mountain]]]]] [. .]]


If you have a well-written context-free grammar(CFG) then you can draw the tree diagram simply by using nltk library.

import nltk
#defining Contex Free Grammar
grammar = nltk.CFG.fromstring("""
  S  -> NP VP
  NP -> Det Nom | PropN
  Nom -> Adj Nom | N
  VP -> V Adj | V NP | V S | V NP PP
  PP -> P NP
  PropN -> 'Buster' | 'Chatterer' | 'Joe'
  Det -> 'the' | 'a'
  N -> 'bear' | 'squirrel' | 'tree' | 'fish' | 'log'
  Adj  -> 'angry' | 'frightened' |  'little' | 'tall'
  V ->  'chased'  | 'saw' | 'said' | 'thought' | 'was' | 'put'
  P -> 'on'
  """)

sentence = 'the angry bear chased the frightened little squirrel'.split()
def parse(sent):
    #Returns nltk.Tree.Tree format output
    a = []  
    parser = nltk.ChartParser(grammar)
    for tree in parser.parse(sent):
        a.append(tree)
    return(a[0]) 

#Gives output as structured tree   
print(parse(sentence))

#Gives tree diagrem in tkinter window
parse(sentence).draw()

Structured tree output

Tool for drawing parse trees? [closed]

Tree Diagram in Tkinter Window

Tool for drawing parse trees? [closed]


http://brenocon.com/parseviz/:

Input:

(S (NP (DT The) (NN man)) (VP (VBZ is) (VP (VBG running) (PP (IN on) (NP (DT the) (NN mountain))))) (. .))

Output:

Tool for drawing parse trees? [closed]

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号