import nltk
from nltk.parse.generate import generate,demo_grammar
from nltk import CFG
grammar = CFG.fromstring("""
ROOT -> S
S -> NP VP
NP -> NP PP
NP -> DT NN
DT -> 'The'
NN -> 'work'
PP -> IN NP
IN -> 'of'
NP -> DT NN
DT -> 'the'
NN -> 'painter'
VP -> VBZ ADJP
VBZ -> 'is'
ADJP -> JJ
JJ -> 'good'
""")
print(grammar)
for sentence in generate(grammar, n=100):
print(' '.join(sentence))
一个错误
^{pr2}$试图在函数工具.py,还是同样的问题。在
我试图对重复出现的NP-NN-DT等进行编号,它似乎解决了由于唯一识别(我猜想)而造成的问题。让我感到奇怪的是,它本来应该是这样的,也就是说,被抛出的树的作品应该连载了词类。在
函数
generate
,正如它的docstring所说,“从CFG生成所有句子的迭代器。”显然,它是通过按照语法中列出的顺序选择替代扩展来实现的。所以,第一次是看到一个NP
,它用规则NP -> NP PP
来扩展它。它现在有另一个NP
要展开,它也使用相同的规则进行扩展。。。以此类推,直到超过python的限制。在要解决您提供的语法问题,只需重新排列前两个
NP
规则,使递归规则不是第一个遇到的规则:这样做,生成器将生成许多完整的句子供您检查。请注意,更正的语法仍然是递归的,因此是无限的;如果生成足够多的句子,最终将达到相同的递归深度限制。在
相关问题 更多 >
编程相关推荐