
    gm^              	          d dl Z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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 d dl m!Z! d dl"m#Z# dZ$dZ%d	Z&d
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/ d0 d1 d2 d3 d4 d5 d6 d7Z, G d8 d9      Z- G d: d;      Z.d< Z/e0d=k(  r e/        d>gZ1y)?    N)ENDLEFTSUNKENButtonEntryFrameIntVarLabelMenu
OptionMenu	Scrollbar	StringVarTextTk)Font)
alpinobrowncess_catcess_espflorestaindian
mac_morphonps_chatsinica_treebanktreebank)ShowText)in_idlez[^/ ]+z\bz<<CL_EVENT>>z<<ST_EVENT>>z<<SE_EVENT>>z<<ELC_EVENT>>2   z)English: Brown Corpus (Humor, simplified)z%Catalan: CESS-CAT Corpus (simplified)c                  .    t        j                  d      S N	universal)tagset)r   tagged_sents     M/var/www/openai/venv/lib/python3.12/site-packages/nltk/app/concordance_app.py<lambda>r'   ;       X5J5J6r%   zEnglish: Brown Corpusc                  *    t        j                         S Nr   r#   r$   r%   r&   r'   r'   >   s    U%7%7%9r%   z"English: Brown Corpus (simplified)c                  .    t        j                  d      S r    r+   r$   r%   r&   r'   r'   ?   s    %2D2D3r%   z)English: Brown Corpus (Press, simplified)c                  4    t        j                  g dd      S )N)news	editorialreviewsr!   
categoriesr"   r+   r$   r%   r&   r'   r'   B   s    9K9K3K:r%   z,English: Brown Corpus (Religion, simplified)c                  0    t        j                  dd      S )Nreligionr!   r1   r+   r$   r%   r&   r'   r'   E   s    E<N<Nk=r%   z+English: Brown Corpus (Learned, simplified)c                  0    t        j                  dd      S )Nlearnedr!   r1   r+   r$   r%   r&   r'   r'   H       5;M;M[<r%   z3English: Brown Corpus (Science Fiction, simplified)c                  0    t        j                  dd      S )Nscience_fictionr!   r1   r+   r$   r%   r&   r'   r'   K   s    5CUCU$[Dr%   z+English: Brown Corpus (Romance, simplified)c                  0    t        j                  dd      S )Nromancer!   r1   r+   r$   r%   r&   r'   r'   N   r7   r%   c                  0    t        j                  dd      S )Nhumorr!   r1   r+   r$   r%   r&   r'   r'   Q   s    9K9K;:r%   zEnglish: NPS Chat Corpusc                  *    t        j                         S r*   r   tagged_postsr$   r%   r&   r'   r'   T   s    (=(=(?r%   z%English: NPS Chat Corpus (simplified)c                  .    t        j                  d      S r    r?   r$   r%   r&   r'   r'   U   r(   r%   z#English: Wall Street Journal Corpusc                  *    t        j                         S r*   r   r#   r$   r%   r&   r'   r'   X   s    83H3H3Jr%   z0English: Wall Street Journal Corpus (simplified)c                  .    t        j                  d      S r    rC   r$   r%   r&   r'   r'   Y   s    @U@UAr%   zChinese: Sinica Corpusc                  *    t        j                         S r*   r   r#   r$   r%   r&   r'   r'   \   s    o&B&B&Dr%   z#Chinese: Sinica Corpus (simplified)c                  .    t        j                  d      S r    rF   r$   r%   r&   r'   r'   ]   s    ?3O3O4r%   zDutch: Alpino Corpusc                  *    t        j                         S r*   r   r#   r$   r%   r&   r'   r'   `   s    F$7$7$9r%   z!Dutch: Alpino Corpus (simplified)c                  .    t        j                  d      S r    rI   r$   r%   r&   r'   r'   a   s    1D1D2r%   c                  .    t        j                  d      S )N	hindi.pos)filesr   r#   r$   r%   r&   r'   r'   d   s    f.A.A.Tr%   c                  0    t        j                  dd      S )NrL   r!   )rM   r"   rN   r$   r%   r&   r'   r'   e   s    6;N;N+<r%   c                  *    t        j                         S r*   r   r#   r$   r%   r&   r'   r'   h   s    h6K6K6Mr%   c                  .    t        j                  d      S r    rQ   r$   r%   r&   r'   r'   i   s    (BWBWCr%   c                  *    t        j                         S r*   r   r#   r$   r%   r&   r'   r'   l   s    j6M6M6Or%   c                  .    t        j                  d      S r    rT   r$   r%   r&   r'   r'   m   s    *BYBYCr%   c                  .    t        j                  d      S r    )r   r#   r$   r%   r&   r'   r'   p   r(   r%   )zHindi: Indian Languages Corpusz+Hindi: Indian Languages Corpus (simplified)z&Portuguese: Floresta Corpus (Portugal)z2Portuguese: Floresta Corpus (Portugal, simplified)z&Portuguese: MAC-MORPHO Corpus (Brazil)z2Portuguese: MAC-MORPHO Corpus (Brazil, simplified)z%Spanish: CESS-ESP Corpus (simplified)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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+),ConcordanceSearchViewz#FFFz#F00
HL_WRD_TAGz#C0C0C0
HL_LBL_TAGg333333?c                    t        j                         | _        t        | j                        | _        t               | _        | j                  | j                         | j                          | j                  | j                         | j                  | j                  j                         | j                  j                  t        | j                        | _        y r*   )qQueuequeueConcordanceSearchModelmodelr   top	_init_top_init_menubar_init_widgetsload_corpusDEFAULT_CORPUSafterPOLL_INTERVAL_pollselfs    r&   __init__zConcordanceSearchView.__init__   s    WWY
+DJJ7
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950x680+50+50zNLTK Concordance Searchz<Control-q>WM_DELETE_WINDOWi  i  )geometrytitlebinddestroyprotocolminsize)rk   ra   s     r&   rb   zConcordanceSearchView._init_top   sN    _%		+,-'6Cr%   c           	         t        |t        | j                  ddd            | _        | j	                  | j                         | 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_query_box_init_results_box_init_paging_init_statuspackrk   parents     r&   rd   z#ConcordanceSearchView._init_widgets   s    DD$;$;!!TUV
 	  1T__-t/$//*$//*&6r%   c                 (   t        | j                        | _        t        | j                        | _        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|       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|       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                  d d|       | j                  j                  |!       y )"Nr   )tearoffborderwidthExitrv   zCtrl-q)label	underlinecommandacceleratorFile)r   r   menu)r   20   )r   variabler   valuer   50r   100d   zResult Countz60 characters<   z80 charactersP   z100 charactersBeforez70 charactersF   z90 charactersZ   z110 charactersn   AfterContextEdit)r   )r	   ra   _result_size_cntx_bf_len_cntx_af_lenr   add_commandrr   add_cascadeadd_radiobuttonset_result_sizeinvokeset_cntx_bf_lenset_cntx_af_lenconfig)rk   menubarfilemenueditmenu
