如何在给定括号解析的情况下提取语法产生式规则?
How to extract the grammar productions rules given bracketed parses?
我有一个例句。 "Open the door." 我解析了一个句子,得到括号内的解析输出,如下所示。
(S (VP (VB open) (NP (DT the) (NN door))) (. .))
我需要提取生成解析输出的 CFG 语法规则。
我可以这样手动写出来:
grammar = CFG.fromstring("""
S -> VP NP
NP -> Det N
VP -> V
Det ->'the '
N -> 'door'
V -> 'Open'
""")
但是很费时间,给定括号自动解析的语法规则如何生成?
您可以使用Tree.productions()方法从树中获取CFG规则。
示例:
from nltk import Tree
t = Tree.fromstring("(S (VP (VB open) (NP (DT the) (NN door))) (. .))")
print t.productions()
输出:
[S -> VP ., VP -> VB NP, VB -> 'open', NP -> DT NN, DT -> 'the',
NN -> 'door', . -> '.']
更多信息请查看 - NLTK Tree Productions
如果您要从括号中的解析创建规则,您可以使用 Tree.productions()
>>> from nltk import Tree
>>> t = Tree.fromstring("(S (NP (D the) (N dog)) (VP (V chased) (NP (D the) (N cat))))")
>>> t.productions()
[S -> NP VP, NP -> D N, D -> 'the', N -> 'dog', VP -> V NP, V -> 'chased', NP -> D N, D -> 'the', N -> 'cat']
Tree.productions()
将 return 一个包含 nltk.grammar.Productions
个对象的列表:
>>> type(t.productions()[0])
<class 'nltk.grammar.Production'>
要将规则转换为字符串形式,请使用 Production.unicode_repr
:
>>> t.productions()[0].unicode_repr()
u'S -> NP VP'
要获取从括号解析中学到的语法的字符串表示形式:
>>> from nltk import Tree
>>> t = Tree.fromstring("(S (NP (D the) (N dog)) (VP (V chased) (NP (D the) (N cat))))")
>>> grammar_from_parse = "\n".join([rule.unicode_repr() for rule in t.productions()])
>>> print grammar_from_parse
S -> NP VP
NP -> D N
D -> 'the'
N -> 'dog'
VP -> V NP
V -> 'chased'
NP -> D N
D -> 'the'
N -> 'cat'
我有一个例句。 "Open the door." 我解析了一个句子,得到括号内的解析输出,如下所示。
(S (VP (VB open) (NP (DT the) (NN door))) (. .))
我需要提取生成解析输出的 CFG 语法规则。 我可以这样手动写出来:
grammar = CFG.fromstring("""
S -> VP NP
NP -> Det N
VP -> V
Det ->'the '
N -> 'door'
V -> 'Open'
""")
但是很费时间,给定括号自动解析的语法规则如何生成?
您可以使用Tree.productions()方法从树中获取CFG规则。
示例:
from nltk import Tree
t = Tree.fromstring("(S (VP (VB open) (NP (DT the) (NN door))) (. .))")
print t.productions()
输出:
[S -> VP ., VP -> VB NP, VB -> 'open', NP -> DT NN, DT -> 'the',
NN -> 'door', . -> '.']
更多信息请查看 - NLTK Tree Productions
如果您要从括号中的解析创建规则,您可以使用 Tree.productions()
>>> from nltk import Tree
>>> t = Tree.fromstring("(S (NP (D the) (N dog)) (VP (V chased) (NP (D the) (N cat))))")
>>> t.productions()
[S -> NP VP, NP -> D N, D -> 'the', N -> 'dog', VP -> V NP, V -> 'chased', NP -> D N, D -> 'the', N -> 'cat']
Tree.productions()
将 return 一个包含 nltk.grammar.Productions
个对象的列表:
>>> type(t.productions()[0])
<class 'nltk.grammar.Production'>
要将规则转换为字符串形式,请使用 Production.unicode_repr
:
>>> t.productions()[0].unicode_repr()
u'S -> NP VP'
要获取从括号解析中学到的语法的字符串表示形式:
>>> from nltk import Tree
>>> t = Tree.fromstring("(S (NP (D the) (N dog)) (VP (V chased) (NP (D the) (N cat))))")
>>> grammar_from_parse = "\n".join([rule.unicode_repr() for rule in t.productions()])
>>> print grammar_from_parse
S -> NP VP
NP -> D N
D -> 'the'
N -> 'dog'
VP -> V NP
V -> 'chased'
NP -> D N
D -> 'the'
N -> 'cat'