a
     g                     @   s   d dl mZ d dlZg dZg dZg dZg dZee ee gZe	ddd	Z
g d
fee	edddZde	edddZde	edddZdS )    )ListN)u   ผปแอิืทมใฝu!   ฟหกดเ้่าสวงu'   ๆไำพะัีรนยบลฃu    ๅ/_ภถุึคตจขช)u   ()ฉฮฺ์?ฒฬฦu   ฤฆฏโฌ็๋ษศซ.u    ๐"ฎฑธํ๊ณฯญฐ,u"   +๑๒๓๔ู฿๕๖๗๘๙)z1234567890-=zqwertyuiop[]\zasdfghjkl;'z
zxcvbnm,./)z!@#$%^&*()_+zQWERTYUIOP{}|zASDFGHJKL:"z
ZXCVBNM<>?)charc                 C   sN   dD ]D}t t| D ]2\}}| |v r||d |d || f    S qqd S )Nr         )	enumerateALL_CHARACTERSindex)r   language_ixixrow r   B/usr/local/lib/python3.9/dist-packages/pythainlp/tools/misspell.pysearch_location_of_character*   s    r   )r   r   r   r   r   r   )r   r   r   r   )locr   kernelc                 C   s   | \}}}}g }|D ]r\}}	|| ||	  }
}d|
  krBdkrn qd|  krnt t| |d |
  krn q||||
||f q|S )Nr      r   )lenr   append)r   r   r   r
   is_shiftr   posvalid_neighboursZkrksZ_row_posr   r   r   find_neighbour_locations1   s    &r   F)r   verbosec                 C   s<  t | }|d u rd S t|| }g }dgd | g dgd  }|D ]\}}}}	} zt| |d |  |	 } ||  ||d  |	|d  f}
|
dkrd}nH|
dkrd	}n:|
d
 d
krd|
d  }n |
dkrd
}n|
dkrd}nW q@| ||< W q@ ty   Y q@Y q@ ty4 } ztd|  |W Y d }~q@d }~0 0 q@|S )Nu   ▐r   r   r      r      r      r   r   r   zSomething wrong with: )r   r   r   r   
IndexError	Exceptionprint)r   r    r   r   charsZprinting_locationsr
   r   r   r   r   r   er   r   r   find_misspell_candidatesC   s:    


r)   皙?)sentenceratioc                 C   st   t t| | t}t jjt| |dd}t| }|D ].}t| | }|du rTq:t j|}|||< q:d	|S )u  
    Simulate some misspellings of the input sentence.
    The number of misspelled locations is governed by ratio.

    :params str sentence: sentence to be misspelled
    :params float ratio: number of misspells per 100 chars. Defaults to 0.5.

    :return: sentence containing some misspelled words
    :rtype: str

    :Example:
    ::

        from pythainlp.tools.misspell import misspell

        sentence = "ภาษาไทยปรากฏครั้งแรกในพุทธศักราช 1826"

        misspell(sent, ratio=0.1)
        # output:
        ภาษาไทยปรากฏครั้งแรกในกุทธศักราช 1727
    F)sizereplaceN )
npfloorr   Zastypeintrandomchoicelistr)   join)r+   r,   Znum_misspellsZ	positionsZ
misspelledr   Zpotential_candidates	candidater   r   r   misspelli   s    

r8   )F)r*   )typingr   numpyr0   ZTHAI_CHARACTERS_WITHOUT_SHIFTZTHAI_CHARACTERS_WITH_SHIFTZ ENGLISH_CHARACTERS_WITHOUT_SHIFTZENGLISH_CHARACTERS_WITH_SHIFTr   strr   tupler   boolr)   floatr8   r   r   r   r   <module>   s"   	
&