rescntmenucntxmenu
cntxbfmenu
cntxafmenus           r&   rc   z#ConcordanceSearchView._init_menubar   s   "488,"488,"488,txx.:At|| 	 	
 	&AHE+(A.
""&&(( 	# 	
 	""&&(( 	# 	
 	""&&(( 	# 	
 	!>QZP!,(A.
""!&&(( 	# 	
 	""!&&(( 	# 	
 	"""&&(( 	# 	
 	!8qzJ(A.
""!&&(( 	# 	
 	""!&&(( 	# 	
 	"""&&(( 	# 	
 	!7ajI9I&AHEW%r%   c                 V    | j                   j                         | j                  _        y r*   )r   getr`   result_countrk   kwargss     r&   r   z%ConcordanceSearchView.set_result_size   s    "&"3"3"7"7"9

r%   c                 B    | j                   j                         | _        y r*   )r   r   _char_afterr   s     r&   r   z%ConcordanceSearchView.set_cntx_af_len  s    ,,002r%   c                 B    | j                   j                         | _        y r*   )r   r   _char_beforer   s     r&   r   z%ConcordanceSearchView.set_cntx_bf_len  s     --113r%   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rw   z	 Corpus:    rv   r   )justifytextrw   rx   ry   rz   left)sider   r   highlightthicknessra   xnr   r|   anchor)r   r   r   varsetr`   rf   r
   r   r   listCORPORAkeysremover   non_default_corporacorpus_selected)rk   r   
innerframeother_corporaoms        r&   r   z)ConcordanceSearchView._init_corpus_select  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   rv   )r   reliefrw   rz   rx   ry   ra   swr   r   )r
   r   r   r   statusr   r   s     r&   r   z"ConcordanceSearchView._init_status$  sB    ..
 	eD1r%   c                    t        || j                        }t        || j                        }t        |d      | _        | j                  j	                  dddd       t        |d	| j                  d
d
      | _        | j                  j	                  dddd       | j                  j                  d| j                         |j	                          |j	                  ddd       y )Nr   r   )widthr   r      center)r   r|   ry   r   Searchrv   )r   r   r   r   z<KeyPress-Return>ra   r   r   )
r   r   r   	query_boxr   r   searchsearch_buttonrq   search_enter_keypress_handler)rk   r   r   anothers       r&   r   z%ConcordanceSearchView._init_query_box0  s    6d.E.EF

t/F/FGwb1c8L#KK 
 	V#BxP/1S1STUS9r%   c                 $    | j                          y r*   )r   rk   events     r&   r   z3ConcordanceSearchView.search_enter_keypress_handlerA  s    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
                  j                  | j                  | j                         | j
                  j                  | j                  | j                         |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 ) Nrv   )r   horiz)r   orientcourier16)familysizedisablednone40r   )	fontstater   yscrollcommandxscrollcommandwrapr   heightexportselectionr   r{   T)r   r|   r}   )
