
    $HJj                     Z   d Z ddlZddlmZ ddlmZ  ed      D  ci c]  \  } } e|       | c}} Z edddd	d
d      Z	dZ
 ej                  d      ZdefdZ ej                  d      ZdefdZ ej                  d      ZdefdZ ej                  d      Zd Z ej                  d      Z ej                  de
z         Z ej                  d      ZdefdZdefdZ ej                  d      ZdefdZd#dededee   fdZdedefd Zd$dedefd!Zdedefd"Zyc c}} w )%um   
Rules to verbalize numbers into Chinese characters.
https://zh.wikipedia.org/wiki/中文数字#現代中文
    N)OrderedDict)Listu   零一二三四五六七八九u   十u   百u   千u   万u   亿)               u  (封|艘|把|目|套|段|人|所|朵|匹|张|座|回|场|尾|条|个|首|阙|阵|网|炮|顶|丘|棵|只|支|袭|辆|挑|担|颗|壳|窠|曲|墙|群|腔|砣|座|客|贯|扎|捆|刀|令|打|手|罗|坡|山|岭|江|溪|钟|队|单|双|对|出|口|头|脚|板|跳|枝|件|贴|针|线|管|名|位|身|堂|课|本|页|家|户|层|丝|毫|厘|分|钱|两|斤|担|铢|石|钧|锱|忽|(千|毫|微)克|毫|厘|(公)分|分|寸|尺|丈|里|寻|常|铺|程|(千|分|厘|毫|微)米|米|撮|勺|合|升|斗|石|盘|碗|碟|叠|桶|笼|盆|盒|杯|钟|斛|锅|簋|篮|盘|桶|罐|瓶|壶|卮|盏|箩|箱|煲|啖|袋|钵|年|月|日|季|刻|时|周|天|秒|分|小时|旬|纪|岁|世|更|夜|春|夏|秋|冬|代|伏|辈|丸|泡|粒|颗|幢|堆|条|根|支|道|面|片|张|颗|块|元|(亿|千万|百万|万|千|百)|(亿|千万|百万|万|千|百|美|)元|(亿|千万|百万|万|千|百|十|)吨|(亿|千万|百万|万|千|百|)块|角|毛|分|(公(里|引|丈|尺|寸|分|釐)))z(-?)(\d+)/(\d+)returnc                     | j                  d      }| j                  d      }| j                  d      }|rdnd}t        |      }t        |      }| | d| }|S )A
    Args:
        match (re.Match)
    Returns:
        str
    r   r   r      负 u   分之groupnum2str)matchsign	nominatordenominatorresults        e/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/misaki/zh_normalization/num.pyreplace_fracr   %   sa     ;;q>DAI++a.K2DY'I{+Kvk]&4FM    z(-?)(\d+(\.\d+)?)%c                 z    | j                  d      }| j                  d      }|rdnd}t        |      }| d| }|S )r   r   r   r   r   u	   百分之r   )r   r   percentr   s       r   replace_percentager   :   sF     ;;q>Dkk!nG2D7#GvYwi(FMr   z(-)(\d+)c                 x    | j                  d      }| j                  d      }|rdnd}t        |      }| | }|S )r   r   r   r   r   r   )r   r   numberr   s       r   replace_negative_numr   N   sC     ;;q>D[[^F2D&/FvfXFMr   z\d{3}\d*c                 >    | j                  d      }t        |d      S )r   r   T)alt_one)r   verbalize_digit)r   r   s     r   replace_default_numr#   b   s     [[^F6400r   z(-?)((\d+)(\.\d+))|(\.(\d+))u   (\d+)([多余几\+])?z(-?)((\d+)(\.\d+)?)|(\.(\d+))c                     | j                  d      }| j                  d      }|dk(  rd}|r|nd}| j                  d      }t        |      }| | | }|S )r   r   r   +u   多r   r   r   )r   r   match_2quantifiersr   s        r   replace_positive_quantifierr(   u   s`     [[^Fkk!nG#~%72G{{1~K&/Fxy.FMr   c                     | j                  d      }| j                  d      }| j                  d      }|rt        |      }|S |rdnd}t        |      }| | }|S )r   r   r      r   r   r   )r   r   r   pure_decimalr   s        r   replace_numberr,      sf     ;;q>D[[^F;;q>L&
 M "Erfo6&"Mr   zB((-?)((\d+)(\.\d+)?)|(\.(\d+)))[-~]((-?)((\d+)(\.\d+)?)|(\.(\d+)))c                     | j                  d      | j                  d      }}t        j                  t        |      }t        j                  t        |      }| d| }|S )r   r   r	   u   到)r   	RE_NUMBERsubr,   )r   firstsecondr   s       r   replace_ranger2      sR     KKNEKKN6EMM.%0E]]>62Fwc&"FMr   value_stringuse_zeroc                    | j                  d      t              dk(  rg S t              dk(  r5|r)t              t        |       k  rt        d   t           gS t           gS t        fdt	        t
        j                               D              }| d |  }| | d  }t        |      t
        |   gz   t        |      z   S )N0r   r   c              3   @   K   | ]  }|t              k  s|  y w)N)len).0powerstrippeds     r   	<genexpr>z_get_value.<locals>.<genexpr>   s"      P5eX9NE5s   )lstripr8   DIGITSnextreversedUNITSkeys
_get_value)r3   r4   largest_unit
first_partsecond_partr;   s        @r   rC   rC      s    ""3'H
8}		X!	HL(993K!1228$%% P'

5P P!.L=1
"L=>2*%|)<(==
A  	r   c                     | sy| j                  d      } t        |       dk(  r	t        d   S t        |       }t        |      dk\  r#|d   t        d   k(  r|d   t        d   k(  r|dd  }dj                  |      S )Nr   r6   r   r   1r   )r=   r8   r>   rC   rA   join)r3   result_symbolss     r   verbalize_cardinalrK      s      &&s+L
<Ac{-N
>aN1$5: %#A&%(2'+77>""r   c                     | D cg c]  }t         |    }}dj                  |      }|r|j                  dd      }|S c c}w )Nr   u   一u   幺)r>   rI   replace)r3   r!   digitrJ   r   s        r   r"   r"      sE    1=>fUmN>WW^$Fu-M	 ?s   >c                    | j                  d      }t        |      dk(  r|d   }d}n#t        |      dk(  r|\  }}nt        d|  d      t        |      }|j	                  d      }|r|r|nd	}|d
t        |      z   z  }|S )N.r   r   r   r   zThe value string: '$z ' has more than one point in it.r6   u   零u   点)splitr8   
ValueErrorrK   rstripr"   )r3   integer_decimalintegerdecimalr   s        r   r   r      s    "((-O
?q !!$	_		"*"<.0PQ
 	
  (FnnS!G "u%/'222Mr   )T)F) __doc__recollectionsr   typingr   	enumeratestrr>   rA   COM_QUANTIFIERScompileRE_FRACr   RE_PERCENTAGEr   
RE_INTEGERr   RE_DEFAULT_NUMr#   RE_DECIMAL_NUMRE_POSITIVE_QUANTIFIERSr.   r(   r,   RE_RANGEr2   boolrC   rK   r"   r   )itrans   00r   <module>ri      s   
 # &/0P&Q	R&Q71d#a&$,&Q	R 	 [ "**'
(3 $ 

01 " RZZ(
3 " K(1 ?@$"**%=%OP BJJ;<	# $S , 2::IKC S D $s) $#S #S #"#  # # I 
Ss   D'