time.py 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. import pynini
  2. from fun_text_processing.text_normalization.en.graph_utils import DAMO_NOT_QUOTE, GraphFst, delete_space
  3. from pynini.lib import pynutil
  4. class TimeFst(GraphFst):
  5. """
  6. Finite state transducer for verbalizing time
  7. e.g. time { hours: "02:15" } -> "02:15"
  8. """
  9. def __init__(self):
  10. super().__init__(name="time", kind="verbalize")
  11. hour = (
  12. pynutil.delete("hours: ") + pynutil.delete("\"") + pynini.closure(DAMO_NOT_QUOTE, 1) + pynutil.delete("\"")
  13. )
  14. minutes = (
  15. pynutil.delete("minutes: ")
  16. + pynutil.delete("\"")
  17. + pynini.closure(DAMO_NOT_QUOTE, 1)
  18. + pynutil.delete("\"")
  19. )
  20. graph_preserve_order = pynutil.delete("hours: \"") + pynini.closure(DAMO_NOT_QUOTE, 1) + pynutil.delete("\"")
  21. # for cases that require permutations for the correct verbalization
  22. graph_reverse_order = hour + delete_space + pynutil.insert(":") + minutes + delete_space
  23. graph = graph_preserve_order | graph_reverse_order
  24. delete_tokens = self.delete_tokens(graph)
  25. self.fst = delete_tokens.optimize()