diff --git a/scripts/geodata/address_formatting/formatter.py b/scripts/geodata/address_formatting/formatter.py index e24fe004..30a59725 100644 --- a/scripts/geodata/address_formatting/formatter.py +++ b/scripts/geodata/address_formatting/formatter.py @@ -207,6 +207,8 @@ class AddressFormatter(object): config = yaml.load(open(os.path.join(self.formatter_repo_path, 'conf', 'countries', 'worldwide.yaml'))) self.country_aliases = {} + self.house_number_ordering = {} + for key in list(config): country = key language = None @@ -231,6 +233,18 @@ class AddressFormatter(object): else: address_template = value config[country] = self.add_postprocessing_tags(value, country, language=language) + + try: + house_number_index = address_template.index(self.tag_token(self.HOUSE_NUMBER)) + road_index = address_template.index(self.tag_token(self.ROAD)) + + if house_number_index < road_index: + self.house_number_ordering[key.lower()] = -1 + else: + self.house_number_ordering[key.lower()] = 1 + except ValueError: + self.house_number_ordering[key.lower()] = 0 + self.country_formats = config def load_config(self): @@ -302,6 +316,26 @@ class AddressFormatter(object): return component_insertions + def house_number_before_road(self, country, language=None): + key = value = None + if language is not None: + key = six.u('_').join((country.lower(), language.lower())) + if key in self.house_number_ordering: + value = self.house_number_ordering[key] + + if value is None: + key = country + if key in self.house_number_ordering: + value = self.house_number_ordering[key] + + if value is None: + value = 0 + + if value <= 0: + return True + else: + return False + def conditional_insertion_probs(self, conditionals): conditional_insertions = defaultdict(OrderedDict) for component, value in six.iteritems(conditionals):