kongdeqiang
8 天以前 28ccfbfc51068a663a80764e14074df5edf2b5ba
fun_text_processing/text_normalization/de/verbalizers/fraction.py
@@ -1,4 +1,3 @@
import pynini
from fun_text_processing.text_normalization.en.graph_utils import (
    DAMO_NOT_QUOTE,
@@ -26,27 +25,38 @@
    def __init__(self, ordinal: GraphFst, deterministic: bool = True):
        super().__init__(name="fraction", kind="verbalize", deterministic=deterministic)
        optional_sign = pynini.closure(pynini.cross("negative: \"true\"", "minus ") + pynutil.delete(" "), 0, 1)
        change_one = pynini.cdrewrite(
            pynutil.add_weight(pynini.cross("eins", "ein"), weight=-0.0001), "[BOS]", "[EOS]", DAMO_SIGMA
        optional_sign = pynini.closure(
            pynini.cross('negative: "true"', "minus ") + pynutil.delete(" "), 0, 1
        )
        change_numerator_two = pynini.cdrewrite(pynini.cross("zweitel", "halbe"), "[BOS]", "[EOS]", DAMO_SIGMA)
        integer = pynutil.delete("integer_part: \"") + change_one + pynutil.delete("\" ")
        numerator = pynutil.delete("numerator: \"") + change_one + pynutil.delete("\" ")
        change_one = pynini.cdrewrite(
            pynutil.add_weight(pynini.cross("eins", "ein"), weight=-0.0001),
            "[BOS]",
            "[EOS]",
            DAMO_SIGMA,
        )
        change_numerator_two = pynini.cdrewrite(
            pynini.cross("zweitel", "halbe"), "[BOS]", "[EOS]", DAMO_SIGMA
        )
        integer = pynutil.delete('integer_part: "') + change_one + pynutil.delete('" ')
        numerator = pynutil.delete('numerator: "') + change_one + pynutil.delete('" ')
        denominator = (
            pynutil.delete("denominator: \"")
            pynutil.delete('denominator: "')
            + pynini.closure(DAMO_NOT_QUOTE)
            @ (
                pynini.cdrewrite(pynini.closure(ordinal.ordinal_stem, 0, 1), "", "[EOS]", DAMO_SIGMA)
                pynini.cdrewrite(
                    pynini.closure(ordinal.ordinal_stem, 0, 1), "", "[EOS]", DAMO_SIGMA
                )
                + pynutil.insert("tel")
            )
            @ change_numerator_two
            + pynutil.delete("\"")
            + pynutil.delete('"')
        )
        integer += insert_space + pynini.closure(pynutil.insert("und ", weight=0.001), 0, 1)
        denominator_one_half = pynini.cdrewrite(pynini.cross("ein halbe", "ein halb"), "[BOS]", "[EOS]", DAMO_SIGMA)
        denominator_one_half = pynini.cdrewrite(
            pynini.cross("ein halbe", "ein halb"), "[BOS]", "[EOS]", DAMO_SIGMA
        )
        fraction_default = (numerator + insert_space + denominator) @ denominator_one_half