
    $HJjl                     l    d dl Z d dlmZmZ d dlZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zy)    N)h2jj2hc                 t   ddj                  |       z   dz   }t        j                  dd|      }|j                  dd      }|j                  dd      }|j                  d	d
      }|j                  dd      }|j                  dd      }|j                  dd      }|j	                  d      j                         S )z-Modify arpabets so that it fits our processes z $z\d z T S z TS z D Z z DZ z AW ER z AWER z IH R $z IH ER z EH R $z EH ER z$ )joinresubreplacestripsplit)arpabetsstrings     \/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/misaki/g2pkc/utils.pyadjustr      s    388H%%,FVVD"f%F^^GV,F^^GV,F^^Ix0F^^Iy1F^^Iy1F^^D"%F<<##%%    c                     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ddddddd d!d	d	d"	}|j                  | |       S )#zArpabet to choseong or onsetBu   ᄇCHu   ᄎDu   ᄃDHDZu   ᄌFu   ᄑGu   ᄀHHu   ᄒJHKu   ᄏLu   ᄅMu   ᄆNu   ᄂNGu   ᄋPRSu   ᄉu   ᄐWY)	SHTTHTSVr%   r&   ZZHgetarpabetds     r   to_choseongr3      s   	e 		u		e	 
u	 
u		
 
e	 
e	 
u	 
u	 
e	 
e	 
e	 
e	 
u	 
e	 
e	  
e!	" 3	 8 55'""r   c                     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}|j                  | |       S )zArpabet to jungseong or vowelAAu   ᅡAE   ᅢAHu   ᅥAOu   ᅩAWu	   ᅡ우AWERu	   ᅡ워AYu	   ᅡ이EH   ᅦEREYu	   ᅦ이IH   ᅵIYOWOYu	   ᅩ이UH   ᅮUWr.   r0   s     r   to_jungseongrI   4   s    	u 		u		u	 
u	 
{		
 
	 
{	 
u	 
u	 
{	 
u	 
u	 
u	 
{	 
u	 
u	 " 55'""r   c           	          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ddddddddd}|j                  | |       S )zArpabet to jongseong or codar   u   ᆸr   u   ᆾr   u   ᆮr   r   u   ᇁr   u   ᆨr   u   ᇂr   u   ᆽr   r      ᆯr   u   ᆷr    u   ᆫr!   u   ᆼr"   r#   r$   u   ᆺr'   )r(   r)   r+   r%   r&   r,   r-   r.   r0   s     r   to_jongseongrL   I   s    	e 		u		e	 
u	 
e		
 
e	 
u	 
u	 
e	 
e	 
e	 
e	 
u	 
e	 
e	 
e	  
u!	" /	 4 55'""r   c                 F    g d}|D ]  \  }}| j                  ||      }  | S )zSome postprocessing rules))u   그Wu   ᄀW)u   흐Wu   ᄒW)u   크Wu   ᄏW)u   ᄂYᅥu   니어)u   ᄃYᅥu   디어)u   ᄅYᅥu   리어)u   YᅵrB   )u   Yᅡu   ᅣ)u   Yᅢ   ᅤ)u   Yᅥu   ᅧ)u   Yᅦ   ᅨ)u   Yᅩu   ᅭ)u   Yᅮu   ᅲ)u   Wᅡu   ᅪ)u   Wᅢ   ᅫ)u   Wᅥ   ᅯ)u   WᅩrQ   )u   WᅮrG   )u   Wᅦ   ᅰ)u   Wᅵu   ᅱ)u   ᅳᅵu   ᅴ)r&   rB   )r%   rG   r   )r   pairsstr1str2s       r   reconstructrW   h   s.    E0 
dd+ Mr   c                  \   t        t        j                  j                  t        j                  j	                  t
                    dz   dd      j                         j                         } | d   j                  d      }g }| dd D ]  }|j                  d      }|d   }t        |      D ]|  \  }}||   }t        |      dk(  r|dk(  r | | }	d	|v r;|j                  d	      d   }
|j                  d	      d   dd
 j                  d      }n|}
