§
    ‚ŠtjC_  ã            	       óö  — d Z ddlZddlZddlZddlZddlmZ ddlmZ  ej	        e
¦  «        ZdddœZd	„ Z G d
„ de¦  «        Z	 dZdZededdddddf	Z ej        dd                     e¦  «        z  ej        ej        z  ej        z  ¦  «        Z ej        d¦  «        Z ej        eej        ej        z  ej        z  ¦  «        Z ej        d¦  «        Zd%d„Zd&d„Z G d„ d ¦  «        Zd!„ Zd"„ Zd'd$„Z dgZ!dS )(z!Tokenization classes for BERTweeté    Né   )ÚPreTrainedTokenizer)Úloggingú	vocab.txtú	bpe.codes)Ú
vocab_fileÚmerges_filec                 óœ   — t          ¦   «         }| d         }| dd…         D ]}|                     ||f¦  «         |}Œt          |¦  «        }|S )z…
    Return set of symbol pairs in a word.

    Word is represented as tuple of symbols (symbols being variable-length strings).
    r   é   N)ÚsetÚadd)ÚwordÚpairsÚ	prev_charÚchars       úp/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/bertweet/tokenization_bertweet.pyÚ	get_pairsr   #   s[   € õ ‰EŒE€EØ�Q”€IØ�Q�R�R”ð ð ˆØ�	Š	�9˜dÐ#Ñ$Ô$Ð$Øˆ	ˆ	å�‰JŒJ€EØ€Ló    c            	       ó°   ‡ — e Zd ZdZeZ	 	 	 	 	 	 	 	 dˆ fd„	Zed	„ ¦   «         Zd
„ Z	d„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zddededz  deedf         fd„Zd„ Zˆ xZS )ÚBertweetTokenizeraÐ	  
    Constructs a BERTweet tokenizer, using Byte-Pair-Encoding.

    This tokenizer inherits from [`PreTrainedTokenizer`] which contains most of the main methods. Users should refer to
    this superclass for more information regarding those methods.

    Args:
        vocab_file (`str`):
            Path to the vocabulary file.
        merges_file (`str`):
            Path to the merges file.
        normalization (`bool`, *optional*, defaults to `False`):
            Whether or not to apply a normalization preprocess.
        bos_token (`str`, *optional*, defaults to `"<s>"`):
            The beginning of sequence token that was used during pretraining. Can be used a sequence classifier token.

            <Tip>

            When building a sequence using special tokens, this is not the token that is used for the beginning of
            sequence. The token used is the `cls_token`.

            </Tip>

        eos_token (`str`, *optional*, defaults to `"</s>"`):
            The end of sequence token.

            <Tip>

            When building a sequence using special tokens, this is not the token that is used for the end of sequence.
            The token used is the `sep_token`.

            </Tip>

        sep_token (`str`, *optional*, defaults to `"</s>"`):
            The separator token, which is used when building a sequence from multiple sequences, e.g. two sequences for
            sequence classification or for a text and a question for question answering. It is also used as the last
            token of a sequence built with special tokens.
        cls_token (`str`, *optional*, defaults to `"<s>"`):
            The classifier token which is used when doing sequence classification (classification of the whole sequence
            instead of per-token classification). It is the first token of the sequence when built with special tokens.
        unk_token (`str`, *optional*, defaults to `"<unk>"`):
            The unknown token. A token that is not in the vocabulary cannot be converted to an ID and is set to be this
            token instead.
        pad_token (`str`, *optional*, defaults to `"<pad>"`):
            The token used for padding, for example when batching sequences of different lengths.
        mask_token (`str`, *optional*, defaults to `"<mask>"`):
            The token used for masking values. This is the token used when training this model with masked language
            modeling. This is the token which the model will try to predict.
    Fú<s>ú</s>ú<unk>ú<pad>ú<mask>c                 óÄ  •— 	 ddl m} || _        n1# t          $ r$ t                               d¦  «         d | _        Y nw xY w|| _        || _        i | _        d| j        t          |¦  «        <   d| j        t          |	¦  «        <   d| j        t          |¦  «        <   d| j        t          |¦  «        <   |  
                    |¦  «         d„ | j                             ¦   «         D ¦   «         | _        t          |d¬	¦  «        5 }|                     ¦   «                              d
