[numex] Adding method to do cardinal number spellout by hundreds e.g. twenty-three seventeen instead of two thousand three three hundred seventeen
This commit is contained in:
@@ -392,4 +392,58 @@ class NumericExpressions(object):
|
|||||||
remainder = 0
|
remainder = 0
|
||||||
did_left_multiply = False
|
did_left_multiply = False
|
||||||
|
|
||||||
|
def spellout_cardinal_hundreds(self, num, lang, gender=None, category=None, splitter=six.u(' ')):
|
||||||
|
if num % 100 >= 10:
|
||||||
|
first_hundred = self.spellout_cardinal(num % 100, lang, gender=gender, category=category)
|
||||||
|
elif num % 100 == 0:
|
||||||
|
rules = self.cardinal_rules.get(lang)
|
||||||
|
if not rules:
|
||||||
|
return None
|
||||||
|
|
||||||
|
cardinals = rules.get((100, gender, category))
|
||||||
|
if not cardinals:
|
||||||
|
return None
|
||||||
|
|
||||||
|
for rule in cardinals:
|
||||||
|
if rule.get('left') == 'multiply' and not rule.get('exact_multiple_only'):
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
rule = None
|
||||||
|
|
||||||
|
if not rule:
|
||||||
|
return None
|
||||||
|
|
||||||
|
first_hundred = rule['name']
|
||||||
|
else:
|
||||||
|
rules = self.cardinal_rules.get(lang)
|
||||||
|
if not rules:
|
||||||
|
return None
|
||||||
|
|
||||||
|
tens_place = num % 10
|
||||||
|
zero_rules = rules.get((0, gender, category))
|
||||||
|
if not zero_rules:
|
||||||
|
return None
|
||||||
|
|
||||||
|
tens_place_rules = rules.get((tens_place, gender, category))
|
||||||
|
if not tens_place_rules:
|
||||||
|
return None
|
||||||
|
|
||||||
|
zero_rule = random.choice(zero_rules)
|
||||||
|
tens_rule = random.choice(tens_place_rules)
|
||||||
|
|
||||||
|
first_hundred = splitter.join([zero_rule['name'], tens_rule['name']])
|
||||||
|
|
||||||
|
if not first_hundred:
|
||||||
|
return None
|
||||||
|
|
||||||
|
parts = [first_hundred]
|
||||||
|
|
||||||
|
for i in xrange(1, int(math.ceil(math.log(num, 100)))):
|
||||||
|
part = self.spellout_cardinal(num / 100 ** i, lang, gender=gender, category=category)
|
||||||
|
if not part:
|
||||||
|
return None
|
||||||
|
parts.append(part)
|
||||||
|
return splitter.join(reversed(parts))
|
||||||
|
|
||||||
|
|
||||||
numeric_expressions = NumericExpressions()
|
numeric_expressions = NumericExpressions()
|
||||||
|
|||||||
Reference in New Issue
Block a user