o
    i7                     @   s  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!d"d d#d$d d%d&d d'd(d d)d*d d+d,d Z'G d-d. d.Z(G d/d0 d0Z)d1d2 Z*e+d3kre*  d2gZ,dS )4    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                   C      t  S N)r   words r!   r!   T/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nltk/app/collocations_app.py<lambda>3       r#   zEnglish: Brown Corpusc                   C   r   r   r   r    r!   r!   r!   r"   r#   4   r$   zEnglish: Brown Corpus (Press)c                   C   s   t jg ddS )N)news	editorialreviews
categoriesr%   r!   r!   r!   r"   r#   5   s    z English: Brown Corpus (Religion)c                   C      t jddS )Nreligionr)   r%   r!   r!   r!   r"   r#   8       zEnglish: Brown Corpus (Learned)c                   C   r+   )Nlearnedr)   r%   r!   r!   r!   r"   r#   9   r-   z'English: Brown Corpus (Science Fiction)c                   C   r+   )Nscience_fictionr)   r%   r!   r!   r!   r"   r#   :   s    zEnglish: Brown Corpus (Romance)c                   C   r+   )Nromancer)   r%   r!   r!   r!   r"   r#   =   r-   c                   C   r+   )Nhumorr)   r%   r!   r!   r!   r"   r#   >   r-   zEnglish: NPS Chat Corpusc                   C   r   r   )r   r    r!   r!   r!   r"   r#   ?   r$   z#English: Wall Street Journal Corpusc                   C   r   r   )r   r    r!   r!   r!   r"   r#   @   r$   zChinese: Sinica Corpusc                   C   r   r   )r   r    r!   r!   r!   r"   r#   A   r$   zDutch: Alpino Corpusc                   C   r   r   )r   r    r!   r!   r!   r"   r#   B   r$   zHindi: Indian Languages Corpusc                   C   r+   )Nz	hindi.pos)files)r   r    r!   r!   r!   r"   r#   C   r-   z&Portuguese: Floresta Corpus (Portugal)c                   C   r   r   )r   r    r!   r!   r!   r"   r#   D   r$   z&Portuguese: MAC-MORPHO Corpus (Brazil)c                   C   r   r   )r   r    r!   r!   r!   r"   r#   E   r$   z#Portuguese: Machado Corpus (Brazil)c                   C   r   r   )r   r    r!   r!   r!   r"   r#   F   r$   zSpanish: CESS-ESP Corpusc                   C   r   r   )r   r    r!   r!   r!   r"   r#   G   r$   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4S )5CollocationsViewz#FFFc                 C   sb   t  | _t| j| _t | _| | j |   | 	| j | 
| jj | jt| j| _d S r   )qQueuequeueCollocationsModelmodelr   top	_init_top_init_menubar_init_widgetsload_corpusDEFAULT_CORPUSafterPOLL_INTERVAL_pollselfr!   r!   r"   __init__N   s   
zCollocationsView.__init__c                 C   s@   | d |d |d| j |d| j |dd d S )Nz550x650+50+50zNLTK Collocations Listz<Control-q>WM_DELETE_WINDOWi&  i  )geometrytitlebinddestroyprotocolminsize)rC   r9   r!   r!   r"   r:   X   s
   

zCollocationsView._init_topc                 C   s^   t |t| jdddd| _| | j | | j | | j | | j | jjddd d S )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rC   parentr!   r!   r"   r<   _   s   zCollocationsView._init_widgetsc              	   C   s   t || jd}t|| _| j| jj t|td| jddddj	dd t
| jj | jj}t|| j| jjg| j R d	| ji}d|d
< d|d< |j	dd |j	dddd d S )NrM   z	 Corpus:    rL   r   )justifytextrM   rN   rO   rP   left)sidecommandborderwidthhighlightthicknessr9   xnrc   rR   anchor)r   rU   r   varsetr8   r>   r   r   r[   listCORPORAkeysremover
   non_default_corporacorpus_selected)rC   r]   
innerframeother_corporaomr!   r!   r"   rW   i   s<   

