o
    ßQÄiº	  ã                   @   sX   d dl mZ d dlZddlmZ i fdd„Zdd„ Zd	d
„ fdd„Zdd
„ fdd„Z	dS )é    ©ÚCounterNé   )Ú	decomposec                 C   sÂ   t | ƒt |ƒk rt|| ƒS t |ƒdkrt | ƒS dd„ }tt |ƒd ƒ}t| ƒD ]5\}}|d g}t|ƒD ]%\}}	||d  d }
|| d }|| |||	|ƒ }| t|
||ƒ¡ q4|}q'|d S )Nr   c                 S   s   | |krdS |  | |fd¡S )Nr   r   )Úget)Úc1Úc2Úcost© r
   úK/home/ubuntu/.local/lib/python3.10/site-packages/soynlp/hangle/_distance.pyÚget_cost   s   zlevenshtein.<locals>.get_costr   éÿÿÿÿ)ÚlenÚlevenshteinÚrangeÚ	enumerateÚappendÚmin)Ús1Ús2r	   r   Úprevious_rowÚir   Úcurrent_rowÚjr   Ú
insertionsÚ	deletionsÚsubstitutionsr
   r
   r   r      s   

r   c                 C   sÀ   t | ƒt |ƒk rt|| ƒS t |ƒdkrt | ƒS dd„ }tt |ƒd ƒ}t| ƒD ]4\}}|d g}t|ƒD ]$\}}||d  d }	|| d }
|| |||ƒ }| t|	|
|ƒ¡ q4|}q'|d S )Nr   c                 S   sF   | |krdS t | ƒ}t |ƒ}|d u s|d u rdS tt | ƒt |ƒƒd S )Nr   r   é   )r   r   )r   r   Újamo1Újamo2r
   r
   r   Úget_jamo_cost%   s   z'jamo_levenshtein.<locals>.get_jamo_costr   r   )r   Újamo_levenshteinr   r   r   r   )r   r   r    r   r   r   r   r   r   r   r   r   r
   r
   r   r!      s   
	
r!   c                 C   ó   t | ƒS ©Nr   ©Úxr
   r
   r   Ú<lambda>:   ó    r&   c              	   C   s€   | r|sdS || ƒ}||ƒ}d}|  ¡ D ]\}}||| |d¡ 7 }qd|t tdd„ | ¡ D ƒƒtdd„ | ¡ D ƒƒ ¡  S )z)distance = 1 - cosine similarity; [0, 2] é   r   r   c                 S   s   g | ]}|d  ‘qS )r(   r
   )Ú.0Úfr
   r
   r   Ú
<listcomp>D   s    z#cosine_distance.<locals>.<listcomp>)Úitemsr   ÚnpÚsqrtÚsumÚvalues)r   r   ÚunitfyÚd1Úd2Úprodr   r*   r
   r
   r   Úcosine_distance:   s   :r5   c                 C   r"   r#   )Úsetr$   r
   r
   r   r&   F   r'   c                 C   s<   | r|sdS || ƒ}||ƒ}dt | |¡ƒt | |¡ƒ  S )Nr   )r   ÚintersectionÚunion)r   r   r1   Ús1_setÚs2_setr
   r
   r   Újaccard_distanceF   s
    r;   )
Úcollectionsr   Únumpyr-   Ú_hangler   r   r!   r5   r;   r
   r
   r
   r   Ú<module>   s   