Created
October 4, 2011 08:58
-
-
Save adaptives/1261189 to your computer and use it in GitHub Desktop.
LPTHW Exercise 48
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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