Package nltk_lite :: Package parse :: Module generate
[hide private]
[frames] | no frames]

Source Code for Module nltk_lite.parse.generate

 1  from nltk_lite.parse import cfg 
 2   
3 -def generate(grammar, start=None):
4 if not start: 5 start = grammar.start() 6 return _generate_all(grammar, [start])[0]
7
8 -def _generate_all(grammar, items):
9 frags = [] 10 if len(items) == 1: 11 if isinstance(items[0], cfg.Nonterminal): 12 for prod in grammar.productions(lhs=items[0]): 13 frags.append(_generate_all(grammar, prod.rhs())) 14 else: 15 frags.append(items[0]) 16 else: 17 for frag1 in _generate_all(grammar, [items[0]]): 18 for frag2 in _generate_all(grammar, items[1:]): 19 for frag in _multiply(frag1, frag2): 20 frags.append(frag) 21 return frags
22
23 -def _multiply(frag1, frag2):
24 frags = [] 25 if len(frag1) == 1: 26 frag1 = [frag1] 27 if len(frag2) == 1: 28 frag2 = [frag2] 29 for f1 in frag1: 30 for f2 in frag2: 31 frags.append(f1+f2) 32 return frags
33 34 grammar = cfg.parse_cfg(""" 35 S -> NP VP 36 NP -> Det N 37 VP -> V NP 38 Det -> 'the' 39 Det -> 'a' 40 N -> 'man' | 'park' | 'dog' | 'telescope' 41 V -> 'saw' | 'walked' 42 P -> 'in' | 'with' 43 """) 44 45 for sent in generate(grammar): 46 print sent 47