B
    >?ð[Ó7  ã               @   sn  d dl mZ d dlZd dl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mZ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)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"d#„ d#ƒZ,d$d%„ Z-e.d&krde-ƒ  d%gZ/dS )'é    )ÚdivisionN)Úqueue)ÚFont)ÚButtonÚENDÚFrameÚIntVarÚLEFTÚLabelÚMenuÚ
OptionMenuÚSUNKENÚ	ScrollbarÚ	StringVarÚTextÚTk)Úcess_catÚbrownÚnps_chatÚtreebankÚsinica_treebankÚalpinoÚindianÚflorestaÚ
mac_morphoÚmachadoÚcess_esp)Úin_idle)ÚFreqDistz<<CL_EVENT>>z<<ELC_EVENT>>éd   zEnglish: Brown Corpus (Humor)c               C   s   t  ¡ S )N)r   Úwords© r!   r!   ú8lib/python3.7/site-packages/nltk/app/collocations_app.pyÚ<lambda>7   s    r#   c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   8   s    c               C   s   t jdddgdS )NZnewsZ	editorialZreviews)Ú
categories)r   r    r!   r!   r!   r"   r#   9   s   c               C   s   t jddS )NZreligion)r$   )r   r    r!   r!   r!   r"   r#   <   s    c               C   s   t jddS )NZlearned)r$   )r   r    r!   r!   r!   r"   r#   =   s    c               C   s   t jddS )NZscience_fiction)r$   )r   r    r!   r!   r!   r"   r#   >   s   c               C   s   t jddS )NZromance)r$   )r   r    r!   r!   r!   r"   r#   A   s    c               C   s   t jddS )NZhumor)r$   )r   r    r!   r!   r!   r"   r#   B   s    c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   C   s    c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   D   s    c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   E   s    c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   F   s    c               C   s   t jddS )Nz	hindi.pos)Úfiles)r   r    r!   r!   r!   r"   r#   G   s    c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   H   s    c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   I   s    c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   J   s    c               C   s   t  ¡ S )N)r   r    r!   r!   r!   r"   r#   K   s    )zCatalan: CESS-CAT CorpuszEnglish: Brown CorpuszEnglish: Brown Corpus (Press)z English: Brown Corpus (Religion)zEnglish: Brown Corpus (Learned)z'English: Brown Corpus (Science Fiction)zEnglish: Brown Corpus (Romance)zEnglish: Brown Corpus (Humor)zEnglish: NPS Chat Corpusz#English: Wall Street Journal CorpuszChinese: Sinica CorpuszDutch: Alpino CorpuszHindi: Indian Languages Corpusz&Portuguese: Floresta Corpus (Portugal)z&Portuguese: MAC-MORPHO Corpus (Brazil)z#Portuguese: Machado Corpus (Brazil)zSpanish: CESS-ESP Corpusc               @   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 )N)ÚqZQueuer   ÚCollocationsModelÚmodelr   ÚtopÚ	_init_topÚ_init_menubarÚ_init_widgetsÚload_corpusÚDEFAULT_CORPUSÚafterÚPOLL_INTERVALÚ_poll)Úselfr!   r!   r"   Ú__init__R   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>ZWM_DELETE_WINDOWi&  iŠ  )ZgeometryÚtitleZbindÚdestroyZprotocolZminsize)r3   r*   r!   r!   r"   r+   \   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_COLOURZ
main_frameÚ_init_corpus_selectÚ_init_results_boxÚ_init_pagingÚ_init_statusÚpack)r3   Úparentr!   r!   r"   r-   c   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f| j ¡ žd	| jiŽ}d|d
< d|d< |j	dd |j	dddd d S )N)r8   z	 Corpus: é   r7   r   )ÚjustifyÚtextr8   r9   r:   r;   Úleft)ÚsideÚcommandÚborderwidthÚhighlightthicknessr*   ÚxÚn)rK   r=   Úanchor)r   r@   r   ÚvarÚsetr)   r/   r
   r	   rE   ÚlistÚCORPORAÚkeysÚremover   Únon_default_corporaÚcorpus_selected)r3   rF   Ú
innerframeZother_corporaZomr!   r!   r"   rA   m   s.    

z$CollocationsView._init_corpus_selectc          	   C   s.   t |tt| jdddd| _| jjddd d S )Nr   r7   )rH   Zreliefr8   r;   r9   r:   r*   Úsw)rK   rQ   )r
   r	   r   r@   ÚstatusrE   )r3   rF   r!   r!   r"   rD   Š   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   )ÚtearoffrM   ZExitr7   zCtrl-q)ÚlabelÚ	underlinerL   ZacceleratorZFile)r^   r_   Úmenu)r]   Ú20é   )r^   Zvariabler_   ÚvaluerL   Z50é2   Z100r   zResult CountZEdit)r`   )r   r*   Ú_result_sizer   Zadd_commandr6   Zadd_cascadeZadd_radiobuttonÚset_result_sizeZinvokeÚconfig)r3   ZmenubarZfilemenuZeditmenuZ
rescntmenur!   r!   r"   r,   –   s<    




zCollocationsView._init_menubarc             K   s   | j  ¡ | j_d S )N)re   Úgetr)   Úresult_count)r3   Úkwargsr!   r!   r"   rf   ½   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 )Nr7   )rM   Zhoriz)rM   ZorientZcourierZ16)ZfamilyÚsizeÚdisabledZnoneZ40ra   )	ZfontÚstaterM   ZyscrollcommandZxscrollcommandZwrapÚwidthZheightZexportselectionrJ   r<   T)rK   r=   r>   ÚyÚe)rK   r=   rQ   )rL   rO   Úw)rK   r=   r>   rQ   z   )rI   r8   )rK   rQ   r*   rP   ZbottomÚs)r   r   r   r   rS   Úresults_boxrE   rg   ZyviewZxviewr
   r@   )r3   rF   rZ   Zi1Zi2Z
vscrollbarZ
hscrollbarr!   r!   r"   rB   À   s4    


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 )N)r8   ZPreviousZ10r7   rl   )rI   rL   rn   rM   rN   rm   rJ   Úcenter)rK   rQ   ZNextÚrightr*   ro   )rK   r=   )	r   r@   r   ÚpreviousÚprevrE   Ú__next__ÚnextÚreset_current_page)r3   rF   rZ   rw   ry   r!   r!   r"   rC   ß   s*    zCollocationsView._init_pagingc             C   s
   d| _ d S )Néÿÿÿÿ)Úcurrent_page)r3   r!   r!   r"   rz   ø   s    z#CollocationsView.reset_current_pagec             C   sf   y| j jdd}W n tjk
r(   Y n(X |tkr>|  |¡ n|tkrP|  |¡ | j 	t
| j¡| _	d S )NF)Úblock)r   rh   r'   ZEmptyÚCORPUS_LOADED_EVENTÚhandle_corpus_loadedÚERROR_LOADING_CORPUS_EVENTÚhandle_error_loading_corpusr*   r0   r1   r2   )r3   Úeventr!   r!   r"   r2   û   s    
zCollocationsView._pollc             C   s8   d| j  ¡  | jd< |  ¡  |  ¡  |  ¡  |  ¡  d S )NzError in loading rI   )rR   rh   r\   Úunfreeze_editableÚclear_results_boxÚfreeze_editablerz   )r3   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 loadedrI   r7   )
rR   rh   r\   rƒ   r„   rz   r)   ry   r|   Úwrite_results)r3   r‚   Úcollocationsr!   r!   r"   r     s    
z%CollocationsView.handle_corpus_loadedc             G   s   | j  ¡ }|  |¡ d S )N)rR   rh   r.   )r3   ÚargsZnew_selectionr!   r!   r"   rY     s    
z CollocationsView.corpus_selectedc             C   sD   |   ¡  | j | jd ¡}| jd | _|  ¡  |  |¡ |  ¡  d S )Nr7   )r…   r)   rw   r|   r„   r†   rƒ   )r3   r‡   r!   r!   r"   rv     s    
zCollocationsView.previousc             C   sF   |   ¡  | j | jd ¡}|  ¡  |  |¡ |  jd7  _|  ¡  d S )Nr7   )r…   r)   ry   r|   r„   r†   rƒ   )r3   r‡   r!   r!   r"   rx   $  s    
zCollocationsView.__next__c             C   s6   | j j|kr2d| d | jd< |  ¡  | j  |¡ d S )NzLoading z...rI   )r)   Úselected_corpusr\   r…   r.   )r3   Z	selectionr!   r!   r"   r.   ,  s    zCollocationsView.load_corpusc             C   s   d| j d< d| jd< d S )Nrl   rm   )rw   ry   )r3   r!   r!   r"   r…   2  s    
z CollocationsView.freeze_editablec             C   s&   d| j d< | j  dt¡ d| j d< d S )NÚnormalrm   z1.0rl   )rs   Údeleter   )r3   r!   r!   r"   r„   6  s    
z"CollocationsView.clear_results_boxc             C   s   | j j|dd d S )NÚtail)Zwhen)r*   Zevent_generate)r3   r‚   r!   r!   r"   Ú
fire_event;  s    zCollocationsView.fire_eventc             G   s0   | j d krd S | j  | j¡ | j  ¡  d | _ d S )N)r*   Zafter_cancelr0   r6   )r3   rp   r!   r!   r"   r6   ?  s
    

