+
    ÖÇÜh$  ã                   ól   € ^ RI t ^ RIt^ RIHtHtHt ^ RIHt ^ RIH	t	  ! R R4      t
 ! R R]4      tR# )	é    N)ÚIteratorÚListÚTuple)Ú
TokenizerI)Úalign_tokensc                   ó2   € ] tR t^tRt. ROtRR.tRR.tRtR# )	ÚMacIntyreContractionszA
List of contractions adapted from Robert MacIntyre's tokenizer.
z(?i) ('t)(?#X)(is)\bz(?i) ('t)(?#X)(was)\bz(?i)\b(whad)(dd)(ya)\bz(?i)\b(wha)(t)(cha)\b© N)z(?i)\b(can)(?#X)(not)\bz(?i)\b(d)(?#X)('ye)\bz(?i)\b(gim)(?#X)(me)\bz(?i)\b(gon)(?#X)(na)\bz(?i)\b(got)(?#X)(ta)\bz(?i)\b(lem)(?#X)(me)\bz(?i)\b(more)(?#X)('n)\bz(?i)\b(wan)(?#X)(na)(?=\s))	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__ÚCONTRACTIONS2ÚCONTRACTIONS3ÚCONTRACTIONS4Ú__static_attributes__r
   ó    Ú;/usr/lib/python3/dist-packages/nltk/tokenize/destructive.pyr	   r	      s&   † ñò	€Mð -Ð.FÐG€MØ.Ð0HÐI„Mr   r	   c                   ó¦  a € ] tR t^%t o Rt]P                  ! R]P                  4      R3]P                  ! R4      R3]P                  ! R4      R3]P                  ! R4      R3]P                  ! R	]P                  4      R
3.t]P                  ! R]P                  4      R3]P                  ! R4      R3]P                  ! R4      R3]P                  ! R4      R3]P                  ! R4      R3]P                  ! R4      R3.t	]P                  ! R]P                  4      R3]P                  ! R4      R3]P                  ! R4      R3]P                  ! R]P                  4      R3]P                  ! R4      R3]P                  ! R4      R3]P                  ! R4      R3]P                  ! R4      R 3]P                  ! R!]P                  4      R3.	t
]P                  ! R"4      R3t]P                  ! R#4      R$3]P                  ! R%4      R&3]P                  ! R'4      R(3]P                  ! R)4      R*3]P                  ! R+4      R,3]P                  ! R-4      R.3.t]P                  ! R/4      R03t]! 4       t]! ]! ]P                  ]P$                  4      4      t]! ]! ]P                  ]P&                  4      4      tR7V 3R1 lR2 lltV 3R3 lR4 ltR5tV tR6# )8ÚNLTKWordTokenizera!  
The NLTK tokenizer that has improved upon the TreebankWordTokenizer.

This is the method that is invoked by ``word_tokenize()``.  It assumes that the
text has already been segmented into sentences, e.g. using ``sent_tokenize()``.

