Graphviz 绘制解析树的工具?

Graphviz 绘制解析树的工具?,graphviz,context-free-grammar,parse-tree,Graphviz,Context Free Grammar,Parse Tree,有没有人有一个很好的工具来绘制由上下文无关语法生成的解析树?有,但它专门处理有限自动机而不是解析树。我一直在使用graphviz,但必须单独标记每个节点等,这有点烦人。您可以使用 例如: 投入是: [ROOT [S [S [NP [PRP It]] [VP [VBZ is] [NP [QP [RB nearly] [DT half] [JJ past] [CD five]]]]] [, ,] [S

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

您可以使用

例如:

投入是:

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

如果您有一个编写良好的上下文无关语法(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窗口中的树形图

输入:

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


您是想可视化解析器输出的解析树,还是解析器本身?@flyn1179:输出。但我不想写解析器,我想要的是类似绘画的东西,也就是说,我只是画一些树。转到软件推荐SE: