+
    ÖÇÜhÙq ã                   ó  € R t ^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RIH	t	 ^ RI
HtHt ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt RtR*w  ttttt]]]].t RRRRRRRR/t!R+t"]PF                  ! R4      t$ ! R R]%4      t&]	 ! R R4      4       t' ! R R]'4      t( ! R R]'4      t) ! R R]4      t* ! R R ]4      t+R,R! lt,R,R" lt-R,R# lt.R-R$ lt/R-R% lt0R-R& lt1])PX                  P                   ],n         ])PZ                  P                   ]-n         ])P\                  P                   ].n         ])P^                  P                   ]/n         ])P`                  P                   ]0n         ])Pb                  P                   ]1n         R-R' lt2R( t3R) t4R# ).a�  
An NLTK interface for WordNet

WordNet is a lexical database of English.
Using synsets, helps find conceptual relationships between words
such as hypernyms, hyponyms, synonyms, antonyms etc.

For details about WordNet see:
https://wordnet.princeton.edu/

This module also allows you to find lemmas in languages
other than English from the Open Multilingual Wordnet
https://omwn.org/

N)ÚdefaultdictÚdeque)Útotal_ordering)ÚchainÚislice)Ú
itemgetter)ÚCorpusReader)Ú
deprecated)ÚFreqDist)Úmap_tag)Úbinary_search_filegœu ˆ<ä7~ÚaÚrÚnÚvÚNOUNÚVERBÚADJÚADVz	\.[\d]+\.c                   ó   € ] tR t^‚tRtRtR# )ÚWordNetErrorz.An exception class for wordnet-related errors.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    Ú</usr/lib/python3/dist-packages/nltk/corpus/reader/wordnet.pyr   r   ‚   s   † Ý8r   r   c                   óÌ   a € ] tR t^†t o RtR tR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR t Rt!V t"R# ) Ú_WordNetObjectz+A common base class for lemmas and synsets.c                ó$   € V P                  R 4      # ©Ú@©Ú_related©Úselfs   &r   Ú	hypernymsÚ_WordNetObject.hypernymsŠ   ó   € Ø�}‰}˜SÓ!Ð!r   c                ó$   € V P                  R 4      # r#   r%   r'   s   &r   Ú
_hypernymsÚ_WordNetObject._hypernyms�   r+   r   c                ó$   € V P                  R 4      # ©z@ir%   r'   s   &r   Úinstance_hypernymsÚ!_WordNetObject.instance_hypernyms�   ó   € Ø�}‰}˜TÓ"Ð"r   c                ó$   € V P                  R 4      # r0   r%   r'   s   &r   Ú_instance_hypernymsÚ"_WordNetObject._instance_hypernyms“   r3   r   c                ó$   € V P                  R 4      # )Ú~r%   r'   s   &r   ÚhyponymsÚ_WordNetObject.hyponyms–   r+   r   c                ó$   € V P                  R 4      # )z~ir%   r'   s   &r   Úinstance_hyponymsÚ _WordNetObject.instance_hyponyms™   r3   r   c                ó$   € V P                  R 4      # )z#mr%   r'   s   &r   Úmember_holonymsÚ_WordNetObject.member_holonymsœ   r3   r   c                ó$   € V P                  R 4      # )z#sr%   r'   s   &r   Úsubstance_holonymsÚ!_WordNetObject.substance_holonymsŸ   r3   r   c                ó$   € V P                  R 4      # )z#pr%   r'   s   &r   Úpart_holonymsÚ_WordNetObject.part_holonyms¢   r3   r   c                ó$   € V P                  R 4      # )z%mr%   r'   s   &r   Úmember_meronymsÚ_WordNetObject.member_meronyms¥   r3   r   c                ó$   € V P                  R 4      # )z%sr%   r'   s   &r   Úsubstance_meronymsÚ!_WordNetObject.substance_meronyms¨   r3   r   c                ó$   € V P                  R 4      # )z%pr%   r'   s   &r   Úpart_meronymsÚ_WordNetObject.part_meronyms«   r3   r   c                ó$   € V P                  R 4      # )z;cr%   r'   s   &r   Útopic_domainsÚ_WordNetObject.topic_domains®   r3   r   c                ó$   € V P                  R 4      # )z-cr%   r'   s   &r   Úin_topic_domainsÚ_WordNetObject.in_topic_domains±   r3   r   c                ó$   € V P                  R 4      # )z;rr%   r'   s   &r   Úregion_domainsÚ_WordNetObject.region_domains´   r3   r   c                ó$   € V P                  R 4      # )z-rr%   r'   s   &r   Úin_region_domainsÚ _WordNetObject.in_region_domains·   r3   r   c                ó$   € V P                  R 4      # )z;ur%   r'   s   &r   Úusage_domainsÚ_WordNetObject.usage_domainsº   r3   r   c                ó$   € V P                  R 4      # )z-ur%   r'   s   &r   Úin_usage_domainsÚ_WordNetObject.in_usage_domains½   r3   r   c                ó$   € V P                  R 4      # )Ú=r%   r'   s   &r   Ú
attributesÚ_WordNetObject.attributesÀ   r+   r   c                ó$   € V P                  R 4      # )Ú*r%   r'   s   &r   ÚentailmentsÚ_WordNetObject.entailmentsÃ   r+   r   c                ó$   € V P                  R 4      # )Ú>r%   r'   s   &r   ÚcausesÚ_WordNetObject.causesÆ   r+   r   c                ó$   € V P                  R 4      # )Ú^r%   r'   s   &r   Ú	also_seesÚ_WordNetObject.also_seesÉ   r+   r   c                ó$   € V P                  R 4      # )Ú$r%   r'   s   &r   Úverb_groupsÚ_WordNetObject.verb_groupsÌ   r+   r   c                ó$   € V P                  R 4      # )Ú&r%   r'   s   &r   Úsimilar_tosÚ_WordNetObject.similar_tosÏ   r+   r   c                ó,   € \        V P                  4      # ©N)ÚhashÚ_namer'   s   &r   Ú__hash__Ú_WordNetObject.__hash__Ò   s   € Ü�D—J‘JÓÐr   c                ó4   € V P                   VP                   8H  # r{   ©r}   ©r(   Úothers   &&r   Ú__eq__Ú_WordNetObject.__eq__Õ   ó   € Ø�z‰z˜UŸ[™[Ñ(Ð(r   c                ó4   € V P                   VP                   8g  # r{   r�   r‚   s   &&r   Ú__ne__Ú_WordNetObject.__ne__Ø   r†   r   c                ó4   € V P                   VP                   8  # r{   r�   r‚   s   &&r   Ú__lt__Ú_WordNetObject.__lt__Û   s   € Ø�z‰z˜EŸK™KÑ'Ð'r   r   N)#r   r   r   r   r   r)   r-   r1   r5   r9   r<   r?   rB   rE   rH   rK   rN   rQ   rT   rW   rZ   r]   r`   rd   rh   rl   rp   rt   rx   r~   r„   rˆ   r‹   r   Ú__classdictcell__©Ú__classdict__s   @r   r!   r!   †   s™   ø‡ € á5ò"ò"ò#ò#ò"ò#ò#ò#ò#ò#ò#ò#ò#ò#ò#ò#ò#ò#ò"ò"ò"ò"ò"ò"ò ò)ò)÷(ð (r   r!   c                   ó€   a € ] tR t^ßt o Rt. ROtR tR tR tR t	R t
R tR tR	 tR
 tR tR tR tR tR tRtV tR# )ÚLemmaa  
The lexical entry for a single morphological form of a
sense-disambiguated word.

Create a Lemma from a "<word>.<pos>.<number>.<lemma>" string where:
<word> is the morphological stem identifying the synset
<pos> is one of the module attributes ADJ, ADJ_SAT, ADV, NOUN or VERB
<number> is the sense number, counting from 0.
<lemma> is the morphological form of interest

Note that <word> and <lemma> can be different, e.g. the Synset
'salt.n.03' has the Lemmas 'salt.n.03.salt', 'salt.n.03.saltiness' and
'salt.n.03.salinity'.

Lemma attributes, accessible via methods with the same name:

- name: The canonical name of this lemma.
- synset: The synset that this lemma belongs to.
- syntactic_marker: For adjectives, the WordNet string identifying the
  syntactic position relative modified noun. See:
  https://wordnet.princeton.edu/documentation/wninput5wn
  For all other parts of speech, this attribute is None.
- count: The frequency of this lemma in wordnet.

Lemma methods:

Lemmas have the following methods for retrieving related Lemmas. They
correspond to the names for the pointer symbols defined here:
https://wordnet.princeton.edu/documentation/wninput5wn
These methods all return lists of Lemmas:

- antonyms
- hypernyms, instance_hypernyms
- hyponyms, instance_hyponyms
- member_holonyms, substance_holonyms, part_holonyms
- member_meronyms, substance_meronyms, part_meronyms
- topic_domains, region_domains, usage_domains
- attributes
- derivationally_related_forms
- entailments
- causes
- also_sees
- verb_groups
- similar_tos
- pertainyms
c                ó†   € Wn         W0n        W`n        W n        . V n        . V n        W@n        WPn        R V n        RV n	        R# )ÚengN©
Ú_wordnet_corpus_readerr}   Ú_syntactic_markerÚ_synsetÚ_frame_stringsÚ
_frame_idsÚ_lexname_indexÚ_lex_idÚ_langÚ_key)r(   Úwordnet_corpus_readerÚsynsetÚnameÚlexname_indexÚlex_idÚsyntactic_markers   &&&&&&&r   Ú__init__ÚLemma.__init__  sB   € ð '<Ô#ØŒ
Ø!1ÔØŒØ ˆÔØˆŒØ+ÔØŒØˆŒ
àˆŽ	r   c                ó   € V P                   # r{   r�   r'   s   &r   r    Ú
Lemma.name1  ó   € Ø�z‰zÐr   c                ó   € V P                   # r{   )r–   r'   s   &r   r£   ÚLemma.syntactic_marker4  s   € Ø×%Ñ%Ð%r   c                ó   € V P                   # r{   )r—   r'   s   &r   rŸ   ÚLemma.synset7  ó   € Ø�|‰|Ðr   c                ó   € V P                   # r{   )r˜   r'   s   &r   Úframe_stringsÚLemma.frame_strings:  s   € Ø×"Ñ"Ð"r   c                ó   € V P                   # r{   ©r™   r'   s   &r   Ú	frame_idsÚLemma.frame_ids=  ó   € Ø�‰Ðr   c                ó   € V P                   # r{   )rœ   r'   s   &r   ÚlangÚ
Lemma.lang@  r¨   r   c                ó   € V P                   # r{   )r�   r'   s   &r   ÚkeyÚ	Lemma.keyC  ó   € Ø�y‰yÐr   c                ó€   € \        V 4      P                  V P                  P                  V P                  3pR V,          # )z%s('%s.%s'))Útyper   r—   r}   )r(   Útups   & r   Ú__repr__ÚLemma.__repr__F  s1   € Ü�4‹j×!Ñ! 4§<¡<×#5Ñ#5°t·z±zÐAˆØ˜sÕ"Ð"r   c           	     ó<  € V P                   P                  pV P                  V3V P                  P                  9  d   . # V P                  P                  V P                  V3,           UUUu. uF  w  r4pV! W44      P
                  V,          NK!  	  uppp# u upppi r{   )r•   Úsynset_from_pos_and_offsetr}   r—   Ú_lemma_pointersÚ_lemmas)r(   Úrelation_symbolÚ
get_synsetÚposÚoffsetÚlemma_indexs   &&    r   r&   ÚLemma._relatedJ  s‘   € Ø×0Ñ0×KÑKˆ
Ø�J‰J˜Ð(°·±×0LÑ0LÔLØˆIð -1¯L©L×,HÑ,HØ—
‘
˜OÐ+ö-õ
ñ-Ñ(�˜[ñ �sÓ#×+Ñ+¨K×8Ð8ñ-ó
ð 	
ùô 
s   Á-%Bc                ó8   € V P                   P                  V 4      # )ú)Return the frequency count for this Lemma)r•   Úlemma_countr'   s   &r   ÚcountÚLemma.countU  s   € à×*Ñ*×6Ñ6°tÓ<Ð<r   c                ó$   € V P                  R 4      # )Ú!r%   r'   s   &r   ÚantonymsÚLemma.antonymsY  r+   r   c                ó$   € V P                  R 4      # )Ú+r%   r'   s   &r   Úderivationally_related_formsÚ"Lemma.derivationally_related_forms\  r+   r   c                ó$   € V P                  R 4      # )Ú\r%   r'   s   &r   Ú
pertainymsÚLemma.pertainyms_  r3   r   )
r™   r˜   r�   rœ   r›   rš   r}   r—   r–   r•   Nr”   )r   r   r   r   r   Ú	__slots__r¤   r    r£   rŸ   r¯   r³   r·   rº   rÀ   r&   rÏ   rÓ   r×   rÛ   r   r�   rŽ   s   @r   r‘   r‘   ß   s]   ø‡ € ñ-ò^€Iòò*ò&òò#òòòò#ò	
ò=ò"ò"÷#ð #r   r‘   c                   óD  a € ] tR tRt o Rt. R'OtR tR tR tR t	R t
R(R ltR(R	 ltR(R
 ltR tR tR(R ltR(R ltR tR tR tR)R lt^ RIHt ^ RIHt R*R ltR tR tR+R ltR,R ltR t R-R lt!R.R lt"R.R lt#R.R lt$R-R  lt%R-R! lt&R-R" lt'R# t(R$ t)R% t*R&t+V t,R# )/ÚSynsetic  aÆ  Create a Synset from a "<lemma>.<pos>.<number>" string where:
<lemma> is the word's morphological stem
<pos> is one of the module attributes ADJ, ADJ_SAT, ADV, NOUN or VERB
<number> is the sense number, counting from 0.

Synset attributes, accessible via methods with the same name:

- name: The canonical name of this synset, formed using the first lemma
  of this synset. Note that this may be different from the name
  passed to the constructor if that string used a different lemma to
  identify the synset.
- pos: The synset's part of speech, matching one of the module level
  attributes ADJ, ADJ_SAT, ADV, NOUN or VERB.
- lemmas: A list of the Lemma objects for this synset.
- definition: The definition for this synset.
- examples: A list of example strings for this synset.
- offset: The offset in the WordNet dict file of this synset.
- lexname: The name of the lexicographer file containing this synset.

Synset methods:

Synsets have the following methods for retrieving related Synsets.
They correspond to the names for the pointer symbols defined here:
https://wordnet.princeton.edu/documentation/wninput5wn
These methods all return lists of Synsets.

- hypernyms, instance_hypernyms
- hyponyms, instance_hyponyms
- member_holonyms, substance_holonyms, part_holonyms
- member_meronyms, substance_meronyms, part_meronyms
- attributes
- entailments
- causes
- also_sees
- verb_groups
- similar_tos

Additionally, Synsets support the following methods specific to the
hypernym relation:

- root_hypernyms
- common_hypernyms
- lowest_common_hypernyms

Note that Synsets do not support the following relations because
these are defined by WordNet as lexical relations:

- antonyms
- derivationally_related_forms
- pertainyms
c                óî   € Wn         R V n        R V n        R V n        . V n        . V n        . V n        R V n        . V n        R V n	        R V n
        \        \        4      V n        \        \        4      V n        R # r{   )r•   Ú_posÚ_offsetr}   r™   rÅ   Ú_lemma_namesÚ_definitionÚ	_examplesÚ_lexnameÚ_all_hypernymsr   ÚsetÚ	_pointersÚlistrÄ   )r(   rž   s   &&r   r¤   ÚSynset.__init__¨  sl   € Ø&;Ô#ð ˆŒ	ØˆŒØˆŒ
ØˆŒØˆŒØˆÔØˆÔØˆŒØˆŒØ"ˆÔä$¤SÓ)ˆŒÜ*¬4Ó0ˆÖr   c                ó   € V P                   # r{   )rá   r'   s   &r   rÈ   Ú
Synset.pos»  r¼   r   c                ó   € V P                   # r{   )râ   r'   s   &r   rÉ   ÚSynset.offset¾  r­   r   c                ó   € V P                   # r{   r�   r'   s   &r   r    ÚSynset.nameÁ  r¨   r   c                ó   € V P                   # r{   r²   r'   s   &r   r³   ÚSynset.frame_idsÄ  rµ   r   c                óT  € V P                   pW4P                  4       9  d   R# VR8X  d   V# VP                  V4       VP                  V 4      pVP                  P                  V4      pWTP                  V,          V,          9   d"   VP                  V,          V,          V,          # R# )z7Helper method for Synset.definition and Synset.examplesNr“   )r•   ÚlangsÚ_load_lang_dataÚss2ofÚlg_attrsÚindexÚ
_lang_data)r(   Údoc_typeÚdefaultr·   ÚcorpusÚofÚis   &&&&   r   Ú_docÚSynset._docÇ  sŒ   € à×,Ñ,ˆØ—|‘|“~Ô%ÙØ�UŒ]ØˆNà×"Ñ" 4Ô(Ø—‘˜dÓ#ˆBØ—‘×%Ñ% hÓ/ˆAØ×&Ñ& tÕ,¨QÕ/Ô/Ø×(Ñ(¨Õ.¨qÕ1°"Õ5Ð5ár   c                ó>   € V P                  RV P                  VR7      # )z'Return definition in specified languageÚdef©r·   )r   rä   ©r(   r·   s   &&r   Ú
definitionÚSynset.definition×  s   € à�y‰y˜ × 0Ñ 0°tˆyÓ<Ð<r   c                ó>   € V P                  RV P                  VR7      # )z%Return examples in specified languageÚexer  )r   rå   r  s   &&r   ÚexamplesÚSynset.examplesÛ  s   € à�y‰y˜ §¡°TˆyÓ:Ð:r   c                ó   € V P                   # r{   )ræ   r'   s   &r   ÚlexnameÚSynset.lexnameß  s   € Ø�}‰}Ðr   c                ór   € V P                   \        8X  d"   V P                  P                  4       R 8w  d   R# R# )z1.6FT)rá   r   r•   Úget_versionr'   s   &r   Ú_needs_rootÚSynset._needs_rootâ  s*   € Ø�9‰9œÔ ×!<Ñ!<×!HÑ!HÓ!JÈeÔ!SÙár   c                ó  € VR8X  d   V P                   # V P                  pVP                  V4       VP                  V 4      pW2P                  V,          ^ ,          9   d"   VP                  V,          ^ ,          V,          # . # )z5Return all the lemma_names associated with the synsetr“   )rã   r•   rö   r÷   rú   )r(   r·   Úreaderrÿ   s   &&  r   Úlemma_namesÚSynset.lemma_namesè  sr   € à�5Œ=Ø×$Ñ$Ð$à×0Ñ0ˆFØ×"Ñ" 4Ô(Ø—‘˜TÓ"ˆAØ×%Ñ% dÕ+¨AÕ.Ô.Ø×(Ñ(¨Õ.¨qÕ1°!Õ4Ð4à�	r   c           
     ó†  € VR8X  d   V P                   # V P                  '       dœ   V P                  P                  V4       . pV P	                  V4      pV Fe  p\        V P                  V VV P                  P                  P                  V P                  4       4      ^ R4      pWn	        VP                  V4       Kg  	  V# R# )z7Return all the lemma objects associated with the synsetr“   N)rÅ   r}   r•   rö   r  r‘   Ú	_lexnamesrù   r  rœ   Úappend)r(   r·   ÚlemmarkÚlemmyÚlemÚtemps   &&    r   ÚlemmasÚSynset.lemmasõ  s­   € à�5Œ=Ø—<‘<ÐØ�Z�ZˆZØ×'Ñ'×7Ñ7¸Ô=ØˆGØ×$Ñ$ TÓ*ˆEÛ�ÜØ×/Ñ/ØØØ×/Ñ/×9Ñ9×?Ñ?ÀÇÁÃÓOØØó�ð "”
Ø—‘˜tÖ$ñ ð ˆNñ r   c                ó,  € . p\        4       pV .pV'       d}   VP                  4       pWB9  g   K   VP                  V4       VP                  4       VP	                  4       ,           pV'       g   VP                  V4       Kq  VP                  V4       K„  V# )z4Get the topmost hypernyms of this synset in WordNet.)rè   ÚpopÚaddr)   r1   r  Úextend)r(   ÚresultÚseenÚtodoÚnext_synsetÚnext_hypernymss   &     r   Úroot_hypernymsÚSynset.root_hypernyms
  sx   € ð ˆÜ‹uˆØˆvˆßØŸ(™(›*ˆKØÖ&Ø—‘˜Ô%à×)Ñ)Ó+¨k×.LÑ.LÓ.NÕNð ÷ &Ø—M‘M +Ö.à—K‘K Ö/Øˆr   c                óø   € RV P                   9  d_   V P                  4       V P                  4       ,           pV'       g   ^ V n        V P                  # ^\	        R V 4       4      ,           V n        V P                  # )zT
:return: The length of the longest hypernym path from this
    synset to the root.
Ú
_max_depthc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir{   ©Ú	max_depth©Ú.0Úhs   & r   Ú	<genexpr>Ú#Synset.max_depth.<locals>.<genexpr>0  ó   é € Ð)KÁ¸A¯+©+¯-¨-Ãùó   ‚)Ú__dict__r)   r1   r,  Úmax©r(   r)   s   & r   r/  ÚSynset.max_depth%  óc   € ð ˜tŸ}™}Ô,ØŸ™Ó(¨4×+BÑ+BÓ+DÕDˆIßØ"#�”ð �‰Ðð #$¤cÑ)KÁÓ)KÓ&KÕ"K�”Ø�‰Ðr   c                óø   € RV P                   9  d_   V P                  4       V P                  4       ,           pV'       g   ^ V n        V P                  # ^\	        R V 4       4      ,           V n        V P                  # )zU
:return: The length of the shortest hypernym path from this
    synset to the root.
Ú
_min_depthc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir{   ©Ú	min_depthr0  s   & r   r3  Ú#Synset.min_depth.<locals>.<genexpr>>  r5  r6  )r7  r)   r1   r=  Úminr9  s   & r   r@  ÚSynset.min_depth3  r;  r   c              #  óR   "  € ^ RI Hp V! WV4       F  pW@8w  g   K  Vx € K  	  R# 5i)a  
Return the transitive closure of source under the rel
relationship, breadth-first, discarding cycles:

>>> from nltk.corpus import wordnet as wn
>>> computer = wn.synset('computer.n.01')
>>> topic = lambda s:s.topic_domains()
>>> print(list(computer.closure(topic)))
[Synset('computer_science.n.01')]

UserWarning: Discarded redundant search for Synset('computer.n.01') at depth 2


Include redundant paths (but only once), avoiding duplicate searches
(from 'animal.n.01' to 'entity.n.01'):

>>> dog = wn.synset('dog.n.01')
>>> hyp = lambda s:sorted(s.hypernyms())
>>> print(list(dog.closure(hyp)))
[Synset('canine.n.02'), Synset('domestic_animal.n.01'), Synset('carnivore.n.01'), Synset('animal.n.01'), Synset('placental.n.01'), Synset('organism.n.01'), Synset('mammal.n.01'), Synset('living_thing.n.01'), Synset('vertebrate.n.01'), Synset('whole.n.02'), Synset('chordate.n.01'), Synset('object.n.01'), Synset('physical_entity.n.01'), Synset('entity.n.01')]

UserWarning: Discarded redundant search for Synset('animal.n.01') at depth 7
)Úacyclic_breadth_firstN)Ú	nltk.utilrE  )r(   ÚrelÚdepthrE  rŸ   s   &&&  r   ÚclosureÚSynset.closureA  s%   é € õ: 	4á+¨D°uÖ=ˆFØŽ~Ø”ó >ùs   ‚'�
')Úacyclic_depth_first)Ú unweighted_minimum_spanning_treeNc                ó    € ^ RI Hp V! WW#4      # )a  
Return the full relation tree, including self,
discarding cycles:

>>> from nltk.corpus import wordnet as wn
>>> from pprint import pprint
>>> computer = wn.synset('computer.n.01')
>>> topic = lambda s:sorted(s.topic_domains())
>>> pprint(computer.tree(topic))
[Synset('computer.n.01'), [Synset('computer_science.n.01')]]

UserWarning: Discarded redundant search for Synset('computer.n.01') at depth -3


But keep duplicate branches (from 'animal.n.01' to 'entity.n.01'):

>>> dog = wn.synset('dog.n.01')
>>> hyp = lambda s:sorted(s.hypernyms())
>>> pprint(dog.tree(hyp))
[Synset('dog.n.01'),
 [Synset('canine.n.02'),
  [Synset('carnivore.n.01'),
   [Synset('placental.n.01'),
    [Synset('mammal.n.01'),
     [Synset('vertebrate.n.01'),
      [Synset('chordate.n.01'),
       [Synset('animal.n.01'),
        [Synset('organism.n.01'),
         [Synset('living_thing.n.01'),
          [Synset('whole.n.02'),
           [Synset('object.n.01'),
            [Synset('physical_entity.n.01'),
             [Synset('entity.n.01')]]]]]]]]]]]]],
 [Synset('domestic_animal.n.01'),
  [Synset('animal.n.01'),
   [Synset('organism.n.01'),
    [Synset('living_thing.n.01'),
     [Synset('whole.n.02'),
      [Synset('object.n.01'),
       [Synset('physical_entity.n.01'), [Synset('entity.n.01')]]]]]]]]]
)Úacyclic_branches_depth_first)rF  rN  )r(   rG  rH  Úcut_markrN  s   &&&& r   ÚtreeÚSynset.treej  s   € õV 	;á+¨D°uÓGÐGr   c                ó   € . pV P                  4       V P                  4       ,           p\        V4      ^ 8X  d   V ..pV F<  pVP                  4        F%  pVP	                  V 4       VP	                  V4       K'  	  K>  	  V# )zý
Get the path(s) from this synset to the root, where each path is a
list of the synset nodes traversed on the way to the root.

:return: A list of lists, where each list gives the node sequence
   connecting the initial ``Synset`` node and a root node.
)r)   r1   ÚlenÚhypernym_pathsr  )r(   Úpathsr)   ÚhypernymÚancestor_lists   &    r   rT  ÚSynset.hypernym_paths™  sv   € ð ˆà—N‘NÓ$ t×'>Ñ'>Ó'@Õ@ˆ	Üˆy‹>˜QÔØ�V�HˆEã!ˆHØ!)×!8Ñ!8Ö!:�Ø×$Ñ$ TÔ*Ø—‘˜]Ö+ó ";ñ "ð ˆr   c                ó~  € V P                   '       g1   V P                  4        UUu0 uF  pV F  pVkK  	  K  	  uppV n         VP                   '       g1   VP                  4        UUu0 uF  pV F  pVkK  	  K  	  uppVn         \        V P                   P                  VP                   4      4      # u uppi u uppi )zº
Find all synsets that are hypernyms of this synset and the
other synset.

:type other: Synset
:param other: other input synset.
:return: The synsets that are hypernyms of both synsets.
)rç   Ú_iter_hypernym_listsrê   Úintersection)r(   rƒ   Úself_synsetsÚself_synsetÚother_synsetsÚother_synsets   &&    r   Úcommon_hypernymsÚSynset.common_hypernyms­  s¼   € ð ×"×"Ð"ð %)×$=Ñ$=Ô$?ô#á$?�LÛ#/�Kó á#/ñ Ù$?ò#ˆDÔð
 ×#×#Ð#ð &+×%?Ñ%?Ô%Aô$á%A�MÛ$1�Ló á$1ñ Ù%Aò$ˆEÔ ô
 �D×'Ñ'×4Ñ4°U×5IÑ5IÓJÓKÐKùó#ùó$s   ¦B3Á(B9c                óâ  € V P                  V4      pV'       d4   \        R4      pRVn        R Vn        R Vn        VP                  V4        V'       d;   \        R V 4       4      pV Uu. uF  qwP                  4       V8X  g   K  VNK  	  ppM9\        R V 4       4      pV Uu. uF  qwP                  4       V8X  g   K  VNK  	  pp\        V4      # u upi u upi   \         d    . u # i ; i)a>  
Get a list of lowest synset(s) that both synsets have as a hypernym.
When `use_min_depth == False` this means that the synset which appears
as a hypernym of both `self` and `other` with the lowest maximum depth
is returned or if there are multiple such synsets at the same depth
they are all returned

However, if `use_min_depth == True` then the synset(s) which has/have
the lowest minimum depth and appear(s) in both paths is/are returned.

By setting the use_min_depth flag to True, the behavior of NLTK2 can be
preserved. This was changed in NLTK3 to give more accurate results in a
small set of cases, generally with synsets concerning people. (eg:
'chef.n.01', 'fireman.n.01', etc.)

This method is an implementation of Ted Pedersen's "Lowest Common
Subsumer" method from the Perl Wordnet module. It can return either
"self" or "other" if they are a hypernym of the other.

:type other: Synset
:param other: other input synset
:type simulate_root: bool
:param simulate_root: The various verb taxonomies do not
    share a single root which disallows this metric from working for
    synsets that are not connected. This flag (False by default)
    creates a fake root that connects all the taxonomies. Set it
    to True to enable this behavior. For the noun taxonomy,
    there is usually a default root except for WordNet version 1.6.
    If you are using wordnet 1.6, a fake root will need to be added
    for nouns as well.
:type use_min_depth: bool
:param use_min_depth: This setting mimics older (v2) behavior of NLTK
    wordnet If True, will use the min_depth function to calculate the
    lowest common hypernyms. This is known to give strange results for
    some synset pairs (eg: 'chef.n.01', 'fireman.n.01') but is retained
    for backwards compatibility
:return: The synsets that are the lowest common hypernyms of both
    synsets
Nú*ROOT*c                  ó   € . # r{   r   r   r   r   Ú<lambda>Ú0Synset.lowest_common_hypernyms.<locals>.<lambda>ð  s   € ©Br   c                  ó   € . # r{   r   r   r   r   re  rf  ñ  s   € ±Rr   c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir{   r?  ©r1  Úss   & r   r3  Ú1Synset.lowest_common_hypernyms.<locals>.<genexpr>ö  ó   é € Ð?±w°!§¡§ ³wùr6  c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir{   r.  ri  s   & r   r3  rk  ù  rl  r6  )r`  rß   r}   r)   r1   r  r8  r@  r/  ÚsortedÚ
ValueError)	r(   rƒ   Úsimulate_rootÚuse_min_depthÚsynsetsÚfake_synsetr/  rj  Úunsorted_lchs	   &&&&     r   Úlowest_common_hypernymsÚSynset.lowest_common_hypernymsÄ  sÜ   € ðP ×'Ñ'¨Ó.ˆßÜ  ›,ˆKØ (ˆKÔÙ$.ˆKÔ!Ù-7ˆKÔ*Ø�N‰N˜;Ô'ð		ßÜÑ?±wÓ?Ó?�	Ù+2ÓQ©7 a·k±k³mÀyÑ6P§ ©7�ÐQ�äÑ?±wÓ?Ó?�	Ù+2ÓQ©7 a·k±k³mÀyÑ6P§ ©7�ÐQÜ˜,Ó'Ð'ùò	  Rùò  Røäô 	ØŠIð	úsB   ÁC ÁC Á,CÂCÂC Â&CÃCÃC Ã
C ÃC.Ã-C.c                óF  € W30pV P                  4       V P                  4       ,            F#  pW4P                  V^,           RR7      ,          pK%  	  V'       dI   \        R4      pRVn        \        V\        ^4      R7      ^,          pVP                  WV^,           34       V# )a°  
Get the path(s) from this synset to the root, counting the distance
of each node from the initial node on the way. A set of
(synset, distance) tuples is returned.

:type distance: int
:param distance: the distance (number of edges) from this hypernym to
    the original hypernym ``Synset`` on which this method was called.
:return: A set of ``(Synset, int)`` tuples where each ``Synset`` is
   a hypernym of the first ``Synset``.
F©rp  Nrc  )rº   )r-   r5   Úhypernym_distancesrß   r}   r8  r   r"  )r(   Údistancerp  Ú	distancesrV  rs  Úfake_synset_distances   &&&    r   ry  ÚSynset.hypernym_distancesÿ  s“   € ð Ð%Ð&ˆ	ØŸ™Ó)¨D×,DÑ,DÓ,F×FÐFˆHØ×4Ñ4°XÀµ\ÐQVÐ4ÓWÕWŠIñ GçÜ  ›,ˆKØ (ˆKÔÜ#& y´jÀ³mÔ#DÀQÕ#GÐ Ø�M‰M˜;¸qÕ(@ÐAÔBØÐr   c                óÒ  a€ V P                   R 8X  d   V ^ /# \        V ^ 3.4      p/ pV'       d}   VP                  4       w  poWC9   d   K#  SW4&   S^,          oVP                  V3R lVP	                  4        4       4       VP                  V3R lVP                  4        4       4       K„  V'       d5   \        R4      pR Vn         \        VP                  4       4      ^,           W5&   V# )rc  c              3   ó*   <"  € T F  qS3x € K
  	  R # 5ir{   r   ©r1  ÚhyprH  s   & €r   r3  Ú2Synset._shortest_hypernym_paths.<locals>.<genexpr>#  s   øé € Ð@±¨#˜u�³ùó   ƒc              3   ó*   <"  € T F  qS3x € K
  	  R # 5ir{   r   r€  s   & €r   r3  r‚  $  s   øé € ÐIÑ1H¨#˜u�Ó1Hùrƒ  N)	r}   r   Úpopleftr#  r-   r5   rß   r8  Úvalues)r(   rp  ÚqueueÚpathrj  rs  rH  s   &&    @r   Ú_shortest_hypernym_pathsÚSynset._shortest_hypernym_paths  s¼   ø€ Ø�:‰:˜Ô!Ø˜!�9Ðä˜˜a�y�kÓ"ˆØˆçØ—}‘}“‰HˆAˆuØŒyÙØˆD‰Gà�Q�JˆEØ�L‰LÔ@°·±´Ó@Ô@Ø�L‰LÔI°×1FÑ1FÔ1HÓIÖIçÜ  ›,ˆKØ (ˆKÔÜ # D§K¡K£MÓ 2°QÕ 6ˆDÑàˆr   c                ó(  € W8X  d   ^ # V P                  V4      pVP                  V4      p\        R4      pTpVP                  4        F(  w  rxVP                  Wu4      p	\	        WhV	,           4      pK*  	  \
        P                  ! V4      '       d   R# T# )a>  
Returns the distance of the shortest path linking the two synsets (if
one exists). For each synset, all the ancestor nodes and their
distances are recorded and compared. The ancestor node common to both
synsets that can be reached with the minimum number of traversals is
used. If no ancestor nodes are common, None is returned. If a node is
compared with itself 0 is returned.

:type other: Synset
:param other: The Synset to which the shortest path will be found.
:return: The number of edges in the shortest path connecting the two
    nodes, or None if no path exists.
ÚinfN)r‰  ÚfloatÚitemsÚgetrB  ÚmathÚisinf)
r(   rƒ   rp  Ú
dist_dict1Ú
dist_dict2rŒ  Úpath_distancerŸ   Úd1Úd2s
   &&&       r   Úshortest_path_distanceÚSynset.shortest_path_distance-  sˆ   € ð Œ=Ùà×2Ñ2°=ÓAˆ
Ø×3Ñ3°MÓBˆ
ô
 �E‹lˆØˆØ$×*Ñ*Ö,‰JˆFØ—‘ Ó,ˆBÜ °B­wÓ7ŠMñ -ô —z’z -×0Ò0ˆtÐC°mÐCr   c                óÂ   € T P                  TT;'       d)    V P                  4       ;'       g    VP                  4       R7      pVe   V^ 8  d   R# RV^,           ,          # )aê  
Path Distance Similarity:
Return a score denoting how similar two word senses are, based on the
shortest path that connects the senses in the is-a (hypernym/hypnoym)
taxonomy. The score is in the range 0 to 1, except in those cases where
a path cannot be found (will only be true for verbs as there are many
distinct verb taxonomies), in which case None is returned. A score of
1 represents identity i.e. comparing a sense with itself will return 1.

:type other: Synset
:param other: The ``Synset`` that this ``Synset`` is being compared to.
:type simulate_root: bool
:param simulate_root: The various verb taxonomies do not
    share a single root which disallows this metric from working for
    synsets that are not connected. This flag (True by default)
    creates a fake root that connects all the taxonomies. Set it
    to false to disable this behavior. For the noun taxonomy,
    there is usually a default root except for WordNet version 1.6.
    If you are using wordnet 1.6, a fake root will be added for nouns
    as well.
:return: A score denoting the similarity of the two ``Synset`` objects,
    normally between 0 and 1. None is returned if no connecting path
    could be found. 1 is returned if a ``Synset`` is compared with
    itself.
rx  Nç      ð?)r—  r  )r(   rƒ   Úverboserp  rz  s   &&&& r   Úpath_similarityÚSynset.path_similarityN  sa   € ð6 ×.Ñ.ØØ'×WÐW¨T×-=Ñ-=Ó-?×-VÐ-VÀ5×CTÑCTÓCVð /ó 
ˆð Ò˜x¨!œ|ÙØ�h •lÕ#Ð#r   c                ó  € V P                   VP                   8w  d   \        RV : RV: R24      hV P                  4       pV P                   V P                  P                  9  d'   V P                  P                  V P                   V4       V P                  P                  V P                   ,          pT P                  Y;'       d    TR7      pVe   V^ 8  g   V^ 8X  d   R# \        P                  ! V^,           RV,          ,          4      ) # )aª  
Leacock Chodorow Similarity:
Return a score denoting how similar two word senses are, based on the
shortest path that connects the senses (as above) and the maximum depth
of the taxonomy in which the senses occur. The relationship is given as
-log(p/2d) where p is the shortest path length and d is the taxonomy
depth.

:type  other: Synset
:param other: The ``Synset`` that this ``Synset`` is being compared to.
:type simulate_root: bool
:param simulate_root: The various verb taxonomies do not
    share a single root which disallows this metric from working for
    synsets that are not connected. This flag (True by default)
    creates a fake root that connects all the taxonomies. Set it
    to false to disable this behavior. For the noun taxonomy,
    there is usually a default root except for WordNet version 1.6.
    If you are using wordnet 1.6, a fake root will be added for nouns
    as well.
:return: A score denoting the similarity of the two ``Synset`` objects,
    normally greater than 0. None is returned if no connecting path
    could be found. If a ``Synset`` is compared with itself, the
    maximum score is returned, which varies depending on the taxonomy
    depth.
z&Computing the lch similarity requires ú and ú! to have the same part of speech.rx  Nç       @)	rá   r   r  r•   r,  Ú_compute_max_depthr—  r�  Úlog)r(   rƒ   r›  rp  Ú	need_rootrH  rz  s   &&&&   r   Úlch_similarityÚSynset.lch_similarityq  sÞ   € ð6 �9‰9˜Ÿ
™
Ô"Ýã@DÃeðMóð ð
 ×$Ñ$Ó&ˆ	à�9‰9˜D×7Ñ7×BÑBÔBØ×'Ñ'×:Ñ:¸4¿9¹9ÀiÔPà×+Ñ+×6Ñ6°t·y±yÕAˆà×.Ñ.Ø×!<Ð!<°9ð /ó 
ˆð Ò˜x¨!œ|¨u¸¬zÙÜ—’˜( Q�,¨3°­;Õ7Ó8Ð8Ð8r   c                óÐ  € V P                  4       ;'       g    VP                  4       pT P                  Y;'       d    TRR7      p\        V4      ^ 8X  d   R# W9   d   T MV^ ,          pVP                  4       ^,           pT P	                  Yc;'       d    TR7      pTP	                  Yc;'       d    TR7      p	Ve   V	f   R# W‡,          pW—,          p	RV,          W‰,           ,          # )a¼  
Wu-Palmer Similarity:
Return a score denoting how similar two word senses are, based on the
depth of the two senses in the taxonomy and that of their Least Common
Subsumer (most specific ancestor node). Previously, the scores computed
by this implementation did _not_ always agree with those given by
Pedersen's Perl implementation of WordNet Similarity. However, with
the addition of the simulate_root flag (see below), the score for
verbs now almost always agree but not always for nouns.

The LCS does not necessarily feature in the shortest path connecting
the two senses, as it is by definition the common ancestor deepest in
the taxonomy, not closest to the two senses. Typically, however, it
will so feature. Where multiple candidates for the LCS exist, that
whose shortest path to the root node is the longest will be selected.
Where the LCS has multiple paths to the root, the longer path is used
for the purposes of the calculation.

:type  other: Synset
:param other: The ``Synset`` that this ``Synset`` is being compared to.
:type simulate_root: bool
:param simulate_root: The various verb taxonomies do not
    share a single root which disallows this metric from working for
    synsets that are not connected. This flag (True by default)
    creates a fake root that connects all the taxonomies. Set it
    to false to disable this behavior. For the noun taxonomy,
    there is usually a default root except for WordNet version 1.6.
    If you are using wordnet 1.6, a fake root will be added for nouns
    as well.
:return: A float score denoting the similarity of the two ``Synset``
    objects, normally greater than zero. If no connecting path between
    the two senses can be found, None is returned.

T)rp  rq  Nrx  r¡  )r  ru  rS  r/  r—  )
r(   rƒ   r›  rp  r¤  Ú	subsumersÚsubsumerrH  Úlen1Úlen2s
   &&&&      r   Úwup_similarityÚSynset.wup_similarity¡  sï   € ðF ×$Ñ$Ó&×=Ð=¨%×*;Ñ*;Ó*=ˆ	ð
 ×0Ñ0Ø×!<Ð!<°9ÈDð 1ó 
ˆ	ô
 ˆy‹>˜QÔÙàÔ,‘4°)¸Aµ,ˆð ×"Ñ"Ó$ qÕ(ˆð ×*Ñ*Ø×$?Ð$?°ið +ó 
ˆð ×+Ñ+Ø×$?Ð$?°ið ,ó 
ˆð Š<˜4š<ÙØ�ˆØ�ˆØ�e• ¥Õ,Ð,r   c                ó$   € \        WV4      w  rEpV# )aA  
Resnik Similarity:
Return a score denoting how similar two word senses are, based on the
Information Content (IC) of the Least Common Subsumer (most specific
ancestor node).

:type  other: Synset
:param other: The ``Synset`` that this ``Synset`` is being compared to.
:type ic: dict
:param ic: an information content object (as returned by
    ``nltk.corpus.wordnet_ic.ic()``).
:return: A float score denoting the similarity of the two ``Synset``
    objects. Synsets whose LCS is the root node of the taxonomy will
    have a score of 0 (e.g. N['dog'][0] and N['table'][0]).
©Ú_lcs_ic©r(   rƒ   Úicr›  Úic1Úic2Úlcs_ics   &&&&   r   Úres_similarityÚSynset.res_similarityî  s   € ô" # 4°Ó3Ñˆ�&Øˆr   c                ó°   € W8X  d   \         # \        WV4      w  rEpV^ 8X  g   V^ 8X  d   ^ # WE,           ^V,          ,
          pV^ 8X  d   \         # ^V,          # )aF  
Jiang-Conrath Similarity:
Return a score denoting how similar two word senses are, based on the
Information Content (IC) of the Least Common Subsumer (most specific
ancestor node) and that of the two input Synsets. The relationship is
given by the equation 1 / (IC(s1) + IC(s2) - 2 * IC(lcs)).

:type  other: Synset
:param other: The ``Synset`` that this ``Synset`` is being compared to.
:type  ic: dict
:param ic: an information content object (as returned by
    ``nltk.corpus.wordnet_ic.ic()``).
:return: A float score denoting the similarity of the two ``Synset``
    objects.
)Ú_INFr°  )r(   rƒ   r²  r›  r³  r´  rµ  Úic_differences   &&&&    r   Újcn_similarityÚSynset.jcn_similarity  sY   € ð" Œ=ÜˆKä" 4°Ó3Ñˆ�&ð �!Œ8�s˜a”xÙà�	 A¨¥JÕ.ˆà˜AÔÜˆKà�=Õ Ð r   c                óL   € \        WV4      w  rEpRV,          WE,           ,          # )aK  
Lin Similarity:
Return a score denoting how similar two word senses are, based on the
Information Content (IC) of the Least Common Subsumer (most specific
ancestor node) and that of the two input Synsets. The relationship is
given by the equation 2 * IC(lcs) / (IC(s1) + IC(s2)).

:type other: Synset
:param other: The ``Synset`` that this ``Synset`` is being compared to.
:type ic: dict
:param ic: an information content object (as returned by
    ``nltk.corpus.wordnet_ic.ic()``).
:return: A float score denoting the similarity of the two ``Synset``
    objects, in the range 0 to 1.
r¡  r¯  r±  s   &&&&   r   Úlin_similarityÚSynset.lin_similarity$  s&   € ô" # 4°Ó3Ñˆ�&Ø�f• ¥Õ+Ð+r   c              #  ó  "  € V .p\        4       pV'       dh   V F  pVP                  V4       K  	  Vx € V UUu. uF9  pVP                  4       VP                  4       ,            F  pWB9  g   K  VNK  	  K;  	  pppKo  R# u uppi 5i)zw
:return: An iterator over ``Synset`` objects that are either proper
hypernyms or instance of hypernyms of the synset.
N)rè   r"  r)   r1   )r(   r&  r%  rŸ   rV  s   &    r   rZ  ÚSynset._iter_hypernym_lists8  s�   é € ð
 ˆvˆÜ‹uˆßÛ�Ø—‘˜Ö ñ àŠJñ #ôá"�FØ!'×!1Ñ!1Ó!3°f×6OÑ6OÓ6Q×!QÐ!Q�HØÑ'÷ �á!Qñ Ù"ð ñ ‰Dñ	 ùóùs   ‚B˜#B»0BÁ0
BÁ:Bc                óL   € \        V 4      P                   R V P                   R2# )z('z'))r¾   r   r}   r'   s   &r   rÀ   ÚSynset.__repr__J  s$   € Ü�t“*×%Ñ%Ð& b¨¯©¨°BÐ7Ð7r   c                ó¾   € V P                   P                  pWP                  9  d   . # V P                  V,          pV UUu. uF  w  rEV! WE4      NK  	  pppV# u uppi r{   )r•   rÃ   ré   )r(   rÆ   rÇ   Úpointer_tuplesrÈ   rÉ   r   s   &&     r   r&   ÚSynset._relatedM  sV   € Ø×0Ñ0×KÑKˆ
Ø§.¡.Ô0ØˆIØŸ™¨Õ8ˆÙ8FÔG¹©¨‰Z˜Ö$¹ˆÑGØˆùó Hs   ÁA)rç   rä   rå   r™   rã   rÄ   rÅ   ræ   r,  r=  r}   râ   ré   rá   r•   )rá   râ   r}   r™   rÅ   rã   rä   rå   ræ   ré   rÄ   r,  r=  ©r“   )éÿÿÿÿ)rÈ  N)FF)é    F©F©FT)-r   r   r   r   r   rÝ   r¤   rÈ   rÉ   r    r³   r   r  r
  r  r  r  r  r)  r/  r@  rI  rF  rK  Úacyclic_treerL  ÚmstrP  rT  r`  ru  ry  r‰  r—  rœ  r¥  r¬  r¶  r»  r¾  rZ  rÀ   r&   r   r�   rŽ   s   @r   rß   rß   c  sË   ø‡ € ñ2òh€Iò 1ò&òòòôô =ô;òòôôò*ò6òô!õF >ÝAô
-Hò^ò(Lô.9ôvò,ô0DôB!$ôF.9ô`K-ôZô( !ôD,ò(ò$8÷ð r   rß   c            
       ó  a a€ ] tR tRt oRtRtRCw  tttt	t
]R]R]	R]
R/t]	^]
^]^]^]^/t]! R ]P                  4        4       4      tRDtV 3R	 ltRER ltRFR ltRFR ltRFR ltRFR ltRFR ltR tR tR tR tR tR tR tR tR t R t!R t"R t#RGR lt$R t%R t&R  t'R! t(])! R"4      R# 4       t*R$ t+R% t,RHR& lt-RIR' lt.RIR( lt/RJR) lt0RIR* lt1RER+ lt2RGR, lt3RGR- lt4RKR. lt5RGR/ lt6RGR0 lt7RGR1 lt8R2 t9RLR4 lt:];Pt                  P                  ]:n        RLR5 lt<];Px                  P                  ]<n        RLR6 lt=];Pz                  P                  ]=n        RMR7 lt>];P|                  P                  ]>n        RMR8 lt?];P~                  P                  ]?n        RMR9 lt@];P€                  P                  ]@n        RNR: ltA]	. ROO]
. RPO]. RQO]. /tB]B],          ]B]&   RRR; ltCRSR< ltDRTR= ltER> tFR? tGR@ R
RUR
R
R33RA ltHRBtIVtJV ;tK# )VÚWordNetCorpusReaderi[  z9
A corpus reader used to access wordnet or its variants.
Úutf8ÚadjÚadvÚnounÚverbc              #  ó8   "  € T F  qR R R1,          x € K  	  R # 5i©NrÈ  r   )r1  r¿   s   & r   r3  ÚWordNetCorpusReader.<genexpr>l  s   é € Ð@Ñ+? C™$˜B˜$—i’iÓ+?ùs   ‚c                óÖ  <€ \         S	V `  WP                  V P                  R7       \	        \
        4      V n        \	        \
        4      V n        \	        \
        4      V n        W n	        RV n
        \	        \        4      V n        RV P                  R&   V P                  f   \        P                  ! R4       \        4       V n        \	        \"        4      V n        / V n        / V n        . V n        RV n        RV n        V P1                  R4      ;_uu_ 4       p\3        V4       FE  w  rEVP5                  4       w  rgp\7        V4      V8X  g   Q hV P*                  P9                  V4       KG  	  RRR4       V P;                  4        V P=                  4        V P?                  4        / V n         / V n!        / V n"        V PG                  4       V n$        . ROV n%        R#   + '       g   i     Lu; i)zG
Construct a new wordnet corpus reader, with the given root
directory.
©ÚencodingNÚ r“   zFThe multilingual functions are not available with this Wordnet versionÚlexnames)Úlemmarþ   r  r	  )&Úsuperr¤   Ú_FILESÚ	_ENCODINGr   ÚdictÚ_lemma_pos_offset_mapÚ_synset_offset_cacher,  Ú_omw_readerÚ_exomw_readerÚstrÚprovenancesÚwarningsÚwarnrè   Ú	omw_langsrê   rú   Ú_data_file_mapÚ_exception_mapr  Ú_key_count_fileÚ_key_synset_fileÚopenÚ	enumerateÚsplitÚintr  Ú_scan_satellitesÚ_load_lemma_pos_offset_mapÚ_load_exception_mapÚnomapÚsplitsÚmergesÚmap_wnÚmap30rø   )
r(   ÚrootÚ
omw_readerÚfprÿ   Úlinerù   r  Ú_Ú	__class__s
   &&&      €r   r¤   ÚWordNetCorpusReader.__init__ƒ  s�  ø€ ô 	‰Ñ˜Ÿ{™{°T·^±^ÐÔDô &1´Ó%6ˆÔ"ô %0´Ó$5ˆÔ!ô &¤dÓ+ˆŒð &Ôð "ˆÔä&¤sÓ+ˆÔØ"$ˆ×Ñ˜Ñà×ÑÒ#Ü�MŠMØXôô ›ˆŒô &¤dÓ+ˆŒà ˆÔØ ˆÔØˆŒØ#ˆÔØ $ˆÔð �Y‰Y�z×"Ô" bÜ$ Rž=‘�Ø$(§J¡J£LÑ!� Ü˜5“z Q”Ð&�Ø—‘×%Ñ% gÖ.ñ )÷ #ð 	×ÑÔð 	×'Ñ'Ô)ð 	× Ñ Ô"àˆŒ
ØˆŒØˆŒð —[‘[“]ˆŒ
ò 6ˆŽ÷/ #×"ús   ÄAGÇG(	Nc           	     óÐ  € RpV'       d   ^ RI HpHp V! WRV,           4      pMT pVP                  V4      ;_uu_ 4       p/ pV F‚  pVP	                  4       P                  4       p	V	^ ,          p
V P                  \        V
P                  R4      ^,          P                  R4      ^ ,          4      ,          pV	^,           RV 2Wz&   K„  	  RRR4       V#   + '       g   i     X# ; i)zMRead sense key to synset id mapping from index.sense file in corpus directoryúindex.sense)r   ÚLazyCorpusLoaderz.*/Ú%Ú:Ú-N)Únltk.corpusr   r  rï  Ústriprñ  Ú
_pos_namesrò  )r(   ÚversionÚfnr   r  Úixreaderrý  Úsensekey_maprþ  ÚfieldsÚsensekeyrÈ   s   &&          r   Úindex_senseÚWordNetCorpusReader.index_senseÊ  sÅ   € àˆßßBá'¨¸vÈ½{ÓK‰HàˆHØ�]‰]˜2×Ô "ØˆLÛ�ØŸ™›×+Ñ+Ó-�Ø! !�9�Ø—o‘o¤c¨(¯.©.¸Ó*=¸aÕ*@×*FÑ*FÀsÓ*KÈAÕ*NÓ&OÕP�Ø,2°1­I¨;°a¸°uÐ)=�Ó&ñ	 ÷ ð Ð÷ Öð Ðús   ¿BCÃC%	c                ón  € V P                  V4      pV P                  4       p/ p\        VP                  4       4       F  p. WE&   K	  	  \        VP                  4       4      P	                  \        VP                  4       4      4       F*  pW&,          pW6,          pWG,          P                  V4       K,  	  V# r{   )r  rè   r†  Úkeysr[  r  )	r(   r  Úsensekey_map1Úsensekey_map2Úsynset_to_manyÚsynsetidr  ÚsourceÚtargets	   &&       r   Úmap_to_manyÚWordNetCorpusReader.map_to_manyÜ  s¤   € Ø×(Ñ(¨Ó1ˆØ×(Ñ(Ó*ˆØˆÜ˜M×0Ñ0Ó2Ö3ˆHØ')ˆNÓ$ñ 4ä˜M×.Ñ.Ó0Ó1×>Ñ>Ü�×"Ñ"Ó$Ó%ö
ˆHð #Õ,ˆFØ"Õ,ˆFØÕ"×)Ñ)¨&Ö1ñ
ð Ðr   c                ó   € \        4       V P                  V&   / V P                  V&   V P                  V4      p/ pV FÎ  pW$,          pV'       dš   \        V4      p\	        V4      ^8X  d   V^ ,          pMT. pV F%  p	VP                  VP                  V	4      V	34       K'  	  W€P                  V,          V&   \        V4      ^,          pWsV&   VR,          R8X  d   WsVRR  R2&   Kª  K¬  V P                  V,          P                  V4       KÐ  	  V# )é   rj  Nr   rÈ  )	rè   rö  r÷  r  rS  r  rÏ   r8  r"  )
r(   r  r  Úsynset_to_oner  Úcandidates_bagÚcandidates_setr  ÚcountsÚ	candidates
   &&        r   Ú
map_to_oneÚWordNetCorpusReader.map_to_oneê  s  € Ü!›eˆ�
‰
�7ÑØ!ˆ�‰�GÑØ×)Ñ)¨'Ó2ˆØˆÛ$ˆFØ+Õ3ˆNßÜ!$ ^Ó!4�Ü�~Ó&¨!Ô+Ø+¨AÕ.‘Fà�FÛ%3˜	ØŸ™ ~×';Ñ';¸IÓ'FÈ	Ð&RÖSñ &4à39—K‘K Õ(¨Ñ0Ü  ›[¨�^�FØ(.˜fÑ%Ø˜"•: Ô$ð 8> V¨C¨R [ M°Ð"3Ó4ñ %ð
 —
‘
˜7Õ#×'Ñ'¨Ö/ñ% %ð& Ðr   c                óR   € V P                  4       V8X  d   R# V P                  V4      # )zBMapping from Wordnet 'version' to currently loaded Wordnet versionN)r  r$  )r(   r  s   &&r   rù  ÚWordNetCorpusReader.map_wn  s%   € à×ÑÓ Ô(Ùà—?‘? 7Ó+Ð+r   c                ój   € WP                   9  d   V P                  V4      pV P                   V,          # r{   )r÷  r$  )r(   r  Ú_mymaps   && r   Úsplit_synsetsÚ!WordNetCorpusReader.split_synsets  s)   € ØŸ+™+Ô%Ø—_‘_ WÓ-ˆFØ�{‰{˜7Õ#Ð#r   c                óˆ  € WP                   9  d›   \        \        4      pV P                  V4      P	                  4        F%  w  r4V F  pW%,          P                  V4       K  	  K'  	  VP	                  4        UUu/ uF  w  rg\        V4      ^8”  g   K  WgbK  	  uppV P                   V&   V P                   V,          # u uppi )r  )rø  r   rè   r  rŽ  r"  rS  )r(   r  Úmerger  Útargetsr  ÚtrgÚsrcs   &&      r   Úmerged_synsetsÚ"WordNetCorpusReader.merged_synsets  s¡   € ØŸ+™+Ô%Ü¤Ó$ˆEØ#'×#3Ñ#3°GÓ#<×#BÑ#BÖ#D‘�Û%�FØ•M×%Ñ% fÖ-ó &ñ $Eð */¯©¬ô$Ù)6™X˜S¼#¸c»(ÀQ¹,”�’©ò$ˆD�K‰K˜Ñ ð �{‰{˜7Õ#Ð#ùó$s   Á;B>ÂB>c                óT   € V P                  VR,          \        VR,          4      4      # )z!take an id and return the synsetsºNé   NrÈ  )rÃ   rò  )r(   rþ   s   &&r   Úof2ssÚWordNetCorpusReader.of2ss  s!   € à×.Ñ.¨r°"­v´s¸2¸b½6³{ÓCÐCr   c                ó^   € V'       d%   VP                  4       R RVP                  4        2# R# )zreturn the ID of the synsetÚ08dr  N)rÉ   rÈ   )r(   Ússs   &&r   r÷   ÚWordNetCorpusReader.ss2of"  s*   € çØ—i‘i“k #Ð& a¨¯©« zÐ2Ð2ñ r   c           	     óx  € WP                   9   d   R# V P                  '       d#   V P                  '       g   V P                  4        WP	                  4       9  d   \        RV R24      hV P                  '       d   WP                  9  d   V P                  pMV P                  pV P                  V,          pVR	9   d   TpMRpVP                  V RV RVP                  R4      ^ ,           R24      ;_uu_ 4       pV P                  WQ4       RRR4       V P                  V4       R#   + '       g   i     L#; i)
zVload the wordnet data of the requested language from the file to
the cache, _lang_dataNú	Language ú is not supported.Údataz/wn-r  rÿ  ú.tab©ÚcldrÚwikt)rú   rä  rê  Úadd_omwrõ   r   rå  rç  rï  rñ  Úcustom_lemmasÚdisable_custom_lemmas)r(   r·   r  ÚprovÚprov2rý  s   &&    r   rö   Ú#WordNetCorpusReader._load_lang_data'  sû   € ð —?‘?Ô"Ùà××Ð D§N§N NØ�L‰LŒNà—z‘z“|Ô#Ü ¨4¨&Ð0BÐCÓDÐDà××Ð $¯n©nÔ"<Ø×'Ñ'‰Fà×%Ñ%ˆFà×Ñ Õ%ˆØÐ#Ô#Ø‰EàˆEà�[‰[˜D˜6  e W¨A¨d¯j©j¸«o¸aÕ.@Ð-AÀÐF×GÔGÈ2Ø×Ñ˜rÔ(÷ Hà×"Ñ" 4Ö(÷ H×Gús   Ã<D)Ä)D9	c                óV  € VP                  4       pV F’  p\        P                  P                  V4      w  rE\        P                  P	                  V4      w  rgVR8X  g   KN  VP                  R4      R,          pW€P
                  9   g   VR9   d   V RV 2pW@P
                  V&   K”  	  R# )zDAdd languages from Multilingual Wordnet to the provenance dictionaryr@  r  rÿ  NrÈ  rA  )ÚfileidsÚosrˆ  rñ  Úsplitextrç  )	r(   r  rK  ÚfileidrG  ÚlangfileÚ	file_nameÚfile_extensionr·   s	   &&       r   Ú	add_provsÚWordNetCorpusReader.add_provsC  s’   € à—.‘.Ó"ˆÛˆFÜŸW™WŸ]™]¨6Ó2‰NˆDÜ(*¯©×(8Ñ(8¸Ó(BÑ%ˆIØ Ö'Ø —‘ sÓ+¨BÕ/�Ø×+Ñ+Ô+¨tÐ7GÔ/Gð #˜V 1 T FÐ+�DØ)-× Ñ  Ó&ó r   c                óŒ   € V P                  V P                  4       \        V P                  P	                  4       4      V n        R # r{   )rR  rä  rè   rç  r  rê  r'   s   &r   rD  ÚWordNetCorpusReader.add_omwQ  s/   € Ø�‰�t×'Ñ'Ô(Ü˜T×-Ñ-×2Ñ2Ó4Ó5ˆŽr   c                ót   € ^ RI Hp V P                  4        Wn        V P	                  V P                  4       R# )zü
Add languages from Extended OMW

>>> import nltk
>>> from nltk.corpus import wordnet as wn
>>> wn.add_exomw()
>>> print(wn.synset('intrinsically.r.01').lemmas(lang="eng_wikt"))
[Lemma('intrinsically.r.01.per_se'), Lemma('intrinsically.r.01.as_such')]
)Úextended_omwN)r  rW  rD  rå  rR  )r(   rW  s   & r   Ú	add_exomwÚWordNetCorpusReader.add_exomwU  s(   € õ 	-à�‰ŒØ)ÔØ�‰�t×)Ñ)Ö*r   c                óH   € \        V P                  P                  4       4      # )z<return a list of languages supported by Multilingual Wordnet)rê   rç  r  r'   s   &r   rõ   ÚWordNetCorpusReader.langse  s   € ä�D×$Ñ$×)Ñ)Ó+Ó,Ð,r   c                óÎ  € V P                  \        4      p\        4       pVP                  ^ 4       V F—  pVP	                  4       '       d   VP                  R4      '       d   K2  VP	                  4       P                  4       p\        V4      ^8  d   Kb  V^ ,          pV^,          pVR8X  g   K}  VP                  \        V4      4       K™  	  VP                  ^ 4       W n
        R# )aT  
Scans the adjective data file and populates self.satellite_offsets with all adjective satellite synset offsets.

This method reads the adjective data file associated with the corpus reader,
identifies synsets of type 's' (adjective satellites), and adds their offsets
to the self.satellite_offsets set. The method does not return a value.
Ú rj  N)Ú
_data_filer   rè   Úseekr	  Ú
startswithrñ  rS  r"  rò  Úsatellite_offsets)r(   Úadj_data_filera  rþ  r  Úsynset_offsetÚsynset_types   &      r   ró  Ú$WordNetCorpusReader._scan_satellitesi  s³   € ð Ÿ™¬Ó,ˆÜ›EÐØ×Ñ˜1ÔÛ!ˆDØ—:‘:—<’< 4§?¡?°3×#7Ò#7ÙØ—Z‘Z“\×'Ñ'Ó)ˆFÜ�6‹{˜QŒÙØ" 1�IˆMØ  �)ˆKØ˜cÖ!Ø!×%Ñ%¤c¨-Ó&8Ö9ñ "ð 	×Ñ˜1ÔØ!2Ör   c                óú  a€ V P                   P                  4        EFw  pV P                  R V,          4      ;_uu_ 4       p\        V4       EF:  w  r4VP	                  R4      '       d   K  \        VP                  4       4      oV3R lp V! 4       pV! 4       p\        V! 4       4      pV^ 8”  g   Q h\        V! 4       4      p	\        V	4       U
u. uF	  q¥! 4       NK  	   p
\        V! 4       4      pW‹8X  g   Q hV! 4        \        V4       U
u. uF  p
\        V! 4       4      NK  	  pp
YÀP                  T,          T&   T\        8X  g   Ký  T Uu. uF  pYðP                  9   g   K  TNK  	  ppTT P                  T,          \        &   EK=  	  RRR4       EKz  	  R# u up
i u up
i   \        \        3 d,   pR T,          T^,           T3p\        RT,          4      ThRp?ii ; iu upi   + '       g   i     EKÞ  ; i)zindex.%sr]  c                  ó   <€ \        S 4      # r{   ©Únext©Ú_iters   €r   Ú_next_tokenÚCWordNetCorpusReader._load_lemma_pos_offset_map.<locals>._next_token‹  s   ø€ Ü# E›{Ð*r   zfile %s, line %i: %sN)Ú_FILEMAPr†  rï  rð  r`  Úiterrñ  rò  ÚrangeÚAssertionErrorro  r   râ  r   ra  ÚADJ_SAT)r(   Úsuffixrý  rÿ   rþ  rl  rÝ  rÈ   Ú	n_synsetsÚ
n_pointersrÿ  Ún_sensesÚsynset_offsetsÚer¿   rÉ   ra  rk  s   &                @r   rô  Ú.WordNetCorpusReader._load_lemma_pos_offset_map�  sÔ  ø€ Ø—m‘m×*Ñ*×,ˆFà—‘˜:¨Õ.×/Ô/°2Ü(¨Ÿ}‘G�AØ—‘ s×+Ò+Ù ä  §¡£Ó.�Eõ+ðPá +£˜Ù)›m˜ô %(©«Ó$6˜	Ø(¨1œ}Ð,˜}ô &)©«Ó%7˜
Ü05°jÔ0AÓBÑ0A¨1˜žÑ0AÑBô $'¡{£}Ó#5˜Ø(Ô4Ð4Ð4ñ $œô GLÈIÔFVÓ)WÑFVÀ¬#©k«mÖ*<ÑFV˜Ð)Wð >L×.Ñ.¨uÕ5°cÑ:Øœc–zñ
 +9ó-ñ +9 Ø%×)?Ñ)?Ñ?÷ #˜FÙ*8ð *ð -ð FW˜×2Ñ2°5Õ9¼'ÔBñe  -÷ 0Ò/ó -ùò0 Cùò *Xøô +¬JÐ7ô PØ)¨FÕ2°a¸!µe¸aÐ?˜Ü*Ð+AÀCÕ+GÓHÈaÐOûðPüò-÷Y 0×/Ñ/úsh   Á A
