def lookup_geoid(self, place: Loc) -> None: """Search for GEOID""" result_place: Loc = Loc.Loc() query_list = [ Query(where="geoid = ? ", args=(place.target, ), result=Result.STRONG_MATCH) ] place.georow_list, place.result_type = self.db.process_query_list( from_tbl='main.geodata', query_list=query_list) if len(place.georow_list) == 0: place.georow_list, place.result_type = self.db.process_query_list( from_tbl='main.admin', query_list=query_list) else: place.georow_list = place.georow_list[:1] place.result_type = GeoKeys.Result.STRONG_MATCH # Add search quality score to each entry for idx, rw in enumerate(place.georow_list): self.copy_georow_to_place(row=rw, place=result_place) update = list(rw) update.append(1) # Extend list row and assign score result_place.prefix = '' res_nm = result_place.format_full_nm(None) score = 0.0 # Remove items in prefix that are in result tk_list = res_nm.split(",") for item in tk_list: place.prefix = re.sub( item.strip(' ').lower(), '', place.prefix) update[GeoKeys.Entry.SCORE] = int(score * 100) place.georow_list[idx] = tuple(update)
def select_admin2(self, place: Loc): """Search for Admin2 entry""" lookup_target = place.admin2_name if len(lookup_target) == 0: return place.target = lookup_target # sdx = get_soundex(lookup_target) # Try Admin query until we find a match - each query gets less exact query_list = [ Query( where="name = ? AND country = ? AND admin1_id = ? AND f_code=?", args=(lookup_target, place.country_iso, place.admin1_id, 'ADM2'), result=Result.STRONG_MATCH), Query(where="name = ? AND country = ? AND f_code=?", args=(lookup_target, place.country_iso, 'ADM2'), result=Result.PARTIAL_MATCH), Query(where="name LIKE ? AND country = ? AND f_code=?", args=(self.create_wildcard(lookup_target), place.country_iso, 'ADM2'), result=Result.PARTIAL_MATCH), Query(where="name = ? AND f_code=?", args=(lookup_target, 'ADM2'), result=Result.PARTIAL_MATCH), Query(where="name LIKE ? AND country = ? AND f_code=?", args=(lookup_target, place.country_iso, 'ADM2'), result=Result.WILDCARD_MATCH) ] # self.logger.debug(f'Admin2 lookup=[{lookup_target}] country=[{place.country_iso}]') place.georow_list, place.result_type = self.db.process_query_list( from_tbl='main.admin', query_list=query_list) if place.result_type == GeoKeys.Result.WILDCARD_MATCH: # Found as Admin2 without shire place.original_entry = re.sub('shire', '', place.original_entry) if len(place.georow_list) == 0: # Try city rather than County match. save_admin2 = place.admin2_name place.city1 = place.admin2_name place.admin2_name = '' # self.logger.debug(f'Try admin2 as city: [{place.target}]') self.select_city(place) if len(place.georow_list) == 0: # not found. restore admin place.admin2_name = save_admin2 place.city1 = '' else: # Found match as a City place.place_type = Loc.PlaceType.CITY match_adm1 = self.get_admin1_name_direct( lookup_target=place.georow_list[0][Entry.ADM1], iso=place.country_iso) # self.logger.debug(f'pl_iso [{place.country_iso}] pl_adm1 {place.admin1_name} match_adm1=[{match_adm1}] ') if place.admin1_name != match_adm1: place.prefix = place.admin1_name.title() place.admin1_name = '' return