Skip to content

Instantly share code, notes, and snippets.

@adaptives
Created October 4, 2011 08:58
Show Gist options
  • Save adaptives/1261189 to your computer and use it in GitHub Desktop.
Save adaptives/1261189 to your computer and use it in GitHub Desktop.
LPTHW Exercise 48
class LexiconC(object):
def __init__(self):
#constants
# TODO: Can we make these as constants so they can be accessed from out side the class with just the class name ?
self.C_DIRECTION_WORDS = "direction"
self.C_VERBS = "verb"
self.C_STOP_WORDS = "stop"
self.C_NOUNS = "noun"
self.C_NUMBER = "number"
self.C_ERROR = "error"
#lexicon
self.direction_words = ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back']
self.verbs = ['go', 'stop', 'kill', 'eat']
self.stop_words = ['the', 'in', 'of', 'from', 'at', 'it']
self.nouns = ['door', 'bear', 'princess', 'cabinet']
def get_tuple(self, word):
ret_val = None
lword = word.lower()
if(lword in self.direction_words):
ret_val = (self.C_DIRECTION_WORDS, word)
elif(lword in self.verbs):
ret_val = (self.C_VERBS, word)
elif(lword in self.stop_words):
ret_val = (self.C_STOP_WORDS, word)
elif(lword in self.nouns):
ret_val = (self.C_NOUNS, word)
elif(self.convert_number(lword) != None):
ret_val = (self.C_NUMBER, self.convert_number(lword))
else:
ret_val = (self.C_ERROR, word)
def convert_number(self, text):
try:
return int(text)
except ValueError:
return None
def scan(line):
print "Scanning line '%s'" % line
the_lexicon = LexiconC()
ret_val = []
words = line.split()
for word in words:
the_tuple = the_lexicon.get_tuple(word)
ret_val.append(the_tuple)
return ret_val
from nose.tools import *
from ex48 import lexicon
def setup():
print "SETUP!"
def teardown():
print "TEAR DOWN!"
def test_directions():
assert_equal(lexicon.scan("north"), [('direction', 'north')])
result = lexicon.scan("north south east")
assert_equal(result, [('direction', 'north'),
('direction', 'south'),
('direction', 'east')])
def test_verbs():
assert_equal(lexicon.scan("go"), [('verb', 'go')])
result = lexicon.scan("go kill eat")
assert_equal(result, [('verb', 'go'),
('verb', 'kill'),
('verb', 'eat')])
def test_stops():
assert_equal(lexicon.scan("the"), [('stop', 'the')])
result = lexicon.scan("the in of")
assert_equals(result, [('stop', 'the'),
('stop', 'in'),
('stop', 'of')])
def test_nouns():
assert_equal(lexicon.scan("bear"), [('noun', 'bear')])
result = lexicon.scan("bear princess")
assert_equal(result, [('noun', 'bear'),
def test_numbers():
assert_equal(lexicon.scan("1234"), [('number', 1234)])
result = lexicon.scan("3 91234")
assert_equal(result, [('number', 3),
('number', 91234)])
def test_errors():
assert_equal(lexicon.scan("ASDFADFA"), [('error', "ASDFADFA")])
result = lexicon.scan("bear IAS princess")
assert_equal(result, [('noun', 'bear'),
('error', 'IAS'),
('noun', 'princess')])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment