U
    eJ                     @   s   zHd dl 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 W n ek
r\   Y nX d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ G d
d dZG dd dZdd Zedkre  dS )    )ButtonFrameIntVarLabelListboxMenu	ScrollbarTk)Font)CanvasFrameShowText)
MaltParser)	DrsDrawerDrtVariableExpression)DrtGlue)Variable)RegexpTagger)in_idlec                   @   s   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	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d6d*d+Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd)S )7DrtGlueDemoc                 C   s   t  | _| jd |   | | j || _dd |D | _t| j| _| j	d d| _
g | _d | _d | _d | _|   | | j | | j | | j | | j | | j | jd| j d S )NzDRT Glue Democ                 S   s   g | ]}d qS N ).0exampler   r   W/var/www/html/assets/scripts/venv/lib/python3.8/site-packages/nltk/sem/drt_glue_demo.py
<listcomp>(   s     z(DrtGlueDemo.__init__.<locals>.<listcomp>   z<Configure>)r	   _toptitle_init_bindings_init_fonts	_examples_readingCacher   Z_show_grammarset_curExample	_readings_drs
_drsWidget_error
_init_glue_init_menubar_init_buttons_init_exampleListbox_init_readingListbox_init_canvas_canvasbind
_configure)selfexamplesr   r   r   __init__   s(    zDrtGlueDemo.__init__c              	   C   s4   t ddddddddg}t|d	}t|d
d| _d S )N)z^(David|Mary|John)$ZNNP)zT^(walks|sees|eats|chases|believes|gives|sleeps|chases|persuades|tries|seems|leaves)$VB)z!^(go|order|vanish|find|approach)$r5   )z^(a)$Zex_quant)z	^(every)$Z
univ_quant)z.^(sandwich|man|dog|pizza|unicorn|cat|senator)$ZNN)z^(big|gray|former)$ZJJ)z^(him|himself)$ZPRP)taggerF)	depparserremove_duplicates)r   r   r   _glue)r2   r6   r7   r   r   r   r)   E   s    
zDrtGlueDemo._init_gluec                 C   s   t t d d| _|d| j t|| _| j| jd t dd| j d| _	t d| j d| _
| j d	k r| j d
 }n| j d
 }t dd|d| _d S )Nfontr:   z*FontsizeZ	helveticabold)familyweightr<   )r>   r<   r      )r
   r   _sysfontZ
option_addr   _sizer#   Zcgetget	_boldfont_font_bigfont)r2   rootbigr   r   r   r    Y   s    
zDrtGlueDemo._init_fontsc              
   C   s  t | | _}| jjdddd t| j| jdd| _| j  t| jddd	d
| jddd| _| jjdddd | j	D ]}| j
dd|  qt| jjtt| j	ddd t| j	dkrt| jdd}| jj|jd |j| jjd |jddd | jd| j d S )Nbothleftr@   fillsidepadxZExamplesr:   textsinglegroovewhite#909090#004040#c0f0c0Z
selectmoderelief
background
foregroundr:   ZselectforegroundZselectbackgroundrightr   rM   rL   expandend  %s   (   heightwidthverticalZorientZyscrollcommandcommandyrM   rL   <<ListboxSelect>>)r   Z_exampleFramepackr   rD   Z_exampleList_labelr   rE   _exampleListr!   insertconfigminlenr   r#   yviewr0   _exampleList_select)r2   parent	listframer   
listscrollr   r   r   r,   j   s8      

z DrtGlueDemo._init_exampleListboxc              
   C   s   t | | _}| jjdddd t| j| jdd| _| j  t| jddd	d
| jddd| _| jjdddd t	| jdd}| jj
|jd |j
| jjd |jddd |   d S )NrI   rJ   r@   rK   ZReadingsrO   rQ   rR   rS   rT   rU   rV   rW   r[   r   r\   re   rf   rg   rh   rj   rk   )r   Z_readingFramerm   r   rD   Z_readingList_labelr   rE   _readingListr   rp   r#   rs   _populate_readingListbox)r2   ru   rv   rw   r   r   r   r-      s0      
z DrtGlueDemo._init_readingListboxc                 C   sh   | j dd tt| jD ]}| j dd|d   q| j jtt| jddd | j d| j	 d S )	Nr   r^   r_   r   r`      rb   rl   )
rx   deleterangerr   r%   ro   rp   rq   r0   _readingList_select)r2   ir   r   r   ry      s
    z$DrtGlueDemo._populate_readingListboxc                 C   st   | j d| j | j d| j | j d| j | j d| j | j d| j | j d| j | j d| j d S )Nz<Control-q>z<Control-x>z<Escape>nz<space>pz<BackSpace>)r   r0   destroynextprevr2   r   r   r   r      s    zDrtGlueDemo._init_bindingsc                 C   s\   t | | _}|jddddd t|ddd| jd	jd
d t|ddd| jd	jd
d d S )Nnonebottom   r@   )rL   rM   rN   padyZPrevz#90c0d0black)rP   rY   rZ   ri   rJ   )rM   Next)r   Z_buttonframerm   r   r   r   )r2   ru   Zbuttonframer   r   r   r+      s(    zDrtGlueDemo._init_buttonsc                 C   sD   d| _ | j \}}}}|jd }d||||f | jd< |   d S )Nr      z%d %d %d %dscrollregion)	_autostep_cframer   rc   r/   _redraw)r2   eventx1y1Zx2y2r   r   r   r1      s
    
zDrtGlueDemo._configurec                 C   sN   t |ddddd| _| jjddddd	 | j  }| _d | _g | _d | _d S )
NrS   
   r@   Zsunken)rY   ZcloseenoughborderrX   r   rI   top)r]   rL   rM   r   )r   r   rm   canvasr/   Z_treeZ_textwidgetsZ	_textline)r2   ru   r   r   r   r   r.      s    zDrtGlueDemo._init_canvasc                 C   s  t |}t |dd}|jdd| jdd |jdd|d t |dd}|jd	d| jd
d |jdd| jdd |jdd|d t |dd}|jdd| jj| j	dd |jd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 |j
d| jdd| jd |j
d| jdd| jd |jdd|d t |dd}|jdd| jd |jd d|d |j|d! d S )"Nr   )ZtearoffZExitr   q)label	underlineri   acceleratorFile)r   r   menur   zn, SpaceZPreviouszp, BackspaceActionzRemove Duplicatesr)r   r   variableri   r   OptionsZTinyr   )r   r   r   valueri   ZSmall   ZMedium   ZLarge   ZHuge   ZViewZAbout)r   r   ri   ZHelp)r   )r   Zadd_commandr   Zadd_cascader   r   Zadd_checkbuttonr9   r8   _toggle_remove_duplicatesZadd_radiobuttonrB   resizeaboutrp   )r2   ru   ZmenubarZfilemenuZ
actionmenuZ
optionmenuZviewmenuZhelpmenur   r   r   r*      s             zDrtGlueDemo._init_menubarc                 C   s^   | j }| jd k	r| j  | jr:t| j | j| _| j  | jrZt| j | j| _| j  d S r   )r/   r'   clearr&   	DrsWidgetdrawr(   )r2   r   r   r   r   r   3  s    


zDrtGlueDemo._redrawc                 G   s(   d| _ | jd krd S | j  d | _d S Nr   )r   r   r   r2   er   r   r   r   F  s
    

zDrtGlueDemo.destroyc                 G   sr   | j  }| j  }|dkrft|dkrVt|d }|dkrF|   qd| |d  qn| |d  n|   d S Nr   r   )rx   curselectionr<   rr   int_select_previous_example_readingList_store_selectionr2   r   	selectionZreadingListSizeindexr   r   r   r   M  s    


zDrtGlueDemo.prevc                 C   s4   | j dkr| | j d  n| t| jd  d S r   )r$   _exampleList_store_selectionrr   r!   r   r   r   r   r   d  s    
z$DrtGlueDemo._select_previous_examplec                 G   sr   | j  }| j  }|dkrft|dkrZt|d }||d krJ|   qd| |d  qn| d n|   d S r   )rx   r   r<   rr   r   _select_next_exampler   r   r   r   r   r   l  s    


zDrtGlueDemo.nextc                 C   s4   | j t| jd k r&| | j d  n
| d d S Nr   r   )r$   rr   r!   r   r   r   r   r   r     s    z DrtGlueDemo._select_next_examplec                 G   sH   d}d}z ddl m} |||d  W n   t| j|| Y nX d S )Nz\NLTK Discourse Representation Theory (DRT) Glue Semantics Demo
Written by Daniel H. GarrettezAbout: NLTK DRT Glue Demor   )Message)messager   )Ztkinter.messageboxr   showr   r   )r2   r   ZABOUTZTITLEr   r   r   r   r     s    zDrtGlueDemo.aboutc                 G   s   d| _ | j  d S r   )r   r   Zprint_to_filer   r   r   r   
postscript  s    zDrtGlueDemo.postscriptc                 O   s   t  r
dS | jj|| dS )z
        Enter the Tkinter mainloop.  This function must be called if
        this demo is created from a non-interactive program (e.g.
        from a secript); otherwise, the demo will close as soon as
        the script completes.
        N)r   r   mainloop)r2   argskwargsr   r   r   r     s    zDrtGlueDemo.mainloopNc                 C   s~   |d k	r| j | | j  }| jjt| d | jjt| d | jjt| d | jjt|d  d | 	  d S )N)r<   r@   )
rB   r#   rC   rE   	configureabsrD   rA   rF   r   )r2   r<   r   r   r   r     s    
zDrtGlueDemo.resizec                 C   sZ   | j j | j _| jdd g | _|   dd | jD | _d| _d | _	d | _
|   d S )Nr   r^   c                 S   s   g | ]}d qS r   r   )r   exr   r   r   r     s     z9DrtGlueDemo._toggle_remove_duplicates.<locals>.<listcomp>r   )r9   r8   rn   selection_clearr%   ry   r!   r"   r$   r(   r&   r   r   r   r   r   r     s    z%DrtGlueDemo._toggle_remove_duplicatesc                 C   s0   | j  }t|dkrd S | t|d  d S r   )rn   r   rr   r   r   r2   r   r   r   r   r   rt     s    
zDrtGlueDemo._exampleList_selectc              
   C   s*  || _ | j| }| jdd |r&| j| }|rXt|trJ|| _d | _ng | _|| _nz$| j	
|| _d | _| j| j|< W n tk
r } zfg | _ttdt| | _| j| j|< | j| | j|d|  | jjtt| jddd W 5 d }~X Y nX |   | j| d | _|   d S )Nr   r^   zError: z  %s *r`   ra   rb   )r$   r!   rn   r   r"   
isinstancelistr%   r(   r9   Zparse_to_meaning	Exceptionr   r   strr{   ro   rp   rq   rr   ry   selection_setr&   r   )r2   r   r   cacher   r   r   r   r     s:    


 z(DrtGlueDemo._exampleList_store_selectionc                 C   s0   | j  }t|dkrd S | t|d  d S r   )rx   r   rr   r   r   r   r   r   r   r}     s    