¦  «        d d…         }d d d ¦  «         n# 1 swxY w Y   d„ |D ¦   «         }t!          t#          |t%          t'          |¦  «        ¦  «        ¦  «        ¦  «        | _        i | _        || _        t/          ¦   «         | _        dddœ| _         t5          ¦   «         j        d|||||||	|
ddddœ|¤Ž d S )Nr   )Údemojizezsemoji is not installed, thus not converting emoticons or emojis into text. Install emoji: pip3 install emoji==0.6.0r   é   r   c                 ó   — i | ]\  }}||“Œ	S © r    )Ú.0ÚkÚvs      r   ú
<dictcomp>z.BertweetTokenizer.__init__.<locals>.<dictcomp>Œ   s   € Ð>Ð>Ð>¡  A˜˜1Ð>Ð>Ð>r   úutf-8©Úencodingú
éÿÿÿÿc                 ó`   — g | ]+}t          |                     ¦   «         d d…         ¦  «        ‘Œ,S )Nr)   )ÚtupleÚsplit)r!   Úmerges     r   ú
<listcomp>z.BertweetTokenizer.__init__.<locals>.<listcomp>�   s1   € Ð@Ð@Ð@°•%˜Ÿš™œ c r cÔ*Ñ+Ô+Ð@Ð@Ð@r   ú'z...)u   â€™u   â€¦Ú	all_zerosTÚcls_double_sep)ÚnormalizationÚ	bos_tokenÚ	eos_tokenÚ	sep_tokenÚ	cls_tokenÚ	unk_tokenÚ	pad_tokenÚ
mask_tokenÚtoken_type_ids_patternÚ%token_type_ids_include_special_tokensÚspecial_tokens_patternr    )Úemojir   Ú	demojizerÚImportErrorÚloggerÚwarningr   r	   ÚencoderÚstrÚadd_from_fileÚitemsÚdecoderÚopenÚreadr,   ÚdictÚzipÚrangeÚlenÚ	bpe_ranksÚcacher2   ÚTweetTokenizerÚtweetPreprocessorÚspecial_punctsÚsuperÚ__init__)Úselfr   r	   r2   r3   r4   r5   r6   r7   r8   r9   Úkwargsr   Úmerges_handleÚmergesÚ	__class__s                  €r   rS   zBertweetTokenizer.__init__h   sK  ø€ ð		"Ø&Ð&Ð&Ð&Ð&Ð&à%ˆDŒNˆNøÝð 	"ð 	"ð 	"Ý�NŠNð(ñô ð ð "ˆDŒNˆNˆNð	"øøøð %ˆŒØ&ˆÔàˆŒØ'(ˆŒ•S˜‘^”^Ñ$Ø'(ˆŒ•S˜‘^”^Ñ$Ø'(ˆŒ•S˜‘^”^Ñ$Ø'(ˆŒ•S˜‘^”^Ñ$à×Ò˜:Ñ&Ô&Ð&à>Ð>¨¬×);Ò);Ñ)=Ô)=Ð>Ñ>Ô>ˆŒå�+¨Ð0Ñ0Ô0ð 	;°MØ"×'Ò'Ñ)Ô)×/Ò/°Ñ5Ô5°c°r°cÔ:ˆFð	;ð 	;ð 	;ñ 	;ô 	;ð 	;ð 	;ð 	;ð 	;ð 	;ð 	;øøøð 	;ð 	;ð 	;ð 	;à@Ð@¸Ð@Ñ@Ô@ˆÝ�c &­%µ°F±´Ñ*<Ô*<Ñ=Ô=Ñ>Ô>ˆŒØˆŒ
à*ˆÔÝ!/Ñ!1Ô!1ˆÔØ&)°%Ð8Ð8ˆÔà�‰ŒÔð 	
Ø'ØØØØØØØ!à#.Ø26Ø#3ð	
ð 	
ð ð	
ð 	
ð 	
ð 	
ð 	
s   ƒ ‘+?¾?Ä0D=Ä=EÅEc                 ó*   — t          | j        ¦  «        S ©N)rL   rB   ©rT   s    r   Ú
vocab_sizezBertweetTokenizer.vocab_size¨   s   € å�4”<Ñ Ô Ð r   c                 ó0   — t          | j        fi | j        ¤ŽS rZ   )rI   rB   Úadded_tokens_encoderr[   s    r   Ú	get_vocabzBertweetTokenizer.get_vocab¬   s   € Ý�D”LÐ>Ð> DÔ$=Ð>Ð>Ð>r   c                 óÜ  ‡ — |‰ j         v r‰ j         |         S t          |¦  «        }t          t          |d d…         ¦  «        |d         dz   gz   ¦  «        }t          |¦  «        }|s|S 	 t	          |ˆ fd„¬¦  «        }|‰ j        vr�n8|\  }}g }d}|t          |¦  «        k     ræ	 |                     ||¦  «        }	|                     |||	…         ¦  «         |	}n-# t          $ r  |                     ||d …         ¦  «         Y n†w xY w||         |k    rC|t          |¦  «        dz
  k     r-||dz            |k    r| 
                    ||z   ¦  «         |dz  }n | 
                    ||         ¦  «         |dz  }|t          |¦  «        k     °æt          |¦  «        }|}t          |¦  «        dk    rnt          |¦  «        }�ŒWd	                     |¦  «        }|d d
…         }|‰ j         |<   |S )Nr)   z</w>Tc                 óT   •— ‰j                              | t          d¦  «        ¦  «        S )NÚinf)rM   ÚgetÚfloat)ÚpairrT   s    €r   ú<lambda>z'BertweetTokenizer.bpe.<locals>.<lambda>º   s    ø€ °´×1CÒ1CÀDÍ%ÐPUÉ,Ì,Ñ1WÔ1W€ r   ©Úkeyr   r   r   ú@@ éüÿÿÿ)rN   r+   Úlistr   ÚminrM   rL   ÚindexÚextendÚ
ValueErrorÚappendÚjoin)
rT   Útokenr   r   ÚbigramÚfirstÚsecondÚnew_wordÚiÚjs
   `         r   ÚbpezBertweetTokenizer.bpe¯   s#  ø€ Ø�D”JÐÐØ”:˜eÔ$Ð$Ý�U‰|Œ|ˆÝ•T˜$˜s ˜sœ)‘_”_¨¨R¬°6Ñ(9Ð':Ñ:Ñ;Ô;ˆÝ˜$‘”ˆàð 	ØˆLð	(Ý˜Ð$WÐ$WÐ$WÐ$WÐXÑXÔXˆFØ˜Tœ^Ð+Ð+ÙØ"‰MˆE�6ØˆHØˆAØ•c˜$‘i”i’-�-ðØŸ
