Sample usage for generate

Generating sentences from context-free grammars

An example grammar:

>>> from nltk.parse.generate import generate, demo_grammar
>>> from nltk import CFG
>>> grammar = CFG.fromstring(demo_grammar)
>>> print(grammar)
Grammar with 13 productions (start state = S)
    S -> NP VP
    NP -> Det N
    PP -> P NP
    VP -> 'slept'
    VP -> 'saw' NP
    VP -> 'walked' PP
    Det -> 'the'
    Det -> 'a'
    N -> 'man'
    N -> 'park'
    N -> 'dog'
    P -> 'in'
    P -> 'with'

The first 10 generated sentences:

>>> for sentence in generate(grammar, n=10):
...     print(' '.join(sentence))
the man slept
the man saw the man
the man saw the park
the man saw the dog
the man saw a man
the man saw a park
the man saw a dog
the man walked in the man
the man walked in the park
the man walked in the dog

All sentences of max depth 4:

>>> for sentence in generate(grammar, depth=4):
...     print(' '.join(sentence))
the man slept
the park slept
the dog slept
a man slept
a park slept
a dog slept

The number of sentences of different max depths:

>>> len(list(generate(grammar, depth=3)))
0
>>> len(list(generate(grammar, depth=4)))
6
>>> len(list(generate(grammar, depth=5)))
42
>>> len(list(generate(grammar, depth=6)))
114
>>> len(list(generate(grammar)))
114

Infinite grammars will throw a RecursionError when not bounded by some depth:

>>> grammar = CFG.fromstring("""
... S -> A B
... A -> B
... B -> "b" | A
... """)
>>> list(generate(grammar))
Traceback (most recent call last):
...
RuntimeError: The grammar has rule(s) that yield infinite recursion!