zCollocationsView.destroyc             O   s   t ƒ r
d S | jj||Ž d S )N)r   r*   Úmainloop)r3   rˆ   rj   r!   r!   r"   rŽ   F  s    zCollocationsView.mainloopc             C   s   |   ¡  d S )N)Úset_paging_button_states)r3   r!   r!   r"   rƒ   K  s    z"CollocationsView.unfreeze_editablec             C   sR   | j dks| j dkr d| jd< n
d| jd< | j | j ¡rDd| jd< n
d| jd< d S )Nr{   r   rl   rm   rŠ   )r|   rw   r)   Úis_last_pagery   )r3   r!   r!   r"   r   N  s    
z)CollocationsView.set_paging_button_statesc             C   s\   d| j d< d}x>|D ]6}| j  t|ƒd |d d |d  d ¡ |d7 }qW d| j d< d S )	NrŠ   rm   r7   z.0r   ú Ú
rl   )rs   ÚinsertÚstr)r3   ZresultsÚrowZeachr!   r!   r"   r†   X  s    

*zCollocationsView.write_resultsN)Ú__name__Ú
__module__Ú__qualname__r@   r4   r+   r-   rA   rD   r,   rf   rB   rC   rz   r2   r   r   rY   rv   rx   r.   r…   r„   r   r6   rŽ   rƒ   r   r†   r!   r!   r!   r"   r&   O   s4   

'

r&   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 )r(   c             C   s0   d | _ d | _d | _t| _t| _|| _|  ¡  d S )N)	ri   r‰   r‡   Ú_CORPORArU   Ú_DEFAULTr/   r   Úreset_results)r3   r   r!   r!   r"   r4   b  s    zCollocationsModel.__init__c             C   s   g | _ d| _d S )Nr   )Úresult_pagesÚresults_returned)r3   r!   r!   r"   r›   k  s    zCollocationsModel.reset_resultsc             C   s,   || _ d | _|  || ¡}| ¡  |  ¡  d S )N)r‰   r‡   Ú
LoadCorpusÚstartr›   )r3   ÚnameZrunner_threadr!   r!   r"   r.   o  s
    zCollocationsModel.load_corpusc             C   s0   g }|  t| j ¡ ƒ¡ | | j¡ | ¡  |S )N)ÚextendrT   rU   rV   rW   r/   Úsort)r3   Úcopyr!   r!   r"   rX   v  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   ri   r‡   )r3   Znumberr!   r!   r"   r   }  s
    zCollocationsModel.is_last_pagec             C   sl   t | jƒd |k rbxNt|t | jƒd  ƒD ]4}| j | j| j| j| j … ¡ |  j| j7  _q*W | j| S )Nr7   )r¤   rœ   ÚrangeÚappendr‡   r   ri   )r3   ÚpageÚir!   r!   r"   ry   „  s    zCollocationsModel.nextc             C   s   |dkrg S | j | S )Nr{   )rœ   )r3   r§   r!   r!   r"   rw     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 )N)Ú	threadingÚThreadr4   r)   r    )r3   r    r)   r!   r!   r"   r4   –  s    z%CollocationsModel.LoadCorpus.__init__c          
      sà   y¢| 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 n8 tk
rÚ } zt|ƒ | j j t¡ W d d }~X Y nX d S )Nr   )Ú
itemgetterc             S   s   g | ]}t |ƒd kr|‘qS )rG   )r¤   )Ú.0rq   r!   r!   r"   ú
<listcomp>Ÿ  s    z4CollocationsModel.LoadCorpus.run.<locals>.<listcomp>c             3   s"   | ]}t ˆ ||d  … ƒV  qdS )rG   N)Útuple)r¬   r¨   )rI   r!   r"   ú	<genexpr>   s    z3CollocationsModel.LoadCorpus.run.<locals>.<genexpr>r7   c                s8   g | ]0\}}||fˆ ||f d  ˆ| ˆ|   f‘qS )é   r!   )r¬   Zw1Zw2)ÚfdÚvocabr!   r"   r­   £  s   T)ÚkeyÚreverse)r)   rU   r    Úoperatorr«   r   r¥   r¤   r¢   rT   Úmapr‡   r   Zputr~   Ú	ExceptionÚprintr€   )r3   r    r«   Zscoredrp   r!   )r±   rI   r²   r"   Úrunš  s    "z CollocationsModel.LoadCorpus.runN)r–   r—   r˜   r4   r¹   r!   r!   r!   r"   rž   •  s   rž   N)r–   r—   r˜   r4   r›   r.   rX   r   ry   rw   r©   rª   rž   r!   r!   r!   r"   r(   a  s   	r(   c              C   s   t ƒ } |  ¡  d S )N)r&   rŽ   )Úcr!   r!   r"   Úapp²  s    r»   Ú__main__)0Z
__future__r   r©   Z	six.movesr   r'   Zsix.moves.tkinter_fontr   Zsix.moves.tkinterr   r   r   r   r	   r
   r   r   r   r   r   r   r   Znltk.corpusr   r   r   r   r   r   r   r   r   r   r   Z	nltk.utilr   Znltk.probabilityr   r~   r€   r1   rš   r™   r&   r(   r»   r–   Ú__all__r!   r!   r!   r"   Ú<module>
   sH   <4  Q
