
    $HJj                     r   d Z ddlZddlZddlZddlmZ ddlmZ 	 ej                  j                  d       ddlmZmZmZmZmZmZmZmZmZmZmZmZ dd	lmZmZmZmZ dd
lmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z'  G d de(      Z)e*dk(  r e)       Z+ e+d       yy# e
$ r  ej                  d       Y ~w xY w)z"
https://github.com/kyubyong/g2pK
    N)h2j)cmudictzcorpora/cmudict.zipr      )jyeoyeconsonant_uijosa_uivowel_uijamorieulgiyeok
rieulbieub
verb_nieunbalb
palatalizemodifying_rieul)link1link2link3link4)annotatecomposegroupglossparse_tableget_rule_id2text)convert_eng)convert_numc                   (    e Zd Zd Zd ZddZddZy)G2pc                 b   | j                         | _        t               | _        t	        j
                         | _        t               | _        t        j                  j                  t        j                  j                  t        j                  j                  t                    d      | _        y )Nz
idioms.txt)	get_mecabmecabr   tabler   dictcmur   	rule2textospathjoindirnameabspath__file__idioms_path)selfs    [/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/misaki/g2pkc/g2pk.py__init__zG2p.__init__   sb    ^^%
 ]
<<>)+77<<8Q(RT`a    c                     t         j                  dk(  rdd l}|j                         S t         j                  dk(  rdd l}|j                         S y )Nntr   posix)r'   nameMeCabTaggerr"   )r.   r6   r"   s      r/   r!   zG2p.get_mecab"   s<    77d?<<>!WW;;=   r1   c                     d}|}t        | j                  dd      D ]U  }|j                  d      d   j                  d      }d|v s+|j                  d      \  }}t	        j
                  |||      }W |S )	ua  Process each line in `idioms.txt`
        Each line is delimited by "===",
        and the left string is replaced by the right one.
        inp: input string.
        descriptive: not used.
        verbose: boolean.

        >>> idioms("지금 mp3 파일을 다운받고 있어요")
        지금 엠피쓰리 파일을 다운받고 있어요
        zfrom idioms.txtrutf8)encoding#r   
z===)openr-   splitrstripresub)	r.   stringdescriptiveverboseruleoutlinestr1str2s	            r/   idiomsz
G2p.idioms*   sw     !))3@D::c?1%,,T2D}!ZZ.
dffT4-	 A 
r1   c                 p   | j                  |||      }t        || j                        }|rt        || j                        }t        |      }t        |      }t        t        t        t        t        t        t        t        t        t         t"        t$        fD ]  } ||||      } t'        j(                  dd|      }| j*                  D ]  \  }	}
}|}t'        j(                  |	|
|      }! t,        t.        t0        fD ]  } ||||      } |rt3        |      }|rt5        |      }|j7                  dd      }|S )u_  Main function
        string: input string
        descriptive: boolean.
        verbose: boolean
        group_vowels: boolean. If True, the vowels of the identical sound are normalized.
        to_syl: boolean. If True, hangul letters or jamo are assembled to form syllables.

        For example, given an input string "나의 친구가 mp3 file 3개를 다운받고 있다",
        STEP 1. idioms
        -> 나의 친구가 엠피쓰리 file 3개를 다운받고 있다

        STEP 2. English to Hangul
        -> 나의 친구가 엠피쓰리 파일 3개를 다운받고 있다

        STEP 3. annotate
        -> 나의/J 친구가 엠피쓰리 파일 3개/B를 다운받고 있다

        STEP 4. Spell out arabic numbers
        -> 나의/J 친구가 엠피쓰리 파일 세개/B를 다운받고 있다

        STEP 5. decompose
        -> 나의/J 친구가 엠피쓰리 파일 세개/B를 다운받고 있다

        STEP 6-9. Hangul
        -> 나의 친구가 엠피쓰리 파일 세개를 다운받꼬 읻따
        z/[PJEB] ^)rK   r   r%   r   r"   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   rA   rB   r#   r   r   r   r   r   replace)r.   rC   rD   rE   group_vowelsto_syluse_dictinpfuncrI   rJ   rule_ids_inps                r/   __call__zG2p.__call__A   s   8 V[': VTXX. fdjj1F V$ &k 2|Wh;
J:8D sK1C8 ffYC( %)JJ D$D&&tS)C %/ E5)DsK1C * *C#,Ckk#r"
r1   N)FF)FFFFT)__name__
__module____qualname__r0   r!   rK   rW    r1   r/   r   r      s    b!.Ir1   r   __main__u5   나의 친구가 mp3 file 3개를 다운받고 있다),__doc__r'   rA   nltkr   r   nltk.corpusr   datafindLookupErrordownloadspecialr   r   r   r	   r
   r   r   r   r   r   r   regularr   r   r   r   utilsr   r   r   r   r   r   englishr   numeralsr   objectr   rX   g2pr[   r1   r/   <module>rk      s       IINN() M  M  M  M / / Q Q   !r& rh z
%C?@ }  DMM)s   B B65B6