class en_us_normalization.production.verbalize.MoneyFst(cardinal: Optional[CardinalFst] = None, decimal: Optional[DecimalFst] = None)[source]

Finite state transducer for verbalizing money. During tokenization, amount is split into integer and fraction part. During verbalization, those are expanded reusing transducers from cardinal verbalizer. The reason not to use decimal transducer, is because fraction part of money behaves slightly differently. For instance:

“integer_part:12|fractional_part:5|” should be “twelve dollars fifty cents”.

The only task is to expand currency symbol appropriately: into major and minor versions. This is done using expansions provided in the data files:

  • data/currency/major.tsv

  • data/currency/minor.tsv - it is not so straightforward to convert plural/singular, so two data files are maintained.

  • data/currency/minor_plural.tsv

For example “$” is expanded to “dollars” and “cents”. Additionally, money verbalizer has to take care of changing form of major/minor currencies to plural or singular depending on the predecessing number.

Examples of input/output strings:

  • money|integer_part:12|currency:$|fractional_part:05|currency:$| -> twelve dollars and five cents

__init__(cardinal: Optional[CardinalFst] = None, decimal: Optional[DecimalFst] = None)[source]

constructor of money verbalizer

cardinal: CardinalFst

reusing cardinal transducer to expand integer/fraction parts of money

decimal: DecimalFst

reusing decimal transducer to expand money when there is explicit quantity