cardinal.py 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import pynini
  2. from fun_text_processing.inverse_text_normalization.fr.graph_utils import DAMO_NOT_QUOTE, GraphFst, delete_space
  3. from pynini.lib import pynutil
  4. class CardinalFst(GraphFst):
  5. """
  6. Finite state transducer for verbalizing cardinal
  7. e.g. cardinal { negative: "-" integer: "23" } -> -23
  8. """
  9. def __init__(self):
  10. super().__init__(name="cardinal", kind="verbalize")
  11. optional_sign = pynini.closure(
  12. pynutil.delete("negative:")
  13. + delete_space
  14. + pynutil.delete("\"")
  15. + DAMO_NOT_QUOTE
  16. + pynutil.delete("\"")
  17. + delete_space,
  18. 0,
  19. 1,
  20. )
  21. graph = (
  22. pynutil.delete("integer:")
  23. + delete_space
  24. + pynutil.delete("\"")
  25. + pynini.closure(DAMO_NOT_QUOTE, 1)
  26. + pynutil.delete("\"")
  27. )
  28. self.numbers = graph
  29. graph = optional_sign + graph
  30. delete_tokens = self.delete_tokens(graph)
  31. self.fst = delete_tokens.optimize()