有没有人有一个很好的工具来绘制由上下文无关语法产生的解析树?有这个问题,但它专门处理有限自动机而不是解析树。我一直在使用graphviz,但是必须单独标记每个节点等有点烦人。
问问题
18945 次
3 回答
3
您可以使用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]]]]] [. .]]
于 2018-01-08T04:25:56.670 回答
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 窗口中的树形图
于 2018-06-27T09:48:19.607 回答
1
http://brenocon.com/parseviz/:
输入:
(S (NP (DT The) (NN man)) (VP (VBZ is) (VP (VBG running) (PP (IN on) (NP (DT the) (NN mountain))))) (. .))
输出:
于 2020-04-17T15:13:06.253 回答