
    $HJj$              
       8   d dl mZ ddlZddlmZ ddlmZ ddlmZ	 ddl
mZ ddl
mZ ddl
mZ dd	l
mZ dd
lmZ d dlmZ g dZeg dz  Zg dZi dddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0i d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRi dSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}Zd~D ]  ZeevsJ e       eee<     G d d      Zy)   )MToken    N)
itemgetter)List)lazy_pinyin)load_phrases_dict)load_single_dict)Style)large_pinyin)
ToneSandhi)bpmfdtnlgkhzhchshrzcsjqx)yw )012345r   u   ㄅr   u   ㄆr   u   ㄇr   u   ㄈr   u   ㄉr   u   ㄊr   u   ㄋr   u   ㄌr   u   ㄍr   u   ㄎr   u   ㄏr   u   ㄐr    u   ㄑr!   u   ㄒr   u   ㄓr   u   ㄔr   u   ㄕr   u   ㄖr   u   ㄗr   u   ㄘr   u   ㄙau   ㄚou   ㄛeu   ㄜieu   ㄝaiu   ㄞeiu   ㄟaou   ㄠouu   ㄡanu   ㄢenu   ㄣangu   ㄤengu   ㄥeru   ㄦiu   ㄧuu   ㄨvu   ㄩiiu   ㄭiiiu   十veu   月iau   压ianu   言iangu   阳iaou   要inu   阴ingu   应iongu   用iouu   又ongu   中uau   穵uaiu   外u   万u   王u   为u   文u   瓮u   我u   元u   云)uanuangueiuenuenguovanvnu   ;:,.!?/—…"()“” 12345Rc                       e Zd ZddZd Zdedeee      fdZdee   dee   dededeee      f
d	Zdd
ede	dee
   fdZy)
ZHFrontendc                    || _         t        d      | _        i ddgdgdggddgdgdggd	d
gdgdggddgdggddgdggddgdggddgdgdggddgdgdggddgdggddgdggdd ggd!d"ggd#d$ggd%d&ggd'd(ggd)d*gd+gg| _        h d,| _        h d-| _        t               | _        | j                          y ).Nu   ;:,.!?—…"()“”u	   开户行ka1ihu4hang2u	   发卡行fa4ka3u	   放款行fa4ngkua3nu   茧行jia3nu   行号ha4ou   各地ge4di4u	   借还款jie4hua2nu	   时间为shi2jia1nwe2iu   为准zhu3nu   色差se4cha1u   嗲dia3u   呗bei5u   不bu4u   咗zuo5u   嘞lei5u   掺和chan1huo5>      范儿	   妥妥儿	   媳妇儿	   小院儿	   撒欢儿	   老汉儿	   胡同儿   寻老礼儿>,      一儿   为儿   乞儿   侄儿   俺儿   可儿   女儿   妻儿   婴儿   孙儿   孤儿   少儿   幼儿   患儿   我儿   护儿   拐儿   救儿   替儿   有儿   狗儿   猪儿   猫儿   男儿   瞒儿   祖儿   美儿   聋儿   舫儿   花儿   虐儿   虫儿   马儿   鸟儿	   体弱儿	   侄孙儿	   婴幼儿	   应采儿	   流浪儿	   混血儿	   红孩儿	   脑瘫儿	   蜜雪儿	   连体儿)	unk	frozensetpuncphrases_dict
must_erhua	not_erhuar   tone_modifier_init_pypinyin)selfr   s     \/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/misaki/zh_frontend.py__init__zZHFrontend.__init__-   s   56	
6(UGgY7
5'E7WI6
 7)gY	:
 y7),	

 y6(+
 w(
 6(WIy9
 6(WIx8
 x'+
 w)
 VH:
 VH:
 UG9
 VH:
 VH:
  y6(+!
$

 (\    c                     t        j                          t        | j                         t	        t        d      di       y)z+
        Load pypinyin G2P module.
        u   地zde,di4N)r   loadr   r   r	   ord)r   s    r   r   zZHFrontend._init_pypinyinQ   s/     	$++,#f+y12r   wordreturnc                    g }g }t        |dt        j                        }t        |dt        j                        }t	        |      D cg c]  \  }}|dk(  s| }}}|D ]  }	d||	<   	 t        ||      D ]t  \  }}
t        j                  d|
      r7|dv rt        j                  dd|
      }
n|d	v rt        j                  dd
|
      }
|j                  |       |j                  |
       v ||fS c c}}w )z@
        Get word initial and final by pypinyin or g2pM
        T)neutral_tone_with_fivestyleu   嗯n2zi\d)r   r   r   r8   r;   )r   r   r   r   r<   )
r   r
   INITIALSFINALS_TONE3	enumerateziprematchsubappend)r   r   initialsfinalsorig_initialsorig_finalsindexr   en_indexr8   r:   s              r   _get_initials_finalszZHFrontend._get_initials_finalsZ   s     #U^^E!U5G5GI +4D/H/heQQ%ZE/HA!KN  {3DAqxx"'sD!,A11sE1-AOOAMM! 4  Is   C3C3r   r   posc                 4   t        |      D ]+  \  }}|t        |      dz
  k(  s||   dk(  s!|dk(  s'd||<   - || j                  vr|| j                  v s|dv r||fS t        |      t        |      k7  r||fS t        |      t        |      k(  sJ g }g }t        |      D ]r  \  }}|t        |      dz
  k(  r7||   dk(  r/|dv r+|dd | j                  vr|r|d	   dd	 d
z   |d	   d	   z   |d	<   N|j	                  ||          |j	                  |       t ||fS )z
        Do erhub.
        r   u   儿er1er2>   r+   r   nr>   r   er5NR)r   lenr   r   r   )	r   r   r   r   r   r8   phnnew_initials
new_finalss	            r   _merge_erhuazZHFrontend._merge_erhuav   sP     'FAsCK!O#Q5(8SE\!q	 (
 t&DDNN,B,/3C,CV## v;#d)#V##6{c$i''' 
'FAsCK!O#Q5(8S E >rs)4>>1j!+B!4s!:Z^B=O!O
2##HQK0!!#& ( Z''r   text
with_erhuac                     g }t        j                  |      } j                  j                  |      }g }g }|D ]  \  }}|dk(  rdt	        |      k  rt        |      dk  rd}n|dk7  r| j                  v rd}t        ||d      }	|dv rW|j                         s,|dk(  r| j                  v r||	_	        |j                  |	       n|r|d   xj                  |z  c_        |r*|d   j                  dvr|d   j                  s
d	|d   _         j                  |      \  }
} j                  j                  |||      }|r j                  |
|||      \  }
}|j                  |
       |j                  |       g }t!        |
|      D ]@  \  }}|r|j                  |       |s| j                  vs||k7  s0|j                  |       B d
j#                  |      j%                  dd      j%                  dd      }t'        j(                  dd
|      j+                  d
      }dj#                   fd|D              |	_	        |j                  |	        dj#                   fd|D              }||fS )z`
        Return: list of list phonemes.
            [['w', 'o3', 'm', 'en2', ' '], ...]
        r!   u   一u   鿿X )r   tag
whitespace)r!   r6   r   /__eR_err   _Rz(?=\d)c              3   ^   K   | ]$  }t         j                  |j                         & y wN)ZH_MAPgetr   ).0r   r   s     r   	<genexpr>z&ZHFrontend.__call__.<locals>.<genexpr>   s!     !J6a&**Q"96s   *-c              3      K   | ]5  }|j                   j                  n|j                   |j                  z    7 y wr   )phonemesr   r   )r   tkr   s     r   r   z&ZHFrontend.__call__.<locals>.<genexpr>   s1     mfl`bbkk&9$((r{{bmm[fls   ;>)psglcutr   pre_merge_for_modifyminmaxr   r   isspacer   r   r   r   r   modified_toner   r   joinreplacer   r   split)r   r   r   tokensseg_cutr   r   r   r   r   sub_initials
sub_finalsphonesr   r:   results   `               r   __call__zZHFrontend.__call__   sX     ((4.$$99'B  ID#czh#d)3D	X8M		 1Tsr:Bl"||~czddii&7&*MM"%2J))T1)F2JNN,>vbzG\G\(+r
% (,'@'@'F$L*++99$:DFJ +/+<+< *dC,9(j OOL)MM*% FL*51 MM!$ !499,QMM!$ 6 XXf%--eU;CCCNFVVIsF399#>F''!J6!JJBKMM"c !f mflmmv~r   N)u   ❓)T)__name__
__module____qualname__r   r   strr   r   r   boolr   r    r   r   rR   rR   ,   s    "H3   d3i  8$(#Cy$(!#Y$( $( 	$( #'tCy/	$(LKS Kd Kd6l Kr   rR   )tokenr   r   operatorr   typingr   jieba.possegpossegr   pypinyinr   r   r	   r
    pypinyin_dict.phrase_pinyin_datar   tone_sandhir   r   TONESr   r   rR   r   r   r   <module>r	     sJ     	      & %  9 # 	O  	' 
Q
#e  
Q
C  
Q
c%  
Q
E  
Q
#e  
Q
C  
Q
c%  
Q
PSTY  
Q
Z]^c  
Q
dghm  
Q
nqrw  
Q
x{  }B  
Q
  CF  GL  
Q
  MP  QV  
Q
  W[  \a  
Q
  bf  gl  
Q
  mq  rw  
Q
  x{  |A  
Q
  BE  FK  
Q
  LO  PU  
Q
  VY  Z_  
Q
  `c  di  
Q
  jm  ns  
Q
  tw  x}  
Q
  ~B  CH  
Q
  IM  NS  
Q
  TX  Y^  
Q
  _c  di  
Q
  jn  ot  
Q
  uy  z  
Q
  @D  EJ  
Q
  KP  QV  
Q
  W\  ]b  
Q
  cg  hm  
Q
  nq  rw  
Q
  x{  |A  
Q
  BE  FK  
Q
  LP  QV  
Q
  W\  ]b  
Q
  cg  hm  
Q
  nr  sx  
Q
  y~  D  
Q
  EK  LQ  
Q
  RW  X]  
Q
  ^b  ch  
Q
  in  ot  
Q
  u{  |A  
Q
  BG  HM  
Q
  NS  TY  
Q
  Z^  _d  
Q
  ej  kp  
Q
  w|  D	I	  P	U	  \	a	  i	n	  t	y	  @
E
  K
P
  
Q
	(AF?A?F1I 
){ {r   