扫描器:
lexicon = {
"north":'directions',
"south":'directions',
"east":'directions',
"west":'directions',
"go": 'verb',
"kill": 'verb',
"eat": 'verb',
"the": 'stop',
"in": 'stop',
"of": 'stop',
"bear": 'noun',
"IAS":'error',
"princess": 'noun',
"ASDFAFASDF":'error'
}
def scan(sentence):
results = []
words = sentence.split()
for word in words:
try:
results.append(('number', int(word)))
except ValueError:
word_type = lexicon.get(word)
results.append((word_type,word))
return results
测试代码
lexicon_tests.py
from nose.tools import *
from ex48 import lexicon
def test_directions():
assert_equal(lexicon.scan("north"),[('directions','north')])
result = lexicon.scan("north south east")
assert_equal(result,[('directions','north'),
('directions','south'),
('directions','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_equal(result, [('stop', 'the'),
('stop', 'in'),
('stop', 'of')])
def test_noun():
assert_equal(lexicon.scan("bear"), [('noun', 'bear')])
result = lexicon.scan("bear princess")
assert_equal(result, [('noun', 'bear'),
('noun', 'princess')])
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("ASDFAFASDF"),[('error', 'ASDFAFASDF')])
result = lexicon.scan("bear IAS princess")
assert_equal(result, [('noun', 'bear'),
('error', 'IAS'),
('noun', 'princess')])