foregroundyer   )r   r   w)r   r|   r}   r   z   )r   rw   r   ra   r   bottoms)r   r   r   r   r   results_boxr   
tag_config_HIGHLIGHT_WORD_TAG_HIGHLIGHT_WORD_COLOUR_HIGHLIGHT_LABEL_TAG_HIGHLIGHT_LABEL_COLOURr   yviewxviewr
   r   )rk   r   r   i1i2
vscrollbar
hscrollbars          r&   r   z'ConcordanceSearchView._init_results_boxD  s   6]
::rq1
rqA
YT2%>>%>>
 	6tD##$$1L1L 	$ 	
 	##%%$2N2N 	$ 	
 	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           	      >   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       d| _        y )Nr   Previous10rv   r   )r   r   r   r   r   r   r   r   r   Nextrightra   r   )r   r|   r   )	r   r   r   previousprevr   __next__nextcurrent_page)rk   r   r   r  r  s        r&   r   z"ConcordanceSearchView._init_pagingi  s    6d.E.EF
!MM 
 	
	D 			vh	/!MM 
 	
	D 			wx	0U-r%   c                     | j                          | j                          | j                  j                  | j                  dz
         y Nrv   )clear_results_boxfreeze_editabler`   r  r  rj   s    r&   r  zConcordanceSearchView.previous  5     

))A-.r%   c                     | j                          | j                          | j                  j                  | j                  dz          y r  )r  r  r`   r  r  rj   s    r&   r  zConcordanceSearchView.__next__  r  r%   c                     d}d}	 ddl m}  |||| j                        j                          y #  t	        | j
                  ||       Y y xY w)NzNLTK Concordance Search Demo