š
 5¨!Ñ,Ô,�Að
 —O’O D¨¨1¨¤IÑ.Ô.Ð.Ø�A�Aøõ "ð ð ð Ø—O’O D¨¨¨¤HÑ-Ô-Ð-Ø�Eðøøøð ˜”7˜eÒ#Ð#¨­C°©I¬I¸©MÒ(9Ð(9¸dÀ1ÀqÁ5¼kÈVÒ>SÐ>SØ—O’O E¨F¡NÑ3Ô3Ð3Ø˜‘F�A�Aà—O’O D¨¤GÑ,Ô,Ð,Ø˜‘F�Að •c˜$‘i”i’-�-õ  ˜X‘”ˆHØˆDÝ�4‰yŒy˜AŠ~ˆ~Øå! $™œ�ñ9	(ð: �zŠz˜$ÑÔˆØ�C�R�CŒyˆØ ˆŒ
�5ÑØˆs   Â(C Ã'DÄDc                 ó  — | j         r|                      |¦  «        }g }t          j        d|¦  «        }|D ]J}|                     t          |                      |¦  «                             d¦  «        ¦  «        ¦  «         ŒK|S )zTokenize a string.z\S+\n?ú )r2   ÚnormalizeTweetÚreÚfindallrn   rk   ry   r,   )rT   ÚtextÚsplit_tokensÚwordsrr   s        r   Ú	_tokenizezBertweetTokenizer._tokenizeÛ   s„   € àÔð 	-Ø×&Ò& tÑ,Ô,ˆDàˆÝ”
˜9 dÑ+Ô+ˆØð 	Bð 	BˆEØ×Ò¥ T§X¢X¨e¡_¤_×%:Ò%:¸3Ñ%?Ô%?Ñ @Ô @ÑAÔAÐAÐAØÐr   c                 ó‚  ‡ — ‰ j         D ]#}|                     |‰ j         |         ¦  «        }Œ$‰ j                             |¦  «        }d                     ˆ fd„|D ¦   «         ¦  «        }|                     dd¦  «                             dd¦  «                             dd¦  «                             dd	¦  «                             d
d¦  «        }|                     dd¦  «                             dd¦  «                             dd¦  «                             dd¦  «                             dd¦  «                             dd¦  «        }|                     dd¦  «                             dd¦  «                             dd¦  «                             dd¦  «        }d                     |                     ¦   «         ¦  «        S ) z'
        Normalize a raw Tweet
        r{   c                 ó:   •— g | ]}‰                      |¦  «        ‘ŒS r    )ÚnormalizeToken)r!   rr   rT   s     €r   r.   z4BertweetTokenizer.normalizeTweet.<locals>.<listcomp>î   s'   ø€ ÐMÐMÐM¸U˜d×1Ò1°%Ñ8Ô8ÐMÐMÐMr   zcannot zcan not zn't z n't zn 't zca n'tzcan'tzai n'tzain'tz'm z 'm z're z 're z's z 's z'll z 'll z'd z 'd z've z 've z p . m .z  p.m.z p . m z p.m z a . m .z a.m.z a . m z a.m )rQ   ÚreplacerP   Útokenizerq   r,   )rT   ÚtweetÚpunctÚtokensÚ	normTweets   `    r   r|   z BertweetTokenizer.normalizeTweetæ   s’  ø€ ð Ô(ð 	Eð 	EˆEØ—M’M %¨Ô)<¸UÔ)CÑDÔDˆEˆEàÔ'×0Ò0°Ñ7Ô7ˆØ—H’HÐMÐMÐMÐMÀfÐMÑMÔMÑNÔNˆ	ð ×Ò˜i¨Ñ4Ô4ßŠW�V˜WÑ%Ô%ßŠW�W˜gÑ&Ô&ßŠW�X˜wÑ'Ô'ßŠW�X˜wÑ'Ô'ð 	ð ×Ò˜e VÑ,Ô,ßŠW�V˜WÑ%Ô%ßŠW�U˜FÑ#Ô#ßŠW�V˜WÑ%Ô%ßŠW�U˜FÑ#Ô#ßŠW�V˜WÑ%Ô%ð 	ð ×Ò˜j¨(Ñ3Ô3ßŠW�Y Ñ(Ô(ßŠW�Z Ñ)Ô)ßŠW�Y Ñ(Ô(ð	 	ð �xŠx˜	ŸšÑ)Ô)Ñ*Ô*Ð*r   c                 óB  — |                      ¦   «         }|                     d¦  «        rdS |                     d¦  «        s|                     d¦  «        rdS t          |¦  «        dk    r4|| j        v r| j        |         S | j        �|                      |¦  «        S |S |S )z-
        Normalize tokens in a Tweet
        ú@z@USERÚhttpÚwwwÚHTTPURLr   )ÚlowerÚ
startswithrL   rQ   r>   )rT   rr   Úlowercased_tokens      r   r…   z BertweetTokenizer.normalizeToken  s®   € ð !Ÿ;š;™=œ=ÐØ×Ò˜CÑ Ô ð 	Ø�7Ø×(Ò(¨Ñ0Ô0ð 
	Ð4D×4OÒ4OÐPUÑ4VÔ4Vð 
	Ø�9Ý�‰ZŒZ˜1Š_ˆ_Ø˜Ô+Ð+Ð+ØÔ*¨5Ô1Ð1ØŒ~Ð)Ø—~’~ eÑ,Ô,Ð,à�àˆLr   c                 ór   — | j                              || j                              | j        ¦  «        ¦  «        S )z0Converts a token (str) in an id using the vocab.)rB   rc   r7   )rT   rr   s     r   Ú_convert_token_to_idz&BertweetTokenizer._convert_token_to_id  s,   € àŒ|×Ò  t¤|×'7Ò'7¸¼Ñ'GÔ'GÑHÔHÐHr   c                 óB   — | j                              || j        ¦  «        S )z=Converts an index (integer) in a token (str) using the vocab.)rF   rc   r7   )rT   rm   s     r   Ú_convert_id_to_tokenz&BertweetTokenizer._convert_id_to_token  s   € àŒ|×Ò  t¤~Ñ6Ô6Ð6r   c                 ó|   — d                      |¦  «                             dd¦  «                             ¦   «         }|S )z:Converts a sequence of tokens (string) in a single string.r{   ri   Ú )rq   r†   Ústrip)rT   rŠ   Ú
out_strings      r   Úconvert_tokens_to_stringz*BertweetTokenizer.convert_tokens_to_string#  s5   € à—X’X˜fÑ%Ô%×-Ò-¨e°RÑ8Ô8×>Ò>Ñ@Ô@ˆ
ØÐr   NÚsave_directoryÚfilename_prefixÚreturn.c                 ón  — t           j                             |¦  «        s t                               d|› d�¦  «         dS t          | di ¦  «        }|r|› d�nd}t           j                             |||                     dd¦  «        z   ¦  «        }t          |d	d
¬¦  «        5 }t          | j
                             ¦   «         d„ ¬¦  «        D ]&\  }}|dk    r|                     |› d|› d�¦  «         Œ'	 ddd¦  «         n# 1 swxY w Y   t           j                             |||                     dd¦  «        z   ¦  «        }	t          |	d	d
¬¦  «        5 }
|
                     d„ t          | j                             ¦   «         d„ ¬¦  «        D ¦   «         ¦  «         ddd¦  «         n# 1 swxY w Y   ||	fS )zF
        Save the vocabulary and merges files to a directory.
        zVocabulary path (z) should be a directoryr    Úvocab_files_namesú-r™   r   r   Úwr%   r&   c                 ó   — | d         S ©Nr   r    ©Úkvs    r   rf   z3BertweetTokenizer.save_vocabulary.<locals>.<lambda>=  s   € ÈrÐRSÌu€ r   rg   é   r{   r(   Nr	   r   c              3   óL   K  — | ]\  }}d                       |¦  «        dz   V — Œ dS )r{   r(   N)rq   )r!   Ú
bpe_tokensÚtoken_indexs      r   ú	<genexpr>z4BertweetTokenizer.save_vocabulary.<locals>.<genexpr>E  sK   è è € ð ð á+�J ð —’˜Ñ$Ô$ tÑ+ðð ð ð ð ð r   c                 ó   — | d         S r¥   r    r¦   s    r   rf   z3BertweetTokenizer.save_vocabulary.<locals>.<lambda>G  s   € Ð]_Ð`aÔ]b€ r   )ÚosÚpathÚisdirr@   ÚerrorÚgetattrrq   rc   rG   ÚsortedrB   rE   ÚwriteÚ
writelinesrM   )rT   r�   rž   r¡   Úprefixr   Úfrr   Útoken_idÚ
merge_fileÚwriters              r   Úsave_vocabularyz!BertweetTokenizer.save_vocabulary.  sX  € õ Œw�}Š}˜^Ñ,Ô,ð 	Ý�LŠLÐT¨^ÐTÐTÐTÑUÔUÐUØ�2å# DÐ*=¸rÑBÔBÐØ*9ÐA�OÐ&Ð&Ð&Ð&¸rˆõ ”W—\’\ .°&Ð;L×;PÒ;PÐQ]Ð_jÑ;kÔ;kÑ2kÑlÔlˆ
Ý�*˜c¨GÐ4Ñ4Ô4ð 	5¸Ý#)¨$¬,×*<Ò*<Ñ*>Ô*>ÐDTÐDTÐ#UÑ#UÔ#Uð 5ð 5‘��xà˜q’=�=Ø—G’G˜uÐ3Ð3 xÐ3Ð3Ð3Ñ4Ô4Ð4øð5ð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5õ ”W—\’\ .°&Ð;L×;PÒ;PÐQ^Ð`kÑ;lÔ;lÑ2lÑmÔmˆ
Ý�*˜c¨GÐ4Ñ4Ô4ð 	¸Ø×Òð ð å/5°d´n×6JÒ6JÑ6LÔ6LÐRbÐRbÐ/cÑ/cÔ/cðñ ô ñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˜JÐ'Ð's&   Â#ADÄDÄDÅAF(Æ(F,Æ/F,c                 ó  — t          |t          ¦  «        rs	 t          |dd¬¦  «        5 }|                      |¦  «         ddd¦  «         n# 1 swxY w Y   n0# t          $ r}|‚d}~wt
          $ r t          d|› d�¦  «        ‚w xY wdS |                     ¦   «         }|D ]f}|                     ¦   «         }| 	                    d¦  «        }|dk    rt          d	¦  «        ‚|d|…         }t          | j        ¦  «        | j        |<   ŒgdS )
