1515from itn .chinese .rules .cardinal import Cardinal
1616from tn .processor import Processor
1717
18- from pynini .lib .pynutil import delete , insert
18+ from pynini import string_file
19+ from pynini .lib .pynutil import delete , insert , add_weight
1920
2021
2122class Fraction (Processor ):
@@ -27,14 +28,21 @@ def __init__(self):
2728
2829 def build_tagger (self ):
2930 number = Cardinal ().number
30-
31- tagger = (insert ('denominator: "' ) + number +
31+ sign = string_file ('itn/chinese/data/number/sign.tsv' ) # + -
32+
33+ # NOTE(xcsong): default weight = 1.0, set to -1.0 means higher priority
34+ # For example,
35+ # 1.0, 负二分之三 -> { sign: "" denominator: "-2" numerator: "3" }
36+ # -1.0,负二分之三 -> { sign: "-" denominator: "2" numerator: "3" }
37+ tagger = (insert ('sign: "' ) + add_weight (sign , - 1.0 ).ques +
38+ insert ('" denominator: "' ) + number +
3239 delete ('分之' ) + insert ('" numerator: "' ) +
3340 number + insert ('"' ))
3441 self .tagger = self .add_tokens (tagger )
3542
3643 def build_verbalizer (self ):
37- numerator = delete ('numerator: "' ) + self .SIGMA + delete ('"' )
44+ sign = delete ('sign: "' ) + self .SIGMA + delete ('"' )
45+ numerator = delete (' numerator: "' ) + self .SIGMA + delete ('"' )
3846 denominator = delete (' denominator: "' ) + self .SIGMA + delete ('"' )
39- verbalizer = numerator + insert ('/' ) + denominator
47+ verbalizer = sign + numerator + insert ('/' ) + denominator
4048 self .verbalizer = self .delete_tokens (verbalizer )
0 commit comments