
    g7                        d dl Zd dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZmZ d dlm Z  d dl!m"Z" dZ#dZ$d	Z%d
Z&i dd dd dd dd dd dd dd d
d dd dd dd d d! d"d# d$d% d&d' d(d) d*d+ Z' G d, d-      Z( G d. d/      Z)d0 Z*e+d1k(  r e*        d2gZ,y)3    N)ENDLEFTSUNKENButtonFrameIntVarLabelMenu
OptionMenu	Scrollbar	StringVarTextTk)Font)alpinobrowncess_catcess_espflorestaindian
mac_morphomachadonps_chatsinica_treebanktreebank)FreqDist)in_idlez<<CL_EVENT>>z<<ELC_EVENT>>d   zEnglish: Brown Corpus (Humor)zCatalan: CESS-CAT Corpusc                  *    t        j                         S N)r   words     N/var/www/openai/venv/lib/python3.12/site-packages/nltk/app/collocations_app.py<lambda>r%   3       (8r#   zEnglish: Brown Corpusc                  *    t        j                         S r    r   r!   r"   r#   r$   r%   r%   4   s
    U[[]r#   zEnglish: Brown Corpus (Press)c                  2    t        j                  g d      S )N)news	editorialreviews
categoriesr(   r"   r#   r$   r%   r%   5   s    U[[3.r#   z English: Brown Corpus (Religion)c                  .    t        j                  d      S )Nreligionr-   r(   r"   r#   r$   r%   r%   8   s    z0Rr#   zEnglish: Brown Corpus (Learned)c                  .    t        j                  d      S )Nlearnedr-   r(   r"   r#   r$   r%   r%   9       u{{i/Pr#   z'English: Brown Corpus (Science Fiction)c                  .    t        j                  d      S )Nscience_fictionr-   r(   r"   r#   r$   r%   r%   :   s    u{{$8r#   zEnglish: Brown Corpus (Romance)c                  .    t        j                  d      S )Nromancer-   r(   r"   r#   r$   r%   r%   =   r3   r#   c                  .    t        j                  d      S )Nhumorr-   r(   r"   r#   r$   r%   r%   >   s    U[[G-Lr#   zEnglish: NPS Chat Corpusc                  *    t        j                         S r    )r   r!   r"   r#   r$   r%   r%   ?   r&   r#   z#English: Wall Street Journal Corpusc                  *    t        j                         S r    )r   r!   r"   r#   r$   r%   r%   @   s    8>>3Cr#   zChinese: Sinica Corpusc                  *    t        j                         S r    )r   r!   r"   r#   r$   r%   r%   A   s    o&;&;&=r#   zDutch: Alpino Corpusc                  *    t        j                         S r    )r   r!   r"   r#   r$   r%   r%   B   s
    FLLNr#   zHindi: Indian Languages Corpusc                  .    t        j                  d      S )Nz	hindi.pos)files)r   r!   r"   r#   r$   r%   r%   C   s    fll.Mr#   z&Portuguese: Floresta Corpus (Portugal)c                  *    t        j                         S r    )r   r!   r"   r#   r$   r%   r%   D   s    hnn6Fr#   z&Portuguese: MAC-MORPHO Corpus (Brazil)c                  *    t        j                         S r    )r   r!   r"   r#   r$   r%   r%   E   s    j6F6F6Hr#   z#Portuguese: Machado Corpus (Brazil)c                  *    t        j                         S r    )r   r!   r"   r#   r$   r%   r%   F   s
    7==?r#   zSpanish: CESS-ESP Corpusc                  *    t        j                         S r    )r   r!   r"   r#   r$   r%   r%   G   r&   r#   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)CollocationsViewz#FFFc                    t        j                         | _        t        | j                        | _        t               | _        | j                  | j                         | j                          | j                  | j                         | j                  | j                  j                         | j                  j                  t        | j                        | _        y r    )qQueuequeueCollocationsModelmodelr   top	_init_top_init_menubar_init_widgetsload_corpusDEFAULT_CORPUSafterPOLL_INTERVAL_pollselfs    r$   __init__zCollocationsView.__init__N   s    WWY
&tzz2
4txx 488$223XX^^M4::>
r#   c                     |j                  d       |j                  d       |j                  d| j                         |j	                  d| j                         |j                  dd       y )Nz550x650+50+50zNLTK Collocations Listz<Control-q>WM_DELETE_WINDOWi&  i  )geometrytitlebinddestroyprotocolminsize)rV   rL   s     r$   rM   zCollocationsView._init_topX   sN    _%		*+-'6Cr#   c           	      f   t        |t        | j                  ddd            | _        | j	                  | j                         | j                  | j                         | j                  | j                         | j                  | j                         | j                  j                  dd       y )N   )
backgroundpadxpadyborderbothT)fillexpand)	r   dict_BACKGROUND_COLOUR
main_frame_init_corpus_select_init_results_box_init_paging_init_statuspackrV   parents     r$   rO   zCollocationsView._init_widgets_   s    DD$;$;!!TUV
 	  1t/$//*$//*&6r#   c           	         t        || j                        }t        |      | _        | j                  j	                  | j
                  j                         t        |t        d| j                  ddd      j                  d       t        | j
                  j                  j                               j                  | j
                  j                        }t        || j                  | j
                  j                  g| j
                  j                         d	| j                   i}d|d
<   d|d<   |j                  d       |j                  ddd       y )Nrb   z	 Corpus:    ra   r   )justifytextrb   rc   rd   re   left)sidecommandborderwidthhighlightthicknessrL   xnry   rg   anchor)r   rj   r   varsetrK   rQ   r	   r   rp   listCORPORAkeysremover   non_default_corporacorpus_selected)rV   rr   
innerframeother_corporaoms        r$   rl   z$CollocationsView._init_corpus_selecti   s!   6d.E.EF
Z(TZZ../..	
 $F$
TZZ//4467>>JJ%%
 HHJJ%%

 ZZ++-
 ((	
 =#$ 
VUS9r#   c           	          t        |t        t        | j                  ddd      | _        | j                  j                  dd       y )Nr   ra   )rv   reliefrb   re   rc   rd   rL   swry   r   )r	   r   r   rj   statusrp   rq   s     r$   ro   zCollocationsView._init_status   sB    ..
 	eD1r#   c                    t        | j                        | _        t        | j                        }t        |dd      }|j	                  dd| j
                  d       |j                  dd|       t        |d	      }t        |d	      }|j                  d
| j                  dd| j                         |j                  d| j                  dd| j                         |j                  d| j                  dd| j                         |j                  d       |j                  dd|       |j                  dd|       | j                  j                  |       y )Nr   )tearoffr{   Exitra   zCtrl-q)label	underlinerz   acceleratorFile)r   r   menu)r   20   )r   variabler   valuerz   502   100r   zResult CountEdit)r   )r   rL   _result_sizer
   add_commandr]   add_cascadeadd_radiobuttonset_result_sizeinvokeconfig)rV   menubarfilemenueditmenu
rescntmenus        r$   rN   zCollocationsView._init_menubar   sW   "488,txx.:At|| 	 	
 	&AHE+(A.
""&&(( 	# 	
 	""&&(( 	# 	
 	""&&(( 	# 	
 	!>QZP&AHEW%r#   c                 V    | j                   j                         | j                  _        y r    )r   getrK   result_count)rV   kwargss     r$   r   z CollocationsView.set_result_size   s    "&"3"3"7"7"9

r#   c                    t        |      }t        |      }t        |      }t        |d      }t        |dd      }t        |t        dd      dd|j                  |j                  d	d
dd
      | _        | j
                  j                  ddd       |j                  ddd       |j                  | j
                  j                         |j                  dddd       |j                  | j
                  j                         t        |d| j                        j                  dd       |j                  dddd       |j                  ddd       |j                  ddd       y )Nra   )r{   horiz)r{   orientcourier16)familysizedisablednone40r   )	fontstater{   yscrollcommandxscrollcommandwrapwidthheightexportselectionrx   rf   T)ry   rg   rh   yer   )rz   r}   w)ry   rg   rh   r   z   )rw   rb   r   rL   r~   bottoms)r   r   r   r   r   results_boxrp   r   yviewxviewr	   rj   )rV   rr   r   i1i2
vscrollbar
hscrollbars          r$   rm   z"CollocationsView._init_results_box   sR   6]
::rq1
rqA
YT2%>>%>>
 	6tDV#c:$"2"2"8"89V#d3G$"2"2"8"89bu)@)@AFF 	G 	
 	USA
XC4U=r#   c           	      P   t        || j                        }t        |d| j                  dddd      x| _        }|j                  dd	       t        |d
| j                  dddd      x| _        }|j                  dd	       |j                  dd       | j                          y )Nrt   Previous10ra   r   )rw   rz   r   r{   r|   r   rx   centerr   NextrightrL   r   )ry   rg   )	r   rj   r   previousprevrp   __next__nextreset_current_page)rV   rr   r   r   r   s        r$   rn   zCollocationsView._init_paging   s    6d.E.EF
!MM 
 	
	D 			vh	/!MM 
 	
	D 			wx	0U-!r#   c                     d| _         y N)current_pagerU   s    r$   r   z#CollocationsView.reset_current_page   s
    r#   c                 :   	 | j                   j                  d      }|t        k(  r| j                  |       n|t        k(  r| j                  |       	 | j                  j                  t        | j                        | _	        y # t        j                  $ r Y Ew xY w)NF)block)rI   r   CORPUS_LOADED_EVENThandle_corpus_loadedERROR_LOADING_CORPUS_EVENThandle_error_loading_corpusrG   EmptyrL   rR   rS   rT   rV   events     r$   rT   zCollocationsView._poll   s}    	8JJNNN/E ++))%044007XX^^M4::>
 ww 		s   B BBc                     d| j                   j                         z   | j                  d<   | j                          | j	                          | j                          | j                          y )NzError in loading rw   )r   r   r   unfreeze_editableclear_results_boxfreeze_editabler   r   s     r$   r   z,CollocationsView.handle_error_loading_corpus  sO    1DHHLLNBF  !r#   c                 T   | j                   j                         dz   | j                  d<   | j                          | j	                          | j                          | j                  j                  | j                  dz         }| j                  |       | xj                  dz  c_        y )Nz
 is loadedrw   ra   )
r   r   r   r   r   r   rK   r   r   write_results)rV   r   collocationss      r$   r   z%CollocationsView.handle_corpus_loaded
  s    "hhlln|;F  !zzt'8'81'<=<(Qr#   c                 Z    | j                   j                         }| j                  |       y r    )r   r   rP   )rV   argsnew_selections      r$   r   z CollocationsView.corpus_selected  s    'r#   c                     | j                          | j                  j                  | j                  dz
        }| j                  dz
  | _        | j	                          | j                  |       | j                          y Nra   )r   rK   r   r   r   r   r   rV   r   s     r$   r   zCollocationsView.previous  sd    zzt'8'81'<= --1 <( r#   c                     | j                          | j                  j                  | j                  dz         }| j	                          | j                  |       | xj                  dz  c_        | j                          y r   )r   rK   r   r   r   r   r   r   s     r$   r   zCollocationsView.__next__   sb    zzt'8'81'<= <(Q r#   c                     | j                   j                  |k7  rAd|z   dz   | j                  d<   | j                          | j                   j	                  |       y y )NzLoading z...rw   )rK   selected_corpusr   r   rP   )rV   	selections     r$   rP   zCollocationsView.load_corpus(  sO    ::%%2",y"85"@DKK  "JJ""9- 3r#   c                 @    d| j                   d<   d| j                  d<   y )Nr   r   )r   r   rU   s    r$   r   z CollocationsView.freeze_editable.  s    '		''		'r#   c                     d| j                   d<   | j                   j                  dt               d| j                   d<   y )Nnormalr   z1.0r   )r   deleter   rU   s    r$   r   z"CollocationsView.clear_results_box2  s8    $,!s+$.!r#   c                 >    | j                   j                  |d       y )Ntail)when)rL   event_generater   s     r$   
fire_eventzCollocationsView.fire_event7  s    F3r#   c                     | j                   y | j                   j                  | j                         | j                   j                          d | _         y r    )rL   after_cancelrR   r]   )rV   r   s     r$   r]   zCollocationsView.destroy;  s<    88djj)r#   c                 R    t               ry  | j                  j                  |i | y r    )r   rL   mainloop)rV   r   r   s      r$   r  zCollocationsView.mainloopB  s#    94*6*r#   c                 $    | j                          y r    )set_paging_button_statesrU   s    r$   r   z"CollocationsView.unfreeze_editableG  s    %%'r#   c                    | j                   dk(  s| j                   dk(  rd| j                  d<   nd| j                  d<   | j                  j                  | j                         rd| j                  d<   y d| j                  d<   y )Nr   r   r   r   r   )r   r   rK   is_last_pager   rU   s    r$   r  z)CollocationsView.set_paging_button_statesJ  sm    "d&7&71&<!+DIIg!)DIIg::""4#4#45!+DIIg!)DIIgr#   c                     d| j                   d<   d}|D ]>  }| j                   j                  t        |      dz   |d   dz   |d   z   dz          |dz  }@ d| j                   d<   y )	Nr   r   ra   z.0r    
r   )r   insertstr)rV   resultsroweachs       r$   r   zCollocationsView.write_resultsT  sp    $,!D##CHtOT!Ws]T!W5Lt5ST1HC  %/!r#   N)__name__
__module____qualname__rj   rW   rM   rO   rl   ro   rN   r   rm   rn   r   rT   r   r   r   r   r   rP   r   r   r   r]   r  r   r  r   r"   r#   r$   rE   rE   K   s    ?7::
2%&N:>>"2
?"(!!.(/
4+
(*/r#   rE   c                   `    e Zd Zd Zd Zd Zd Zd Zd Zd Z	 G d d	e
j                        Zy
)rJ   c                     d | _         d | _        d | _        t        | _        t
        | _        || _        | j                          y r    )	r   r   r   _CORPORAr   _DEFAULTrQ   rI   reset_results)rV   rI   s     r$   rW   zCollocationsModel.__init__^  s<     # &
r#   c                      g | _         d| _        y )Nr   )result_pagesresults_returnedrU   s    r$   r  zCollocationsModel.reset_resultsg  s     !r#   c                     || _         d | _        | j                  ||       }|j                          | j	                          y r    )r   r   
LoadCorpusstartr  )rV   namerunner_threads      r$   rP   zCollocationsModel.load_corpusk  s:    # d3r#   c                     g }|j                  t        | j                  j                                      |j	                  | j
                         |j                          |S r    )extendr   r   r   r   rQ   sort)rV   copys     r$   r   z%CollocationsModel.non_default_corporar  sE    D**,-.D''(		r#   c                     |t        | j                        k  ry| j                  |t        | j                        z
  | j                  z  z   t        | j                        k\  S )NF)lenr  r  r   r   )rV   numbers     r$   r  zCollocationsModel.is_last_pagey  s_    C))**$$S**++( !$T%6%6!78 	8r#   c                 x   t        | j                        dz
  |k  rt        |t        | j                        dz
  z
        D ]j  }| j                  j                  | j                  | j
                  | j
                  | j                  z           | xj
                  | j                  z  c_        l | j                  |   S r   )r%  r  rangeappendr   r  r   )rV   pageis      r$   r   zCollocationsModel.next  s    !!"Q&$.43t'8'8#9A#=>?!!((%%--0E0E++1, %%):)::% @   &&r#   c                 .    |dk(  rg S | j                   |   S r   )r  )rV   r*  s     r$   r   zCollocationsModel.prev  s    2:I  &&r#   c                       e Zd Zd Zd Zy)CollocationsModel.LoadCorpusc                 `    t         j                  j                  |        ||c| _        | _        y r    )	threadingThreadrW   rK   r  )rV   r  rK   s      r$   rW   z%CollocationsModel.LoadCorpus.__init__  s&    %%d+$)4!DJ	r#   c           	        
 	  | j                   j                  | j                            }ddlm} |D cg c]  }t        |      dkD  s| c}
t        
fdt        t        
      dz
        D              }t        
      }|D cg c]  \  }}||f|||f   dz  ||   ||   z  z  f! }}}|j                   |d      d       t        t         |d      |            | j                   _        | j                   j                  j                  t               y c c}w c c}}w # t        $ r>}	t!        |	       | j                   j                  j                  t"               Y d }	~	y d }	~	ww xY w)	Nr   )
itemgetterru   c              3   @   K   | ]  }t        ||d z            yw)ru   N)tuple).0r+  rw   s     r$   	<genexpr>z3CollocationsModel.LoadCorpus.run.<locals>.<genexpr>  s#     S>ReDQUO4>Rs   ra      T)keyreverse)rK   r   r  operatorr3  r%  r   r(  r"  r   mapr   rI   putr   	Exceptionprintr   )rV   r!   r3  r   fdvocabw1w2scoredr   rw   s             @r$   runz CollocationsModel.LoadCorpus.run  sH   A5

**49957/#(75aCFQJ57SeCIPQM>RSS  #%"$B "Xr2r(|q0E"Ib	4IJK"$   
1t<*.s:a=&/I*J

'

  $$%89 8  Aa

  $$%?@@As;   2D( D	D<D( 	$D"-A/D( D( (	E/14E**E/N)r  r  r  rW   rE  r"   r#   r$   r  r.    s    	0	Ar#   r  N)r  r  r  rW   r  rP   r   r  r   r   r0  r1  r  r"   r#   r$   rJ   rJ   ]  s9    "8
''
AY%% Ar#   rJ   c                  8    t               } | j                          y r    )rE   r  )cs    r$   apprH    s    AJJLr#   __main__rH  )-rI   rG   r0  tkinterr   r   r   r   r   r   r	   r
   r   r   r   r   r   tkinter.fontr   nltk.corpusr   r   r   r   r   r   r   r   r   r   r   nltk.probabilityr   	nltk.utilr   r   r   rS   r  r  rE   rJ   rH  r  __all__r"   r#   r$   <module>rP     ss            & $ , * 82 $ & '(R &'P . 0 &'P $%L  8 *+C =  2!" %&M#$ -.F%& -.H'( *+B)*  8+2O/ O/dJA JAb
 zE'r#   