g }|j                  |	|
|f       ~  |S )zParse the main rule tablez
/table.csvrutf8encodingr   ,   N(/)openospathdirnameabspath__file__read
splitlinesr   	enumeratelenappend)linesonsetstablelinecolscodaionsetcellrU   rV   rule_idss               r   parse_tablerw      s!   !:;lJCZ`affhssuE1X^^C FEab	zz#Aw!&)HAu7D4y!|X!tw'$;::c?1-D#zz#q1#26<<SAHD!HdD(34 * $ Lr   c                    t         j                  dk(  rh|j                  |       j                  d      }g }|dd D ]=  }|j                  d      \  }}|j                  d      d   }|j	                  ||f       ? n$t         j                  dk(  r|j                  |       }t        j                  d	d
|       d
j                  d D              k7  r| S t        |       D cg c]  \  }}|dv s||f }	}}g }
|D ]N  \  }}|j                  d      d   }|dk(  s|dk(  rd}n|d   }|
j	                  dt        |      dz
  z  |z          P d
j                  |
      }
|	D ]  \  }}|
d| |z   |
|d z   }
 d
}t        | |
      D ]]  \  }}||z  }|dk(  r|dk(  r|dz  }|dk(  rt        |      d   dv s1|dz  }7|dk(  rt        |      d   dv sM|dz  }S|dk(  sY|dz  }_ |S c c}}w )zLattach pos tags to the given string using Mecab
    mecab: mecab object
    nt
N	r]   r   posixz[ \n]r   c              3   &   K   | ]	  \  }}|  y w)N ).0token_s      r   	<genexpr>zannotate.<locals>.<genexpr>   s     .LVuVs   )r   rz   +r`   NNBCu   곳r   r   r^   u   의Jz/JErK   z/Er+   u   ᆫᆬᆷᆱᆰᆲᆴz/Pz/B)rc   nameparser   rl   posr	   r
   r   rj   rk   zipr   )r   mecabr   tokenspp1p2rs   charblankstag_seqr   tag	annotateds                 r   annotater      s    
ww$F#))$/sAWWT]FB#q!BMM2r(#  
G	6"	vvhF#rww.LV.L'LL'0'8P'8GAtDK<Oq$i'8FPG
siinR ;%,Ca&Csc%j1n-34  gggG4"1+$wqr{2  I)	cT	5=SCZI#X4y}%T!	CZ4y} 77T!	CZI * ; Qs    G$-G$c                 0   t        j                  dd|       } | }t        t        j                  d|            }|D ]  }|j	                  |t        |       } t        t        j                  d|            }|D ]  }|j	                  |t        |       } |S )Nu   (^|[^ᄀ-ᄒ])([ᅡ-ᅵ])u   \1ᄋ\2u   [ᄀ-ᄒ][ᅡ-ᅵ][ᆨ-ᇂ]u   [ᄀ-ᄒ][ᅡ-ᅵ])r	   r
   setfindallr   r   )lettersr   sylssyls       r   composer      s    ff<j'RGFrzzI6RSDS#Y/  rzz:FCDDS#Y/  Mr   c                     | j                  dd      } | j                  dd      } | j                  dd      } | j                  dd      } | S )z]For group_vowels=True
    Contemporarily, Korean speakers don't distinguish some vowels.
    r7   r>   rN   rO   rP   u   ᅬrR   rS   )inps    r   groupr      sI     ++eU
#C
++eU
#C
++eU
#C
++eU
#CJr   c                  D   t        ddd      j                         j                         } g }| D ]9  }|j                  d      s|j	                  t        j                  d|             ; g }|D ].  \  }}|j                  d      D ]  }|j                  ||f        0 |S )zFor internal use	rules.txtrY   rZ   r[   ->u/   ([ㄱ-힣][ ㄱ-힣]*)\[([ㄱ-힣][ ㄱ-힣]*)]ra   )	rb   rh   ri   
startswithextendr	   r   r   rl   )textexamplesrp   	_examplesr   gteachs          r   _get_examplesr      s    S62779DDFDH??4 OOBJJ'XZ^_`  IRHHSMDc4[) "  r   c            	         t        t        j                  j                  t        j                  j	                  t        j                  j                  t                    d      dd      j                         j                         j                  d      } t               }| D ]J  }|j                         d   |j                         dd }}d	j                  |      ||j                         <   L |S )
zfor verbose=Truer   rY   rZ   r[   z

r   r^   Nrz   )rb   rc   rd   r   re   rf   rg   rh   r   r   dictri   )rulesrule_id2textrulerule_idtextss        r   get_rule_id2textr     s    bggoobggooh.GH+VX[flmrrtzz|  C  C  DJ  KE6L*1-t/@/D(,		%(8W]]_%  r   c                     | rN||k7  rH|t        j                  dd|      k7  r-t        t        |      dt        |             t        d|d       yyyy)z-displays the process and relevant informationz/[EJPB]r   r   z[1;31mz[0mN)r	   r
   printr   )verboseoutr   r   s       r   glossr     sI    3#:#	2s)C"CgclD'#,/lD), #D:wr   )r	   jamor   r   rc   r   r3   rI   rL   rW   rw   r   r   r   r   r   r   r   r   r   <module>r      sM    	  	&#@#*#>@6-b$	 -r   