fraction.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. from fun_text_processing.inverse_text_normalization.zh.graph_utils import (
  2. DAMO_NOT_QUOTE,
  3. GraphFst,
  4. delete_extra_space,
  5. delete_space,
  6. )
  7. import pynini
  8. from pynini.lib import pynutil
  9. class FractionFst(GraphFst):
  10. """
  11. Finite state transducer for verbalizing fraction,
  12. """
  13. def __init__(self):
  14. super().__init__(name="fraction", kind="verbalize")
  15. optional_sign = pynini.closure(pynini.cross('negative: "true"', "-") + delete_space, 0, 1)
  16. numerator = (
  17. pynutil.delete('numerator:')
  18. + delete_space
  19. + pynutil.delete("\"")
  20. + pynini.closure(DAMO_NOT_QUOTE, 1)
  21. + pynutil.delete("\"")
  22. )
  23. denominator = (
  24. pynutil.delete('denominator:')
  25. + delete_space
  26. + pynutil.delete("\"")
  27. + pynini.closure(DAMO_NOT_QUOTE, 1)
  28. + pynutil.delete("\"")
  29. )
  30. graph = (optional_sign + numerator + delete_space + pynutil.insert("/") + denominator).optimize()
  31. self.numbers = graph
  32. delete_tokens = self.delete_tokens(optional_sign + graph)
  33. self.fst = delete_tokens.optimize()