def build(chp_csv_path=None, db_path=None): # use default path if either path is not given. if chp_csv_path is None: chp_csv_path = _chp_csv_path if db_path is None: db_path = _db_path # build the index dir_ = Directory(db_path) with open(chp_csv_path) as csv_f: dir_.load_chp_csv(csv_f)
def put_gradual(self, addr_str, zipcode): self.cur.execute(''' select zipcode from gradual where addr_str = ?; ''', (addr_str,)) row = self.cur.fetchone() if row is None: stored_zipcode = None else: stored_zipcode = row[0] self.cur.execute('replace into gradual values (?, ?);', ( addr_str, Directory.get_common_part(stored_zipcode, zipcode), )) return self.cur.rowcount
def put_gradual(self, addr_str, zipcode): self.cur.execute( ''' select zipcode from gradual where addr_str = ?; ''', (addr_str, )) row = self.cur.fetchone() if row is None: stored_zipcode = None else: stored_zipcode = row[0] self.cur.execute('replace into gradual values (?, ?);', ( addr_str, Directory.get_common_part(stored_zipcode, zipcode), )) return self.cur.rowcount
def setup(self): chp_csv_lines = io.BytesIO('''郵遞區號,縣市名稱,鄉鎮市區,原始路名,投遞範圍 10058,臺北市,中正區,八德路1段,全 10079,臺北市,中正區,三元街,單全 10070,臺北市,中正區,三元街,雙 48號以下 10079,臺北市,中正區,三元街,雙 50號以上 10068,臺北市,中正區,大埔街,單 15號以上 10068,臺北市,中正區,大埔街,雙 36號以上 10051,臺北市,中正區,中山北路1段,單 3號以下 10041,臺北市,中正區,中山北路1段,雙 48號以下 10051,臺北市,中正區,中山南路,單 5號以下 10041,臺北市,中正區,中山南路,雙 18號以下 10002,臺北市,中正區,中山南路, 7號 10051,臺北市,中正區,中山南路, 9號 10048,臺北市,中正區,中山南路,單 11號以上 10001,臺北市,中正區,中山南路, 20號 10043,臺北市,中正區,中華路1段,單 25之 3號以下 10042,臺北市,中正區,中華路1段,單 27號至 47號 10010,臺北市,中正區,中華路1段, 49號 10042,臺北市,中正區,中華路1段,單 51號以上 10065,臺北市,中正區,中華路2段,單 79號以下 10066,臺北市,中正區,中華路2段,單 81號至 101號 10068,臺北市,中正區,中華路2段,單 103號至 193號 10069,臺北市,中正區,中華路2段,單 195號至 315號 10067,臺北市,中正區,中華路2段,單 317號至 417號 10072,臺北市,中正區,中華路2段,單 419號以上 10055,臺北市,中正區,丹陽街,全 10051,臺北市,中正區,仁愛路1段, 1號 10052,臺北市,中正區,仁愛路1段,連 2之 4號以上 10055,臺北市,中正區,仁愛路2段,單 37號以下 10060,臺北市,中正區,仁愛路2段,雙 48號以下 10056,臺北市,中正區,仁愛路2段,單 39號至 49號 10056,臺北市,中正區,仁愛路2段,雙 48之 1號至 64號 10062,臺北市,中正區,仁愛路2段,單 51號以上 10063,臺北市,中正區,仁愛路2段,雙 66號以上 20201,基隆市,中正區,義一路, 1號 20241,基隆市,中正區,義一路,連 2號以上 20250,基隆市,中正區,義二路,全 20241,基隆市,中正區,義三路,單全 20248,基隆市,中正區,漁港一街,全 20249,基隆市,中正區,漁港二街,全 20249,基隆市,中正區,漁港三街,全 20249,基隆市,中正區,調和街,全 20248,基隆市,中正區,環港街,全 20243,基隆市,中正區,豐稔街,全 20249,基隆市,中正區,觀海街,全 36046,苗栗縣,苗栗市,大埔街,全 81245,高雄市,小港區,豐田街,全 81245,高雄市,小港區,豐登街,全 81245,高雄市,小港區,豐善街,全 81245,高雄市,小港區,豐街,全 81245,高雄市,小港區,豐點街,全 81257,高雄市,小港區,寶山街,全 81362,高雄市,左營區,大中一路,單 331號以上 81362,高雄市,左營區,大中一路,雙 386號以上 81362,高雄市,左營區,大中二路,單 241號以下 81368,高雄市,左營區,大中二路,雙 200號以下 81369,高雄市,左營區,大中二路,雙 202號至 698號 81369,高雄市,左營區,大中二路,單 243號至 479號 81365,高雄市,左營區,大中二路,單 481號以上 81354,高雄市,左營區,大中二路,雙 700號以上 81357,高雄市,左營區,大順一路,單 91號至 95號 81357,高雄市,左營區,大順一路,雙 96號至 568號 81357,高雄市,左營區,大順一路,單 201號至 389巷'''.encode('utf-8')) self.dir_ = Directory(':memory:', keep_alive=True) self.dir_.load_chp_csv(chp_csv_lines)
class TestDirectory(object): def setup(self): chp_csv_lines = io.BytesIO('''郵遞區號,縣市名稱,鄉鎮市區,原始路名,投遞範圍 10058,臺北市,中正區,八德路1段,全 10079,臺北市,中正區,三元街,單全 10070,臺北市,中正區,三元街,雙 48號以下 10079,臺北市,中正區,三元街,雙 50號以上 10068,臺北市,中正區,大埔街,單 15號以上 10068,臺北市,中正區,大埔街,雙 36號以上 10051,臺北市,中正區,中山北路1段,單 3號以下 10041,臺北市,中正區,中山北路1段,雙 48號以下 10051,臺北市,中正區,中山南路,單 5號以下 10041,臺北市,中正區,中山南路,雙 18號以下 10002,臺北市,中正區,中山南路, 7號 10051,臺北市,中正區,中山南路, 9號 10048,臺北市,中正區,中山南路,單 11號以上 10001,臺北市,中正區,中山南路, 20號 10043,臺北市,中正區,中華路1段,單 25之 3號以下 10042,臺北市,中正區,中華路1段,單 27號至 47號 10010,臺北市,中正區,中華路1段, 49號 10042,臺北市,中正區,中華路1段,單 51號以上 10065,臺北市,中正區,中華路2段,單 79號以下 10066,臺北市,中正區,中華路2段,單 81號至 101號 10068,臺北市,中正區,中華路2段,單 103號至 193號 10069,臺北市,中正區,中華路2段,單 195號至 315號 10067,臺北市,中正區,中華路2段,單 317號至 417號 10072,臺北市,中正區,中華路2段,單 419號以上 10055,臺北市,中正區,丹陽街,全 10051,臺北市,中正區,仁愛路1段, 1號 10052,臺北市,中正區,仁愛路1段,連 2之 4號以上 10055,臺北市,中正區,仁愛路2段,單 37號以下 10060,臺北市,中正區,仁愛路2段,雙 48號以下 10056,臺北市,中正區,仁愛路2段,單 39號至 49號 10056,臺北市,中正區,仁愛路2段,雙 48之 1號至 64號 10062,臺北市,中正區,仁愛路2段,單 51號以上 10063,臺北市,中正區,仁愛路2段,雙 66號以上 20201,基隆市,中正區,義一路, 1號 20241,基隆市,中正區,義一路,連 2號以上 20250,基隆市,中正區,義二路,全 20241,基隆市,中正區,義三路,單全 20248,基隆市,中正區,漁港一街,全 20249,基隆市,中正區,漁港二街,全 20249,基隆市,中正區,漁港三街,全 20249,基隆市,中正區,調和街,全 20248,基隆市,中正區,環港街,全 20243,基隆市,中正區,豐稔街,全 20249,基隆市,中正區,觀海街,全 36046,苗栗縣,苗栗市,大埔街,全 81245,高雄市,小港區,豐田街,全 81245,高雄市,小港區,豐登街,全 81245,高雄市,小港區,豐善街,全 81245,高雄市,小港區,豐街,全 81245,高雄市,小港區,豐點街,全 81257,高雄市,小港區,寶山街,全 81362,高雄市,左營區,大中一路,單 331號以上 81362,高雄市,左營區,大中一路,雙 386號以上 81362,高雄市,左營區,大中二路,單 241號以下 81368,高雄市,左營區,大中二路,雙 200號以下 81369,高雄市,左營區,大中二路,雙 202號至 698號 81369,高雄市,左營區,大中二路,單 243號至 479號 81365,高雄市,左營區,大中二路,單 481號以上 81354,高雄市,左營區,大中二路,雙 700號以上 81357,高雄市,左營區,大順一路,單 91號至 95號 81357,高雄市,左營區,大順一路,雙 96號至 568號 81357,高雄市,左營區,大順一路,單 201號至 389巷'''.encode('utf-8')) self.dir_ = Directory(':memory:', keep_alive=True) self.dir_.load_chp_csv(chp_csv_lines) def test_find(self): # It retuns a partial zipcode when the address doesn't match any rule in # our directory. # 10043,臺北市,中正區,中華路1段,單 25之 3號以下 assert self.dir_.find('臺北市中正區中華路1段25號') == '10043' assert self.dir_.find('臺北市中正區中華路1段25-2號') == '10043' assert self.dir_.find('臺北市中正區中華路1段25-3號') == '10043' assert self.dir_.find('臺北市中正區中華路1段25-4號') == '100' assert self.dir_.find('臺北市中正區中華路1段26號') == '100' # 10042,臺北市,中正區,中華路1段,單 27號至 47號 assert self.dir_.find('臺北市中正區中華路1段25號') == '10043' assert self.dir_.find('臺北市中正區中華路1段26號') == '100' assert self.dir_.find('臺北市中正區中華路1段27號') == '10042' assert self.dir_.find('臺北市中正區中華路1段28號') == '100' assert self.dir_.find('臺北市中正區中華路1段29號') == '10042' assert self.dir_.find('臺北市中正區中華路1段45號') == '10042' assert self.dir_.find('臺北市中正區中華路1段46號') == '100' assert self.dir_.find('臺北市中正區中華路1段47號') == '10042' assert self.dir_.find('臺北市中正區中華路1段48號') == '100' assert self.dir_.find('臺北市中正區中華路1段49號') == '10010' # 10010,臺北市,中正區,中華路1段, 49號 assert self.dir_.find('臺北市中正區中華路1段48號') == '100' assert self.dir_.find('臺北市中正區中華路1段49號') == '10010' assert self.dir_.find('臺北市中正區中華路1段50號') == '100' # 10042,臺北市,中正區,中華路1段,單 51號以上 assert self.dir_.find('臺北市中正區中華路1段49號') == '10010' assert self.dir_.find('臺北市中正區中華路1段50號') == '100' assert self.dir_.find('臺北市中正區中華路1段51號') == '10042' assert self.dir_.find('臺北市中正區中華路1段52號') == '100' assert self.dir_.find('臺北市中正區中華路1段53號') == '10042' def test_find_gradually(self): assert self.dir_.find('臺北市') == '100' assert self.dir_.find('臺北市中正區') == '100' assert self.dir_.find('臺北市中正區仁愛路1段') == '1005' assert self.dir_.find('臺北市中正區仁愛路1段1號') == '10051' def test_find_middle_token(self): assert self.dir_.find('左營區') == '813' assert self.dir_.find('大中一路') == '81362' assert self.dir_.find('大中二路') == '813' assert self.dir_.find('左營區大中一路') == '81362' assert self.dir_.find('左營區大中二路') == '813' assert self.dir_.find('小港區') == '812' assert self.dir_.find('豐街') == '81245' assert self.dir_.find('小港區豐街') == '81245' assert self.dir_.find('中正區') == '' assert self.dir_.find('大埔街') == '' assert self.dir_.find('台北市大埔街') == '10068' assert self.dir_.find('苗栗縣大埔街') == '36046'
def setup(self): chp_csv_lines = '''郵遞區號,縣市名稱,鄉鎮市區,原始路名,投遞範圍 10058,臺北市,中正區,八德路1段,全 10079,臺北市,中正區,三元街,單全 10070,臺北市,中正區,三元街,雙 48號以下 10079,臺北市,中正區,三元街,雙 50號以上 10068,臺北市,中正區,大埔街,單 15號以上 10068,臺北市,中正區,大埔街,雙 36號以上 10051,臺北市,中正區,中山北路1段,單 3號以下 10041,臺北市,中正區,中山北路1段,雙 48號以下 10051,臺北市,中正區,中山南路,單 5號以下 10041,臺北市,中正區,中山南路,雙 18號以下 10002,臺北市,中正區,中山南路, 7號 10051,臺北市,中正區,中山南路, 9號 10048,臺北市,中正區,中山南路,單 11號以上 10001,臺北市,中正區,中山南路, 20號 10043,臺北市,中正區,中華路1段,單 25之 3號以下 10042,臺北市,中正區,中華路1段,單 27號至 47號 10010,臺北市,中正區,中華路1段, 49號 10042,臺北市,中正區,中華路1段,單 51號以上 10065,臺北市,中正區,中華路2段,單 79號以下 10066,臺北市,中正區,中華路2段,單 81號至 101號 10068,臺北市,中正區,中華路2段,單 103號至 193號 10069,臺北市,中正區,中華路2段,單 195號至 315號 10067,臺北市,中正區,中華路2段,單 317號至 417號 10072,臺北市,中正區,中華路2段,單 419號以上 10055,臺北市,中正區,丹陽街,全 10051,臺北市,中正區,仁愛路1段, 1號 10052,臺北市,中正區,仁愛路1段,連 2之 4號以上 10055,臺北市,中正區,仁愛路2段,單 37號以下 10060,臺北市,中正區,仁愛路2段,雙 48號以下 10056,臺北市,中正區,仁愛路2段,單 39號至 49號 10056,臺北市,中正區,仁愛路2段,雙 48之 1號至 64號 10062,臺北市,中正區,仁愛路2段,單 51號以上 10063,臺北市,中正區,仁愛路2段,雙 66號以上 20201,基隆市,中正區,義一路, 1號 20241,基隆市,中正區,義一路,連 2號以上 20250,基隆市,中正區,義二路,全 20241,基隆市,中正區,義三路,單全 20248,基隆市,中正區,漁港一街,全 20249,基隆市,中正區,漁港二街,全 20249,基隆市,中正區,漁港三街,全 20249,基隆市,中正區,調和街,全 20248,基隆市,中正區,環港街,全 20243,基隆市,中正區,豐稔街,全 20249,基隆市,中正區,觀海街,全 36046,苗栗縣,苗栗市,大埔街,全 81245,高雄市,小港區,豐田街,全 81245,高雄市,小港區,豐登街,全 81245,高雄市,小港區,豐善街,全 81245,高雄市,小港區,豐街,全 81245,高雄市,小港區,豐點街,全 81257,高雄市,小港區,寶山街,全 81362,高雄市,左營區,大中一路,單 331號以上 81362,高雄市,左營區,大中一路,雙 386號以上 81362,高雄市,左營區,大中二路,單 241號以下 81368,高雄市,左營區,大中二路,雙 200號以下 81369,高雄市,左營區,大中二路,雙 202號至 698號 81369,高雄市,左營區,大中二路,單 243號至 479號 81365,高雄市,左營區,大中二路,單 481號以上 81354,高雄市,左營區,大中二路,雙 700號以上 81357,高雄市,左營區,大順一路,單 91號至 95號 81357,高雄市,左營區,大順一路,雙 96號至 568號 81357,高雄市,左營區,大順一路,單 201號至 389巷'''.split('\n') self.dir_ = Directory(':memory:', keep_alive=True) self.dir_.load_chp_csv(chp_csv_lines)
class TestDirectory(object): def setup(self): chp_csv_lines = '''郵遞區號,縣市名稱,鄉鎮市區,原始路名,投遞範圍 10058,臺北市,中正區,八德路1段,全 10079,臺北市,中正區,三元街,單全 10070,臺北市,中正區,三元街,雙 48號以下 10079,臺北市,中正區,三元街,雙 50號以上 10068,臺北市,中正區,大埔街,單 15號以上 10068,臺北市,中正區,大埔街,雙 36號以上 10051,臺北市,中正區,中山北路1段,單 3號以下 10041,臺北市,中正區,中山北路1段,雙 48號以下 10051,臺北市,中正區,中山南路,單 5號以下 10041,臺北市,中正區,中山南路,雙 18號以下 10002,臺北市,中正區,中山南路, 7號 10051,臺北市,中正區,中山南路, 9號 10048,臺北市,中正區,中山南路,單 11號以上 10001,臺北市,中正區,中山南路, 20號 10043,臺北市,中正區,中華路1段,單 25之 3號以下 10042,臺北市,中正區,中華路1段,單 27號至 47號 10010,臺北市,中正區,中華路1段, 49號 10042,臺北市,中正區,中華路1段,單 51號以上 10065,臺北市,中正區,中華路2段,單 79號以下 10066,臺北市,中正區,中華路2段,單 81號至 101號 10068,臺北市,中正區,中華路2段,單 103號至 193號 10069,臺北市,中正區,中華路2段,單 195號至 315號 10067,臺北市,中正區,中華路2段,單 317號至 417號 10072,臺北市,中正區,中華路2段,單 419號以上 10055,臺北市,中正區,丹陽街,全 10051,臺北市,中正區,仁愛路1段, 1號 10052,臺北市,中正區,仁愛路1段,連 2之 4號以上 10055,臺北市,中正區,仁愛路2段,單 37號以下 10060,臺北市,中正區,仁愛路2段,雙 48號以下 10056,臺北市,中正區,仁愛路2段,單 39號至 49號 10056,臺北市,中正區,仁愛路2段,雙 48之 1號至 64號 10062,臺北市,中正區,仁愛路2段,單 51號以上 10063,臺北市,中正區,仁愛路2段,雙 66號以上 20201,基隆市,中正區,義一路, 1號 20241,基隆市,中正區,義一路,連 2號以上 20250,基隆市,中正區,義二路,全 20241,基隆市,中正區,義三路,單全 20248,基隆市,中正區,漁港一街,全 20249,基隆市,中正區,漁港二街,全 20249,基隆市,中正區,漁港三街,全 20249,基隆市,中正區,調和街,全 20248,基隆市,中正區,環港街,全 20243,基隆市,中正區,豐稔街,全 20249,基隆市,中正區,觀海街,全 36046,苗栗縣,苗栗市,大埔街,全 81245,高雄市,小港區,豐田街,全 81245,高雄市,小港區,豐登街,全 81245,高雄市,小港區,豐善街,全 81245,高雄市,小港區,豐街,全 81245,高雄市,小港區,豐點街,全 81257,高雄市,小港區,寶山街,全 81362,高雄市,左營區,大中一路,單 331號以上 81362,高雄市,左營區,大中一路,雙 386號以上 81362,高雄市,左營區,大中二路,單 241號以下 81368,高雄市,左營區,大中二路,雙 200號以下 81369,高雄市,左營區,大中二路,雙 202號至 698號 81369,高雄市,左營區,大中二路,單 243號至 479號 81365,高雄市,左營區,大中二路,單 481號以上 81354,高雄市,左營區,大中二路,雙 700號以上 81357,高雄市,左營區,大順一路,單 91號至 95號 81357,高雄市,左營區,大順一路,雙 96號至 568號 81357,高雄市,左營區,大順一路,單 201號至 389巷'''.split('\n') self.dir_ = Directory(':memory:', keep_alive=True) self.dir_.load_chp_csv(chp_csv_lines) def test_find(self): # It retuns a partial zipcode when the address doesn't match any rule in # our directory. # 10043,臺北市,中正區,中華路1段,單 25之 3號以下 assert self.dir_.find('臺北市中正區中華路1段25號') == '10043' assert self.dir_.find('臺北市中正區中華路1段25-2號') == '10043' assert self.dir_.find('臺北市中正區中華路1段25-3號') == '10043' assert self.dir_.find('臺北市中正區中華路1段25-4號') == '100' assert self.dir_.find('臺北市中正區中華路1段26號') == '100' # 10042,臺北市,中正區,中華路1段,單 27號至 47號 assert self.dir_.find('臺北市中正區中華路1段25號') == '10043' assert self.dir_.find('臺北市中正區中華路1段26號') == '100' assert self.dir_.find('臺北市中正區中華路1段27號') == '10042' assert self.dir_.find('臺北市中正區中華路1段28號') == '100' assert self.dir_.find('臺北市中正區中華路1段29號') == '10042' assert self.dir_.find('臺北市中正區中華路1段45號') == '10042' assert self.dir_.find('臺北市中正區中華路1段46號') == '100' assert self.dir_.find('臺北市中正區中華路1段47號') == '10042' assert self.dir_.find('臺北市中正區中華路1段48號') == '100' assert self.dir_.find('臺北市中正區中華路1段49號') == '10010' # 10010,臺北市,中正區,中華路1段, 49號 assert self.dir_.find('臺北市中正區中華路1段48號') == '100' assert self.dir_.find('臺北市中正區中華路1段49號') == '10010' assert self.dir_.find('臺北市中正區中華路1段50號') == '100' # 10042,臺北市,中正區,中華路1段,單 51號以上 assert self.dir_.find('臺北市中正區中華路1段49號') == '10010' assert self.dir_.find('臺北市中正區中華路1段50號') == '100' assert self.dir_.find('臺北市中正區中華路1段51號') == '10042' assert self.dir_.find('臺北市中正區中華路1段52號') == '100' assert self.dir_.find('臺北市中正區中華路1段53號') == '10042' def test_find_gradually(self): assert self.dir_.find('臺北市') == '100' assert self.dir_.find('臺北市中正區') == '100' assert self.dir_.find('臺北市中正區仁愛路1段') == '1005' assert self.dir_.find('臺北市中正區仁愛路1段1號') == '10051' def test_find_middle_token(self): assert self.dir_.find('左營區') == '813' assert self.dir_.find('大中一路') == '81362' assert self.dir_.find('大中二路') == '813' assert self.dir_.find('左營區大中一路') == '81362' assert self.dir_.find('左營區大中二路') == '813' assert self.dir_.find('小港區') == '812' assert self.dir_.find('豐街') == '81245' assert self.dir_.find('小港區豐街') == '81245' assert self.dir_.find('中正區') == '' assert self.dir_.find('大埔街') == '' assert self.dir_.find('台北市大埔街') == '10068' assert self.dir_.find('苗栗縣大埔街') == '36046'
class TestDirectory(object): def setup(self): chp_csv_lines = """郵遞區號,縣市名稱,鄉鎮市區,原始路名,投遞範圍 10058,臺北市,中正區,八德路1段,全 10079,臺北市,中正區,三元街,單全 10070,臺北市,中正區,三元街,雙 48號以下 10079,臺北市,中正區,三元街,雙 50號以上 10068,臺北市,中正區,大埔街,單 15號以上 10068,臺北市,中正區,大埔街,雙 36號以上 10051,臺北市,中正區,中山北路1段,單 3號以下 10041,臺北市,中正區,中山北路1段,雙 48號以下 10051,臺北市,中正區,中山南路,單 5號以下 10041,臺北市,中正區,中山南路,雙 18號以下 10002,臺北市,中正區,中山南路, 7號 10051,臺北市,中正區,中山南路, 9號 10048,臺北市,中正區,中山南路,單 11號以上 10001,臺北市,中正區,中山南路, 20號 10043,臺北市,中正區,中華路1段,單 25之 3號以下 10042,臺北市,中正區,中華路1段,單 27號至 47號 10010,臺北市,中正區,中華路1段, 49號 10042,臺北市,中正區,中華路1段,單 51號以上 10065,臺北市,中正區,中華路2段,單 79號以下 10066,臺北市,中正區,中華路2段,單 81號至 101號 10068,臺北市,中正區,中華路2段,單 103號至 193號 10069,臺北市,中正區,中華路2段,單 195號至 315號 10067,臺北市,中正區,中華路2段,單 317號至 417號 10072,臺北市,中正區,中華路2段,單 419號以上 10055,臺北市,中正區,丹陽街,全 10051,臺北市,中正區,仁愛路1段, 1號 10052,臺北市,中正區,仁愛路1段,連 2之 4號以上 10055,臺北市,中正區,仁愛路2段,單 37號以下 10060,臺北市,中正區,仁愛路2段,雙 48號以下 10056,臺北市,中正區,仁愛路2段,單 39號至 49號 10056,臺北市,中正區,仁愛路2段,雙 48之 1號至 64號 10062,臺北市,中正區,仁愛路2段,單 51號以上 10063,臺北市,中正區,仁愛路2段,雙 66號以上 20201,基隆市,中正區,義一路, 1號 20241,基隆市,中正區,義一路,連 2號以上 20250,基隆市,中正區,義二路,全 20241,基隆市,中正區,義三路,單全 20248,基隆市,中正區,漁港一街,全 20249,基隆市,中正區,漁港二街,全 20249,基隆市,中正區,漁港三街,全 20249,基隆市,中正區,調和街,全 20248,基隆市,中正區,環港街,全 20243,基隆市,中正區,豐稔街,全 20249,基隆市,中正區,觀海街,全 36046,苗栗縣,苗栗市,大埔街,全 81245,高雄市,小港區,豐田街,全 81245,高雄市,小港區,豐登街,全 81245,高雄市,小港區,豐善街,全 81245,高雄市,小港區,豐街,全 81245,高雄市,小港區,豐點街,全 81257,高雄市,小港區,寶山街,全 81362,高雄市,左營區,大中一路,單 331號以上 81362,高雄市,左營區,大中一路,雙 386號以上 81362,高雄市,左營區,大中二路,單 241號以下 81368,高雄市,左營區,大中二路,雙 200號以下 81369,高雄市,左營區,大中二路,雙 202號至 698號 81369,高雄市,左營區,大中二路,單 243號至 479號 81365,高雄市,左營區,大中二路,單 481號以上 81354,高雄市,左營區,大中二路,雙 700號以上 81357,高雄市,左營區,大順一路,單 91號至 95號 81357,高雄市,左營區,大順一路,雙 96號至 568號 81357,高雄市,左營區,大順一路,單 201號至 389巷""".split( "\n" ) self.dir_ = Directory(":memory:", keep_alive=True) self.dir_.load_chp_csv(chp_csv_lines) def test_find(self): # It retuns a partial zipcode when the address doesn't match any rule in # our directory. # 10043,臺北市,中正區,中華路1段,單 25之 3號以下 assert self.dir_.find("臺北市中正區中華路1段25號") == "10043" assert self.dir_.find("臺北市中正區中華路1段25-2號") == "10043" assert self.dir_.find("臺北市中正區中華路1段25-3號") == "10043" assert self.dir_.find("臺北市中正區中華路1段25-4號") == "100" assert self.dir_.find("臺北市中正區中華路1段26號") == "100" # 10042,臺北市,中正區,中華路1段,單 27號至 47號 assert self.dir_.find("臺北市中正區中華路1段25號") == "10043" assert self.dir_.find("臺北市中正區中華路1段26號") == "100" assert self.dir_.find("臺北市中正區中華路1段27號") == "10042" assert self.dir_.find("臺北市中正區中華路1段28號") == "100" assert self.dir_.find("臺北市中正區中華路1段29號") == "10042" assert self.dir_.find("臺北市中正區中華路1段45號") == "10042" assert self.dir_.find("臺北市中正區中華路1段46號") == "100" assert self.dir_.find("臺北市中正區中華路1段47號") == "10042" assert self.dir_.find("臺北市中正區中華路1段48號") == "100" assert self.dir_.find("臺北市中正區中華路1段49號") == "10010" # 10010,臺北市,中正區,中華路1段, 49號 assert self.dir_.find("臺北市中正區中華路1段48號") == "100" assert self.dir_.find("臺北市中正區中華路1段49號") == "10010" assert self.dir_.find("臺北市中正區中華路1段50號") == "100" # 10042,臺北市,中正區,中華路1段,單 51號以上 assert self.dir_.find("臺北市中正區中華路1段49號") == "10010" assert self.dir_.find("臺北市中正區中華路1段50號") == "100" assert self.dir_.find("臺北市中正區中華路1段51號") == "10042" assert self.dir_.find("臺北市中正區中華路1段52號") == "100" assert self.dir_.find("臺北市中正區中華路1段53號") == "10042" def test_find_gradually(self): assert self.dir_.find("臺北市") == "100" assert self.dir_.find("臺北市中正區") == "100" assert self.dir_.find("臺北市中正區仁愛路1段") == "1005" assert self.dir_.find("臺北市中正區仁愛路1段1號") == "10051" def test_find_middle_token(self): assert self.dir_.find("左營區") == "813" assert self.dir_.find("大中一路") == "81362" assert self.dir_.find("大中二路") == "813" assert self.dir_.find("左營區大中一路") == "81362" assert self.dir_.find("左營區大中二路") == "813" assert self.dir_.find("小港區") == "812" assert self.dir_.find("豐街") == "81245" assert self.dir_.find("小港區豐街") == "81245" assert self.dir_.find("中正區") == "" assert self.dir_.find("大埔街") == "" assert self.dir_.find("台北市大埔街") == "10068" assert self.dir_.find("苗栗縣大埔街") == "36046"