zDrtGlueDemo._readingList_selectc                 C   sF   | j | }| jdd |rB| j| |   | _|   d S )Nr   r^   )	r%   rx   r   r   simplify	normalizeZresolve_anaphorar&   r   )r2   r   readingr   r   r   r     s    
z(DrtGlueDemo._readingList_store_selection)N)__name__
__module____qualname__r4   r)   r    r,   r-   ry   r   r+   r1   r.   r*   r   r   r   r   r   r   r   r   r   r   r   rt   r   r}   r   r   r   r   r   r      s4   )"

L

&r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )r   c                 K   s<   || _ || _t||jdddddd|_d|_d| _d S )Nr    )rP   r:   r;   r   )r   r   r   r   )r&   r/   r
   ZitemcgetZcreate_textr:   Z_BUFFERbbox)r2   r   Zdrsattribsr   r   r   r4     s    zDrsWidget.__init__c                 C   s2   t | j| jd \}}dd|d |d f| _d S )N)r   r   r   )r   r&   r/   r   r   )r2   r[   r   r   r   r   r     s    zDrsWidget.drawc                 C   s   | j j| jddd d S )NrS   0)rL   rd   )r/   Zcreate_rectangler   r   r   r   r   r   
  s    zDrsWidget.clearN)r   r   r   r4   r   r   r   r   r   r   r     s   	r   c                  C   s   dddddg} t |   d S )Nz
John walkszDavid sees MaryzDavid eats a sandwichzevery man chases a dogzJohn chases himself)r   r   )r3   r   r   r   demo  s    r   __main__N) tkinterr   r   r   r   r   r   r   r	   Ztkinter.fontr
   Znltk.draw.utilr   r   ImportErrorZ
nltk.parser   Znltk.sem.drtr   r   Znltk.sem.gluer   Znltk.sem.logicr   Znltk.tagr   Z	nltk.utilr   r   r   r   r   r   r   r   r   <module>
   s&   (   d