zi
        Loads a pre-existing dictionary from a text file and adds its symbols to this instance.
        Úrr%   r&   NzIncorrect encoding detected in z, please rebuild the datasetr{   r)   z5Incorrect dictionary format, expected '<token> <cnt>')Ú
isinstancerC   rG   rD   ÚFileNotFoundErrorÚUnicodeErrorÚ	ExceptionÚ	readlinesrš   Úrfindro   rL   rB   )	rT   r·   ÚfdÚfnfeÚlinesÚlineTmpÚlineÚidxr   s	            r   rD   zBertweetTokenizer.add_from_fileL  sq  € õ �a�ÑÔð 	ðcÝ˜!˜S¨7Ð3Ñ3Ô3ð +°rØ×&Ò& rÑ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +øøå$ð ð ð Ø�
øøøøÝð cð cð cÝÐ aÀ!Ð aÐ aÐ aÑbÔbÐbðcøøøàˆFà—’‘”ˆØð 	3ð 	3ˆGØ—=’=‘?”?ˆDØ—*’*˜S‘/”/ˆCØ�bŠyˆyÝ Ð!XÑYÔYÐYØ˜˜˜”:ˆDÝ!$ T¤\Ñ!2Ô!2ˆDŒL˜ÑÐð	3ð 	3s9   —A ©A¿A ÁAÁA ÁAÁA Á
BÁ!A#Á#!B)Fr   r   r   r   r   r   r   rZ   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚVOCAB_FILES_NAMESr¡   rS   Úpropertyr\   r_   ry   r‚   r|   r…   r•   r—   rœ   rC   r+   r»   rD   Ú__classcell__)rX   s   @r   r   r   3   sQ  ø€ € € € € ð0ð 0ðd *Ðð ØØØØØØØð>
ð >
ð >
ð >
ð >
ð >
ð@ ð!ð !ñ „Xð!ð?ð ?ð ?ð*ð *ð *ðX	ð 	ð 	ð +ð  +ð  +ðDð ð ð&Ið Ið Ið7ð 7ð 7ðð ð ð(ð (¨cð (ÀCÈ$ÁJð (ÐZ_Ð`cÐehÐ`hÔZið (ð (ð (ð (ð<3ð 3ð 3ð 3ð 3ð 3ð 3r   r   ac  
    (?:
      [<>]?
      [:;=8]                     # eyes
      [\-o\*\']?                 # optional nose
      [\)\]\(\[dDpP/\:\}\{@\|\\] # mouth
      |
      [\)\]\(\[dDpP/\:\}\{@\|\\] # mouth
      [\-o\*\']?                 # optional nose
      [:;=8]                     # eyes
      [<>]?
      |
      <3                         # heart
    )u  			# Capture 1: entire matched URL
  (?:
  https?:				# URL protocol and colon
    (?:
      /{1,3}				# 1-3 slashes
      |					#   or
      [a-z0-9%]				# Single letter or digit or '%'
                                       # (Trying not to match e.g. "URI::Escape")
    )
    |					#   or
                                       # looks like domain name followed by a slash:
    [a-z0-9.\-]+[.]
    (?:[a-z]{2,13})
    /
  )
  (?:					# One or more:
    [^\s()<>{}\[\]]+			# Run of non-space, non-()<>{}[]
    |					#   or
    \([^\s()]*?\([^\s()]+\)[^\s()]*?\) # balanced parens, one level deep: (...(...)...)
    |
    \([^\s]+?\)				# balanced parens, non-recursive: (...)
  )+
  (?:					# End with:
    \([^\s()]*?\([^\s()]+\)[^\s()]*?\) # balanced parens, one level deep: (...(...)...)
    |
    \([^\s]+?\)				# balanced parens, non-recursive: (...)
    |					#   or
    [^\s`!()\[\]{};:'".,<>?Â«Â»â€œâ€�â€˜â€™]	# not a space or one of these punct chars
  )
  |					# OR, the following to match naked domains:
  (?:
    (?<!@)			        # not preceded by a @, avoid matching foo@_gmail.com_
    [a-z0-9]+
    (?:[.\-][a-z0-9]+)*
    [.]
    (?:[a-z]{2,13})
    \b
    /?
    (?!@)			        # not succeeded by a @,
                            # avoid matching "foo.na" in "foo.na@example.com"
  )
a	  
    (?:
      (?:            # (international)
        \+?[01]
        [ *\-.\)]*
      )?
      (?:            # (area code)
        [\(]?
        \d{3}
        [ *\-.\)]*
      )?
      \d{3}          # exchange
      [ *\-.\)]*
      \d{4}          # base
    )z	<[^>\s]+>z[\-]+>|<[\-]+z(?:@[\w_]+)z(?:\#+[\w_]+[\w\'_\-]*[\w_]+)z#[\w.+-]+@[\w-]+\.(?:[\w-]\.?)+[\w-]a…  
    (?:[^\W\d_](?:[^\W\d_]|['\-_])+[^\W\d_]) # Words with apostrophes or dashes.
    |
    (?:[+\-]?\d+[,/.:-]\d+[+\-]?)  # Numbers, including fractions, decimals.
    |
    (?:[\w_]+)                     # Words without apostrophes or dashes.
    |
    (?:\.(?:\s*\.){1,})            # Ellipsis dots.
    |
    (?:\S)                         # Everything else that isn't whitespace.
    z(%s)ú|z([^a-zA-Z0-9])\1{3,}z&(#?(x?))([^&;\s]+);Ústrictc                 ód   — |€d}t          | t          ¦  «        r|                      ||¦  «        S | S )Nr%   )r¾   ÚbytesÚdecode)r   r'   Úerrorss      r   Ú_str_to_unicoder×     s8   € ØÐØˆÝ�$�ÑÔð -Ø�{Š{˜8 VÑ,Ô,Ð,Ø€Kr   r    Tr%   c                 ód   ‡‡— ˆˆfd„}t                                |t          | |¦  «        ¦  «        S )u×  
    Remove entities from text by converting them to their corresponding unicode character.

    Args:
        text:
            A unicode string or a byte string encoded in the given *encoding* (which defaults to 'utf-8').
        keep (list):
            List of entity names which should not be replaced. This supports both numeric entities (`&#nnnn;` and
            `&#hhhh;`) and named entities (such as `&nbsp;` or `&gt;`).
        remove_illegal (bool):
            If `True`, entities that can't be converted are removed. Otherwise, entities that can't be converted are
            kept "as is".
    Returns: A unicode string with the entities removed.

    See https://github.com/scrapy/w3lib/blob/master/w3lib/html.py

    Examples:

    ```python
    >>> from nltk.tokenize.casual import _replace_html_entities

    >>> _replace_html_entities(b"Price: &pound;100")
    'Price: \xa3100'

    >>> print(_replace_html_entities(b"Price: &pound;100"))
    Price: Â£100
    ```c                 óP  •— |                       d¦  «        }|                       d¦  «        r}	 |                       d¦  «        rt          |d¦  «        }nt          |d¦  «        }d|cxk    rdk    r&n n#t          |f¦  «                             d¦  «        S nO# t          $ r d }Y nAw xY w|‰v r|                       d	¦  «        S t
          j        j                             |¦  «        }|�'	 t          |¦  «        S # t          t          f$ r Y nw xY w‰rd
n|                       d	¦  «        S )Nr   r   r   é   é
   é€   éŸ   Úcp1252r   r™   )ÚgroupÚintrÔ   rÕ   ro   ÚhtmlÚentitiesÚname2codepointrc   ÚchrÚOverflowError)ÚmatchÚentity_bodyÚnumberÚkeepÚremove_illegals      €€r   Ú_convert_entityz/_replace_html_entities.<locals>._convert_entity;  sO  ø€ Ø—k’k !‘n”nˆØ�;Š;�q‰>Œ>ð 	GðØ—;’;˜q‘>”>ð 2Ý  ¨bÑ1Ô1�F�Få  ¨bÑ1Ô1�Fð
 ˜6Ð)Ð)Ò)Ð) TÒ)Ð)Ð)Ð)Ð)Ý  & Ñ+Ô+×2Ò2°8Ñ<Ô<Ð<øøÝð ð ð Ø���ðøøøð ˜dÐ"Ð"Ø—{’{ 1‘~”~Ð%åœÔ5×9Ò9¸+ÑFÔF�ØÐðÝ˜6‘{”{Ð"øÝ¥Ð.ð ð ð Ø�ðøøøð $Ð7ˆrˆr¨¯ª°Q©¬Ð7s$   ­A(B ÂB&Â%B&Ã)C8 Ã8DÄD)ÚENT_REÚsubr×   )r   ré   rê   r'   rë   s    ``  r   Ú_replace_html_entitiesrî     sB   øø€ ð:8ð 8ð 8ð 8ð 8ð 8õ: �:Š:�o¥°t¸XÑ'FÔ'FÑGÔGÐGr   c                   ó    — e Zd ZdZdd„Zd„ ZdS )rO   a·  
    Examples:

    ```python
    >>> # Tokenizer for tweets.
    >>> from nltk.tokenize import TweetTokenizer

    >>> tknzr = TweetTokenizer()
    >>> s0 = "This is a cooool #dummysmiley: :-) :-P <3 and some arrows < > -> <--"
    >>> tknzr.tokenize(s0)
    ['This', 'is', 'a', 'cooool', '#dummysmiley', ':', ':-)', ':-P', '<3', 'and', 'some', 'arrows', '<', '>', '->', '<--']

    >>> # Examples using *strip_handles* and *reduce_len parameters*:
    >>> tknzr = TweetTokenizer(strip_handles=True, reduce_len=True)
    >>> s1 = "@remy: This is waaaaayyyy too much for you!!!!!!"
    >>> tknzr.tokenize(s1)
    [':', 'This', 'is', 'waaayyy', 'too', 'much', 'for', 'you', '!', '!', '!']
    ```TFc                 ó0   — || _         || _        || _        d S rZ   ©Úpreserve_caseÚ
reduce_lenÚstrip_handles)rT   rò   ró   rô   s       r   rS   zTweetTokenizer.__init__r  s   € Ø*ˆÔØ$ˆŒØ*ˆÔÐÐr   c                 ó  — t          |¦  «        }| j        rt          |¦  «        }| j        rt	          |¦  «        }t
                               d|¦  «        }t                               |¦  «        }| j	        sd„ |D ¦   «         }|S )z»
        Args:
            text: str

        Returns: list(str) A tokenized list of strings; concatenating this list returns the original string if
        `preserve_case=False`
        ú\1\1\1c                 ón   — g | ]2}t                                |¦  «        r|n|                     ¦   «         ‘Œ3S r    )ÚEMOTICON_REÚsearchr‘   )r!   Úxs     r   r.   z+TweetTokenizer.tokenize.<locals>.<listcomp>�  s7   € ÐNÐNÐNÀ1�+×,Ò,¨QÑ/Ô/Ð>�Q�Q°Q·W²W±Y´YÐNÐNÐNr   )
