o
    2wi                     @   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   sH  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 ]S\}
}t| |
 d }
|rr|
dkr_||d}n(|
dkrq||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r3||dd! }na|
d"krA||dd }nS|
d#krO||dd }nE|
d$kr]||dd }n7|
d%krk||dd& }n)|
d'kry||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.

    >>> process_num("123,456,789", sino=True)
    일억이천삼백사십오만육천칠백팔십구

    >>> process_num("123,456,789", sino=False)
    일억이천삼백사십오만육천칠백여든아홉
    , 0u   영20u   스무	123456789u   일이삼사오육칠팔구c                 S      i | ]\}}||qS  r   ).0dnr   r   J/home/ubuntu/sommelier/.venv/lib/python3.10/site-packages/g2pk/numerals.py
<dictcomp>!       zprocess_num.<locals>.<dictcomp>u2   한 두 세 네 다섯 여섯 일곱 여덟 아홉u8   열 스물 서른 마흔 쉰 예순 일흔 여든 아흔c                 S   r   r   r   )r	   r
   modr   r   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>c   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}| | | d| | d} q
d}d}t||D ]
\}}	| ||	} q;| 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,]*)([ㄱ-힣]+)/BFr.   Tz/B
0123456789u   영일이삼사오육칠팔구)setr"   findallBOUND_NOUNSr;   r)   r$   )
stringtokenstokenr-   bnr6   r/   r0   r
   r   r   r   r   convert_numf   s   "rE   __main__z123,456,789r<   Fu#   우리 3시/B 10분/B에 만나자.)T)__doc__r"   r@   r;   rE   __name__printr   r   r   r   <module>   s   
Z