z#About: NLTK Concordance Search Demor   )Message)messagerp   r   )tkinter.messageboxr  r   showr   ra   )rk   r   ABOUTTITLEr  s        r&   aboutzConcordanceSearchView.about  sD    05	-2EtGLLN	-TXXue,s	   )0 Ac                 T   | j                   j                  t        | j                         | j                   j                  t        | j
                         | j                   j                  t        | j                         | j                   j                  t        | j                         y r*   )
ra   rq   CORPUS_LOADED_EVENThandle_corpus_loadedSEARCH_TERMINATED_EVENThandle_search_terminatedSEARCH_ERROR_EVENThandle_search_errorERROR_LOADING_CORPUS_EVENThandle_error_loading_corpusrj   s    r&   _bind_event_handlersz*ConcordanceSearchView._bind_event_handlers  sf    )4+D+DE-t/L/LM($*B*BC0$2R2RSr%   c                    	 | j                   j                  d      }|t        k(  r| j                  |       nQ|t        k(  r| j                  |       n6|t        k(  r| j                  |       n|t        k(  r| j                  |       	 | j                  j                  t        | j                        | _        y # t        j                  $ r Y Ew xY w)NF)block)r^   r   r#  r$  r%  r&  r'  r(  r)  r*  r\   Emptyra   rg   rh   ri   r   s     r&   ri   zConcordanceSearchView._poll  s    	8JJNNN/E ++))%011--e4,,((/44007XX^^M4::>
 ww 		s   B: :CCc                     d| j                   j                         z   | j                  d<   | j                          | j	                          | j                          y )NzError in loading r   )r   r   r   unfreeze_editable	clear_allr  r   s     r&   r*  z1ConcordanceSearchView.handle_error_loading_corpus  sA    1DHHLLNBF r%   c                     | j                   j                         dz   | j                  d<   | j                          | j	                          | j
                  j                          y )Nz
 is loadedr   )r   r   r   r0  r1  r   	focus_setr   s     r&   r$  z*ConcordanceSearchView.handle_corpus_loaded  sE    "hhlln|;F   "r%   c                    | j                   j                         }| j                  |       d| j                  d<   t	        |      dk(  r'd| j                   j
                  z   | j                  d<   n| j                   j                  | _        | j                          | j                  j                  | j                         y )N r   r   zNo results found for )r`   get_resultswrite_resultsr   lenquerylast_requested_pager  r0  r   xview_moveto_FRACTION_LEFT_TEXT)rk   r   resultss      r&   r&  z.ConcordanceSearchView.handle_search_terminated  s    **((*7# Fw<1"9DJJ<L<L"LDKK $

 > >D %%d&>&>?r%   c                 p    d| j                   j                  z   | j                  d<   | j                          y )NzError in query r   )r`   r9  r   r0  r   s     r&   r(  z)ConcordanceSearchView.handle_search_error  s+    /$**2B2BBF r%   c                 Z    | j                   j                         }| j                  |       y r*   )r   r   re   )rk   argsnew_selections      r&   r   z%ConcordanceSearchView.corpus_selected  s    'r%   c                     | j                   j                  |k7  rAd|z   dz   | j                  d<   | j                          | j                   j	                  |       y y )NzLoading z...r   )r`   selected_corpusr   r  re   )rk   	selections     r&   re   z!ConcordanceSearchView.load_corpus  sO    ::%%2",y"85"@DKK  "JJ""9- 3r%   c                 j   d| _         | j                          | j                  j                          | j                  j                         }t        |j                               dk(  ry d|z   | j                  d<   | j                          | j                  j                  || j                   dz          y )Nr   zSearching for r   rv   )r  r  r`   reset_resultsr   r   r8  stripr   r  r   )rk   r9  s     r&   r   zConcordanceSearchView.search  s     

  """$u{{}".6F

%!2!2Q!67r%   c                 t   d| j                   d<   d}|D ]  }|d   j                         |d   |d   }}}t        |      dk7  s0|| j                  k  r| j	                  |||      \  }}}||| j                  z
  || j
                  z    }|t        |      k(  s|dz  }| j                   j                  t        |      dz   |       | j                  |||      \  }}	|D ]_  }
| j                   j                  | j                  t        |      dz   t        |
d         z   t        |      dz   t        |
d         z          a |	D ]_  }
| j                   j                  | j                  t        |      dz   t        |
d         z   t        |      dz   t        |
d         z          a |dz  } d	| j                   d<   y )
Nnormalr   rv   r   r   
z.0.r   )r   rG  r8  r   padr   insertstrwords_and_labelstag_addr   r  )rk   r=  roweachsentpos1pos2sentenceword_markerslabel_markersmarkers              r&   r7  z#ConcordanceSearchView.write_results  s   $,!D#Aw}}Qa$D4yA~$+++'+xxdD'A$D$t'8'8 84$BRBR;RSc'l*$H  ''C4B.2.C.CD$PT.U+m*F$$,,00C3VAY7C3VAY7 + ,F$$,,11C3VAY7C3VAY7 , q- . %/!r%   c                    ||| }g g }}|j                  d      }d}|D ]  }	|	dk(  r|dz  }n|	j                  d      \  }
}|j                  | j                  |z   | j                  |z   t        |
      z   f       |t        |
      dz   z  }|j                  | j                  |z   | j                  |z   t        |      z   f       |t        |      z  }|dz  } ||fS )N r   r5  rv   /)splitappendr   r8  )rk   rV  rT  rU  
search_expwordslabelslabeled_wordsindexrR  wordr   s               r&   rO  z&ConcordanceSearchView.words_and_labels  s    d4(
Bv"((-!Drz
"jjoe&&.0A0AE0ICPTI0UV TQ&&&.0A0AE0ICPUJ0VW U#QJE " f}r%   c                     || j                   k\  r|||fS | j                   |z
  }dj                  dg|z        |z   }|||z   ||z   fS )Nr5  r[  )r   join)rk   rS  hstarthendds        r&   rL  zConcordanceSearchView.pad  s[    T&&&%%&wwuqy!D(VaZ))r%   c                     | j                   y | j                   j                  | j                         | j                   j                          d | _         y r*   )ra   after_cancelrg   rr   )rk   r   s     r&   rr   zConcordanceSearchView.destroy  s<    88djj)r%   c                     | j                   j                  dt               | j                  j	                          | j                          y Nr   )r   deleter   r`   reset_queryr  rj   s    r&   r1  zConcordanceSearchView.clear_all  s2    a%

  r%   c                     d| j                   d<   | j                   j                  dt               d| j                   d<   y )NrI  r   z1.0r   )r   rn  r   rj   s    r&   r  z'ConcordanceSearchView.clear_results_box!  s8    $,!s+$.!r%   c                 |    d| j                   d<   d| j                  d<   d| j                  d<   d| j                  d<   y )Nr   r   )r   r   r  r  rj   s    r&   r  z%ConcordanceSearchView.freeze_editable&  s<    ",w&07#'		''		'r%   c                 `    d| j                   d<   d| j                  d<   | j                          y )NrI  r   )r   r   set_paging_button_statesrj   s    r&   r0  z'ConcordanceSearchView.unfreeze_editable,  s,    "*w&.7#%%'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   rv   r   r   rI  )r  r  r`   has_more_pagesr  rj   s    r&   rs  z.ConcordanceSearchView.set_paging_button_states1  sm    !T%6%6!%;!+DIIg!)DIIg::$$T%6%67!)DIIg!+DIIgr%   c                 >    | j                   j                  |d       y )Ntail)when)ra   event_generater   s     r&   
fire_eventz ConcordanceSearchView.fire_event;  s    F3r%   c                 R    t               ry  | j                  j                  |i | y r*   )r   ra   mainloop)rk   r@  r   s      r&   r|  zConcordanceSearchView.mainloop?  s#    94*6*r%   N)-__name__
__module____qualname__r   r  r   r  r  r<  rl   rb   rd   rc   r   r   r   r   r   r   r   r   r   r  r  r!  r+  ri   r*  r$  r&  r(  r   re   r   r7  rO  rL  rr   r1  r  r  r0  rs  rz  r|  r$   r%   r&   rX   rX   v   s     $&'' ?	7]&~:34::
2:"#>J2/
/
-T? #
@!(.	8/8**!
/
((
,4+r%   rX   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 G d dej                        Z G d dej                        Zy)r_   c                     || _         t        | _        t        | _        d | _        | j                          | j                          d | _        d| _	        y rm  )
r^   _CORPORAr   _DEFAULTrf   rC  ro  rF  r   last_sent_searched)rk   r^   s     r&   rl   zConcordanceSearchModel.__init__F  sH    
&# "#r%   c                     g }|j                  t        | j                  j                                      |j	                  | j
                         |j                          |S r*   )extendr   r   r   r   rf   sort)rk   copys     r&   r   z*ConcordanceSearchModel.non_default_corporaP  sE    D**,-.D''(		r%   c                 d    || _         g | _        | j                  ||       }|j                          y r*   )rC  r#   
LoadCorpusstart)rk   namerunner_threads      r&   re   z"ConcordanceSearchModel.load_corpusW  s.    #d3r%   c                 v    || _         || _        | j                  | || j                        j	                          y r*   )r9  r:  SearchCorpusr   r  )rk   r9  pages      r&   r   zConcordanceSearchModel.search]  s2    
#' $d&7&78>>@r%   c                     || _         t        | j                        |k  r| j                  | j                  |       y | j
                  j                  t               y r*   )r:  r8  r=  r   r9  r^   putr%  rk   r  s     r&   r  zConcordanceSearchModel.nextb  s>    #' t||t#KK

D)JJNN23r%   c                 P    || _         | j                  j                  t               y r*   )r:  r^   r  r%  r  s     r&   r  zConcordanceSearchModel.previ  s    #' 

./r%   c                 .    d| _         g | _        d | _        y rm  )r  r=  	last_pagerj   s    r&   rF  z$ConcordanceSearchModel.reset_resultsm  s    "#r%   c                     d | _         y r*   )r9  rj   s    r&   ro  z"ConcordanceSearchModel.reset_queryr  s	    
r%   c                 B    | j                   j                  |dz
  |       y r  )r=  rM  )rk   r  	resultsets      r&   set_resultsz"ConcordanceSearchModel.set_resultsu  s    D1Hi0r%   c                 :    | j                   | j                  dz
     S r  )r=  r:  rj   s    r&   r6  z"ConcordanceSearchModel.get_resultsx  s    ||D44q899r%   c                 ~    | j                   g k(  s| j                   d   g k(  ry| j                  y|| j                  k  S )Nr   FT)r=  r  r  s     r&   ru  z%ConcordanceSearchModel.has_more_pages{  s<    <<2aB!6>>!dnn$$r%   c                       e Zd Zd Zd Zy)!ConcordanceSearchModel.LoadCorpusc                 `    t         j                  j                  |        ||c| _        | _        y r*   )	threadingThreadrl   r`   r  )rk   r  r`   s      r&   rl   z*ConcordanceSearchModel.LoadCorpus.__init__  s&    %%d+$)4!DJ	r%   c                    	  | j                   j                  | j                            }|D cg c]  }dj                  d |D               c}| j                   _        | j                   j
                  j                  t               y c c}w # t        $ r>}t        |       | j                   j
                  j                  t               Y d }~y d }~ww xY w)Nr[  c              3   2   K   | ]  \  }}|d z   |z     yw)r\  Nr$   ).0r   ts      r&   	<genexpr>z8ConcordanceSearchModel.LoadCorpus.run.<locals>.<genexpr>  s     <tVaQWq[ts   )r`   r   r  rf  r#   r^   r  r#  	Exceptionprintr)  )rk   tsrS  r   s       r&   runz%ConcordanceSearchModel.LoadCorpus.run  s    A2TZZ''		24IK+IKCHH<t<<+

' 

  $$%89+  Aa

  $$%?@@As(   ,B B	;B 	B 	C4CCN)r}  r~  r  rl   r  r$   r%   r&   r  r    s    	0		Ar%   r  c                       e Zd Zd Zd Zd Zy)#ConcordanceSearchModel.SearchCorpusc                 n    |||c| _         | _        | _        t        j                  j                  |        y r*   )r`   countr  r  r  rl   )rk   r`   r  r  s       r&   rl   z,ConcordanceSearchModel.SearchCorpus.__init__  s,    05ud-DJ
DI%%d+r%   c                    | j                         }g dd}}}| j                  j                  | j                  j                  d  D ]  }	 t	        j
                  ||      }|rh|j                  ||j                         |j                         f       |dz  }|| j                  kD  r$| j                  xj                  |dz
  z  c_         n|dz  } | j                  t        |      k\  rd| j                  xj                  |dz
  z  c_        | j                   | j                  _        | j                  j%                  | j                   |       n)| j                  j%                  | j                   |d d        | j                  j                  j                  t&               y # t        j                  $ rG | j                  j                          | j                  j                  j                  t               Y  y w xY w)Nr   rv   )processed_queryr`   r#   r  rer   errorrF  r^   r  r'  r^  r  endr  r8  r  r  r  r%  )rk   r\   sent_posi
sent_countrS  ms          r&   r  z'ConcordanceSearchModel.SearchCorpus.run  s   $$&A&(!QaH

//

0M0M0OP		!T*A
 OOT1779aeeg$>?FA4::~

55aG5a
 Q zzS]*

--a?-'+yy

$

&&tyy(;

&&tyy(3B-@JJ  !89# xx JJ,,.JJ$$(();<s   FAG87G8c                    g }| j                   j                  j                         D ]  }t        j                  dd|      }t        j
                  d|      r*|j                  t        t        z   dz   |z   t        z          Zd|v r |j                  t        |z   t        z          ~|j                  t        |z   dz   t        z   t        z           dj                  |      S )Nz\.z[^/ ]z[A-Z]+$r\  r[  )
r`   r9  r]  r  submatchr^  BOUNDARYWORD_OR_TAGrf  )rk   newterms      r&   r  z3ConcordanceSearchModel.SearchCorpus.processed_query  s    C

((..0vveXt488It,JJx+5;dBXMND[JJx$9:JJx$4{BXMN 1 88C= r%   N)r}  r~  r  rl   r  r  r$   r%   r&   r  r    s    	,	:2
	!r%   r  N)r}  r~  r  rl   r   re   r   r  r  rF  ro  r  r6  ru  r  r  r  r  r$   r%   r&   r_   r_   E  s`    $A
40
1:%AY%% A (!y'' (!r%   r_   c                  8    t               } | j                          y r*   )rX   r|  )ri  s    r&   appr    s    AJJLr%   __main__r  )2r^   r\   r  r  tkinterr   r   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   nltk.draw.utilr   	nltk.utilr   r  r  r#  r%  r'  r)  rh   r  r  rX   r_   r  r}  __all__r$   r%   r&   <module>r     s    	         $ $ ( # , 
 79+ .9 9	9
 ) +9 0 29 3 59 2 49" : <#9( 2 4)9. 0 2/94  ?596 , .79< *+J=9> 7 9?9D DE9F * ,G9L 9M9N ( *O9T 'U4 /N; /P;.m9xL+ L+^u! u!p
 zE'r%   