Package parser_course :: Package small_parsers :: Module small_grammar
[hide private]
[frames] | no frames]

Source Code for Module parser_course.small_parsers.small_grammar

 1  try: 
 2      set    
 3  except: 
 4      from sets import Set # Not Python 2.4 
 5      set = Set 
 6       
 7  import multivalued_dictionary, supertuple 
 8   
9 -class Grammar(object):
10 - def __init__(self,start_cat="s"):
11 self.start_cat = start_cat 12 self.compute_nonterminals() 13 self.compute_preterminals()
14
15 - def display (self):
16 print 'Start Cat: %s' % self.start_cat 17 print 'Rules: %s' % self.rules 18 print 'Lexicon: %s' % self.lexicon
19
20 - def compute_nonterminals (self):
21 self.nonterminals = self.rules.keys()
22
23 - def compute_preterminals (self):
24 flat =[] 25 for L in self.lexicon.values(): 26 flat += L 27 self.preterminals = set(flat)
28
29 - def get_parts_of_speech(self, word):
30 """word is a string. Return a list of 31 parts of speech for this word""" 32 try: 33 return self.lexicon[word] 34 except KeyError: 35 raise KeyError, "Unknown word: '%s' " % (word,)
36 37 38
39 -class toy_grammar (Grammar):
40 - def __init__(self):
41 self.rules={"s": [["np","vp"],["aux","np","vp"]], 42 "np": [["det","nom"],["nom"],["np","pp"]], 43 "vp":[["v"],["v","np"]], 44 "pp":[["p","np"]], 45 "nom":[["n"]]} 46 self.lexicon={"walk":["v","n"], 47 "the":["det"], 48 "dogs":["n"], 49 "dog":["n"], 50 "park":["v","n"], 51 "has":["aux"], 52 "have":["aux"], 53 "in":["p"]} 54 Grammar.__init__(self, "s")
55 56
57 -class not_so_toy_grammar (Grammar):
58 - def __init__(self):
59 self.start_cat="s" 60 self.rules={"s": [["np","vp"]], 61 "vp":[["vbz","np"],["vbz","np","pp"],["vbz","np","pp","pp"]], 62 "vpg":[["vbg","np"]], 63 "np": [["dt","nbar"],["nbar"],["np","cc","np"]], 64 "nbar":[["ap","nbar"],["nbar","pp"],["vpg"],["n"],["n","n"]], 65 "pp":[["p","np"]], 66 "ap":[["rb","a"],["a"]], 67 } 68 self.lexicon={"sees":["vbz"], 69 "the":["dt"], 70 "a":["dt"], 71 "agency":["n"], 72 "use":["n"], 73 "codes":["n"], 74 "way":["n"], 75 "mail":["n"], 76 "volume":["n"], 77 "labor":["n"], 78 "costs":["n"], 79 "of":["p"], 80 "as":["p"], 81 "widespread":["a"], 82 "growing":["a"], 83 "handling":["vbg"], 84 "controlling":["vbg"], 85 "rapidly":["rb"], 86 "and":["cc"]} 87 Grammar.__init__(self)
88