From ff323214257e520e803d27898fe90b1558bedc57 Mon Sep 17 00:00:00 2001 From: Al Date: Mon, 19 Dec 2016 02:00:06 -0500 Subject: [PATCH] [formatter] adding house_number_before_road method to AddressFormatter --- .../geodata/address_formatting/formatter.py | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) 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):