z$CollocationsView._init_corpus_selectc              	   C   s.   t |tt| jdddd| _| jjddd d S )Nr   rL   )r`   reliefrM   rP   rN   rO   r9   swrc   rj   )r   r   r   rU   statusr[   r\   r!   r!   r"   rZ      s   	zCollocationsView._init_statusc                 C   s   t | j| _t| j}t|ddd}|jdd| jdd |jdd|d t|dd	}t|dd	}|jd
| jdd| jd |jd| jdd| jd |jd| jdd| jd |	d |jdd|d |jdd|d | jj
|d d S )Nr   )tearoffre   ExitrL   zCtrl-q)label	underlinerd   acceleratorFile)r|   r}   menu)rz   20   )r|   variabler}   valuerd   502   100r   zResult CountEdit)r   )r   r9   _result_sizer	   add_commandrI   add_cascadeadd_radiobuttonset_result_sizeinvokeconfig)rC   menubarfilemenueditmenu
rescntmenur!   r!   r"   r;      sD   


zCollocationsView._init_menubarc                 K   s   | j  | j_d S r   )r   getr8   result_count)rC   kwargsr!   r!   r"   r      s   z CollocationsView.set_result_sizec                 C   s   t |}t |}t |}t|dd}t|ddd}t|tddddd|j|jd	d
ddd
| _| jjdddd |jdddd |j| jjd |jddddd |j| jj	d t
|d| jdjddd |jddddd |jdddd |jdddd d S )NrL   )re   horiz)re   orientcourier16)familysizedisablednone40r   )	fontstatere   yscrollcommandxscrollcommandwrapwidthheightexportselectionrb   rQ   T)rc   rR   rS   yeri   )rd   rg   w)rc   rR   rS   rj   z   )ra   rM   rx   r9   rh   bottoms)r   r   r   r   rl   results_boxr[   r   yviewxviewr   rU   )rC   r]   rs   i1i2
vscrollbar
hscrollbarr!   r!   r"   rX      s8   
z"CollocationsView._init_results_boxc              	   C   s   t || jd}t|d| jddddd | _}|jddd	 t|d
| jddddd | _}|jddd	 |jddd |   d S )Nr^   Previous10rL   r   )ra   rd   r   re   rf   r   rb   centerrx   Nextrightr9   r   )rc   rR   )	r   rU   r   previousprevr[   __next__nextreset_current_page)rC   r]   rs   r   r   r!   r!   r"   rY      s.   		zCollocationsView._init_pagingc                 C   s
   d| _ d S N)current_pagerB   r!   r!   r"   r      s   
z#CollocationsView.reset_current_pagec                 C   sd   z	| j jdd}W n
 tjy   Y nw |tkr| | n	|tkr'| | | j	t
| j| _	d S )NF)block)r6   r   r4   EmptyCORPUS_LOADED_EVENThandle_corpus_loadedERROR_LOADING_CORPUS_EVENThandle_error_loading_corpusr9   r?   r@   rA   rC   eventr!   r!   r"   rA      s   
zCollocationsView._pollc                 C   s8   d| j   | jd< |   |   |   |   d S )NzError in loading ra   )rk   r   ry   unfreeze_editableclear_results_boxfreeze_editabler   r   r!   r!   r"   r     s
   z,CollocationsView.handle_error_loading_corpusc                 C   sZ   | j  d | jd< |   |   |   | j| jd }| 	| |  jd7  _d S )Nz
 is loadedra   rL   )
rk   r   ry   r   r   r   r8   r   r   write_results)rC   r   collocationsr!   r!   r"   r   
  s   
z%CollocationsView.handle_corpus_loadedc                 G   s   | j  }| | d S r   )rk   r   r=   )rC   argsnew_selectionr!   r!   r"   rr        
z CollocationsView.corpus_selectedc                 C   sD   |    | j| jd }| jd | _|   | | |   d S NrL   )r   r8   r   r   r   r   r   rC   r   r!   r!   r"   r     s   
zCollocationsView.previousc                 C   sF   |    | j| jd }|   | | |  jd7  _|   d S r   )r   r8   r   r   r   r   r   r   r!   r!   r"   r      s   
zCollocationsView.__next__c                 C   s:   | j j|krd| d | jd< |   | j | d S d S )NzLoading z...ra   )r8   selected_corpusry   r   r=   )rC   	selectionr!   r!   r"   r=   (  s
   zCollocationsView.load_corpusc                 C   s   d| j d< d| jd< d S )Nr   r   )r   r   rB   r!   r!   r"   r   .  r   z CollocationsView.freeze_editablec                 C   s&   d| j d< | j dt d| j d< d S )Nnormalr   z1.0r   )r   deleter   rB   r!   r!   r"   r   2  s   
z"CollocationsView.clear_results_boxc                 C   s   | j j|dd d S )Ntail)when)r9   event_generater   r!   r!   r"   
fire_event7  s   zCollocationsView.fire_eventc                 G   s0   | j d u rd S | j | j | j   d | _ d S r   )r9   after_cancelr?   rI   )rC   r   r!   r!   r"   rI   ;  s
   


zCollocationsView.destroyc                 O   s    t  rd S | jj|i | d S r   )r   r9   mainloop)rC   r   r   r!   r!   r"   r   B  s   zCollocationsView.mainloopc                 C   s   |    d S r   )set_paging_button_statesrB   r!   r!   r"   r   G  s   z"CollocationsView.unfreeze_editablec                 C   sT   | j dks
| j dkrd| jd< nd| jd< | j| j r#d| jd< d S d| jd< d S )Nr   r   r   r   r   )r   r   r8   is_last_pager   rB   r!   r!   r"   r   J  s   
z)CollocationsView.set_paging_button_statesc                 C   sX   d| j d< d}|D ]}| j t|d |d d |d  d  |d7 }q	d| j d< d S )	Nr   r   rL   z.0r    
r   )r   insertstr)rC   resultsroweachr!   r!   r"   r   T  s   
*
zCollocationsView.write_resultsN)__name__
__module____qualname__rU   rD   r:   r<   rW   rZ   r;   r   rX   rY   r   rA   r   r   rr   r   r   r=   r   r   r   rI   r   r   r   r   r!   r!   r!   r"   r3   K   s6    

'

r3   c                   @   sV   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	G dd de
jZdS )r7   c                 C   s0   d | _ d | _d | _t| _t| _|| _|   d S r   )	r   r   r   _CORPORArn   _DEFAULTr>   r6   reset_results)rC   r6   r!   r!   r"   rD   ^  s   zCollocationsModel.__init__c                 C   s   g | _ d| _d S )Nr   )result_pagesresults_returnedrB   r!   r!   r"   r   g  s   
zCollocationsModel.reset_resultsc                 C   s,   || _ d | _| || }|  |   d S r   )r   r   
LoadCorpusstartr   )rC   namerunner_threadr!   r!   r"   r=   k  s
   zCollocationsModel.load_corpusc                 C   s0   g }| t| j  || j |  |S r   )extendrm   rn   ro   rp   r>   sort)rC   copyr!   r!   r"   rq   r  s
   z%CollocationsModel.non_default_corporac                 C   s6   |t | jk r	dS | j|t | j | j  t | jkS )NF)lenr   r   r   r   )rC   numberr!   r!   r"   r   y  s   zCollocationsModel.is_last_pagec                 C   sh   t | jd |k r/t|t | jd  D ]}| j| j| j| j| j   |  j| j7  _q| j| S r   )r   r   rangeappendr   r   r   )rC   pageir!   r!   r"   r     s   
zCollocationsModel.nextc                 C   s   |dkrg S | j | S r   )r   )rC   r   r!   r!   r"   r     s   
zCollocationsModel.prevc                   @   s   e Zd Zdd Zdd ZdS )zCollocationsModel.LoadCorpusc                 C   s   t j|  ||| _| _d S r   )	threadingThreadrD   r8   r   )rC   r   r8   r!   r!   r"   rD     s   z%CollocationsModel.LoadCorpus.__init__c              
      s   zR| j j| j  }ddlm} dd |D tfddttd D  t fdd D }|j|dd	d
 t	t
|d|| j _| j jt W d S  typ } zt| | j jt W Y d }~d S d }~ww )Nr   )
itemgetterc                 S   s   g | ]
}t |d kr|qS )r_   )r   ).0r   r!   r!   r"   
<listcomp>  s    z4CollocationsModel.LoadCorpus.run.<locals>.<listcomp>c                 3   s$    | ]}t  ||d   V  qdS )r_   N)tuple)r   r   )ra   r!   r"   	<genexpr>  s   " z3CollocationsModel.LoadCorpus.run.<locals>.<genexpr>rL   c                    s8   g | ]\}}||f ||f d  | |   fqS )   r!   )r   w1w2)fdvocabr!   r"   r     s    &T)keyreverse)r8   rn   r   operatorr   r   r   r   r   rm   mapr   r6   putr   	Exceptionprintr   )rC   r    r   scoredr   r!   )r  ra   r  r"   run  s"   "z CollocationsModel.LoadCorpus.runN)r   r   r   rD   r  r!   r!   r!   r"   r     s    r   N)r   r   r   rD   r   r=   rq   r   r   r   r   r   r   r!   r!   r!   r"   r7   ]  s    	r7   c                  C   s   t  } |   d S r   )r3   r   )cr!   r!   r"   app  s   r  __main__)-r6   r4   r   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   r@   r   r   r3   r7   r  r   __all__r!   r!   r!   r"   <module>   sl   	<4  Q