G(ÂAF$ÃFÃ.F$ÄFÄ%F$Ä'G(Å	G(ÅG#Å$G#Å*!G(Æ
F$Æ$G Æ5&GÇG Ç G(Ç(G:c                ó®  € V P                   P                  4        Fz  w  r/ V P                  V&   V P                  R V,          4      ;_uu_ 4       pV F7  pVP	                  4       pVR,          V P                  V,          V^ ,          &   K9  	  RRR4       K|  	  V P                  \
        ,          V P                  \        &   R#   + '       g   i     K¹  ; i)z%s.exc:r  NNN)rn  rŽ  rì  rï  rñ  r   rr  )r(   rÈ   rs  rý  rþ  Útermss   &     r   rõ  Ú'WordNetCorpusReader._load_exception_map¹  s¤   € àŸ=™=×.Ñ.Ö0‰KˆCØ')ˆD×Ñ Ñ$Ø—‘˜8 fÕ,×-Ô-°Û�DØ ŸJ™J›L�EØ9>¸r½�D×'Ñ'¨Õ,¨U°1­XÓ6ñ ÷ .Ñ-ñ 1ð (,×':Ñ':¼3Õ'?ˆ×ÑœGÓ$÷	 .×-Ð-ús   Á>CÃCc                óæ   € ^ pV P                  V4       F  p \        W4P                  4       4      pK  	  V'       d
   V^,          pW0P
                  V&   R#   \         d    \	        T4        K[  i ; i)za
Compute the max depth for the given part of speech.  This is
used by the lch similarity metric.
N)Úall_synsetsr8  r/  ÚRuntimeErrorÚprintr,  )r(   rÈ   rp  rH  Úiis   &&&  r   r¢  Ú&WordNetCorpusReader._compute_max_depthÃ  se   € ð
 ˆØ×"Ñ" 3Ö'ˆBðÜ˜E§<¡<£>Ó2’ñ (÷
 Ø�Q�JˆEØ$�‰˜Óøô	  ô Ü�b—	ðús   ˜AÁA0Á/A0c                óæ   € V P                  \        4      pVP                  ^ 4       V FD  p\        P                  ! RV4      pVf   K   VP                  ^4      pVP                  ^ 4       Vu # 	  R# )rÉ  z#Word[nN]et (\d+|\d+\.\d+) CopyrightN)r^  r   r_  ÚreÚsearchÚgroup)r(   Úfhrþ  Úmatchr  s   &    r   r  ÚWordNetCorpusReader.get_versionÒ  sY   € Ø�_‰_œSÓ!ˆØ
�‰�Œ
ÛˆDÜ—I’IÐDÀdÓKˆEØÔ ØŸ+™+ a›.�Ø—‘˜”
Ø’ó r   c                ó  € \         P                  V4      P                  4       pVRV^,
           WR rTV P                  V4      pVP	                  V4       F  pVP
                  V8X  g   K  Vu # 	  \        RV: RV: 24      h)z)Return lemma object that matches the nameNú	No lemma z in )ÚSENSENUM_REr…  ÚendrŸ   r  r}   r   )r(   r    r·   Ú	separatorÚsynset_nameÚ
lemma_namerŸ   rÝ  s   &&&     r   rÝ  ÚWordNetCorpusReader.lemmaà  s€   € ô  ×&Ñ& tÓ,×0Ñ0Ó2ˆ	à"& ¨°Q­Ð"7¸¸jÐ9I�Zà—‘˜[Ó)ˆØ—]‘] 4Ö(ˆEØ�{‰{˜jÖ(Ø’ñ )ô ˜Y z¡n°D¸¹ÐHÓIÐIr   c                ó*  € VP                  4       pVP                  R 4      w  r#VP                  R4      w  rEp pV P                  \        V4      ,          pV P                  f   V P                  R4      V n        \        V P                  V4      p	V	'       g   \        RV,          4      h\        V	P                  4       ^,          4      p
V P                  WŠ4      pVP                   F  pVP                  V8X  g   K  Vu # 	  \        RV,          4      h)r  r  r  zNo synset found for key %rzNo lemma found for for key %r)Úlowerrñ  r
  rò  rî  rï  Ú_binary_search_filer   rÃ   rÅ   r�   )r(   rº   r�  Ú	lex_senseÚ
pos_numberr¡   r¢   rÿ  rÈ   Úsynset_linerÉ   rŸ   rÝ  s   &&           r   Úlemma_from_keyÚ"WordNetCorpusReader.lemma_from_keyî  sç   € à�i‰i‹kˆà #§	¡	¨#£Ñˆ
Ø2;·/±/À#Ó2FÑ/ˆ
 6¨1¨aØ�o‰oœc *›oÕ.ˆð × Ñ Ò(Ø$(§I¡I¨mÓ$<ˆDÔ!ô *¨$×*?Ñ*?ÀÓEˆßÜÐ;¸cÕAÓBÐBÜ�[×&Ñ&Ó(¨Õ+Ó,ˆØ×0Ñ0°Ó=ˆà—^”^ˆEØ�z‰z˜SÖ Ø’ñ $ô Ð:¸SÕ@ÓAÐAr   c                óx  € VP                  4       P                  R ^4      w  r#p\        V4      ^,
          p V P                  V,          V,          V,          pT P                  Y64      p	TR	8X  d%   T	P                  R
8X  d   Rp
\        Y¢,          4      hT	P                  T8X  g   TR
8X  d   T	P                  R	8X  g   Q hT	#   \         d   p\        RT: RT: 24      ThRp?i\         dL   p\        T P                  T,          T,          4      p\        RT: RT: RT RT^8X  d   RMR 24      ThRp?ii ; i)Ú.r‹  z with part of speech NzLemma z
 only has r]  ÚsenseÚsensesrj  r   zIAdjective satellite requested but only plain adjective found for lemma %r)
r“  Úrsplitrò  râ  ÚKeyErrorr   Ú
IndexErrorrS  rÃ   rá   )r(   r    rÝ  rÈ   Úsynset_index_strÚsynset_indexrÉ   rx  rv  rŸ   Úmessages   &&         r   rŸ   ÚWordNetCorpusReader.synset	  sI  € à'+§z¡z£|×':Ñ':¸3ÀÓ'BÑ$ˆÐ$ÜÐ+Ó,¨qÕ0ˆð		Ø×/Ñ/°Õ6°sÕ;¸LÕIˆFð ×0Ñ0°Ó=ˆð �#Œ:˜&Ÿ+™+¨Ô,ð/ð ô ˜w�Ó/Ð/Ø�{‰{˜cÔ! c¨S¤j°V·[±[ÀCÔ5GÐHÐHð ˆøô- ô 	YÜ ¨5©)Ð3HÈÉÐPÓQÐWXÐXûÜô 	Ü˜4×5Ñ5°eÕ<¸SÕAÓBˆHÜØ˜™	Ð!6°s±gð >Ø�j ¨X¸¬]¡'ÀÐ!IðKóð ðûð	ús*   ·!C ÃD9ÃC Ã D9Ã-D9Ã.AD4Ä4D9c                óô   € V\         8X  d   \        pV P                  P                  V4      f9   RV P                  V,          ,          pV P                  V4      V P                  V&   V P                  V,          # )zM
Return an open file pointer for the data file for the given
part of speech.
údata.%s)rr  r   rë  r�  rn  rï  )r(   rÈ   rN  s   && r   r^  ÚWordNetCorpusReader._data_file)  sd   € ð
 ”'Œ>ÜˆCØ×Ñ×"Ñ" 3Ó'Ò/Ø §¡¨sÕ!3Õ3ˆFØ'+§y¡y°Ó'8ˆD×Ñ Ñ$Ø×"Ñ" 3Õ'Ð'r   c                óF  € W P                   V,          9   d   V P                   V,          V,          # V P                  V4      pVP                  V4       VP                  4       pVR,          pVP	                  4       '       do   VR^\        \        V4      4      ,
          ,           \        V4       28X  d;   V P                  W4      pVP                  V8X  g   Q hW`P                   V,          V&   MRp\        P                  ! RV RV R24       VP                  ^ 4       V# )aX  
- pos: The synset's part of speech, matching one of the module level
  attributes ADJ, ADJ_SAT, ADV, NOUN or VERB ('a', 's', 'r', 'n', or 'v').
- offset: The byte offset of this synset in the WordNet dict file
  for this pos.

>>> from nltk.corpus import wordnet as wn
>>> print(wn.synset_from_pos_and_offset('n', 1740))
Synset('entity.n.01')
r4  Ú0Nz No WordNet synset found for pos=z at offset=r›  )rã  r^  r_  ÚreadlineÚisalnumrS  ræ  Ú_synset_from_pos_and_linerâ   rè  ré  )r(   rÈ   rÉ   Ú	data_fileÚdata_file_lineÚline_offsetrŸ   s   &&&    r   rÃ   Ú.WordNetCorpusReader.synset_from_pos_and_offset5  sý   € ð ×.Ñ.¨sÕ3Ô3Ø×,Ñ,¨SÕ1°&Õ9Ð9à—O‘O CÓ(ˆ	Ø�‰�vÔØ"×+Ñ+Ó-ˆà$ RÕ(ˆà×Ñ×!Ò!Ø # q¬¬S°«[Ó)9Õ'9Õ":Ð!;¼CÀ»K¸=ÐIÔIà×3Ñ3°CÓHˆFØ—>‘> VÔ+Ð+Ð+Ø5;×%Ñ% cÕ*¨6Ò2àˆFÜ�MŠMÐ<¸S¸EÀÈVÈHÐTUÐVÔWØ�‰�qÔØˆr   z6Use public method synset_from_pos_and_offset() insteadc                ó&   € V P                   ! V/ VB # )zœ
Hack to help people like the readers of
https://stackoverflow.com/a/27145655/1709587
who were using this function before it was officially a public method
)rÃ   )r(   ÚargsÚkwargss   &*,r   Ú_synset_from_pos_and_offsetÚ/WordNetCorpusReader._synset_from_pos_and_offsetV  s   € ð ×.Ò.°Ð?¸Ñ?Ð?r   c           	     ó  a'€ \        V 4      p VP                  4       P                  R 4      w  rE\        P                  ! RRV4      P                  4       p\        P
                  ! RV4      pV F  pVP                  P                  V4       K   	  VP                  R4      Vn        \        VP                  4       4      o'V'3R lp	\        V	! 4       4      Vn        \        V	! 4       4      p
V P                  V
,          Vn        V	! 4       Vn        \        V	! 4       ^4      p\        V4       F“  pV	! 4       p\        V	! 4       ^4      p\        P                   ! RV4      pVP#                  4       w  pp\%        WWÚVV4      pVP&                  P                  V4       VP(                  P                  VP*                  4       K•  	  \        V	! 4       4      p\        V4       FÑ  pV	! 4       p\        V	! 4       4      pV	! 4       pV	! 4       pVR8X  d'   VP,                  V,          P/                  VV34       KU  \        VR,          ^4      ^,
          p\        VR	,          ^4      ^,
          pVP&                  V,          P*                  pVP0                  pVVV3,          pVP                  VVV34       KÓ  	   \        V	! 4       4      p\        V4       EF!  pV	! 4       pVR
8X  g   Q h\        V	! 4       4      p\2        V,          p\        V	! 4       ^4      pV^ 8X  dx   VP4                  P                  V4       VP&                   FJ  pVP4                  P                  V4       VP6                  P                  VVP*                  ,          4       KL  	  KÀ  VP&                  V^,
          ,          pVP4                  P                  V4       VP6                  P                  VVP*                  ,          4       EK$  	  TP&                   FÅ  pTP                  \>        8X  dI   TPA                  4       ^ ,          P&                  ^ ,          p!T!P*                  p"RT!PB                  ,          p#MR;p"p#TP*                  \D        PF                  TP                  ,          TPH                  TPB                  T"T#3p$RT$,          PK                  4       Tn&        KÇ  	  TP&                  ^ ,          P*                  PK                  4       pT PN                  T,          TP                  ,          p%T%PQ                  TP                  4      p&YÓP                  T&^,           3p$RT$,          Tn        T#   \8         d     ELri ; i  \:         d   p \=        RT: RT  24      T hRp ? ii ; i)Ú|z[\"].*?[\"]rÛ  z	"([^"]*)"z; c                  ó   <€ \        S 4      # r{   rh  rj  s   €r   rl  ÚBWordNetCorpusReader._synset_from_pos_and_line.<locals>._next_tokenq  s   ø€ Ü˜E“{Ð"r   z(.*?)(\(.*\))?$Ú0000ºNé   N:r¼  NNrÖ   zline z: Nz%02dz%s%%%d:%02d:%02d:%s:%sz
%s.%s.%02i))rß   r	  rñ  r„  ÚsubÚfindallrå   r  rä   ro  rò  râ   r  ræ   rá   rp  rˆ  Úgroupsr‘   rÅ   rã   r}   ré   r"  rÄ   ÚVERB_FRAME_STRINGSr™   r˜   ÚStopIterationro  r   rr  rx   r›   rÏ  Ú_pos_numbersrš   r“  r�   râ  rù   )(r(   rÈ   r®  rŸ   Úcolumns_strÚglossr  r
  Úexamplerl  r¡   Ún_lemmasrÿ  r�  r¢   ÚmÚsyn_markrÝ  ru  ÚsymbolrÉ   Úlemma_ids_strÚsource_indexÚtarget_indexÚsource_lemma_nameÚlemma_pointersÚtupsÚframe_countÚplusÚframe_numberÚframe_string_fmtÚlemma_numberrx  Ú
head_lemmaÚ	head_nameÚhead_idr¿   ÚoffsetsÚsense_indexrk  s(   &&&                                    @r   r¬  Ú-WordNetCorpusReader._synset_from_pos_and_line_  sš  ø€ ä˜“ˆðV	Gà!/×!5Ñ!5Ó!7×!=Ñ!=¸cÓ!BÑˆKÜŸš °°EÓ:×@Ñ@ÓBˆJÜ—z’z ,°Ó6ˆHÛ#�Ø× Ñ ×'Ñ'¨Ö0ñ $ð ",×!1Ñ!1°$Ó!7ˆFÔô ˜×*Ñ*Ó,Ó-ˆEõ#ô !¡£Ó/ˆFŒNô  ¡£Ó.ˆMØ"Ÿn™n¨]Õ;ˆFŒOñ &›-ˆFŒKô ™;›=¨"Ó-ˆHÜ˜8–_�á(›]�
ä™[›]¨BÓ/�ä—H’HÐ/°Ó<�Ø'(§x¡x£zÑ$�
˜Hä˜d¨JÀvÈxÓX�Ø—‘×%Ñ% eÔ,Ø×#Ñ#×*Ñ*¨5¯;©;Ö7ñ %ô ™[›]Ó+ˆJÜ˜:Ö&�Ù$›�Ü™[›]Ó+�Ù!“m�Ù +£�Ø  FÔ*Ø×$Ñ$ VÕ,×0Ñ0°#°v°Ö?ä#& }°RÕ'8¸"Ó#=ÀÕ#A�LÜ#& }°RÕ'8¸"Ó#=ÀÕ#A�LØ(.¯©°|Õ(D×(JÑ(JÐ%Ø%+×%;Ñ%;�NØ)Ð*;¸VÐ*CÕD�DØ—K‘K  f¨lÐ ;Ö<ñ 'ð TÜ!¡+£-Ó0�ô ˜{×+�Aá&›=�DØ 3œ;Ð&˜;ä#&¡{£}Ó#5�LÜ'9¸,Õ'GÐ$Ü#&¡{£}°bÓ#9�Là# qÔ(Ø×)Ñ)×0Ñ0°Ô>Ø%+§^¤^˜EØ!×,Ñ,×3Ñ3°LÔAØ!×0Ñ0×7Ñ7Ð8HÈ5Ï;É;Õ8VÖWó &4ð
 !'§¡¨|¸aÕ/?Õ @˜Ø×(Ñ(×/Ñ/°Ô=Ø×,Ñ,×3Ñ3Ð4DÀuÇ{Á{Õ4R×Sñ% ,ð4 —^”^ˆEØ�{‰{œgÔ%Ø#×/Ñ/Ó1°!Õ4×<Ñ<¸QÕ?�
Ø&×,Ñ,�	Ø  :×#5Ñ#5Õ5‘à&(Ð(�	˜Gà—‘Ü#×0Ñ0°·±Õ=Ø×$Ñ$Ø—‘ØØðˆCð 3°SÕ8×?Ñ?ÓAˆEŽJñ $ð$ —^‘^ AÕ&×,Ñ,×2Ñ2Ó4ˆ
Ø×,Ñ,¨ZÕ8¸¿¹ÕEˆØ—m‘m F§N¡NÓ3ˆØŸ+™+ {°Q¥Ð6ˆØ# cÕ)ˆŒàˆøôk !ô Úðûô0 ô 	GÜ  ~Ñ&8¸¸1¸#Ð>Ó?ÀQÐFûð	Gús=   ŽJ#U) Ê2U ËD1U) ÕU&Õ"U) Õ%U&Õ&U) Õ)VÕ4VÖVc                ó@   € V P                  V4      P                  4       # )a@  
Retrieves synset based on a given sense_key. Sense keys can be
obtained from lemma.key()

From https://wordnet.princeton.edu/documentation/senseidx5wn:
A sense_key is represented as::

    lemma % lex_sense (e.g. 'dog%1:18:01::')

where lex_sense is encoded as::

    ss_type:lex_filenum:lex_id:head_word:head_id

:lemma:       ASCII text of word/collocation, in lower case
:ss_type:     synset type for the sense (1 digit int)
              The synset type is encoded as follows::

                  1    NOUN
                  2    VERB
                  3    ADJECTIVE
                  4    ADVERB
                  5    ADJECTIVE SATELLITE
:lex_filenum: name of lexicographer file containing the synset for the sense (2 digit int)
:lex_id:      when paired with lemma, uniquely identifies a sense in the lexicographer file (2 digit int)
:head_word:   lemma of the first word in satellite's head synset
              Only used if sense is in an adjective satellite synset
:head_id:     uniquely identifies sense in a lexicographer file when paired with head_word
              Only used if head_word is present (2 digit int)

>>> import nltk
>>> from nltk.corpus import wordnet as wn
>>> print(wn.synset_from_sense_key("drive%1:04:03::"))
Synset('drive.n.06')

>>> print(wn.synset_from_sense_key("driving%1:04:03::"))
Synset('drive.n.06')
)r˜  rŸ   )r(   Ú	sense_keys   &&r   Úsynset_from_sense_keyÚ)WordNetCorpusReader.synset_from_sense_keyØ  s   € ðL ×"Ñ" 9Ó-×4Ñ4Ó6Ð6r   c                óH  € VP                  4       pVR8X  dw   V P                  pV P                  pVf   \        pV UUU	u. uFC  pV P	                  WV4       F*  pWh,          P                  V. 4       F  p	V! Wy4      NK  	  K,  	  KE  	  up	pp# V P                  V4       . p
WP                  V,          ^,          9   d]   V P                  V,          ^,          V,           F7  pVe   VR,          V8w  d   K  V
P                  V P                  V4      4       K9  	  V
# u up	ppi )zðLoad all synsets with a given lemma and part of speech tag.
If no pos is specified, all synsets for all parts of speech
will be loaded.
If lang is specified, all the synsets associated with the lemma name
of that language will be returned.
r“   rÈ  )
r“  rÃ   râ  ÚPOS_LISTÚ_morphyr�  rö   rú   r  r6  )r(   rÝ  rÈ   r·   Úcheck_exceptionsrÇ   rù   ÚpÚformrÉ   Úsynset_listÚls   &&&&&       r   rr  ÚWordNetCorpusReader.synsets  s  € ð —‘“ˆà�5Œ=Ø×8Ñ8ˆJØ×.Ñ.ˆEØŠ{Ü�ñ õá�AØ ŸL™L¨Ð3CÖD�DØ#�kŸo™o¨a°Ö4�Fñ ˜1Ö%ñ 5ñ &áDñ &Ùóð ð × Ñ  Ô&ØˆKØŸ™¨Õ-¨aÕ0Ô0ØŸ™¨Õ.¨qÕ1°%×8Ð8�AØ’¨1¨R­5°C¬<Ù Ø×&Ñ& t§z¡z°!£}Ö5ñ 9ð Ðùôs   Á A	Dc                ó.  € VP                  4       pVR8X  d`   V P                  W4       UUu. uFA  pVP                  4        F*  pVP                  4       P                  4       V8X  g   K(  VNK,  	  KC  	  upp# V P	                  V4       . pV P                  WR7      pV Fm  pVe   VP                  4       V8w  d   K  VP                  VR7       F9  pVP                  4       P                  4       V8X  g   K(  VP                  V4       K;  	  Ko  	  V# u uppi )z“Return all Lemma objects with a name matching the specified lemma
name and part of speech tag. Matches any part of speech tag if none is
specified.r“   r  )r“  rr  r  r    rö   rÈ   r  )	r(   rÝ  rÈ   r·   rŸ   Ú	lemma_objr  Úsynrj  s	   &&&&     r   r  ÚWordNetCorpusReader.lemmas#  sö   € ð
 —‘“ˆØ�5Œ=ð #Ÿl™l¨5Ô6ôá6�FØ!'§¡¦�IØ—>‘>Ó#×)Ñ)Ó+¨uÑ4÷ �	á!0ñ Ù6òð ð × Ñ  Ô&ØˆFØ—,‘,˜u�,Ó0ˆCÛ�Ø’? q§u¡u£w°#¤~ÙØ!"§¡¨t Ö!4�IØ —~‘~Ó'×-Ñ-Ó/°5Ö8ØŸ™ iÖ0ó "5ñ ð ˆMùó#s   ¬8DÁ)
Dc                ó�  a a€ VR8X  d1   Sf   \        S P                  4      # VV 3R lS P                   4       # S P                  V4       . pS P                  V,          ^ ,           FG  pSe   VR,          S8w  d   K  VP	                  S P                  V,          ^ ,          V,          4       KI  	  \        \        V4      4      pV# )z­Return all lemma names for all synsets for the given
part of speech tag and language or languages. If pos is
not specified, all synsets for all parts of speech will
be used.r“   c              3   ó\   <"  € T F!  pSSP                   V,          9   g   K  Vx € K#  	  R # 5ir{   )râ  )r1  rÝ  rÈ   r(   s   & €€r   r3  Ú6WordNetCorpusReader.all_lemma_names.<locals>.<genexpr>G  s-   øé € ð á!;˜Ø˜d×8Ñ8¸Õ?Ñ?÷ ’EÛ!;ùs   ƒ,¢
,rÈ  )ro  râ  rö   rú   r#  rè   )r(   rÈ   r·   rÝ  rÿ   s   ff&  r   Úall_lemma_namesÚ#WordNetCorpusReader.all_lemma_names=  s°   ù€ ð �5Œ=ØŠ{Ü˜D×6Ñ6Ó7Ð7õà!%×!;Ò!;óð ð × Ñ  Ô&ØˆEØ—_‘_ TÕ*¨1×-Ð-�Ø’? q¨¥u°¤|ÙØ—‘˜TŸ_™_¨TÕ2°1Õ5°aÕ8Ö9ñ .ô
 œ˜U›Ó$ˆEØˆLr   c              #  ó  "  € W P                  4       9  d   R # V P                  V4       V P                  V,          ^ ,           F:  pV'       d   VR,          V8X  g   K  V P                  V4      pV'       g   K6  Vx € K<  	  R # 5irÖ  )rõ   rö   rú   r6  )r(   rÈ   r·   rþ   r:  s   &&&  r   Úall_omw_synsetsÚ#WordNetCorpusReader.all_omw_synsetsW  sa   é € Ø—z‘z“|Ô#ÙØ×Ñ˜TÔ"Ø—/‘/ $Õ'¨×*Ð*ˆBß˜"˜R�& Cž-Ø—Z‘Z “^�ß‘2Ø”Hó	 +ùs   ‚ABÁBÁ:
Bc                óX   € VR8X  d   V P                  VR7      # V P                  WR7      # )z†Iterate over all synsets with a given part of speech tag.
If no pos is specified, all synsets for all parts of speech
will be loaded.
r“   )rÈ   )rÈ   r·   )Úall_eng_synsetsrò  )r(   rÈ   r·   s   &&&r   r~  ÚWordNetCorpusReader.all_synsetse  s3   € ð
 �5Œ=Ø×'Ñ'¨CÐ'Ó0Ð0à×'Ñ'¨CÐ'Ó;Ð;r   c              #  óü  "  € Vf   V P                   P                  4       pMV.pV P                  pV P                  pV EF   pV\        8X  d   \
        pMTpRV P                   V,          ,          pV P                  V4      p VP                  4       p	VP                  4       p
V
'       d¤   V
^ ,          P                  4       '       ge   W“V,          9   d   W5,          V	,          pMV! WZ4      pW³V,          V	&   V\        8X  d   VP                  \        8X  d   Vx € MV\        8w  d   Vx € VP                  4       p	VP                  4       p
K«   VP                  4        EK#  	  R #    TP                  4        h ; i5i)Nr¦  )rn  r  rã  r¬  rr  r   rï  Útellrª  Úisspacerá   Úclose)r(   rÈ   Úpos_tagsÚcacheÚfrom_pos_and_lineÚpos_tagÚpos_filerN  r­  rÉ   rþ  rŸ   s   &&          r   rõ  Ú#WordNetCorpusReader.all_eng_synsetso  sE  é € ØŠ;Ø—}‘}×)Ñ)Ó+‰Hà�uˆHà×)Ñ)ˆØ ×:Ñ:Ðô  ˆGð
 œ'Ô!Ü‘à"�Ø §¡¨xÕ!8Õ8ˆFØŸ	™	 &Ó)ˆIð"à"Ÿ™Ó)�Ø ×)Ñ)Ó+�ßØ �7Ÿ?™?×,Ò,Ø!¨7¥^Ô3à%*¥^°FÕ%;™Fñ &7°wÓ%E˜FØ5; '�N¨6Ñ2ð
 #¤gÔ-°&·+±+ÄÔ2HØ"(›Lð %¬Ô/Ø"(šLØ&Ÿ^™^Ó-�FØ$×-Ñ-Ó/’Dð) ð6 —‘×!óW  øðNØ—‘Ô!Øüs+   ‚B E<Â'E&Â+E&ÃBE&ÅE<Å&E9Å9E<c                ó&   € V P                  VR7      # )z4return lemmas of the given language as list of wordsr  )rï  r  s   &&r   ÚwordsÚWordNetCorpusReader.words¦  s   € à×#Ñ#¨Ð#Ó.Ð.r   c                ó¶   € V P                  WR7       Uu. uF8  p\        \        \        VP	                  VR7      4      V0,
          4      4      NK:  	  up# u upi )zZreturn nested list with the synonyms of the different senses of word in the given languager  )rr  rn  rê   rè   r  )r(   Úwordr·   r:  s   &&& r   ÚsynonymsÚWordNetCorpusReader.synonymsª  sU   € ð —l‘l 4�lÔ3ó
á3�ô ”4œ˜BŸN™N°˜NÓ5Ó6¸$¸Õ?Ó@ÖAÙ3ñ
ð 	
ùò 
s   •>Ac                óš  € VR8X  d   T pMRV P                   pW P                  4       9   d3   \        P                  P	                  V P
                  V,          V4       p VP                  V4      ;_uu_ 4       pVP                  4       uuRRR4       #   + '       g   i     R# ; i   Y P                  9   d   RT RT 2u # RT R2u # ; i)zpReturn the contents of readme, license or citation file
use lang=lang to get the file for an individual languager“   NzCannot determine z for r=  r>  )	rä  rõ   rL  rˆ  Újoinrç  rï  Úreadrú   )r(   Úfiler·   r  rý  s   &&&  r   ÚdocÚWordNetCorpusReader.doc±  sª   € ð �5Œ=Ø‰Fà×%Ñ%ˆFØ—z‘z“|Ô#ÜŸ'™'Ÿ,™, t×'7Ñ'7¸Õ'=¸dÓCÐD�ð	<Ø—‘˜T×"Ô" bØ—w‘w“y÷ #×"×"Ó"ûð	<Ø—‘Ô&Ø*¨4¨&°°d°VÐ<Ò<à" 4 &Ð(:Ð;Ò;ús0   ÁB& Á7BÂ
B& ÂB#	ÂB& Â#B& Â&C
ÃC
c                ó(   € V P                  RVR7      # )zdReturn the contents of LICENSE (for omw)
use lang=lang to get the license for an individual languageÚLICENSE©r  r·   ©r  r  s   &&r   ÚlicenseÚWordNetCorpusReader.licenseÃ  s   € ð �x‰x˜Y¨TˆxÓ2Ð2r   c                ó(   € V P                  RVR7      # )zbReturn the contents of README (for omw)
use lang=lang to get the readme for an individual languageÚREADMEr  r  r  s   &&r   ÚreadmeÚWordNetCorpusReader.readmeÈ  s   € ð �x‰x˜X¨DˆxÓ1Ð1r   c                ó(   € V P                  RVR7      # )zoReturn the contents of citation.bib file (for omw)
use lang=lang to get the citation for an individual languagezcitation.bibr  r  r  s   &&r   ÚcitationÚWordNetCorpusReader.citationÍ  s   € ð �x‰x˜^°$ˆxÓ7Ð7r   c                ó  € VP                   R8w  d   ^ # V P                  f   V P                  R4      V n        \        V P                  VP                  4      pV'       d#   \        VP                  R^4      R,          4      # ^ # )rÍ   r“   úcntlist.revr]  rÈ  )rœ   rí  rï  r”  r�   rò  rž  )r(   rÝ  rþ  s   && r   rÎ   ÚWordNetCorpusReader.lemma_countÕ  sg   € ð �;‰;˜%ÔÙà×ÑÒ'Ø#'§9¡9¨]Ó#;ˆDÔ ä" 4×#7Ñ#7¸¿¹ÓDˆßÜ�t—{‘{ 3¨Ó*¨2Õ.Ó/Ð/ár   Fc                ó&   € VP                  W#V4      # r{   ©rœ  ©r(   Úsynset1Úsynset2r›  rp  s   &&&&&r   rœ  Ú#WordNetCorpusReader.path_similarityä  s   € Ø×&Ñ& w¸ÓGÐGr   c                ó&   € VP                  W#V4      # r{   ©r¥  r   s   &&&&&r   r¥  Ú"WordNetCorpusReader.lch_similarityé  ó   € Ø×%Ñ% g¸ÓFÐFr   c                ó&   € VP                  W#V4      # r{   ©r¬  r   s   &&&&&r   r¬  Ú"WordNetCorpusReader.wup_similarityî  r'  r   c                ó&   € VP                  W#V4      # r{   ©r¶  ©r(   r!  r"  r²  r›  s   &&&&&r   r¶  Ú"WordNetCorpusReader.res_similarityó  ó   € Ø×%Ñ% g°7Ó;Ð;r   c                ó&   € VP                  W#V4      # r{   ©r»  r-  s   &&&&&r   r»  Ú"WordNetCorpusReader.jcn_similarityø  r/  r   c                ó&   € VP                  W#V4      # r{   ©r¾  r-  s   &&&&&r   r¾  Ú"WordNetCorpusReader.lin_similarityý  r/  r   c                ó€   € V'       d   V.M\          F(  pV P                  WV4      pV'       g   K  V^ ,          u # 	  R# )a\  
Find a possible base form for the given form, with the given
part of speech, by checking WordNet's list of exceptional
forms, or by substituting suffixes for this part of speech.
If pos=None, try every part of speech until finding lemmas.
Return the first form found in WordNet, or eventually None.

>>> from nltk.corpus import wordnet as wn
>>> print(wn.morphy('dogs'))
dog
>>> print(wn.morphy('churches'))
church
>>> print(wn.morphy('aardwolves'))
aardwolf
>>> print(wn.morphy('abaci'))
abacus
>>> wn.morphy('hardrock', wn.ADV)
>>> print(wn.morphy('book', wn.NOUN))
book
>>> wn.morphy('book', wn.ADJ)
N)rà  rá  )r(   rä  rÈ   râ  Úanalysess   &&&& r   ÚmorphyÚWordNetCorpusReader.morphy  s7   € ÷,  �C‘5¤XÒ-ˆCØ—|‘| DÐ/?Ó@ˆHß‰xà •{Ò"ó	 .r   c                óÎ   a aa€ S P                   S,          pS P                  S,          oV3R  lpVV 3R lpV'       d   W9   d
   WA,          pM	V! V.4      pV! V.V,           4      # )c                 ó®   <€ V  UUUu. uF=  pS F4  w  r#VP                  V4      '       g   K  VR \        V4      )  V,           NK6  	  K?  	  uppp# u upppi r{   )ÚendswithrS  )Úformsrä  ÚoldÚnewÚsubstitutionss   &   €r   Úapply_rulesÚ0WordNetCorpusReader._morphy.<locals>.apply_rulesH  s\   ø€ ñ "õá!�DÛ -‘H�CØ—=‘= ×%ô (��[œ˜C›�yÐ! C×'Ð'á -ñ (Ù!óð ùô s
   ˆ A­Ac                 óà   <€ . p\        4       pV  FZ  pVSP                  9   g   K  SSP                  V,          9   g   K0  W29  g   K8  VP                  V4       VP                  V4       K\  	  V# r{   )rè   râ  r  r"  )r=  r$  r%  rä  rÈ   r(   s   &   €€r   Úfilter_formsÚ1WordNetCorpusReader._morphy.<locals>.filter_formsP  s^   ø€ ØˆFÜ“5ˆDÛ�Ø˜4×5Ñ5Ö5Ø˜d×8Ñ8¸Õ>Ö>ØÖ+Ø"ŸM™M¨$Ô/Ø ŸH™H TžNñ ð ˆMr   )rì  ÚMORPHOLOGICAL_SUBSTITUTIONS)	r(   rä  rÈ   râ  Ú
exceptionsrA  rD  r=  r@  s	   f&f&    @r   rá  ÚWordNetCorpusReader._morphy>  sb   ú€ ð ×(Ñ(¨Õ-ˆ
Ø×8Ñ8¸Õ=ˆõ	ö		÷  Ô 2àÕ$‰Eñ    Ó'ˆEñ ˜T˜F U�NÓ+Ð+r   c                óV   € VR8w  d   \        VRV4      p\        P                  VR4      # )am  
Convert a tag from one of the tagsets in nltk_data/taggers/universal_tagset to a
WordNet Part-of-Speech, using Universal Tags (Petrov et al., 2012) as intermediary.
Return None when WordNet does not cover that POS.

:param tag: The part-of-speech tag to convert.
:type tag: str
:param tagset: The tagset of the input tag. Defaults to "en-ptb".
    Supported tagsets are those recognized by the `map_tag` function
    from `nltk.tag`. Common examples include:
        - "en-ptb" (Penn Treebank tagset for English)
        - "en-brown" (Brown tagset)
    For a complete list of supported tagsets, refer to the `map_tag`
    documentation or its source code in the NLTK library.
:type tagset: str

:returns: The corresponding WordNet POS tag ('n', 'v', 'a', 'r') or None
    if the tag cannot be mapped to a WordNet POS.
:rtype: str or None

Example:
    >>> import nltk
    >>> tagged = nltk.tag.pos_tag(nltk.tokenize.word_tokenize("Banks check books."))
    >>> print([(word, tag, nltk.corpus.wordnet.tag2pos(tag)) for word, tag in tagged])
    [('Banks', 'NNS', 'n'), ('check', 'VBP', 'v'), ('books', 'NNS', 'n'), ('.', '.', None)]
Ú	universalN)r   ÚUNIVERSAL_TAG_TO_WN_POSr�  )r(   ÚtagÚtagsets   &&&r   Útag2posÚWordNetCorpusReader.tag2pose  s-   € ð6 �[Ô Ü˜& +¨sÓ3ˆCä&×*Ñ*¨3°Ó5Ð5r   c                óL  € \        4       pVP                  4        F  pWE;;,          ^,          uu&   K  	  / p\         F  p\        \        4      Wg&   K  	  VR8”  db   \         F  pW6V,          ^ &   K  	  V P                  4        F5  pVP                  p	V	\        8X  d   \        p	W6V	,          VP                  &   K7  	  V Fà  pV P                  V4      p
\        V
4      ^ 8X  d   K&  \	        WE,          4      pV'       g   V\	        \        V
4      4      ,          pV
 F€  pVP                  p	V	\        8X  d   \        p	VP                  4        F1  pV F(  pWi,          VP                  ;;,          V,          uu&   K*  	  K3  	  Wi,          ^ ;;,          V,          uu&   K‚  	  Kâ  	  V# )ae  
Creates an information content lookup dictionary from a corpus.

:type corpus: CorpusReader
:param corpus: The corpus from which we create an information
    content dictionary.
:type weight_senses_equally: bool
:param weight_senses_equally: If this is True, gives all
    possible senses equal weight rather than dividing by the
    number of possible senses.  (If a word has 3 synses, each
    sense gets 0.3333 per appearance when this is False, 1.0 when
    it is true.)
:param smoothing: How much do we smooth synset counts (default is 1.0)
:type smoothing: float
:return: An information content dictionary
g        )r
   r  rà  r   r�  r~  rá   rr  r   râ   rr  rS  rZ  )r(   rý   Úweight_senses_equallyÚ	smoothingr"  Úwwr²  Úppr:  rÈ   Úpossible_synsetsÚweightÚlevelÚhhs   &&&&          r   r²  ÚWordNetCorpusReader.icˆ  sV  € ô" “ˆØ—,‘,–.ˆBØ�J˜!�O�Jñ !ð ˆßˆBÜ ¤Ó'ˆB‹Fñ ð �sŒ?ß�Ø%�2•�q“	ñ à×&Ñ&Ö(�Ø—g‘g�Øœ'”>Ü�CØ&/�3•˜Ÿ
™
Ó#ñ	 )ó ˆBØ#Ÿ|™|¨BÓ/ÐÜÐ#Ó$¨Ô)Ùô ˜6�:Ó&ˆFß(Øœ%¤Ð$4Ó 5Ó6Õ6�ã&�Ø—g‘g�Øœ'”>Ü�CØ×4Ñ4Ö6�EÛ#˜Ø� §
¡
×+¨vÕ5Õ+ó $ñ 7ð •˜—
˜fÕ$•
ó 'ñ ð& ˆ	r   c           	     ó  € VP                  R4      ^ ,          p\        V4      ^8w  d   \        R4      h\        \        4      \        \        4      \        \        4      \        \        4      .V P
                  V&   VP                  4        EF|  p\        V\        4      '       d   VP                  R4      pVP                  R4      '       d   KD  VP                  4       P                  R4      p\        V4      ^8  d   Ku  VR,          w  rgVR,          pV P                  '       d†   W`P                  9   d   V P                  V,          pM®W`P                  R,          9  dH   VP                  RR	4      V P                  R,          9  d    \        P                   ! V R
V RV R24       EK   VR,          R8X  d@   V P#                  V4      p	V	'       d'   V	P%                  4       R	8X  d   V P'                  V	4      pVP                  R4      p
V
R,          p\        V
4      ^8X  g   V
^ ,          V8X  g   EK¨  VR8X  dg   VP                  4       P                  RR4      pV P
                  V,          ^,          VP)                  4       ,          pWl9  d   VP+                  V4       W°P,                  9   g   EK(  V P
                  V,          V P,                  P/                  V4      ,          V,          pW�9  g   EKk  VP+                  V4       EK  	  R# )a»  
Reads a custom tab file containing mappings of lemmas in the given
language to Princeton WordNet 3.0 synset offsets, allowing NLTK's
WordNet functions to then be used with that language.

See the "Tab files" section at https://omwn.org/omw1.html for
documentation on the Multilingual WordNet tab file format.

:param tab_file: Tab file as a file or file-like object
:type: lang str
:param: lang ISO 639-3 code of the language of the tab file
rÿ  z-lang should be a (3 character) ISO 639-3 codezutf-8Ú#Ú	r»  Úwordnetr   rj  z: invalid offset z in 'Ú'r  rÝ  r]  NrÈ  )rñ  rS  ro  r   rê   rú   Ú	readlinesÚ
isinstanceÚbytesÚdecoder`  r	  rú  rö  Úreplacerè  ré  r6  rÈ   r÷   r“  r  rø   rù   )r(   Útab_filer·   Úlgrþ  ÚtripleÚ
offset_posÚlabelÚvalÚwnssÚpairÚattrÚlang_offsetsÚlang_lemmass   &&&           r   rE  Ú!WordNetCorpusReader.custom_lemmasÀ  sV  € ð �Z‰Z˜‹_˜QÕˆÜˆr‹7�aŒ<ÜÐLÓMÐMäœÓÜœÓÜœÓÜœÓð	!
ˆ�‰˜Ñð ×&Ñ&×(ˆDÜ˜$¤×&Ò&ð —{‘{ 7Ó+�Ø—?‘? 3×'Ô'ØŸ™›×+Ñ+¨DÓ1�Ü�v“; ”?ÙØ$*¨2¥JÑ!�
Ø˜R•j�Ø—:—:�:Ø!§Z¡ZÔ/à%)§Z¡Z°
Õ%;™
ð '¯j©j¸Õ.CÔCØ *× 2Ñ 2°3¸Ó <Ø#'§:¡:¨iÕ#8ô!9ô %ŸMšMØ#' &Ð(9¸*¸ÀUÈ4È&ÐPQÐ Rôò !Ø •^ sÔ*ØŸ:™: jÓ1�Dß §¡£
¨cÔ 1à%)§Z¡Z°Ó%5˜
Ø—{‘{ 3Ó'�Ø˜B•x�Ü�t“9 ”> T¨!¥W°§]Ø˜w”Ø!Ÿi™i›k×1Ñ1°#°sÓ;˜Ø'+§¡°tÕ'<¸QÕ'?ÀÇ	Á	ÃÕ'L˜Ø%Ô9Ø(×/Ñ/°
Ô;ØŸ}™}×,Ø&*§o¡o°dÕ&;¸D¿M¹M×<OÑ<OÐPTÓ<UÕ&VØ&õ'˜ð ×1Ø'×.Ñ.¨s×3óY )r   c                óŽ   € \        \        V P                  4      4       F"  pRV P                  V,          V,          n        K$  	  R# )z+prevent synsets from being mistakenly addedN)rp  rS  rø   rú   Údefault_factory)r(   r·   r   s   && r   rF  Ú)WordNetCorpusReader.disable_custom_lemmas	  s0   € ä”s˜4Ÿ=™=Ó)Ö*ˆAØ7;ˆD�O‰O˜DÕ! !Õ$Ö4ó +r   c                ó"   € V P                  4       # r{   )r)   )rj  s   &r   re  ÚWordNetCorpusReader.<lambda>	  s
   € �a—k‘k”mr   c           	     óú  aa€ ^ RI HpHp	 \        4       o\        4       oV'       g   \	        4       pV'       g   \	        4       pVV3R lp
V Fn  p\        V4      pV\        8X  d   SP                  V4       K,  V\        8X  d   V
! V4       KA  V\        8X  g   KN  V P                  W³4       F  pV
! V4       K  	  Kp  	  S F  pSP                  V! WâWG4      4      oK  	  V	! \        \        S4      4      WVR7      pV# )aY  
Produce a graphical representation from 'inputs' (a list of
start nodes, which can be a mix of Synsets, Lemmas and/or words),
and a synset relation, for drawing with the 'dot' graph visualisation
program from the Graphviz package.

Return a string in the DOT graph file language, which can then be
converted to an image by nltk.parse.dependencygraph.dot2img(dot_string).

Optional Parameters:
:rel: Wordnet synset relation
:pos: for words, restricts Part of Speech to 'n', 'v', 'a' or 'r'
:maxdepth: limit the longest path
:shapes: dictionary of strings that trigger a specified shape
:attr: dictionary with global graph attributes
:verbose: warn about cycles

>>> from nltk.corpus import wordnet as wn
>>> print(wn.digraph([wn.synset('dog.n.01')]))
digraph G {
"Synset('animal.n.01')" -> "Synset('organism.n.01')";
"Synset('canine.n.02')" -> "Synset('carnivore.n.01')";
"Synset('carnivore.n.01')" -> "Synset('placental.n.01')";
"Synset('chordate.n.01')" -> "Synset('animal.n.01')";
"Synset('dog.n.01')" -> "Synset('canine.n.02')";
"Synset('dog.n.01')" -> "Synset('domestic_animal.n.01')";
"Synset('domestic_animal.n.01')" -> "Synset('animal.n.01')";
"Synset('living_thing.n.01')" -> "Synset('whole.n.02')";
"Synset('mammal.n.01')" -> "Synset('vertebrate.n.01')";
"Synset('object.n.01')" -> "Synset('physical_entity.n.01')";
"Synset('organism.n.01')" -> "Synset('living_thing.n.01')";
"Synset('physical_entity.n.01')" -> "Synset('entity.n.01')";
"Synset('placental.n.01')" -> "Synset('mammal.n.01')";
"Synset('vertebrate.n.01')" -> "Synset('chordate.n.01')";
"Synset('whole.n.02')" -> "Synset('object.n.01')";
}
<BLANKLINE>
)Úedge_closureÚ	edges2dotc                 ón   <€ V P                  4       pSP                  V4       SP                  W34       R # r{   )rŸ   r"  )r  r:  Úedgesrr  s   & €€r   Ú	add_lemmaÚ.WordNetCorpusReader.digraph.<locals>.add_lemmaF	  s'   ø€ Ø—‘“ˆBØ�K‰K˜ŒOØ�I‰I�s�iÖ r   )Úshapesrl  )rF  rv  rw  rè   rá  r¾   rß   r"  r‘   ræ  r  Úunionrn  rê   )r(   ÚinputsrG  rÈ   Úmaxdepthr|  rl  r›  rv  rw  rz  ÚnodeÚtyprÝ  r:  Ú
dot_stringry  rr  s   &&&&&&&&        @@r   ÚdigraphÚWordNetCorpusReader.digraph	  sÄ   ù€ ÷` 	6ä“%ˆÜ“ˆßÜ“VˆFßÜ“6ˆDö	!ó
 ˆDÜ�t“*ˆCØ”fŒ}Ø—‘˜DÖ!Øœ”Ù˜$–Øœ–Ø!Ÿ[™[¨Ö3�EÙ˜eÖ$ó 4ñ ó ˆBØ—K‘K¡¨R°hÓ HÓIŠEñ áœv¤d¨5£kÓ2¸6ÔMˆ
ØÐr   )rë  rì  rå  rí  rî  rú   râ  r  r,  rä  rã  rø   rú  rø  rö  rê  rç  ra  r÷  ©r   rj  r   r   r   )r  rÜ  r  z	index.adjz	index.advz
index.nounz
index.verbzdata.adjzdata.advz	data.nounz	data.verbzadj.exczadv.excznoun.exczverb.excr{   )r]  rÇ  )Nr“   T)Nr“   )NN)r  r“   rË  rÊ  )NT)	©rj  rÛ  )Úsesrj  )ÚvesÚf)ÚxesÚx)ÚzesÚz)ÚchesÚch)ÚshesÚsh)ÚmenÚman©ÚiesÚy)r†  r”  )Úesrx  )r—  rÛ  )Úedrx  )r˜  rÛ  )Úingrx  )r™  rÛ  ))ÚerrÛ  )ÚestrÛ  )rš  rx  )r›  rx  )T)zen-ptb)Frš  rÈ  )Lr   r   r   r   r   rà  r   rr  r   r   r   rn  rÂ  rá  rŽ  r
  rß  r¤   r  r  r$  rù  r*  r1  r6  r÷   rö   rR  rD  rX  rõ   ró  rô  rõ  r¢  r  rÝ  r˜  rŸ   r^  rÃ   r	   r´  r¬  rÝ  rr  r  rï  rò  r~  rõ  r  r  r  r  r  r  rÎ   rœ  rß   r¥  r¬  r¶  r»  r¾  r8  rF  rá  rN  r²  rE  rF  rƒ  r   r�   Ú__classcell__)r   r�   s   @@r   rÏ  rÏ  [  s‰  ù‡ € ñð €Ið %<Ñ!€Cˆ�#�t˜Tð �U˜C ¨¨f°d¸FÐC€Hð ˜!˜T 1 c¨1¨c°1°g¸qÐA€LÙÑ@¨<×+=Ñ+=Ô+?Ó@Ó@€Jð
€Fõ$E6ôNô$ôô4,ô$ô
	$òDò3ò
)ò8.ò6ò+ò -ò3ò06Wòp@ò%òôJòBò6ò@
(òñB ÐHÓIñ@ó Jð@òwòr&7ôXô>ô4ô4ô<ô5"ôn/ô
ô<ô$3ô
2ô
8òôHð %×4Ñ4×<Ñ<€OÔôGð $×2Ñ2×:Ñ:€NÔôGð $×2Ñ2×:Ñ:€NÔô<ð $×2Ñ2×:Ñ:€NÔô<ð $×2Ñ2×:Ñ:€NÔô<ð $×2Ñ2×:Ñ:€NÔô#ð: 	ò 

ð 	ò 	
ð 	ÒAØˆRð/#Ðð4 ,GÀsÕ+KÐ Ñ(ô%,ôN6ôF6òpB4òH<ñ $ØØØØØ÷Kô Kr   rÏ  c                   ó0   a € ] tR tRt o RtR tR tRtV tR# )ÚWordNetICCorpusReaderi`	  z=
A corpus reader for the WordNet information content corpus.
c                ó8   € \         P                  ! WVR R7       R# )rÐ  rÙ  N)r   r¤   )r(   rû  rK  s   &&&r   r¤   ÚWordNetICCorpusReader.__init__e	  s   € Ü×Ò˜d¨'¸F×Cr   c                ó4  € / p\        \        4      V\        &   \        \        4      V\        &   V P	                  V4      ;_uu_ 4       p\        V4       F¤  w  rEV^ 8X  d   K  VP                  4       p\        V^ ,          RR 4      p\        V^,          4      p\        V^ ,          4      p	\        V4      ^8X  d*   V^,          R8X  d   W),          ^ ;;,          V,          uu&   V^ 8w  g   K™  W‚V	,          V&   K¦  	  RRR4       V#   + '       g   i     T# ; i)a_  
Load an information content file from the wordnet_ic corpus
and return a dictionary.  This dictionary has just two keys,
NOUN and VERB, whose values are dictionaries that map from
synsets to information content values.

:type icfile: str
:param icfile: The name of the wordnet_ic file (e.g. "ic-brown.dat")
:return: An information content dictionary
NÚROOTrÈ  )
r   r�  r   r   rï  rð  rñ  rò  Ú_get_posrS  )
r(   Úicfiler²  rý  Únumrþ  r  rÉ   ÚvaluerÈ   s
   &&        r   r²  ÚWordNetICCorpusReader.icl	  sà   € ð ˆÜœuÓ%ˆŒ4‰ÜœuÓ%ˆŒ4‰Ø�Y‰Y�v×Ô "Ü& rž]‘	�Ø˜!”8ÙØŸ™›�Ü˜V A�Y s¨˜^Ó,�Ü˜f Q�iÓ(�Ü˜v a�yÓ)�Ü�v“; !Ô#¨¨q­	°VÔ(;à•G˜A—J %Õ'“JØ˜A–:Ø&+�s•G˜F“Oñ +÷ ð ˆ	÷ Öð ˆ	ús   ÁB DÃ-DÄD	r   N)	r   r   r   r   r   r¤   r²  r   r�   rŽ   s   @r   rž  rž  `	  s   ø‡ € ñòD÷ð r   rž  c                 ó(   € V P                  WVR 7      # ©)r›  rp  r  ©r!  r"  r›  rp  s   &&&&r   rœ  rœ  •	  s   € Ø×"Ñ"Ø°ð #ó ð r   c                 ó(   € V P                  WVR 7      # r©  r%  rª  s   &&&&r   r¥  r¥  ›	  ó   € Ø×!Ñ! 'È-Ð!ÓXÐXr   c                 ó(   € V P                  WVR 7      # r©  r)  rª  s   &&&&r   r¬  r¬  Ÿ	  r¬  r   c                 ó(   € V P                  WVR 7      # ©)r›  r,  ©r!  r"  r²  r›  s   &&&&r   r¶  r¶  £	  ó   € Ø×!Ñ! '°wÐ!Ó?Ð?r   c                 ó(   € V P                  WVR 7      # r¯  r1  r°  s   &&&&r   r»  r»  §	  r±  r   c                 ó(   € V P                  WVR 7      # r¯  r4  r°  s   &&&&r   r¾  r¾  «	  r±  r   c                ó4  a€ V P                   VP                   8w  d   \        RV : RV: R24      h\        V S4      p\        VS4      pV P                  V4      p\	        V4      ^ 8X  d   ^ pM\        V3R lV 4       4      pV'       d   \        RV4       WEV3# )aR  
Get the information content of the least common subsumer that has
the highest information content value.  If two nodes have no
explicit common subsumer, assume that they share an artificial
root node that is the hypernym of all explicit roots.

:type synset1: Synset
:param synset1: First input synset.
:type synset2: Synset
:param synset2: Second input synset.  Must be the same part of
speech as the first synset.
:type  ic: dict
:param ic: an information content object (as returned by ``load_ic()``).
:return: The information content of the two synsets and their most
informative subsumer
z-Computing the least common subsumer requires rŸ  r   c              3   ó<   <"  € T F  p\        VS4      x € K  	  R # 5ir{   )Úinformation_content)r1  rj  r²  s   & €r   r3  Ú_lcs_ic.<locals>.<genexpr>Ô	  s   øé € ÐH¹i¸Ô-¨a°×4Ð4»iùs   ƒz> LCS Subsumer by content:)rá   r   r¶  r`  rS  r8  r€  )r!  r"  r²  r›  r³  r´  r¨  Úsubsumer_ics   &&f&    r   r°  r°  ·	  s‘   ø€ ð" ‡|�|�w—|‘|Ô#Ýã<CÃWðNó
ð 	
ô
 ˜g rÓ
*€CÜ
˜g rÓ
*€CØ×(Ñ(¨Ó1€IÜ
ˆ9ƒ~˜ÔØ‰äÔH¹iÓHÓHˆçÜÐ*¨KÔ8à�[Ð Ð r   c                 ó"  € V P                   pV\        8X  d   \        p W,          pY0P
                  ,          pT^ 8X  d   \        # \        P                  ! Yc^ ,          ,          4      ) #   \         d   pR p\	        YR,          4      ThRp?ii ; i)z>Information content file has no entries for part-of-speech: %sN)	rá   rr  r   rŸ  r   râ   r¹  r�  r£  )rŸ   r²  rÈ   Úicposrx  Úmsgr"  s   &&     r   r¶  r¶  ß	  s|   € Ø
�+‰+€CØ
Œg„~Üˆð-Ø•ˆð
 —>‘>Õ"€FØ�„{Üˆä—’˜¨¥(Õ*Ó+Ð+Ð+øô ô -ØNˆÜ˜3�9Ó%¨1Ð,ûð-ús   ŸA* Á*BÁ5B	Â	Bc                 óz   € V R,          R8X  d   \         # V R,          R8X  d   \        # RV ,          p\        V4      h)r  r   r   zLUnidentified part of speech in WordNet Information Content file for field %srÈ  )r   r   ro  )Úfieldr»  s   & r   r£  r£  ô	  sB   € ØˆR…y�CÔÜˆØ	ˆr��cÔ	ÜˆðØ"õ#ð 	ô ˜‹oÐr   r…  )(NzSomething %szSomebody %szIt is %singzSomething is %sing PPz%Something %s something Adjective/NounzSomething %s Adjective/NounzSomebody %s AdjectivezSomebody %s somethingzSomebody %s somebodyzSomething %s somebodyzSomething %s somethingzSomething %s to somebodyzSomebody %s on somethingzSomebody %s somebody somethingz!Somebody %s something to somebodyz#Somebody %s something from somebodyz#Somebody %s somebody with somethingz!Somebody %s somebody of somethingz!Somebody %s something on somebodyzSomebody %s somebody PPzSomebody %s something PPzSomebody %s PPzSomebody's (body part) %sz"Somebody %s somebody to INFINITIVEzSomebody %s somebody INFINITIVEzSomebody %s that CLAUSEzSomebody %s to somebodyzSomebody %s to INFINITIVEzSomebody %s whether INFINITIVEz)Somebody %s somebody into V-ing somethingz$Somebody %s something with somethingzSomebody %s INFINITIVEzSomebody %s VERB-ingzIt %s that CLAUSEzSomething %s INFINITIVEzSomebody %s at somethingzSomebody %s for somethingzSomebody %s on somebodyzSomebody %s out of somebodyrË  rÊ  )5r   r�  rL  r„  rè  Úcollectionsr   r   Ú	functoolsr   Ú	itertoolsr   r   Úoperatorr   Únltk.corpus.readerr   Únltk.internalsr	   Únltk.probabilityr
   Únltk.tagr   rF  r   r”  r¹  r   rr  r   r   r   rà  rK  rÀ  ÚcompilerŒ  Ú	Exceptionr   r!   r‘   rß   rÏ  rž  rœ  r¥  r¬  r¶  r»  r¾  r°  r¶  r£  r   r   r   Ú<module>rÈ     sž  ðñ"ó  Û 	Û 	Û ß *Ý $ß #Ý å +Ý %Ý %Ý Ý ?ð( €ð !8Ñ €€Wˆc�4˜ð �$˜˜SÐ!€ð " 3¨°°U¸CÀÈÐLÐ ð*Ð ðX �jŠj˜Ó&€ô9�9ô 9ð ÷U(ð U(ó ðU(ôpA#ˆNô A#ôHpˆ^ô pôp}˜,ô }ôJ('˜Lô 'ôjôYôYô@ô@ô@ð !×0Ñ0×8Ñ8€Ô Ø×.Ñ.×6Ñ6€Ô Ø×.Ñ.×6Ñ6€Ô Ø×.Ñ.×6Ñ6€Ô Ø×.Ñ.×6Ñ6€Ô Ø×.Ñ.×6Ñ6€Ô ô"!òP,ô*
r   