rî   rô   Úremove_handlesró   Úreduce_lengtheningÚHANG_RErí   ÚWORD_REr~   rò   )rT   r   Ú	safe_textr�   s       r   r‡   zTweetTokenizer.tokenizew  sˆ   € õ & dÑ+Ô+ˆàÔð 	(Ý! $Ñ'Ô'ˆDàŒ?ð 	,Ý% dÑ+Ô+ˆDå—K’K 	¨4Ñ0Ô0ˆ	å—’ 	Ñ*Ô*ˆàÔ!ð 	OØNÐNÈÐNÑNÔNˆEØˆr   N©TFF)rÊ   rË   rÌ   rÍ   rS   r‡   r    r   r   rO   rO   ^  sA   € € € € € ðð ð&+ð +ð +ð +ð
ð ð ð ð r   rO   c                 óV   — t          j        d¦  «        }|                     d| ¦  «        S )za
    Replace repeated character sequences of length 3 or greater with sequences of length 3.
    z	(.)\1{2,}rö   ©ÚregexÚcompilerí   ©r   Úpatterns     r   rü   rü   –  s'   € õ Œm˜LÑ)Ô)€GØ�;Š;�y $Ñ'Ô'Ð'r   c                 óV   — t          j        d¦  «        }|                     d| ¦  «        S )z4
    Remove Twitter username handles from text.
    zv(?<![A-Za-z0-9_!@#\$%&*])@(([A-Za-z0-9_]){20}(?!@))|(?<![A-Za-z0-9_!@#\$%&*])@(([A-Za-z0-9_]){1,19})(?![A-Za-z0-9_]*@)r{   r  r  s     r   rû   rû   ž  s1   € õ Œmð 	Bñô €Gð �;Š;�s˜DÑ!Ô!Ð!r   Fc                 óL   — t          |||¬¦  «                             | ¦  «        S )z:
    Convenience function for wrapping the tokenizer.
    rñ   )rO   r‡   )r   rò   ró   rô   s       r   Úcasual_tokenizer	  ®  s/   € õ ¨À*Ð\iÐjÑjÔj×sÒsØñô ð r   )NrÒ   )r    Tr%   r   )"rÍ   rá   r®   r}   r  Útokenization_pythonr   Úutilsr   Ú
