[addresses] implementing null_probability (raw number, no phrase), orindal genders, and direction_probability
This commit is contained in:
@@ -106,6 +106,8 @@ class NumberedComponent(object):
|
|||||||
|
|
||||||
# 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)
|
||||||
|
if values is None:
|
||||||
|
return None
|
||||||
phrase, phrase_props = weighted_choice(values, probs)
|
phrase, phrase_props = weighted_choice(values, probs)
|
||||||
|
|
||||||
values = []
|
values = []
|
||||||
@@ -124,12 +126,15 @@ class NumberedComponent(object):
|
|||||||
4. As an ordinal expression e.g. "2nd Floor"
|
4. As an ordinal expression e.g. "2nd Floor"
|
||||||
'''
|
'''
|
||||||
have_standalone = False
|
have_standalone = False
|
||||||
for num_type in ('standalone', 'numeric', 'numeric_affix', 'ordinal'):
|
have_null = False
|
||||||
|
for num_type in ('standalone', 'null', 'numeric', 'numeric_affix', 'ordinal'):
|
||||||
key = '{}_probability'.format(num_type)
|
key = '{}_probability'.format(num_type)
|
||||||
prob = phrase_props.get(key)
|
prob = phrase_props.get(key)
|
||||||
if prob is not None:
|
if prob is not None:
|
||||||
if num_type == 'standalone':
|
if num_type == 'standalone':
|
||||||
have_standalone = True
|
have_standalone = True
|
||||||
|
elif num_type == 'null':
|
||||||
|
have_null = True
|
||||||
values.append(num_type)
|
values.append(num_type)
|
||||||
probs.append(prob)
|
probs.append(prob)
|
||||||
|
|
||||||
@@ -145,12 +150,19 @@ class NumberedComponent(object):
|
|||||||
probs = cdf(probs)
|
probs = cdf(probs)
|
||||||
|
|
||||||
if len(values) < 2:
|
if len(values) < 2:
|
||||||
num_type = 'standalone' if have_standalone else 'numeric'
|
if have_standalone:
|
||||||
|
num_type = 'standalone'
|
||||||
|
elif have_null:
|
||||||
|
num_type = 'null'
|
||||||
|
else:
|
||||||
|
num_type = 'numeric'
|
||||||
else:
|
else:
|
||||||
num_type = weighted_choice(values, probs)
|
num_type = weighted_choice(values, probs)
|
||||||
|
|
||||||
if num_type == 'standalone':
|
if num_type == 'standalone':
|
||||||
return phrase
|
return phrase
|
||||||
|
elif num_type == 'null':
|
||||||
|
return safe_decode(num)
|
||||||
|
|
||||||
props = phrase_props[num_type]
|
props = phrase_props[num_type]
|
||||||
|
|
||||||
@@ -178,11 +190,18 @@ class NumberedComponent(object):
|
|||||||
phrase = phrase.upper()
|
phrase = phrase.upper()
|
||||||
whitespace_default = False
|
whitespace_default = False
|
||||||
elif num_type == 'ordinal':
|
elif num_type == 'ordinal':
|
||||||
num = ordinal_expressions.suffixed_number(num, language)
|
num = ordinal_expressions.suffixed_number(num, language, gender=props.get('gender', None))
|
||||||
|
|
||||||
direction = props['direction']
|
direction = props['direction']
|
||||||
whitespace = props.get('whitespace', whitespace_default)
|
whitespace = props.get('whitespace', whitespace_default)
|
||||||
|
|
||||||
|
# Occasionally switch up if direction_probability is specified
|
||||||
|
if random.random() < props.get('direction_probability', 0.0):
|
||||||
|
if direction == 'left':
|
||||||
|
direction = 'right'
|
||||||
|
elif direction == 'right':
|
||||||
|
direction = 'left'
|
||||||
|
|
||||||
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':
|
||||||
|
|||||||
Reference in New Issue
Block a user