o
    
i                     @   s^   d Z ddlZdadddZdd Zed	kr-eed
dd eed
dd eed dS dS )z"
https://github.com/kyubyong/g2pK
    Nu   군데 권 개 그루 닢 두 마리 모 모금 뭇 발 발짝 방 번 벌 보루 살 수 술 시 쌈 움큼 정 짝 채 척 첩 축 켤레 톨 통 가지 배 시간 살 명 줄 곳Tc                 C   sV  t dd| } | dkrdS |s| dkrdS d}d}d	d
 t||D }d}d}dd
 t|| D }dd
 t|| D }g }	t| D ]Z\}
}t| |
 d }
|sZt| dkrx|
dkre||d}n(|
dkrw||dd }|dd}n|
dkr||d}n
|
dkr||d}|dkr|
d dkr|	tdt|	 d }d	|dkr|	
d qEn|	
d qE|
dkr||dd }|dd}n|
dkr||dd }|dd}n|
dkr||dd }|dd}n|
dkr||dd }|dd}n|
dkr||dd }|dd}n|
dkr,||dd }|dd}no|
d kr:||dd! }na|
d"krH||dd }nS|
d#krV||dd }nE|
d$krd||dd }n7|
d%krr||dd& }n)|
d'kr||dd }n|
d(kr||dd }n|
d)kr||dd }|	
| qEd	d*d+ |	D S ),u*  
    Process a string looking like arabic number.
    num: string. Consists of [0-9,]. e.g., 12,345
    sino: boolean. If True, sino-Korean numerals, i.e., 일, 이, .. are considered.
        Otherwise, pure Korean ones in their modifying forms such as 한, 두, ... are returned.
    단, 3자리 이상의 수는 반드시 sino로 적용
    >>> process_num("123,456,789", sino=True)
    일억이천삼백사십오만육천칠백팔십구

    >>> process_num("123,456,789", sino=False)
    일억이천삼백사십오만육천칠백여든아홉
    , 0u   영20u   스무	123456789u   일이삼사오육칠팔구c                 S   s   i | ]	\}}|d | qS )^ ).0dnr   r   I/home/ubuntu/.local/lib/python3.10/site-packages/misaki/g2pkc/numerals.py
<dictcomp>"   s    zprocess_num.<locals>.<dictcomp>u4   한 두 세 네 다섯 ^여섯 일곱 ^여덟 아홉u8   열 스물 서른 마흔 쉰 예순 일흔 여든 아흔c                 S      i | ]\}}||qS r   r   )r	   r
   modr   r   r   r   &       c                 S   r   r   r   )r	   r
   decr   r   r   r   '   r         r   u   십u   일십   N   u   백u   일백u   천u   일천u   만u   일만            u   억	   
         u   조         c                 s   s    | ]}|V  qd S )Nr   )r	   elemr   r   r   	<genexpr>d   s    zprocess_num.<locals>.<genexpr>)resubzipsplit	enumeratelengetreplaceminjoinappend)numsinodigitsnames
digit2name	modifiersdecimals	digit2mod	digit2dec
spelledoutidigitname
last_threer   r   r   process_num   s   












r<   c                 C   s   t td| }|D ]+}|\}}| }|t v r!t|dd}nt|dd}| | | | | } q
d}d}t||D ]\}	}
| |	d|
 } q?| dd	} | d
d} | S )u   Convert a annotated string such that arabic numerals inside are spelled out.
    >>> convert_num("우리 3시/B 10분/B에 만나자.")
    우리 세시/B 십분/B에 만나자.
    u"   ([\d][\d,]*)( ?[ㄱ-힣]+)?(?:/B)?Fr/   T
0123456789u   영일이삼사오육칠팔구r   u   십^육u   심뉵u   백^육u   뱅뉵)	setr#   findalllstripBOUND_NOUNSr&   r<   r*   r%   )stringtokenstokenr.   bnbn_sr7   r0   r1   r
   r   r   r   r   convert_numg   s   rH   __main__z123,456,789r=   Fu#   우리 3시/B 10분/B에 만나자.)T)__doc__r#   rB   r<   rH   __name__printr   r   r   r   <module>   s   
[