我有一个例句。 “打开门。”我解析了一个句子来得到括号中的解析输出,如下所示。
(S(VP(VB open)(NP(DT)(NN门)))(。))
我需要提取产生解析输出的CFG语法规则。 我可以手动将它们写出来:
<ul>
<li class="<? if ($_GET['page'] < '2') { echo 'disabled' ; } ?>">
<a href="<?
if ($_GET['page'] == '2') {
echo 'inbox.php';
} else {
echo '?page='.($_GET[page] - 1);
}
?>">Prev</a>
</li> <!-- previous button-->
<li style="<? if ($_GET['page'] - 2 < '1') { echo 'display:none;'; } ?>">
<a href="?page=<?
echo ($_GET[page] -2); ?>">
<? echo ($_GET[page] -2); ?>
</a>
</li> <!-- the button 2 before current spot if its greater than 0 -->
<li style="<? if ($_GET['page'] - 1 < '1') { echo 'display:none;'; } ?>">
<a href="?page=<?
echo ($_GET[page] -1); ?>">
<? echo ($_GET[page] -1); ?>
</a>
</li> <!-- the button 1 before current spot if its greater than 0 -->
<li class="disabled">
<a href=""><? echo $_GET[page]; ?></a>
</li> <!-- current button disabled -->
<li style="<? if ($total - ($_GET[page] * 10) <= '0') { echo 'display:none;'; } ?>">
<a href="?page=<?
echo ($_GET[page] + 1); ?>">
<? echo ($_GET[page] +1); ?>
</a>
</li> <!-- the button 1 after current spot if results go that high -->
<li style="<? if ($total - ($_GET[page] + 1) * 10 <= '0') { echo 'display:none;'; } ?>">
<a href="?page=<?
echo ($_GET[page] + 2); ?>">
<? echo ($_GET[page] + 2); ?>
</a>
</li> <!-- the button 2 after current spot if results go that high -->
<li class="<? if ($total - ($_GET[page] * 10) <= '0') { echo 'disabled'; } ?>">
<a href="?page=<? echo ($_GET[page] + 1); ?>">Next</a>
</li> <!-- the next button if results go that high -->
</ul>
但这很耗时,如果自动解析括号,我该如何制作语法规则?
答案 0 :(得分:4)
您可以使用 Tree.productions()方法从Tree获取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
答案 1 :(得分:2)
如果您希望通过括号中的解析创建规则,可以使用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()
将返回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'