【问题标题】:Tool for drawing parse trees? [closed]绘制解析树的工具? [关闭]
【发布时间】:2011-02-11 18:16:19
【问题描述】:

有没有人有一个很好的工具来绘制由上下文无关语法产生的解析树?有this question,但它专门处理有限自动机而不是解析树。我一直在使用graphviz,但是必须单独标记每个节点等有点烦人。

【问题讨论】:

  • 您是想可视化解析器输出的解析树,还是解析器本身?
  • @Flynn1179:输出。但我不想写解析器,我想要一些类似于绘画的东西,即我只是画一些树。
  • 移至软件推荐 SE:Tool for drawing parse trees

标签: graphviz context-free-grammar parse-tree


【解决方案1】:

您可以使用http://ironcreek.net/phpsyntaxtree/

例子:

输入是:

[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]]]]]
    [. .]]]

如果字符串没有换行符也可以使用,例如:

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

【讨论】:

    【解决方案2】:

    如果你有一个写得很好的上下文无关语法(CFG),那么你可以简单地使用 nltk 库来绘制树形图。

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

    结构化树输出

    Tkinter 窗口中的树形图

    【讨论】:

      【解决方案3】:

      http://brenocon.com/parseviz/:

      输入:

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

      输出:

      【讨论】:

        猜你喜欢
        • 2010-09-25
        • 2011-05-06
        • 2013-07-12
        • 2012-04-26
        • 2012-05-26
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 2010-11-24
        相关资源
        最近更新 更多