CoolFace
Apppublic

ShynBui/Create_Vietnamese_spelling_errors

sourceHugging Faceapache-2.0updated 2y agoView on Hugging Face
0likes
utils.cpython-310.pyc221 linesDownload Raw Back to __pycache__
1o

2�Ǘfp�@s�ddlZddlZddlZddlZddlZdZdZej	eed�Z3ede4�ddd�Zdd	d5�Z
ddd�Zdd
d�Zddd�Zd dd�Zddd�Zd!dd�Zd"dd�ZddlZd#dd�ZdS)$�Ng333333�?g333333�?)�x�	k_sigmoid���Q��?cCs�tj|d�}idd�dd�dd�dd	�d6d�dd
�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�id d!�d"d#�d$d%�d&d'�d(d)�d*d+�d,d-�d.d/�d0d1�d2d3�d4d2�d5d6�d7d8�d9d:�d;d<�d=d>�d?d@��idAdB�dBdC�dDdE�dEdD�dFdG�dHdI�dJdK�dLdM�dNdO�dPdQ�dRdS�dTdU�dVdW�dXdY�dZd[�d\d]�d^d_��id`da�dbd_�dcd_�ddde�dfdg�dhdi�didh�d1d0�djd�dkdl�dmdn�dodp�dqdr�dsdt�dudv�dwdx�dydz��d{d|d}d~ddddkdjd��	�}t|�}tt|�|�}|d�k�rt��d�kr�d�nd�}t�tt|��|�}d�}|tk�rd�nd�d�d�t	t7j|tt�}t
|�|D]3}	||	��|v�r]t��||k�r]|d�7}t�|||	���}8||	���rY|9��}10|11||	<�q+d��|�}t
d�|�||fS)�u12    :param text: Gồm 1 câu đúng chính tả13    :param error_rate: tỷ lệ lỗi sai muốn thêm14    :param C: hằng số để tính toán xác suất thay thế ký tự15    :SER: Tỷ lệ lỗi đã sửa / tổng lỗi16    :return: Gồm 1 câu sai chính tả17 18    Kết hợp phương pháp error_rate và augmentation_probability để tạo lỗi chính tả.19 20    Bàn phím QWERTY tiếng Việt:21 22    Tạo một từ điển (keyboard) chứa các ký tự và các ký tự gần đó trên bàn phím. Ví dụ, ký tự 'a' có thể được thay thế bằng 'â', 'ă', 'á',...23    Chuyển đổi văn bản thành danh sách ký tự:24 25    Sử dụng list(text) để chuyển chuỗi văn bản thành danh sách các ký tự riêng lẻ. Điều này giúp dễ dàng thay thế từng ký tự.26    Chọn ngẫu nhiên các vị trí để thay thế ký tự:27 28    Sử dụng random.sample để chọn ngẫu nhiên các vị trí dựa trên tỷ lệ lỗi. Điều này giúp tạo ra các lỗi chính tả ngẫu nhiên và đa dạng.29    Thực hiện thay thế ký tự:30 31    Với mỗi vị trí đã chọn, kiểm tra nếu ký tự đó có trong từ điển keyboard. Nếu có, chọn ngẫu nhiên một ký tự từ các ký tự gần đó trên bàn phím.32    Giữ nguyên kiểu chữ hoa hoặc chữ thường của ký tự gốc.33    Ghép lại thành chuỗi văn bản:34 35    Sử dụng ''.join(text) để ghép danh sách các ký tự lại thành chuỗi văn bản hoàn chỉnh.36    ��37error_rate�au.âăáàạảãấầậẩẫắằặẳẵ�âu-aăáàạảãấầậẩẫắằặẳẵ�ău-aâáàạảãấầậẩẫắằặẳẵ�áu-aâăàạảãấầậẩẫắằặẳẵ�àu-aâăáạảãấầậẩẫắằặẳẵ�ạu,aâăáàảãấầậẩẫắằặẳẵ�ảu,aâăáàạãấầậẩẫắằặẳẵ�ãu-aâăáàạảấầậẩẫắằặẳẵ�bZvn�c�xv�d�đ�euêéèẹẻẽếềệểễ�êueéèẹẻẽếềệểễ�éueêèẹẻẽếềệểễ�èueêéẹẻẽếềệểễ�ẹueêéèẻẽếềệểễ�ẻueêéèẹẽếềệểễ�ẽueêéèẹẻếềệểễuếueêéèẹẻẽềệểễuềueêéèẹẻẽếệểễuệueêéèẹẻẽếềểễuểueêéèẹẻẽếềệễuễueêéèẹẻẽếềệ�f�r�g�hf�h�iuìíỉĩị�íuiìỉĩị�ìuiíỉĩị�ỉu38iíìĩị�ĩuiíìỉị�ịu39iíìỉĩ�k�lzk;�m�n�ou.ôơóòọỏõốồộổỗớờợởỡ�ôu-oơóòọỏõốồộổỗớờợởỡ�ơu-oôóòọỏõốồộổỗớờợởỡ�óu-oôơòọỏõốồộổỗớờợởỡ�òu-oôơóọỏõốồộổỗớờợởỡ�ọu,oôơóòỏõốồộổỗớờợởỡ�ỏu,oôơóòọõốồộổỗớờợởỡ�õu-oôơóòọỏốồộổỗớờợởỡuốu,oôơóòọỏõồộổỗớờợởỡuồu,oôơóòọỏõốộổỗớờợởỡuộu,oôơóòọỏõốồổỗớờợởỡuổu,oôơóòọỏõốồộỗớờợởỡuỗu/oôơóòọỏõốồộổỗớờợởỡuớu,oôơóòọỏõốồộổỗờợởỡuờuợuởu,oôơóòọỏõốồộổỗớờợỡuỡu,oôơóòọỏõốồộổỗớờợở�p�q�s�t�y�uuưúùụủũứừựửữ�ưuuúùụủũứừựửữ�úuuưùụủũứừựửữ�ùuuưúụủũứừựửữ�ụuuưúùủũứừựửữ�ủuuưúùụũứừựửữ�ũuuưúùụủứừựửữuuưúùụủũừựửữuuưúùụủũứựửữuuưúùụủũứừửữuuưúùụủũứừựữuuưúùụủũứừựử)	uứuừuựuửuữ�vrr6�z���?r�zcharacter_replacement: )�fomula�	AP_fomula�list�int�len�random�sample�range�SER_want�pow�mathrr�print�lower�choice�isupper�upper�join)�text�SERr�augmentation_probability�keyboard�40num_errors�indices�
num_of_change�sigmoid�indexZreplacement_charZ41final_text�r]�-D:\Create_Vietnamese_spelling_errors\utils.py�character_replacementsN��������	�42���
������������������� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/�0�1�2�3�4�5�6�7�8�9�:�;�<�=�>�?�@�A�B�C�D�E�Q430$�4445r_cCs�d}t|�}tt|�|�}|dkrt��dkrdnd}tj|d�}d}|tkr*dndddttj	|tt46�}t|�t|�D]!}t��||krd|d7}t�
dt|��}	t�|�}47|�|	|48�qCtd|�d�|�|fS)u�49    :param text: Gồm 1 câu đúng chính tả50    :param error_rate: tỷ lệ lỗi sai muốn thêm51    :param C: hằng số để tính toán xác suất chèn ký tự52    :return: Gồm 1 câu sai chính tả53 54    Bàn phím QWERTY tiếng Việt:55 56    Một chuỗi ký tự bao gồm tất cả các ký tự chữ cái tiếng Việt và các ký tự dấu (â, ă, ê, ô, ơ, ư, đ).57    Chuyển đổi văn bản thành danh sách ký tự:58 59    Sử dụng list(text) để chuyển chuỗi văn bản thành danh sách các ký tự riêng lẻ. Điều này giúp dễ dàng thêm ký tự vào bất kỳ vị trí nào trong văn bản.60    Thực hiện thêm ký tự:61 62    Sử dụng vòng lặp for _ in range(num_errors) để thêm một số lượng ký tự ngẫu nhiên xác định (num_errors).63    Mỗi lần trong vòng lặp:64    Sử dụng random.randint(0, len(text)) để chọn ngẫu nhiên một vị trí trong văn bản nơi ký tự sẽ được thêm vào. Vị trí này có thể nằm ở bất kỳ đâu trong văn bản, bao gồm cả đầu và cuối văn bản.65    Sử dụng random.choice(keyboard) để chọn ngẫu nhiên một ký tự từ chuỗi keyboard.66    Sử dụng text.insert(index, char_to_insert) để thêm ký tự đã chọn vào vị trí đã chọn trong danh sách ký tự.67    Ghép lại thành chuỗi văn bản:68 69    Sử dụng ''.join(text) để ghép danh sách các ký tự lại thành chuỗi văn bản hoàn chỉnh.70    u�abcdefghijklmnopqrstuvwxyzâăáàạảãấầậẩẫắằặẳẵêéèẹẻẽếềệểễìíỉĩịôơóòọỏõốồộổỗớờợởỡưúùụủũứừựửữđr@rArrzcharacter_insertion: rB)rErFrGrHrCrDrKrLrMrrrNrJ�randintrP�insertrS)rTrUrrWrXrVrZr[�_r\Zchar_to_insertr]r]r^�character_insertion�s$.71�72rcc	Cs�t|�}tt|�|�}|dkrt��dkrdnd}tj|d�}d}|tkr(dndddttj	|tt73�}t|�t|�D]#}t��||krdt|�dkrd|d7}t�
dt|�d�}|�|�qAtd|�d�|�|fS)u"74    :param text: Gồm 1 câu đúng chính tả75    :param error_rate: tỷ lệ lỗi sai muốn thêm76    :param C: hằng số để tính toán xác suất xóa ký tự77    :return: Gồm 1 câu sai chính tả78 79    Thực hiện xóa ký tự:80    Sử dụng vòng lặp for _ in range(num_errors) để xóa một số lượng ký tự ngẫu nhiên xác định (num_errors).81    Mỗi lần trong vòng lặp:82    Sử dụng random.randint(0, len(text)-1) để chọn ngẫu nhiên một vị trí trong văn bản nơi ký tự sẽ bị xóa.83    Sử dụng text.pop(index) để xóa ký tự tại vị trí đã chọn.84    Ghép lại thành chuỗi văn bản:85    Sử dụng ''.join(text) để ghép danh sách các ký tự lại thành chuỗi văn bản hoàn chỉnh.86    r@rArrzcharacter_deletion: rB)rErFrGrHrCrDrKrLrMrrrNrJr`�poprS�	rTrUrrXrVrZr[rbr\r]r]r^�character_deletion�s".87�88rfc	Cs�t|�}tt|�|�}|dkrt��dkrdnd}tj|d�}d}|tkr(dndddttj	|tt89�}t|�t|�D]/}t��||krpt|�dkrp|d7}t�
dt|�d�}||d||||<||d<qAtd|�d�|�|fS)u990    :param text: Gồm 1 câu đúng chính tả91    :param error_rate: tỷ lệ lỗi sai muốn thêm92    :param C: hằng số để tính toán xác suất hoán đổi ký tự93    :return: Gồm 1 câu sai chính tả94 95    Thực hiện hoán đổi ký tự:96    Sử dụng vòng lặp for _ in range(num_errors) để hoán đổi một số lượng ký tự ngẫu nhiên xác định (num_errors).97    Mỗi lần trong vòng lặp:98    Sử dụng random.randint(0, len(text)-2) để chọn ngẫu nhiên một vị trí trong văn bản nơi ký tự sẽ bị hoán đổi.99    Hoán đổi hai ký tự liên tiếp tại vị trí đã chọn.100    Ghép lại thành chuỗi văn bản:101    Sử dụng ''.join(text) để ghép danh sách các ký tự lại thành chuỗi văn bản hoàn chỉnh.102    r@rArr�zcharacter_transposition: rB)rErFrGrHrCrDrKrLrMrrrNrJr`rSrer]r]r^�character_transpositions"."�103rhc	Cs�idd�dd�dd�dd�dd�dd�dd�dd�dd	�d	d�d104d�dd105�dd
�d
d�dd�dd�dd�}|��}g}t|�D]\}}|��D]
}||vrT|�|�nqGq?tj|d�}	d}106tt|�|�}|dkrtt��dkrrdnd}|t	krzdndddt107tj|t	t
�}t|�t|�D]F}
t|�dkr�t��|	|kr�t�|�}||}|��D]}||vr�|�|||�}|108t�t|�t||��7}109nq�|||<|�|�q�td|110�d�|�|111fS)u*112    :param text: Gồm 1 câu đúng chính tả113    :param error_rate: tỷ lệ lỗi sai muốn thêm114    :param C: hằng số để tính toán xác suất thay thế từ đồng âm115    :return: Gồm 1 câu sai chính tả116 117    Thực hiện thay thế từ đồng âm:118    - Tìm các từ chứa homophones trước119    - Sử dụng augmentation_probability để xác định liệu từ đó có bị thay thế hay không120    Sử dụng ' '.join(words) để ghép danh sách các từ lại thành chuỗi văn bản hoàn chỉnh.121    �girr4r�tr�chrr'r)rr5r>r�ngZnghr?rrr@rAzhomophone_replacement: � )�split�	enumerate�keys�appendrCrDrFrGrHrKrLrMrrrNrJrP�replace�np�abs�removerS)rTrUrZ122homophones�words�candidate_indicesr �word�keyrVrZrXr[rbr\r]r]r^�homophone_replacement;s�
��������	�123���
�����124��.125�126�127rz���Q��?c
128stddgddgddgddgd	d129gddgd
dgddgddgd�	�|��}�fdd�t|�D�}t|�dkr:d�|�dfStj|d�}d}tt|�|�}|dkrXt��dkrVdnd}|tkr^dndddt	t130j|tt�}t
|�t|�D]6}	t|�dkr�t��||kr�t�|�}131||132}t��|�}|||133<|t�t|�t|��7}|�|134�qwt
d|�d�|�|fS)u�135    :param text: Gồm 1 câu đúng chính tả136    :param error_rate: tỷ lệ lỗi sai muốn thêm137    :param C: hằng số để tính toán xác suất thay thế từ sai chính tả phổ biến138    :return: Gồm 1 câu sai chính tả139 140    Thực hiện thay thế từ bằng các phiên bản sai chính tả phổ biến.141    - Tìm các từ có thể thay thế trước142    - Sử dụng augmentation_probability để xác định liệu từ đó có bị thay thế hay không143    unhửngunhừngucuảucũa�cáiucãugiãi�giải�phápufápudúng�đúng�rấturậcusán�sáng�tạoutạu)	unhữngucủar|r}r~rr�r�r�c�g|]144\}}|�vr|�qSr]r])�.0r rx�Zcommon_misspellingsr]r^�145<listcomp>��z2common_misspelling_replacement.<locals>.<listcomp>rrmrr@rAz common_misspelling_replacement: )rnrorGrSrCrDrFrHrKrLrMrrrNrJrPrsrtru)
rTrUrrvrwrVrZrXr[rbr\rxZmisspelled_wordr]r�r^�common_misspelling_replacement�s@�
.146147�148r�c
sbgd�gd�gd�gd�gd�gd�dggd�gd	�gd149�gd�gd�gd
�dgd��t|�}�fdd�t|�D�}tj|d�}d}tt|�|�}|dkrXt��dkrVdnd}|tkr^dndddtt	j150|tt�}t|�t
|�D]-}	t|�dkr�t��||kr�|d7}t�|�}151||152}t��|�}|||153<|�|154�qwtd|�d�|�|fS)u�155    :param text: Gồm 1 câu đúng chính tả156    :param error_rate: tỷ lệ lỗi sai muốn thêm157    :param C: hằng số để tính toán xác suất thay thế ký tự tương tự158    :return: Gồm 1 câu sai chính tả159 160    Thực hiện thay thế ký tự bằng ký tự tương tự trong bộ mã Unicode.161    - Tìm các ký tự có thể thay thế trước162    - Sử dụng augmentation_probability để xác định liệu ký tự đó có bị thay thế hay không163    )r164rr
rrrr	)rrrrrr)r!r"r#r$r%)r-r.r0r1r/r+r,)r9r:r<r=r;r8)�ýuỳuỷuỹuỵr)�Á�ÀuẢ�ÃuẠ�ÂuĂ)�É�ÈuẺuẼuẸ�Ê)�Í�ÌuỈuĨuỊ)�Ó�ÒuỎ�ÕuỌ�ÔuƠ)�Ú�ÙuỦuŨuỤuƯ)�ÝuỲuỶuỸuỴuĐ)rrr r*r7r6r�A�E�I�O�U�Y�Dcr�r]r]�r�r �char�Zsimilar_charactersr]r^r��r�z1similar_character_replacement.<locals>.<listcomp>rrr@rAzsimilar_character_replacement: rB)rErorCrDrFrGrHrKrLrMrrrNrJrPrurS)
rTrUr�165charactersrwrVrZrXr[rbr\r�Zsimilar_charr]r�r^�similar_character_replacement�sF�.166167�168r�皙�����?cCs�t|�}dd�tdt|��D�}tj|d�}d}tt|�|�}|dkr.t��dkr,dnd}|tkr4dndddtt	j169|tt�}t|�t|�D]$}	t|�dkrqt��||krq|d7}t�
|�}170|�|171d�|�|172�qMtd|�d	�|�|fS)173u?174    :param text: Gồm 1 câu đúng chính tả175    :param error_rate: tỷ lệ lỗi sai muốn thêm176    :param C: hằng số để tính toán xác suất chèn khoảng trắng ngẫu nhiên177    :return: Gồm 1 câu sai chính tả178 179    Thực hiện chèn khoảng trắng ngẫu nhiên vào giữa từ.180    cS�g|]}|�qSr]r]�r�r r]r]r^r��z*random_space_insertion.<locals>.<listcomp>r@rrrArmzrandom_space_insertion: rB)rErJrGrCrDrFrHrKrLrMrrrNrPrarurS)rTrUrr�rwrVrZrXr[rbr\r]r]r^�random_space_insertion�s$.181182�183r��{�G�z�?cCstj|d�}d}|��}dd�tt|�d�D�}tt|�|�}|dkr/t��dkr-dnd}|tkr5dndddtt	j184|tt�}t|�t�
|t|t|���}	|	D] }185t��||krw|d7}||186||187d||188<d||189d<qWtd|�d	�d190d�|D��|fS)u9191    :param text: Gồm 1 câu đúng chính tả192    :param error_rate: tỷ lệ lỗi sai muốn thêm193    :param C: hằng số để tính toán xác suất bỏ dấu cách194    :return: Gồm 1 câu bị thiếu dấu cách195 196    Thực hiện bỏ ngẫu nhiên một vài dấu cách giữa các từ.197    rrcSr�r]r]r�r]r]r^r�3r�z(random_space_removal.<locals>.<listcomp>r@rArBzrandom_space_removal: rmcSsg|]}|r|�qSr]r])r�rxr]r]r^r�Gs)rCrDrnrJrGrFrHrKrLrMrrrNrI�minrS)rTrUrrVrZrvrwrXr[�selected_indicesr\r]r]r^�random_space_removal$s$.�198r�皙�����?cCs�tj|d�}t|�}d}tt|�|�}|dkr"t��dkr dnd}dd�t|�D�}|tkr1dndddtt	j199|tt�}t|�t�
|t|t|���}	|	D]}200t��||krj|d7}t�||201�||202<qStd|�d�|�|fS)	u�203    :param text: Gồm 1 câu có dấu tiếng Việt204    :param error_rate: tỷ lệ lỗi sai muốn thêm205    :param C: hằng số để tính toán xác suất chuyển đổi ký tự206    :param num_errors: số lượng lỗi sai muốn thêm (tuỳ chọn)207    :return: Gồm 1 câu không dấu tiếng Việt với một tỷ lệ lỗi nhất định208 209    Thực hiện chuyển đổi các ký tự có dấu thành các ký tự không dấu tương ứng với xác suất nhất định.210    rrr@rAcSs"g|]
\}}t�|�|kr|�qSr])�	unidecoder�r]r]r^r�ds"z-remove_vietnamese_accents.<locals>.<listcomp>zremove_vietnamese_accents: rB)rCrDrErFrGrHrorKrLrMrrrNrIr�r�rS)rTrUrrVr�rZrXrwr[r�r\r]r]r^�remove_vietnamese_accentsMs".�211r�)r)r{)r�)r�)r�)�pandas�pd�numpyrsrHrMrCrKZSER_max�
get_k_sigmoidrrNr_rcrfrhrzr�r�r�r�r�r�r]r]r]r^�<module>s*212213214215=216/217-218H219=220>221&'