get_loggerrÊ   r@   rÎ   r   r   Ú	EMOTICONSÚURLSÚREGEXPSr  rq   ÚVERBOSEÚIÚUNICODErþ   rý   rø   rì   r×   rî   rO   rü   rû   r	  Ú__all__r    r   r   ú<module>r     s  ðð (Ð 'à €€€Ø 	€	€	€	Ø 	€	€	€	à €€€à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø Ð Ð Ð Ð Ð ð 
ˆÔ	˜HÑ	%Ô	%€ð Øðð Ð ðð ð ð n3ð n3ð n3ð n3ð n3Ð+ñ n3ô n3ð n3ðx	ðL	€	ð$)€ð\ 	ð	ð  àààà(à.ð
ðA+€ð` ˆ%Œ-˜ c§h¢h¨wÑ&7Ô&7Ñ7¸¼ÈÌÑ9PÐSXÔS`Ñ9`Ñ
aÔ
a€ð ˆ%Œ-Ð/Ñ
0Ô
0€ð ˆeŒm˜I u¤}°u´wÑ'>ÀÄÑ'NÑOÔO€ð 
ˆŒÐ.Ñ	/Ô	/€ðð ð ð ð:Hð :Hð :Hð :Hð@0ð 0ð 0ð 0ð 0ñ 0ô 0ð 0ðp(ð (ð (ð"ð "ð "ð ð ð ð ð Ð
€€€r   