[addresses] different dictionaries for sampling cardinal/unit directions, not converting None to a string

This commit is contained in:
Al
2016-04-19 17:05:10 -04:00
parent d91735c3c2
commit 901f720368
2 changed files with 12 additions and 4 deletions

View File

@@ -3,7 +3,9 @@ from geodata.addresses.numbering import NumericPhrase
class RelativeDirection(NumericPhrase): class RelativeDirection(NumericPhrase):
key = 'directions' key = 'directions'
dictionaries = ['unit_directions']
class CardinalDirection(NumericPhrase): class CardinalDirection(NumericPhrase):
key = 'cardinal_directions' key = 'cardinal_directions'
dictionaries = ['cardinal_directions']

View File

@@ -43,9 +43,9 @@ class NumericPhrase(object):
@classmethod @classmethod
def phrase(cls, number, language, country=None): def phrase(cls, number, language, country=None):
values, probs = address_config.alternative_probabilities(cls.key, language, dictionaries=['number'], country=country) values, probs = address_config.alternative_probabilities(cls.key, language, dictionaries=cls.dictionaries, country=country)
if not values: if not values:
return safe_decode(number) return safe_decode(number) if number is not None else None
phrase, phrase_props = weighted_choice(values, probs) phrase, phrase_props = weighted_choice(values, probs)
@@ -82,6 +82,9 @@ class NumericPhrase(object):
# Title case unless the config specifies otherwise # Title case unless the config specifies otherwise
phrase = phrase.title() phrase = phrase.title()
if number is None:
return phrase
whitespace_phrase = six.u(' ') if whitespace else six.u('') whitespace_phrase = six.u(' ') if whitespace else six.u('')
# Phrase goes to the left of hte number # Phrase goes to the left of hte number
if direction == 'left': if direction == 'left':
@@ -96,19 +99,22 @@ class NumericPhrase(object):
class Number(NumericPhrase): class Number(NumericPhrase):
key = 'numbers' key = 'numbers'
dictionraries = ['number']
class NumberedComponent(object): class NumberedComponent(object):
@classmethod @classmethod
def numeric_phrase(cls, key, num, language, country=None, dictionaries=()): def numeric_phrase(cls, key, num, language, country=None, dictionaries=()):
is_alpha = False is_alpha = False
is_none = False
try: try:
num = int(num) num = int(num)
except ValueError: except ValueError:
try: try:
num = float(num) num = float(num)
except ValueError: except ValueError:
is_alpha = True is_alpha = num is not None
is_none = num is None
# Pick a phrase given the probability distribution from the config # Pick a phrase given the probability distribution from the config
values, probs = address_config.alternative_probabilities(key, language, dictionaries=dictionaries, country=country) values, probs = address_config.alternative_probabilities(key, language, dictionaries=dictionaries, country=country)
@@ -148,7 +154,7 @@ class NumberedComponent(object):
probs.append(1.0) probs.append(1.0)
break break
if not probs: if not probs or is_none:
return phrase return phrase
# If we're using something like "Floor A" or "Unit 2L", remove ordinal/affix items # If we're using something like "Floor A" or "Unit 2L", remove ordinal/affix items