The tokenizer is "destructive" such that the regexes applied will munge the
input string to a state beyond re-construction. It is possible to apply
`TreebankWordDetokenizer.detokenize` to the tokenized outputs of
`NLTKDestructiveWordTokenizer.tokenize` but there's no guarantees to
revert to the original string.
u   ([Â«â€œâ€˜â€ž]|[`]+)z \1 z^\"ú``z(``)z([ \(\[{<])(\"|\'{2})z\1 `` z$(?i)(\')(?!re|ve|ll|m|t|s|d|n)(\w)\bz\1 \2u   ([Â»â€�â€™])ú''z '' Ú"z\s+Ú z([^' ])('[sS]|'[mM]|'[dD]|') z\1 \2 z)([^' ])('ll|'LL|'re|'RE|'ve|'VE|n't|N'T) u&   ([^\.])(\.)([\]\)}>"\'Â»â€�â€™ ]*)\s*$z	\1 \2 \3 z([:,])([^\d])z \1 \2z([:,])$z\.{2,}z \g<0> z[;@#$%&]z([^\.])(\.)([\]\)}>"\']*)\s*$z\1 \2\3 z[?!]z([^'])' z\1 ' z[*]z[\]\[\(\)\{\}\<\>]z\(z-LRB-z\)z-RRB-z\[z-LSB-z\]z-RSB-z\{z-LCB-z\}z-RCB-z--z -- c          	      óB   <€ V ^8„  d   QhRS[ RS[RS[RS[S[ ,          /# )é   ÚtextÚconvert_parenthesesÚ
return_strÚreturn)ÚstrÚboolr   )ÚformatÚ__classdict__s   "€r   Ú__annotate__ÚNLTKWordTokenizer.__annotate__y   s7   ø€ ÷ Fñ FÙðFÙ.2ðFÙHLðFá	‰c�ñFr   c                óÜ  € V'       d   \         P                  ! R\        ^R7       V P                   F  w  rEVP	                  WQ4      pK  	  V P
                   F  w  rEVP	                  WQ4      pK  	  V P                  w  rEVP	                  WQ4      pV'       d'   V P                   F  w  rEVP	                  WQ4      pK  	  V P                  w  rEVP	                  WQ4      pRV,           R,           pV P                   F  w  rEVP	                  WQ4      pK  	  V P                   F  pVP	                  RV4      pK  	  V P                   F  pVP	                  RV4      pK  	  VP                  4       # )aJ  Return a tokenized copy of `text`.

>>> from nltk.tokenize import NLTKWordTokenizer
>>> s = '''Good muffins cost $3.88 (roughly 3,36 euros)\nin New York.  Please buy me\ntwo of them.\nThanks.'''
>>> NLTKWordTokenizer().tokenize(s) # doctest: +NORMALIZE_WHITESPACE
['Good', 'muffins', 'cost', '$', '3.88', '(', 'roughly', '3,36',
'euros', ')', 'in', 'New', 'York.', 'Please', 'buy', 'me', 'two',
'of', 'them.', 'Thanks', '.']
>>> NLTKWordTokenizer().tokenize(s, convert_parentheses=True) # doctest: +NORMALIZE_WHITESPACE
['Good', 'muffins', 'cost', '$', '3.88', '-LRB-', 'roughly', '3,36',
'euros', '-RRB-', 'in', 'New', 'York.', 'Please', 'buy', 'me', 'two',
'of', 'them.', 'Thanks', '.']


:param text: A string with a sentence or sentences.
:type text: str
:param convert_parentheses: if True, replace parentheses to PTB symbols,
    e.g. `(` to `-LRB-`. Defaults to False.
:type convert_parentheses: bool, optional
:param return_str: If True, return tokens as space-separated string,
    defaults to False.
:type return_str: bool, optional
:return: List of tokens from `text`.
:rtype: List[str]
zHParameter 'return_str' has been deprecated and should no longer be used.)ÚcategoryÚ
stacklevelr   z \1 \2 )ÚwarningsÚwarnÚDeprecationWarningÚSTARTING_QUOTESÚsubÚPUNCTUATIONÚPARENS_BRACKETSÚCONVERT_PARENTHESESÚDOUBLE_DASHESÚENDING_QUOTESr   r   Úsplit)Úselfr   r   r    ÚregexpÚsubstitutions   &&&&  r   ÚtokenizeÚNLTKWordTokenizer.tokenizey   sF  € ÷8 Ü�MŠMð"ä+Øõ	ð %)×$8Ô$8Ñ ˆFØ—:‘:˜lÓ1ŠDñ %9ð %)×$4Ô$4Ñ ˆFØ—:‘:˜lÓ1ŠDñ %5ð  $×3Ñ3ÑˆØ�z‰z˜,Ó-ˆçØ(,×(@Ô(@Ñ$�Ø—z‘z ,Ó5’ñ )Að  $×1Ñ1ÑˆØ�z‰z˜,Ó-ˆð �T�z˜CÕˆà$(×$6Ô$6Ñ ˆFØ—:‘:˜lÓ1ŠDñ %7ð ×(Ô(ˆFØ—:‘:˜j¨$Ó/ŠDñ )à×(Ô(ˆFØ—:‘:˜j¨$Ó/ŠDñ )ð �z‰z‹|Ðr   c                óL   <€ V ^8„  d   QhRS[ RS[S[S[S[3,          ,          /# )r   r   r!   )r"   r   r   Úint)r$   r%   s   "€r   r&   r'   Á   s(   ø€ ÷ ).ñ ).¡#ð ).©(±5¹¹c¸µ?Õ*Cñ ).r   c              #  óH  "  € V P                  V4      pRV9   g   RV9   d^   \        P                  ! RV4       Uu. uF  q3P                  4       NK  	  ppV Uu. uF  pVR9   d   VP	                  ^ 4      MTNK  	  ppMTp\        Wa4       Rj  x€L
  R# u upi u upi  L5i)aå  
Returns the spans of the tokens in ``text``.
Uses the post-hoc nltk.tokens.align_tokens to return the offset spans.

    >>> from nltk.tokenize import NLTKWordTokenizer
    >>> s = '''Good muffins cost $3.88\nin New (York).  Please (buy) me\ntwo of them.\n(Thanks).'''
    >>> expected = [(0, 4), (5, 12), (13, 17), (18, 19), (19, 23),
    ... (24, 26), (27, 30), (31, 32), (32, 36), (36, 37), (37, 38),
    ... (40, 46), (47, 48), (48, 51), (51, 52), (53, 55), (56, 59),
    ... (60, 62), (63, 68), (69, 70), (70, 76), (76, 77), (77, 78)]
    >>> list(NLTKWordTokenizer().span_tokenize(s)) == expected
    True
    >>> expected = ['Good', 'muffins', 'cost', '$', '3.88', 'in',
    ... 'New', '(', 'York', ')', '.', 'Please', '(', 'buy', ')',
    ... 'me', 'two', 'of', 'them.', '(', 'Thanks', ')', '.']
    >>> [s[start:end] for start, end in NLTKWordTokenizer().span_tokenize(s)] == expected
    True

:param text: A string with a sentence or sentences.
:type text: str
:yield: Tuple[int, int]
r   r   z
``|'{2}|\"N)r   r   r   )r9   ÚreÚfinditerÚgroupÚpopr   )r6   r   Ú
raw_tokensÚmÚmatchedÚtokÚtokenss   &&     r   Úspan_tokenizeÚNLTKWordTokenizer.span_tokenizeÁ   s§   é € ð. —]‘] 4Ó(ˆ
ð �4ŒK˜T Tœ\ä*,¯+ª+°mÀTÔ*JÓKÑ*J Q—w‘w–yÑ*JˆGÐKñ
 &óá%�Cð #&Ð):Ô":�—‘˜A”ÀÒCÙ%ð ð ˆFð
  ˆFä Ó-×-Ò-ùò Lùòñ 	.ùs(   ‚9B"»BÁB"Á#BÁ<B"ÂB ÂB"r
   N)FF)r   r   r   r   r   r>   ÚcompileÚUr.   r4   r0   r1   r2   r3   r	   Ú_contractionsÚlistÚmapr   r   r9   rG   r   Ú__classdictcell__)r%   s   @r   r   r   %   s¤  ø‡ € ñð 
�ŠÐ*¨B¯D©DÓ	1°7Ð;Ø	�Š�FÓ	˜UÐ#Ø	�Š�GÓ	˜gÐ&Ø	�ŠÐ,Ó	-¨yÐ9Ø	�ŠÐ;¸R¿T¹TÓ	BÀHÐMð€Oð 
�Š�N B§D¡DÓ	)¨7Ð3Ø	�Š�EÓ	˜FÐ#Ø	�Š�DÓ	˜6Ð"Ø	�Š�FÓ	˜SÐ!Ø	�ŠÐ4Ó	5°yÐAØ	�ŠÐ@Ó	AÀ9ÐMð€Mð( 
�ŠÐDÀbÇdÁdÓ	KÈ\ÐZØ	�ŠÐ$Ó	% yÐ1Ø	�Š�JÓ	 Ð)à�JŠJ�y "§$¡$Ó'Øð	
ð 
�Š�KÓ	  *Ð-à�JŠJÐ7Ó8Øð	
ð 
�Š�GÓ	˜jÐ)Ø	�Š�KÓ	  (Ð+à�JŠJ�v˜rŸt™tÓ$Øð	
ð€Kð, —z’zÐ"7Ó8¸*ÐE€Oð 
�Š�EÓ	˜GÐ$Ø	�Š�EÓ	˜GÐ$Ø	�Š�EÓ	˜GÐ$Ø	�Š�EÓ	˜GÐ$Ø	�Š�EÓ	˜GÐ$Ø	�Š�EÓ	˜GÐ$ðÐð —Z’Z Ó&¨Ð0€Mñ *Ó+€MÙ™˜RŸZ™Z¨×)DÑ)DÓEÓF€MÙ™˜RŸZ™Z¨×)DÑ)DÓEÓF€M÷Fò F÷P).ö ).r   r   )r>   r+   Útypingr   r   r   Únltk.tokenize.apir   Únltk.tokenize.utilr   r	   r   r
   r   r   Ú<module>rR      s3   ðó 
Û ß (Ñ (å (Ý +÷Jñ Jô&E.˜
ö E.r   