
3Ic           @   sN  d  Z  d d k Z d d k l Z l Z d d k Z d d k Z d d k Z d d k Z	 d d k
 Td d k l Z l Z l Z l Z d d k l Z d d k Td d k l Z d d k l Z l Z d	 e f d
     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e f d     YZ d e  f d     YZ! d e f d     YZ" d e" e# f d     YZ$ d e" e% f d     YZ& d e" e' f d     YZ( d e" e) f d      YZ* d! e" e+ f d"     YZ, d# e" e f d$     YZ- d% e f d&     YZ. d'   Z/ e0 d( j o e/   n d) g Z1 d S(*   s  
A graphical tool for exploring chart parsing.

Chart parsing is a flexible parsing algorithm that uses a data
structure called a "chart" to record hypotheses about syntactic
constituents.  Each hypothesis is represented by a single "edge" on
the chart.  A set of "chart rules" determine when new edges can be
added to the chart.  This set of rules controls the overall behavior
of the parser (e.g., whether it parses top-down or bottom-up).

The chart parsing tool demonstrates the process of parsing a single
sentence, with a given grammar and lexicon.  Its display is divided
into three sections: the bottom section displays the chart; the middle
section displays the sentence; and the top section displays the
partial syntax tree corresponding to the selected edge.  Buttons along
the bottom of the window are used to control the execution of the
algorithm.

The chart parsing tool allows for flexible control of the parsing
algorithm.  At each step of the algorithm, you can select which rule
or strategy you wish to apply.  This allows you to experiment with
mixing different strategies (e.g., top-down and bottom-up).  You can
exercise fine-grained control over the algorithm by selecting which
edge you wish to apply a rule to.
iN(   t   asksaveasfilenamet   askopenfilename(   t   *(   t   tokenizet   Treet   Nonterminalt	   parse_cfg(   t   in_idle(   t	   CFGEditor(   t   tree_to_treesegmentt   TreeSegmentWidgett   EdgeListc           B   s'   e  Z e i d  Z d   Z d   Z RS(   t
   rightarrowc         C   s\   | i  d d d | i  d d d d d | i  d	 d d
 | i  d d d d d d  S(   Nt   terminalt
   foregrounds   #006000t   arrowt   fontt   symbolt	   underlinet   0t   dots   #000000t   nonterminalt   bluet	   helveticait   bold(   s	   helveticais   bold(   t
   tag_config(   t   selft
   textwidgett   options(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _init_colortagsA   s
    c         C   s   g  } | i  d | i   d f  | i  |  i d f  x t | i    D]x \ } } | | i   j o | i  d	  n t | t  o! | i  d | i   d f  qL | i  d | d f  qL W| i	   o | i  d
  n | S(   Ns   %s	R   R   s    *R   s    %ss    %rR   (   s    *s   dot(   s    *s   dot(
   t   appendt   lhst   ARROWt	   enumeratet   rhsR   t
   isinstanceR   R   t   is_complete(   R   t   itemt   contentst   it   elt(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt
   _item_reprH   s     !(   t   __name__t
   __module__t   SymbolWidgett   SYMBOLSR    R   R)   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   >   s   	t   ChartMatrixViewc           B   s   e  Z d  Z e d e d  Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d	   Z d
   Z d   Z d   Z e d  Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z d   Z d   Z d   Z RS(   sS   
    A view of a chart that displays the contents of the corresponding matrix.
    s   Chart Matrixc         C   s   | |  _  g  |  _ g  |  _ d  |  _ | oL t i |  |  _ |  i i |  |  i i	 d |  i
  |  i |  i  n t i |  |  _ |  i |  i  |  i |  i  | o |  i |  i  n
 d  |  _ h  |  _ d |  _ |  i   d  S(   Ns   <Control-q>i    (   t   _chartt   _cellst   _markst   Nonet   _selected_cellt   Tkintert   Toplevelt   _roott   titlet   bindt   destroyt
   _init_quitt   Framet   _init_matrixt
   _init_listt   _init_numedgest   _numedges_labelt
   _callbackst
   _num_edgest   draw(   R   t   parentt   chartt   toplevelR7   t   show_numedges(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   __init___   s$    							c         C   s>   t  i | d d d |  i } | i d d d d d d	  d  S(
   Nt   textt   Quitt   commandt   sidet   bottomt   expandi    t   fillt   none(   R4   t   ButtonR9   t   pack(   R   t   roott   quit(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR:   |   s    c         C   s   t  i | d d d d } | i d d d d d	 d
 d d d d  t  i | d d d d d d |  _ |  i i d d d d  d  S(   Nt   borderi   t   relieft   sunkenRM   i    RN   RO   t   padxi   t   padyi   RK   t   topt   widthi   t   heightt
   backgroundt   white(   R4   R;   RQ   t   Canvast   _canvas(   R   RR   t   cframe(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR<      s
    (c         C   s;   t  i | d d |  _ |  i i d d d d d d  d  S(	   NRH   s   0 edgesRM   i    RN   RO   RK   RY   (   R4   t   LabelR?   RQ   (   R   RR   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR>      s    c      	   C   ss   t  | g  d d d d |  _ |  i i d d d d d	 d
 d d  |  d  } |  i i d |  |  i i   d  S(   NRZ   i   R[   i   RK   RY   RM   i   RN   t   bothRX   i   c         S   s   | i  d |   d  S(   Nt   select(   t   _fire_callbacks(   t   edgeR   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   cb   s    Rc   (   R   t   _listRQ   t   add_callbackt   focus(   R   RR   Rf   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR=      s
    %c         G   s@   |  i  d  j o d  Sn y |  i  i   Wn n Xd  |  _  d  S(   N(   R6   R2   R9   (   R   t   e(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR9      s    c         C   s4   | |  i  j	 o  | |  _  d |  _ |  i   n d  S(   Ni    (   R/   RA   RB   (   R   RD   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt	   set_chart   s    		c         C   s2  |  i  d  j o d  Sn t |  i  } g  } t |  D]. } | g  } t |  D] } | d qR ~ q8 ~ } x1 |  i D]& } | | i   | i   c d 7<qy Wx t |  D]} x	t | |  D] } | | | d j o
 d } nK d t d d d | | | d  t	 d d d | | | d  f } |  i | | }	 |  i
 i |	 d	 | | | f |  i j o0 |  i
 i |	 d
 d d d |  i
 i |	  q |  i
 i |	 d
 d d d q Wq Wt |  i i d |  i   }
 |  i i |
  |  i i   |  _ |  i d  j	 o d |  i |  i d <n d  S(   Ni    i   t   gray20s   #00%02x%02xi   i2   i   i
   RN   t   outlines   #00ffffRZ   i   t   blackt   spans   %d edgesRH   (   R6   R2   t   lenR0   t   rangeR/   t   startt   endt   mint   maxR_   t
   itemconfigR3   t	   tag_raiset   listRc   Rg   t   sett	   num_edgesRA   R?   (   R   t   Nt   _[1]t   jt   _[2]R'   t
   cell_edgesRe   t   colort   cell_tagt   edges(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   update   s8    H
 $  
 'c         C   s$   |  i  i d d d |  i   d  S(   Nt   inactiveboxt   statet   hidden(   R_   Rv   R   (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   activate   s    c         C   s$   |  i  i d d d |  i   d  S(   NR   R   t   normal(   R_   Rv   R   (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt
   inactivate   s    c         C   s   d |  i  i | h   | <d  S(   Ni   (   R@   t
   setdefault(   R   t   eventt   func(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRh      s    c         C   s;   | d  j o |  i | =n y |  i | | =Wn n Xd  S(   N(   R2   R@   (   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   remove_callback   s    c         G   sG   |  i  i |  p d  Sn x% |  i  | i   D] } | |   q/ Wd  S(   N(   R@   t   has_keyt   keys(   R   R   t   argst   cb_func(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRd      s     c         C   s   |  i  d  j o d  Sn | | f |  i j o! |  i i   |  i j o d  Sn | | f |  _ |  i   |  i d | |  d  S(   Nt   select_cell(   R6   R2   R3   R/   Rz   RA   R   Rd   (   R   R'   R}   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR      s    !
c         C   s?   |  i  d  j o d  Sn d  |  _ |  i i g   |  i   d  S(   N(   R6   R2   R3   Rg   Ry   R   (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   deselect_cell   s    	c         C   s8   |  i  | | f j o |  i   n |  i | |  d  S(   N(   R3   R   R   (   R   R'   R}   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _click_cell   s    c         C   s'   |  i  | i     |  i i |  d  S(   N(   R   Ro   Rg   t   view(   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt	   view_edge   s    c         C   s?   |  i  d  j o d  Sn |  i | i     |  i i |  d  S(   N(   R6   R2   R   Ro   Rg   t   mark(   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt	   mark_edge   s    c         C   s,   |  i  d  j o d  Sn |  i i |  d  S(   N(   R6   R2   Rg   t   unmark(   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   unmark_edge   s    c         C   s?   |  i  d  j o d  Sn |  i | i     |  i i |  d  S(   N(   R6   R2   R   Ro   Rg   t   markonly(   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   markonly_edge   s    c         C   s  |  i  d  j o d  Sn d } } d } |  i } | i d  |  i i   d } t | d  | | } t | d  | | | } | i d  x t |  D] } | i | d | | | d | d | d	 d
 | i | | | d | | | | d d | d	 d | i	 | | | d | | | | | | d | d d | i	 | | | | | | | | | | d d q W| i
 | | | | | | | | d d g  }	 t |  D]. }
 |	 g  } t |  D] } | d  q~ q~	 |  _ x t |  D] } x t | |  D] }
 | i
 |
 | | | | | |
 d | | | d | | d d } | |  i | |
 <|  | |
 d  } | i | d |  qWqWt | d  t | d  } } | i
 d d | d | d d d d d d d } | i |  |  i   d  S(   Ni   i   t   alli   RZ   R[   i   RH   t   anchorRj   t   nt   dasht   .RN   Rl   c         S   s   | i  | |  d  S(   N(   R   (   R   R   R'   R}   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRf   )  s    s
   <Button-1>iid   t   gray50R   R   t   tagR   (   R6   R2   R_   t   deleteR/   t
   num_leavest   intRq   t   create_textt   create_linet   create_rectangleR0   t   tag_bindt	   tag_lowerR   (   R   t   LEFT_MARGINt
   BOT_MARGINt
   TOP_MARGINt   cR{   t   dxt   dyR'   R|   R}   R~   t   tRf   t   xmaxt   ymax(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRB     sP    
	 #+$$K  	!	c         O   s   |  i  i | |   d  S(   N(   R6   RQ   (   R   R   t   kwargs(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRQ   6  s    (   R*   R+   t   __doc__t   Truet   FalseRG   R:   R<   R>   R=   R9   Rk   R   R   R   Rh   R2   R   Rd   R   R   R   R   R   R   R   RB   RQ   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR.   [   s0   							%											2t   ChartResultsViewc           B   sz   e  Z e d   Z e d  Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d   Z d	   Z d
   Z d   Z RS(   c         C   s  | |  _  | |  _ g  |  _ d |  _ g  |  _ d  |  _ d  |  _ | o< t i	 |  |  _
 |  i
 i d  |  i
 i d |  i  n t i |  |  _
 | o t i |  i
  } | i d d d d d d	  t i | d
 d d |  i i d d  t i | d
 d d |  i i d d  t i | d
 d d |  i i d d  n t |  i
 d d |  _ |  i i d d d d d d  |  i   d  S(   Ni
   s!   Chart Parser Application: Resultss   <Control-q>RK   RL   RM   i    RN   t   xRH   RI   RJ   t   rights	   Print Allt   lefts   Print Selectiont   closeenoughi   RY   i   Rb   (   R/   t   _grammart   _treest   _yt   _treewidgetsR2   t
   _selectiont
   _selectboxR4   R5   R6   R7   R8   R9   R;   RQ   RP   t	   print_allt   print_selectiont   CanvasFramet   _cframeR   (   R   RC   RD   t   grammarRE   t   buttons(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRG   >  s0    							c         C   s   |  i  d  j o d  Sn | d  j	 oR | i   |  i i   j o d  Sn | i   d |  i i   f j o d  Sqw n xD |  i i |  i i    D]' } | |  i	 j o |  i
 |  q q Wd  S(   Ni    (   R6   R2   R   R   Rr   Ro   R/   R   t   parsesR   t   _add(   R   Re   t   parse(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   `  s    $. c         C   s   |  i  i |  |  i i   } t | |  } |  i i |  |  i i | d |  i  | i |  i	  | i
   d d |  _ d  S(   Ni
   i   (   R   R   R   t   canvasR	   R   t
   add_widgetR   t
   bind_clickt   _clickt   bbox(   R   R   R   t
   treewidget(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   k  s    c      	   C   s   |  i  i   } |  i d  j	 o | i |  i  n | |  _ | i   \ } } } } | i | | | | d d d d |  _ d  S(   NRZ   i   Rm   s   #088(   R   R   R   R2   R   R   R   R   (   R   t   widgetR   t   x1t   y1t   x2t   y2(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   }  s    	c         C   sY   | | i    d <xB | i   D]4 } t | t  o |  i | |  q | | d <q Wd  S(   NR   (   t   nodet   subtreesR#   R
   t   _color(   R   R   R   t   child(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s     c         G   s)   |  i  d  j o d  Sn |  i i   d  S(   N(   R6   R2   R   t   print_to_file(   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c         G   s!  |  i  d  j o d  Sn |  i d  j o t i d d  n |  i i   } x5 |  i D]* } | |  i j	 o |  i i |  qU qU W| i	 |  i
  |  i i   \ } } } } |  i i d | d |  d | | d | | d f | d <|  i i   |  i g |  _ |  i   |  i   d  S(   Ns   Print Errors   No tree selectedi
   s	   0 0 %s %si   t   scrollregion(   R6   R2   R   t   tkMessageBoxt	   showerrorR   R   R   t   destroy_widgetR   R   R   t   moveR   t   clearR   (   R   Rj   R   R   R   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s     
 $
c         C   s   |  i  d  j o d  Sn x! |  i D] } |  i i |  q" Wg  |  _ g  |  _ |  i d  j	 o |  i i   i |  i	  n d  |  _ d |  _
 d  S(   Ni
   (   R6   R2   R   R   R   R   R   R   R   R   R   (   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    
 			c         C   s!   |  i    | |  _ |  i   d  S(   N(   R   R/   R   (   R   RD   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRk     s    
	c         C   s!   |  i    | |  _ |  i   d  S(   N(   R   R   R   (   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   set_grammar  s    
	c         G   s@   |  i  d  j o d  Sn y |  i  i   Wn n Xd  |  _  d  S(   N(   R6   R2   R9   (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR9     s    c         O   s   |  i  i | |   d  S(   N(   R6   RQ   (   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRQ     s    (   R*   R+   R   RG   R2   R   R   R   R   R   R   R   Rk   R   R9   RQ   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   =  s   "										t   ChartComparerc           B   s*  e  Z d  Z h  d d <e i d d <e i d 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# d$ g 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 RS(%   s  

    @ivar _root: The root window

    @ivar _charts: A dictionary mapping names to charts.  When 
        charts are loaded, they are added to this dictionary.
    
    @ivar _left_chart: The left L{Chart}.
    @ivar _left_name: The name C{_left_chart} (derived from filename)
    @ivar _left_matrix: The L{ChartMatrixView} for C{_left_chart}
    @ivar _left_selector: The drop-down C{MutableOptionsMenu} used
          to select C{_left_chart}.
    
    @ivar _right_chart: The right L{Chart}.
    @ivar _right_name: The name C{_right_chart} (derived from filename)
    @ivar _right_matrix: The L{ChartMatrixView} for C{_right_chart}
    @ivar _right_selector: The drop-down C{MutableOptionsMenu} used
          to select C{_right_chart}.
    
    @ivar _out_chart: The out L{Chart}.
    @ivar _out_name: The name C{_out_chart} (derived from filename)
    @ivar _out_matrix: The L{ChartMatrixView} for C{_out_chart}
    @ivar _out_label: The label for C{_out_chart}.

    @ivar _op_label: A Label containing the most recent operation.
    t   -t   intersectiont   andt   uniont   orc         G   s-  d g d } t  |  |  _ d |  _ d |  _ |  i |  _ |  i |  _ h  |  i d <|  _ |  i |  _ d  |  _	 t
 i   |  _ |  i i d  |  i i d |  i  |  i i d |  i  |  i |  i  |  i |  i  |  i |  i  |  i |  i  |  i |  i  x | D] } |  i |  qWd  S(   Nt    i   R2   s   Chart Comparisons   <Control-q>s   <Control-x>(   t   Chartt   _emptychartt
   _left_namet   _right_namet   _left_chartt   _right_chartt   _chartst
   _out_chartR2   t	   _operatorR4   t   TkR6   R7   R8   R9   t   _init_menubart   _init_chartviewst   _init_dividert   _init_buttonst   _init_bindingst
   load_chart(   R   t   chart_filenamest   faketokt   filename(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRG     s*    			 c         G   s@   |  i  d  j o d  Sn y |  i  i   Wn n Xd  |  _  d  S(   N(   R6   R2   R9   (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR9     s    c         O   s   d  S|  i  i | |   (   N(   R6   t   mainloop(   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c      	   C   s  t  i |  } t  i | d d } | i d d d d d d d |  i  | i d d	 d d
 d d d |  i  | i   | i d d d d d |  i d d  | i d d d d d |  t  i | d d } | i d d d |  i d d  | i d d d |  i	 d d  | i d d d |  i
 d d  | i   | i d d d |  i  | i d d d d d |  |  i i d |  d  S(   Nt   tearoffi    t   labels
   Load Chartt   accelerators   Ctrl-oR   RJ   s   Save Outputs   Ctrl-st   Exiti   s   Ctrl-xt   Filet   menut   Intersectiont   +t   UnionR   t
   DifferenceR   s   Swap Chartst   Compare(   R4   t   Menut   add_commandt   load_chart_dialogt   save_chart_dialogt   add_separatorR9   t   add_cascadet   _intersectiont   _uniont   _differencet   _swapchartsR6   t   config(   R   RR   t   menubart   filemenut   opmenu(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s2    
			

c         C   s;   t  i | d d d d } | i d d d d d	 d  d  S(
   NRT   i   RU   RV   RK   RY   RN   R   t   ipady(   R4   R;   RQ   (   R   RR   t   divider(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   =  s    c         C   s  d$ } d% } t  i | d d } | i d d d d	 d
 d  t  i | d d d d } | i d d d d d d d d	 d
 d  t | |  i i   d |  i |  _ |  i i d d d d d
 d  t | |  i	 d t
 d t |  _ |  i i d d d d d d d d	 d
 d  |  i i d |  i  |  i i d |  i  |  i i   t  i | d d d d d d d  | |  _ |  i i d d d d d d  t  i | d d d d } | i d d d d d d d d	 d
 d  t | |  i i   d |  i |  _ |  i i d d d d d
 d  t | |  i	 d t
 d t |  _ |  i i d d d d d d d d	 d
 d  |  i i d |  i  |  i i d |  i  |  i i   t  i | d d! d d d d d  | i d d d d d d  t  i | d d d d } | i d d d d d d d d	 d
 d  t  i | d d" |  _ |  i i d d d d#  t | |  i	 d t
 d t |  _ |  i i d d d d d d d d	 d
 d  |  i i d |  i  |  i i d |  i  |  i i   d  S(&   NR   iR   R\   s   #c0c0c0RK   RY   RM   i   RN   Rb   RT   i   RU   t   grooveR   RW   i   RX   i   RJ   i   R   RE   RF   RL   Rc   R   RH   t    RZ   R   t   =t   Outputi	   (   s   symboli(   s	   helveticai(   R4   R;   RQ   t   MutableOptionMenuR   R   t   _select_leftt   _left_selectorR.   R   R   R   t   _left_matrixRh   t   select_edgeR   R   Ra   t	   _op_labelt   _select_rightt   _right_selectort   _right_matrixt
   _out_labelt   _out_matrix(   R   RR   t   opfontt   eqfontt   framet	   cv1_framet	   cv2_framet	   out_frame(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   A  s^    (!(!(c      	   C   s  t  i |  } | i d d d d d d d d  t  i | d	 d
 d |  i i d d  t  i | d	 d d |  i i d d  t  i | d	 d d |  i i d d  t  i | d d i d d  t  i | d	 d d |  i i d d  t  i | d	 d d |  i i d d  d  S(   NRK   RL   RX   i   RN   R   RM   i    RH   R  RJ   R   R  R  RZ   i   s   Swap Chartss   Detatch OutputR   (	   R4   R;   RQ   RP   R  R  R  R  t   _detatch_out(   R   RR   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   }  s    "c         C   s   | i  d |  i  d  S(   Ns   <Control-o>(   R8   R  (   R   RR   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c         C   sX   | |  _  |  i | |  _ |  i i |  i  | d j o |  i i   n |  i   d  S(   NR2   (   R   R   R   R!  Rk   R   t	   _apply_op(   R   t   name(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s
    	c         C   sX   | |  _  |  i | |  _ |  i i |  i  | d j o |  i i   n |  i   d  S(   NR2   (   R   R   R   R&  Rk   R   R0  (   R   R1  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR$    s
    	c         C   s^   |  i  d j o |  i   n= |  i  d j o |  i   n |  i  d j o |  i   n d  S(   NR   R   R   (   R   R  R  R  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR0    s    s   Pickle files   .pickles	   All filesR   c         G   s}   t  d |  i d d  } | p d  Sn y  t i |  i t | d   Wn/ t j
 o# } t i d d | | f  n Xd  S(   Nt	   filetypest   defaultextensions   .picklet   ws   Error Saving Charts   Unable to open file: %r
%s(	   R    t   CHART_FILE_TYPESt   picklet   dumpR   t   opent	   ExceptionR   R   (   R   R   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    	#	c         G   sn   t  d |  i d d  } | p d  Sn y |  i |  Wn/ t j
 o# } t i d d | | f  n Xd  S(   NR2  R3  s   .pickles   Error Loading Charts   Unable to open file: %r
%s(   R   R5  R   R9  R   R   (   R   R   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    		c         C   s   t  i t | d   } t i i |  } | i d  o | d  } n | i d  o | d  } n | |  i | <|  i i	 |  |  i
 i	 |  |  i |  i j o |  i i |  n( |  i |  i j o |  i
 i |  n d  S(   Nt   rs   .pickleis   .charti(   R6  t   loadR8  t   ost   patht   basenamet   endswithR   R   t   addR%  R   R   Ry   R   (   R   R   RD   R1  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c         C   s+   |  i  i   |  i i   |  i i   d  S(   N(   R!  R   R&  R(  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _update_chartviews  s    c         C   s   | |  i  j o |  i i |  n |  i i   | |  i j o |  i i |  n |  i i   | |  i j o |  i i |  n |  i i   d  S(   N(   R   R!  R   R   R   R&  R   R(  (   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR"    s    c         C   s=   |  i  i | |  |  i i | |  |  i i | |  d  S(   N(   R!  R   R&  R(  (   R   R'   R}   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c         C   sv   |  i    p d  Sn t |  i i    } x5 |  i D]* } | |  i j o | i | g   q4 q4 W|  i d |  d  S(   NR   (   t   _checkcompatR   R   t   tokensR   t   insertt   _update(   R   t	   out_chartRe   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    
 c         C   sv   |  i    p d  Sn t |  i i    } x5 |  i D]* } | |  i j o | i | g   q4 q4 W|  i d |  d  S(   NR   (   RB  R   R   RC  R   RD  RE  (   R   RF  Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    
 c         C   s   |  i    p d  Sn t |  i i    } x! |  i D] } | i | g   q4 Wx! |  i D] } | i | g   qX W|  i d |  d  S(   NR   (   RB  R   R   RC  RD  R   RE  (   R   RF  Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    
 
 c         C   s7   |  i  |  i } } |  i i |  |  i i |  d  S(   N(   R   R   R   Ry   R%  (   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    c         C   s   |  i  i   |  i i   j pE |  i  i   |  i i   j p& |  i  |  i j p |  i |  i j oA |  i |  _ |  i i |  i  |  i i   d |  i	 d <t
 Sn t Sd  S(   NR  RH   (   R   RC  R   t   property_namesR   R   R(  Rk   R   R'  R   R   (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRB    s    c         C   s]   | |  _  |  i | |  i d <| |  _ |  i i |  d |  i |  i  |  i f |  i d <d  S(   NRH   s   %s %s %s(	   R   t	   _OPSYMBOLR#  R   R(  Rk   R   R   R'  (   R   t   operatorRF  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRE  (  s    			c         C   s=   |  i  |  _ |  i i |  i  d |  i d <|  i i   d  S(   NR  RH   (   R   R   R(  Rk   R#  R   (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _clear_out_chart1  s    c         C   s$   t  |  i |  i d |  i d d  S(   NR7   RH   (   R.   R6   R   R'  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR/  7  s    (   s   Pickle files   .pickle(   s	   All filesR   (    R*   R+   R   R,   R-   RH  RG   R9   R   R   R   R   R   R   R  R$  R0  R5  R  R  R   RA  R"  R   R  R  R  R  RB  RE  RJ  R/  (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s>   	&			!		<									
	
							
	
						t	   ChartViewc           B   s  e  Z d  Z d Z d Z d Z d Z e d  Z d   Z	 d d d d	  Z
 d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z d   Z d   Z d d  Z d   Z d   Z e e d  Z d d  Z e d  Z d d  Z d   Z d   Z d    Z d!   Z  d"   Z! e d#  Z" d$   Z# d%   Z$ d d&  Z% d'   Z& d(   Z' e d)  Z( d*   Z) RS(+   s  
    A component for viewing charts.  This is used by C{ChartParserApp} to
    allow students to interactively experiment with various chart
    parsing techniques.  It is also used by C{Chart.draw()}.

    @ivar _chart: The chart that we are giving a view of.  This chart
       may be modified; after it is modified, you should call
       C{update}.
    @ivar _sentence: The list of tokens that the chart spans.

    @ivar _root: The root window.
    @ivar _chart_canvas: The canvas we're using to display the chart
        itself. 
    @ivar _tree_canvas: The canvas we're using to display the tree
        that each edge spans.  May be None, if we're not displaying
        trees. 
    @ivar _sentence_canvas: The canvas we're using to display the sentence
        text.  May be None, if we're not displaying the sentence text.
    @ivar _edgetags: A dictionary mapping from edges to the tags of
        the canvas elements (lines, etc) used to display that edge.
        The values of this dictionary have the form 
        C{(linetag, rhstag1, dottag, rhstag2, lhstag)}.
    @ivar _treetags: A list of all the tags that make up the tree;
        used to erase the tree (without erasing the loclines).
    @ivar _chart_height: The height of the chart canvas.
    @ivar _sentence_height: The height of the sentence canvas.
    @ivar _tree_height: The height of the tree

    @ivar _text_height: The height of a text string (in the normal
        font). 

    @ivar _edgelevels: A list of edges at each level of the chart (the
        top level is the 0th element).  This list is used to remember
        where edges should be drawn; and to make sure that no edges
        are overlapping on the chart view.

    @ivar _unitsize: Pixel size of one unit (from the location).  This
       is determined by the span of the chart's location, and the
       width of the chart display canvas.

    @ivar _fontsize: The current font size

    @ivar _marks: A dictionary from edges to marks.  Marks are
        strings, specifying colors (e.g. 'green').
    i
   i   i(   c         K   s{  | i  d d  } | i  d d  } | i  d d  |  _ | |  _ h  |  _ g  |  _ h  |  _ h  |  _ g  |  _ d! |  _	 d |  _
 g  |  _ d |  _ | d! j oy t i   } | i d  | d  } | d	  } | i d
 |  t i | d d d | }	 |	 i d d  | |  _ n
 | |  _ |  i |  |  i |  i  \ |  _ |  _ d |  i d <d |  i d <| op t i |  i d d d d }
 |
 i d d d d  t i |
 d d |  _ d |  i d <|  i i d d  n
 d! |  _ | oB |  i |  i d d  \ } } | | |  _ |  _ d |  i d <n
 d! |  _ |  i   |  i   |  i   |  i    |  i i d  |  i!  d! S("   s3   
        Construct a new C{Chart} display.
        t	   draw_treei    t   draw_sentencei   t   fontsizeis
   Chart Viewc         S   s   | i    d  S(   N(   R9   (   Rj   RY   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   destroy1  s    c         S   s   |  i    d  S(   N(   R9   (   RY   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   destroy2  s    t   qRH   t   DoneRJ   RK   RL   i,  R[   i   R   RU   t   sunkRT   i   RN   Rb   i2   s   #e0e0e0R\   R   R   i   s   <Configure>N("   t   gett	   _fontsizeR/   R@   t   _edgelevelst	   _edgetagsR1   t	   _treetoksR2   t   _treetoks_edget   _treetoks_indext
   _tree_tagst   _compactR4   R   R7   R8   RP   RQ   R6   t   _init_fontst
   _sb_canvast	   _chart_sbt   _chart_canvasR;   R^   t   _sentence_canvast   _tree_sbt   _tree_canvast   _analyzeRB   t   _resizet   _growt
   _configure(   R   RD   RR   t   kwRL  RM  RY   RO  RP  t   bR`   t   sbR   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRG   z  sX    													



c         C   sx   t  i d d d d d |  i  |  _ t  i d d d |  i  |  _ t  i d t i   d  |  _ | i d |  i  d  S(   Nt   familyR   t   weightR   t   sizeR   s   *Font(	   t   tkFontt   FontRU  t	   _boldfontt   _fontR4   RP   t   _sysfontt
   option_add(   R   RR   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR]    s    t   yRb   RL   c         C   s   t  i | d d d d } | i d | d | d |  t  i | d d	 } t  i | d
 d } | i d d d d  | i d d d | d d  | i | d <| i | d <| | f S(   sK   
        Helper for __init__: construct a canvas with a scrollbar.
        RU   RS  RT   i   RN   RM   RK   R\   s   #e0e0e0t   orientt   verticalR   Rt  R   t   yesRJ   t   yscrollcommand(   R4   R;   RQ   R^   t	   Scrollbart   yviewRy   (   R   RR   RM   RN   RK   R`   R   Rj  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR^    s    c         G   s   |  i  i d d d  d  S(   Nt   scrollit   units(   R`  Rz  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt	   scroll_up  s    c         G   s   |  i  i d d d  d  S(   NR{  i   R|  (   R`  Rz  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   scroll_down  s    c         G   s   |  i  i d d d  d  S(   NR{  it   pages(   R`  Rz  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   page_up  s    c         G   s   |  i  i d d d  d  S(   NR{  i   R  (   R`  Rz  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt	   page_down  s    c         C   s   |  i  i   } t t |  i d  | |  i t i d  } |  i i d |  |  i i d |  i d  | d t i | |  _ |  i	 d j	 o |  i |  i	 d <n d S(   s/   
        Grow the window, if necessary
        RZ   i   R[   N(   R/   R   Ru   R   R`  t	   _unitsizeRK  t   _MARGINt	   configureRa  R2   t   _sentence_height(   R   R{   RZ   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRf    s    c         C   sp   |  i  i d t |   |  i i d t |   |  i i d t |   |  i   |  i   |  i   d  S(   NRm  (   Rq  R  t   absRp  Rr  Rd  Rf  RB   (   R   Rm  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   set_font_size  s    

c         C   s   t  |  i  S(   N(   R  RU  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   get_font_size  s    c         C   s8   |  i  i   } | i d t i | |  _ |  i   d S(   s   
        The configure callback.  This is called whenever the window is
        resized.  It is also called when the window is first mapped.
        It figures out the unit size, and redraws the contents of each
        canvas.
        i   N(   R/   R   RZ   RK  R  R  RB   (   R   Rj   R{   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRg    s    c         C   s   | d j	 oQ | |  _ g  |  _ h  |  _ |  i   |  i   |  i   |  i   |  i   nC x5 |  i D]* } |  i	 i
 |  p |  i |  qh qh W|  i   d S(   ss  
        Draw any edges that have not been drawn.  This is typically
        called when a after modifies the canvas that a CanvasView is
        displaying.  C{update} will cause any edges that have been
        added to the chart to be drawn.

        If update is given a C{chart} argument, then it will replace
        the current chart with the given chart.
        N(   R2   R/   RV  R1   Rd  Rf  RB   t
   erase_treeRe  RW  R   t	   _add_edge(   R   RD   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   !  s    
			




 c         C   s   | i    \ } } x |  i | D] } | i    \ } } | | j o
 | j  n pH | | j o
 | j  n p* | | j o | j o
 | j n o d Sq  q  Wd S(   s   
        Return 1 if the given edge overlaps with any edge on the given
        level.  This is used by _add_edge to figure out what level a
        new edge should be added to.
        i   i    (   Ro   RV  (   R   Re   t   lvlt   s1t   e1t	   otheredget   s2t   e2(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _edge_conflict;  s     fc         C   sd  |  i  } t | t  o| | i   } g  } xT | i   D]F } t | t  o | i t | i     q8 | i t	 |   q8 Wt
 i |  } n | i   } d } x | | f D] } | i d d d | d |  i d d d d } | i |  }	 | i |  |	 d	 }
 t | i   d
  } t |  i |
 |  |  _ t |  i |	 d |	 d
  |  _ q Wd S(   s   
        Given a new edge, recalculate:

            - _text_height
            - _unitsize (if the edge text is too big for the current
              _unitsize, then increase _unitsize)
        R   i    RH   R   R   t   nwt   justifyR   i   i   i   N(   R`  R#   t   TreeEdgeR   R"   R   R   t   strR   t   reprt   stringt   joinR   Rp  R   R   Ru   t   lengthR  t   _text_height(   R   Re   R   R   t   rhseltsR(   R"   t   sR   R   RZ   t   edgelen(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _analyze_edgeH  s.    	  	
i    c         C   s   |  i  i |  o d Sn |  i |  |  i   |  i pH |  i i | g  t |  i  d } |  i | |  |  i	   d Sn d } x x5 | t |  i  j o |  i i g   |  i	   q W| | j o- |  i
 | |  o |  i | i |  Pn | d 7} q |  i | |  d S(   s   
        Add a single edge to the ChartView:

            - Call analyze_edge to recalculate display parameters
            - Find an available level
            - Call _draw_edge
        Ni   i    (   RW  R   R  Rf  R\  RV  R   Rp   t
   _draw_edgeRe  R  (   R   Re   t   minlvlR  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  j  s&    


!c         C   s   d  } x< t t |  i   D]% } | |  i | j o | } Pq q W| d  j o d  Sn | d |  i } |  i d } |  i i d d  |  i d j o( |  i i d t	 | |  |  i  n d  S(   Ni   i
   t   movetog      ?i    (
   R2   Rq   Rp   RV  t   _chart_level_sizeR  R`  Rz  t   _chart_heightt   float(   R   Re   t   levelR'   Rt  R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s     	c         C   s  |  i  } | i   |  i t i } | i   |  i t i } | | j o | t d |  i d  7} n | d |  i } | i | | | | d d d d } t	 | t
  om g  } xT | i   D]F }	 t	 |	 t  o | i t |	 i     q | i t |	   q W| i   }
 n g  } d }
 t i | |
   } t i | |
  } | i | d | d	 | d
 |  i d d } | i |  d d } | i |  d | i |  d d } | i | d | d | d | d  } | i | d | d	 | d
 |  i d d } | i | | d | d	 t | i    d d d
 |  i } | | | | | f |  i | <|  | d  } | i | d |  | i | d |  | i | d |  | i | d |  | i | d |  |  i |  d S(   s6   
        Draw a single edge on the ChartView.
        i   i   i   R   t   lastRZ   i   i    RH   R   R   R  i   i   R  c         S   s   | i  d |  d  S(   NRc   (   Rd   (   R   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRf     s    s
   <Button-1>N(   R`  Rr   R  RK  R  Rs   Ru   R  R   R#   R  R"   R   R   R  R   R  R   R  R  R   Rq  R   t   create_ovalR   Rp  RW  R   t   _color_edge(   R   Re   R  R   R   R   Rt  t   linetagR"   R(   t   post   rhs1t   rhs2t   rhstag1t   dotxt   dotyt   dottagt   rhstag2t   lhstagRf   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    sN    	+$ 		((		)c         C   s  |  i  i |  p d Sn |  i } | d j	 o | d j	 o |  i i |  o |  i | } n |  i  | } | i | d d | | i | d d | | i | d d | d | | i | d d | | i | d d | d Sn |  i i   } |  i i |  o |  i |  i |  n | i	   o0 | i
   d | f j o |  i | d	 d
  n; t | t  o |  i | d d  n |  i | d d  d S(   s   
        Color in an edge with the given colors.
        If no colors are specified, use intelligent defaults
        (dependant on selection, etc.)
        Ni    RN   i   i   Rm   i   i   s   #084s   #042s   #48cs   #246s   #00fs   #008(   RW  R   R`  R2   R1   Rv   R/   R   R  R$   Ro   R#   t   LeafEdge(   R   Re   t	   linecolort	   textcolorR   t   tagsR{   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s*    	&s   #0dfc         C   s   | |  i  | <|  i |  d S(   s   
        Mark an edge
        N(   R1   R  (   R   Re   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c         C   sb   | d j o: |  i i   } h  |  _ x6 | D] } |  i |  q, Wn |  i | =|  i |  d S(   s/   
        Unmark an edge (or all edges)
        N(   R2   R1   R   R  (   R   Re   t   old_marked_edges(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    	 
c         C   s   |  i    |  i | |  d  S(   N(   R   R   (   R   Re   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   
  s    
c   	      C   s>  d } d } |  i  } x |  i i   D] } | i d d d t |  d |  i d d d d } | i |  } | i |  | d	 t i	 } t
 | |  } t
 | | d
 | d  } q% W| |  _ | |  _ |  i d	 t i |  _ x$ |  i i   D] } |  i |  q W|  i d |  _ d
 t i |  i |  _ |  i   d S(   s   
        Analyze the sentence string, to figure out how big a unit needs 
        to be, How big the tree should be, etc.
        iF   i    RH   R   R   R  R  R   i   i   i   g      @N(   R`  R/   t   leavesR   R  Rq  R   R   RK  t   _LEAF_SPACINGRu   R  R  R  R  R   R  R  t   _TREE_LEVEL_SIZEt   _tree_heightRe  (	   R   t   unitsizet   text_heightR   t   leafR   R   RZ   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRd    s0    	 			 	c         C   s   |  i  } |  i i   |  i t i d } t |  i  } | d |  i |  _	 d d | |  i	 f | d <|  i
 o  d d | |  i f |  i
 d <n d S(   s   
        Update the scroll-regions for each canvas.  This ensures that
        everything is within a scroll-region, so the user can use the
        scrollbars to view the entire display.  This does I{not}
        resize the window.
        i   i    R   N(   R`  R/   R   R  RK  R  Rp   RV  R  R  Rc  R  (   R   R   RZ   t   levels(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRe  6  s    	
	c      
   C   s  d } |  i  } |  i } |  i } t i } g  |  _ xt d |  i i   d  D]} | |  i	 | } | o) | i
 | d | |  } | i |  n | o, | i
 | d | |  i  }	 | i |	  n | i
 | d | |  }
 | i |
  | i | d d d | d d d |  i } | i |  | d d j oS | o | i | d	 d
 n | o | i |	 d	 d
 n | i |
 d	 d
 qP | o | i | d	 d n | o | i |	 d	 d n | i |
 d	 d qP Wd S(   sv   
        Draw location lines.  These are vertical gridlines used to
        show where each location unit is.
        iP  i    i   i   RH   R   R  R   RN   t   gray60t   gray80N(   Rc  Ra  R`  RK  R  t	   _loclinesRq   R/   R   R  R   R   R  R   Rq  Rv   (   R   t   BOTTOMt   c1t   c2t   c3t   marginR'   R   t   t1t   t2t   t3t   t4(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _draw_loclinesL  s6    					  c         C   s(  |  i  i   d j o d Sn |  i } t i } t i } x t |  i  i    D] \ } } | |  i | } | |  i } | | d } | i | | d t	 |  d |  i
 d d d d	 }	 | i |	  }
 | i | d |
 d
 t i d | d |
 d t i d d d d d } | i |  qO Wd S(   s   Draw the sentence string.i    Ni   RH   R   R   R   R  R   i   i   RN   s   #f0f0f0Rm   (   R/   R   Ra  RK  R  R!   R  R  R   R  Rq  R   R   R  R   (   R   R   R  Rt  R'   R  R   R   R   R   R   t   rt(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _draw_sentencer  s"    			 	c         C   sC   x! |  i  D] } |  i i |  q
 Wg  |  _ d  |  _ d |  _ d  S(   Ni    (   R[  Rc  R   RX  R2   RY  RZ  (   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s
    
 		c         C   ss  | d  j o |  i d  j o d  Sn | d  j o |  i } n |  i | j oZ g  } |  i i |  D]! } t | t  o | | qf qf ~ |  _ | |  _ d |  _ n t |  i  d j o d  Sn x! |  i	 D] } |  i
 i |  q W|  i |  i } |  i | | i    |  i   |  i i   |  i d t i } | i   t i |  i } d d | | f |  i
 d <d  S(   Ni    i   R   (   R2   RY  R/   t   treesR#   R   RX  RZ  Rp   R[  Rc  R   t   _draw_treetokRr   t   _draw_treecycleR   R  RK  R  R[   R  R  (   R   Re   R|   R   R   t   treeR4  t   h(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRL    s     %'	
 
!c         C   s1   |  i  d t |  i  |  _  |  i |  i  d  S(   Ni   (   RZ  Rp   RX  RL  RY  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt
   cycle_tree  s    c         C   s  t  |  i  d j o d  Sn d t  |  i  } |  i } t i } |  i i   |  i | d } | i | d d d d | d |  i	 } |  i
 i |  | i |  \ } } } } x t t  |  i   D] } | d t  |  i  | d }	 | |  i j o
 d	 }
 n d
 }
 | i |	 | d |	 d | |	 d | d d |
 d d } |  i
 i |  |  | d  } | i | d |  q Wd  S(   Ni   s   %d Treesi   R   t   neRH   R   i   s   #084s   #fffi
   i   RN   Rm   Rn   c         S   s   | | _  | i   d  S(   N(   RZ  RL  (   R   R   R'   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRf     s    	s
   <Button-1>(   Rp   RX  Rc  RK  R  R/   R   R  R   Rp  R[  R   R   Rq   RZ  t   create_polygonR   (   R   R   R   R  R   R   t   _Rt  R'   R   RN   Rf   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s&    		 +c         C   s  |  i  } t i } g  } x| | D]t } t | t  o0 |  i | | | d  \ } } | i |  q | i d | d |  i d |  | d 7} q W| o t |  t	 |  }	 n( d | d |  i d | }	 | d 7} | t i
 |  i }
 | i |	 |
 d d d d d t | i  d d	 d
 |  i } |  i i |  |
 t i
 |  i } xt | |  D]\ } } t | t  oF | o? | i |	 |
 |  i | | d d d d } |  i i |  n t | t  oM | oE | i |	 |
 |  i | | d d d d d d } |  i i |  n t | t  p? | i |	 |
 |  i | d d d d d } |  i i |  qcqcW|	 | f S(   s   
        @param index: The index of the first leaf in the tree.
        @return: The index of the first leaf after the tree.
        i   i   R   R   R  t   centerRH   RN   s   #042R   RZ   s   #084s   #048R   s   2 3i'  (   Rc  RK  R  R#   R   R  R   R  t   sumRp   R  R  R   R  R   Rp  R[  t   zipR   (   R   t   treetokt   indext   depthR   R  t   child_xsR   t   child_xt   nodext   nodeyR   t   childyt   childx(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    sH    		 $
 c         C   s   |  i  o |  i  i d  |  i   n |  i o |  i i d  |  i   n |  i i d  h  |  _ xE t t |  i	   D]. } x% |  i	 | D] } |  i
 | |  q Wq Wx |  i D] } |  i |  q W|  i   d S(   s1   
        Draw everything (from scratch).
        R   N(   Rc  R   RL  Ra  R  R`  RW  Rq   Rp   RV  R  R/   R  R  (   R   R  Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRB     s"    

	  
 c         C   s   d |  i  i | h   | <d  S(   Ni   (   R@   R   (   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRh     s    c         C   s;   | d  j o |  i | =n y |  i | | =Wn n Xd  S(   N(   R2   R@   (   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c         G   sG   |  i  i |  p d  Sn x% |  i  | i   D] } | |   q/ Wd  S(   N(   R@   R   R   (   R   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRd   $  s     (*   R*   R+   R   R  R  R  t   _CHART_LEVEL_SIZER2   RG   R]  R^  R}  R~  R  R  Rf  R  R  Rg  R   R  R  R  R   R  R  R   R   R   Rd  Re  R  R  R  RL  R  R  R  RB   Rh   R   Rd   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRK  F  sP   -T												"&		8	(		&				8		t   PseudoEarleyRulec           B   sD   e  Z d  Z e   Z e   Z e   Z d   Z	 d   Z
 d   Z RS(   i   c         C   s   d  |  _ d  S(   N(   R2   t   _most_recent_rule(   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRG   1  s    c         c   s   x1 |  i  i | | |  D] } |  i  |  _ | Vq Wx1 |  i i | | |  D] } |  i |  _ | VqM Wx1 |  i i | | |  D] } |  i |  _ | Vq Wd  S(   N(   t
   _predictort
   apply_iterR  t   _scannert
   _completer(   R   RD   R   Re   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  3  s     	 	 c         C   sY   |  i  |  i j o d Sn; |  i  |  i j o d Sn  |  i  |  i j o d Sn d Sd  S(   Ns%   Completer Rule (aka Fundamental Rule)s&   Scanner Rule (aka Top Down Match Rule)s)   Predictor Rule (aka Top Down Expand Rule)s   Pseudo Earley Rule(   R  R  R  R  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   __str__=  s    (   R*   R+   t	   NUM_EDGESt   CompleterRuleR  t   ScannerRuleR  t   PredictorRuleR  RG   R  R  (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  ,  s   					
t   PseudoEarleyInitRulec           B   s   e  Z d    Z RS(   c         C   s   d S(   Ns)   Predictor Rule (aka Top Down Expand Rule)(    (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  H  s    (   R*   R+   R  (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  G  s   t   EdgeRulec           B   s)   e  Z d  Z d   Z d   Z d   Z RS(   s   
    To create an edge rule, make an empty base class that uses
    EdgeRule as the first base class, and the basic rule as the
    second base class.  (Order matters!)  
    c         C   s-   |  i  i d } | |  _ | i d |  _ d  S(   Ni   (   t	   __class__t	   __bases__t   _edgeR  (   R   Re   t   super(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRG   W  s    	c         g   sL   |  i  i d } | |  i f 7} x% | i |  | | |  D] } | Vq9 Wd  S(   Ni   (   R  R  R  R  (   R   RD   R   R   R  Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  [  s     c         C   s   |  i  i d } | i |   S(   Ni   (   R  R  R  (   R   R  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  _  s    (   R*   R+   R   RG   R  R  (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  Q  s   		t   TopDownExpandEdgeRulec           B   s   e  Z RS(    (   R*   R+   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  c  s    t   TopDownMatchEdgeRulec           B   s   e  Z RS(    (   R*   R+   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  d  s    t   BottomUpEdgeRulec           B   s   e  Z RS(    (   R*   R+   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  e  s    t   BottomUpInitEdgeRulec           B   s   e  Z RS(    (   R*   R+   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  f  s    t   FundamentalEdgeRulec           B   s   e  Z RS(    (   R*   R+   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  g  s    t   PseudoEarleyEdgeRulec           B   s   e  Z RS(    (   R*   R+   (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  h  s    t   ChartParserAppc           B   sT  e  Z d  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 d6 d7 g Z d8 d9 d: g 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# e$ d'  Z% d(   Z& d) d*  Z' d+   Z( d,   Z) e*   g Z+ e,   g Z- e.   g Z/ e0   g Z1 e2   g Z3 e4   g Z5 e6   g Z7 e8   g Z9 e+ e- e/ e5 Z: e1 e3 e5 Z; e9 e7 Z7 d-   Z< d.   Z= d/   Z> d0   Z? d1   Z@ d2   ZA d3   ZB d4   ZC d5   ZD RS(;   s   Chart Parser Applicationc      
   C   sW  |  i  | |  d  |  _ yt i   |  _ |  i i |  |  i i d |  i  t i |  i  } t i |  i  } t i |  i  } | i	 d d d d  | i	 d d d d  | i	 d d d d d d	  |  i
 |  i  |  i   |  i |  |  i |  |  i |  |  i   d  |  _ d  |  _ |  i   Wn d
 GH|  i     n Xd  S(   Ns   <Control-q>RK   RL   RN   RO   R   Rb   RM   i   s   Error creating Tree View(   t   _init_parserR2   R6   R4   R   R7   R8   R9   R;   RQ   R]  t   _init_animationt   _init_chartviewt   _init_rulelabelR   R   t   _matrixt   _resultsR   (   R   R   RC  R7   t   frame3t   frame2t   frame1(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRG   o  s2    	

		
c         G   s2   |  i  d  j o d  Sn |  i  i   d  |  _  d  S(   N(   R6   R2   R9   (   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR9     s    c         O   s)   t    o d Sn |  i i | |   d S(   s   
        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   R6   R   (   R   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c         C   sh   | |  _  | |  _ t |  i   |  _ |  i i |  i  |  i i   |  _ |  i i   |  _ d  |  _
 d  S(   N(   R   t   _tokenst   SteppingChartParsert   _cpt
   initializeRD   R/   t   stept   _cpstepR2   R   (   R   R   RC  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    		c         C   s   t  i d t i   d  |  _ | i d |  i  t i |  |  _ |  i i |  i i	 d   t  i d d d d d |  i i
    |  _ t  i d d d |  i i
    |  _ d  S(   NR   s   *FontRm  Rk  R   Rl  R   (   Rn  Ro  R4   RP   Rr  Rs  t   IntVart   _sizeRy   t   cgetRT  Rp  Rq  (   R   RR   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR]    s    c         C   sW   t  i |  i  |  _ |  i i d  t  i |  i  |  _ |  i i d  d |  _ d  S(   Ni   i   i    (   R4   R  R6   t   _stepRy   t   _animatet
   _animating(   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s
    c         C   s;   t  |  i | d d d d |  _ |  i i d |  i  d  S(   NRL  i   RM  Rc   (   RK  R/   t   _cvRh   t   _click_cv_edge(   R   RC   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    c      
   C   s   d } t  i | d | d |  i |  _ t  i | d d d d d d	 d |  i |  _ |  i i d
 d  |  i i d
 d  t  i | d |  i d d } | i d
 d  d  S(   Ns   Last edge generated by:RH   R   RZ   i(   RU   R  R   R4  RK   R   t   variablet   StepR   (   R4   Ra   Rp  t   _rulelabel1t   _rulelabel2RQ   t   CheckbuttonR  (   R   RC   t   ruletxtR
  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    	c      
   C   s  t  i |  } t  i |  } | i d d d d  | i d d d d  t  i | d d d	 d
 d d d |  i i d d  t  i | d d d	 d
 d d d |  i i d d  t  i | d d d	 d
 d d d |  i i d d  t  i | d d d	 d
 d d d |  i i d d  t  i | d d d	 d d d d |  i i d d  t  i | d d d	 d d d d |  i	 i d d  t  i | d d d	 d d d d |  i
 i d d  t  i | d d i d d  t  i | d d d	 d d d d |  i i d d  t  i | d d d	 d d d d |  i i d d  t  i | d d i d d  t  i | d d d	 d d d d |  i i d d  d  S(   NRK   RL   RN   R   RY   RO   RH   s   Reset
ParserR\   s   #90c0d0R   Rn   RJ   R   s   Top Down
StrategyR   s   Bottom Up
Strategys   Earley
Algorithms   Top Down Init
Rules   #90f090s   Top Down Expand
Rules   Top Down Match
RuleRZ   i   s   Bottom Up Init
Rules   Bottom Up Predict
Rules   Fundamental
Rule(   R4   R;   RQ   RP   t   resett   top_down_strategyt   bottom_up_strategyt   earley_algorithmt   top_down_initt   top_down_expandt   top_down_matcht   bottom_up_initt	   bottom_upt   fundamental(   R   RC   R  R  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     sH    c         C   s  |  i  i d |  i i  |  i  i d |  i i  |  i  i d |  i i  |  i  i d |  i i  |  i  i d |  i  |  i  i d |  i  |  i  i d |  i  |  i  i d |  i	  |  i  i d	 |  i
  |  i  i d
 |  i  |  i  i d |  i  |  i  i d |  i  |  i  i d |  i  |  i  i d |  i  |  i  i d |  i  |  i  i d |  i  |  i  i d |  i d   |  i  i d |  i d   |  i  i d |  i d   |  i  i d |  i d   d  S(   Ns   <Up>s   <Down>s   <Prior>s   <Next>s   <Control-q>s   <Control-x>s   <F1>s   <Control-s>s   <Control-o>s   <Control-r>R   Ri  Rj   s   <space>s   <Control-g>s   <Control-t>R   c         S   s   | i  d   S(   i   (   Ry   (   Rj   t   a(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   <lambda>%  s    R  c         S   s   | i  d   S(   i   (   Ry   (   Rj   R$  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR%  &  s    R  c         S   s   | i  d   S(   i   (   Ry   (   Rj   R$  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR%  '  s    R  c         S   s   | i  | i    S(    (   Ry   RT  (   Rj   R  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR%  *  s    (   R6   R8   R  R}  R~  R  R  R9   t   helpt
   save_chartR   R  R  R  R  t   _stop_animationt   edit_grammart   edit_sentenceR  R  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s(    c   	      C   s  t  i |  i  } t  i | d d } | i d d d d d |  i d d  | i d d	 d d d |  i d d
  | i d d d d d |  i d d  | i   | i d d d |  i  | i d d d |  i	  | i   | i d d d d d |  i
 d d  | i d d d d d |  t  i | d d } | i d d d d d |  i d d  | i d d d d d |  i d d  | i d d d d d |  t  i | d d } | i d d d d d |  i  | i d d d d d |  i  | i d d d d d |  t  i | d d } | i d d d d d |  i d d  | i d d  d d d |  i d d!  | i d d" d d d |  i d d#  | i   | i d d$ d |  i  | i d d% d |  i  | i d d& d |  i  | i d d' d |  i  | i d d( d |  i  | i d d) d |  i  | i d d* d d d |  t  i | d d } | i d d+ d d d, |  i d d-  | i   | i d d. d d d, |  i d/ d  | i d d0 d d d, |  i d/ d d d1  | i d d2 d d d, |  i d/ d3 d d4  | i d d5 d d d, |  i d/ d6 d d7  | i d d8 d d d |  t  i | d d } | i d d9 d, |  i d d d/ d: d |  i  | i d d; d, |  i d d d/ d< d |  i  | i d d= d, |  i d d d/ d> d |  i  | i d d? d, |  i d d d/ d@ d |  i  | i d dA d, |  i d d d/ dB d |  i  | i d dC d d d |  t  i | d d } | i d dD d d d |  i  | i d dE d d d |  i d dF  | i d dG d d d |  |  i i  d |  d  S(H   NR   i    R   s
   Save ChartR   RJ   R  s   Ctrl-ss
   Load Charts   Ctrl-os   Reset Charts   Ctrl-rs   Save Grammars   Load GrammarR  i   s   Ctrl-xR  R  s   Edit Grammari   s   Ctrl-gs	   Edit Texts   Ctrl-tt   Edits   Chart Matrixi   t   Resultst   Views   Top Down StrategyR   s   Bottom Up StrategyRi  s   Earley AlgorithmRj   s   Bottom Up Init Rules   Bottom Up Rules   Top Down Init Rules   Top Down Expand Rules   Top Down Match Rules   Fundamental Rulet   ApplyR  R  R  s   No Animationt   values   Slow AnimationR   s   Normal Animationi   R  s   Fast Animationi   R  t   Animatet   Tinyi
   t   Smalli   t   Mediumi   t   Largei   t   Hugei   t   Zoomt   Aboutt   Instructionst   F1t   Help(!   R4   R
  R6   R  R'  R   R  R  t   save_grammart   load_grammarR9   R  R)  R*  t   view_matrixt   view_resultsR  R  R!  R"  R  R  R   R#  t   add_checkbuttonR  t   add_radiobuttonR  R  t   resizet   aboutR&  R  (	   R   R  R  t   editmenut   viewmenut   rulemenut   animatemenut   zoommenut   helpmenu(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   ,  s    



		

			






	

c         C   s2   | |  i  j o |  i |  n |  i i   d  S(   N(   R   t   _select_edgeR  R  (   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    c         C   s!   |  i  |  |  i i |  d  S(   N(   RI  R  R   (   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _select_matrix_edge  s    c         C   sl   | |  _  |  i i | d  |  i i |  |  i o |  i i |  n |  i o |  i i |  n d  S(   Ns   #f00(   R   R  R   RL  R  R   (   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRI    s
    	c         C   sB   d  |  _ |  i i   |  i i   |  i o |  i i   n d  S(   N(   R2   R   R  R   R  R  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _deselect_edge  s    	c         C   s   |  i  |  i i    |  i i   |  i i |  |  i i | d  |  i i |  |  i o |  i i   n |  i o |  i i |  n |  i o |  i i |  n |  i	 o |  i	 i |  n d  S(   Ns   #0df(
   t   _display_ruleR  t   current_chartruleR  R   RL  R   R   R  R  (   R   Re   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   _show_new_edge  s    c         G   s_   d |  _  y) t |  i d t i   d d d d Wn& t |  i d t i   d d n Xd  S(   Ni    s   Help: Chart Parser ApplicationRZ   iK   R   t   fixed(   R  t   ShowTextR6   R   t   strip(   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR&    s    	c         G   s   d d } t  i d |  d  S(   Ns   NLTK Chart Parser Application
s   Written by Edward Lopers   About: Chart Parser Application(   R   t   showinfo(   R   Rj   t   ABOUT(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRB    s    s   Pickle files   .pickles	   All filesR   s   Plaintext grammar files   .cfgc         G   s   t  d |  i d d  } | p d Sn y t i t | d   } | |  _ |  i i |  |  i o |  i i	 |  n |  i o |  i i
   n |  i o |  i i	 |  n |  i i	 |  Wn, t j
 o  }   t i d d |  n Xd S(   s   Load a chart from a pickle fileR2  R3  s   .pickleNR:  s   Error Loading Charts   Unable to open file: %r(   R   R5  R6  R;  R8  R/   R  R   R  Rk   R   R  R  R9  R   R   (   R   R   R   RD   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    			c         G   sz   t  d |  i d d  } | p d Sn y  t i |  i t | d   Wn, t j
 o  }   t i d d |  n Xd S(   s   Save a chart to a pickle fileR2  R3  s   .pickleNR4  s   Error Saving Charts   Unable to open file: %r(	   R    R5  R6  R7  R/   R8  R9  R   R   (   R   R   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR'    s    	 	c         G   s   t  d |  i d d  } | p d Sn yX | i d  o t i t | d   } n t t | d  i    } |  i |  Wn) t	 j
 o } t
 i d d |  n Xd S(	   s!   Load a grammar from a pickle fileR2  R3  s   .cfgNs   .pickleR:  s   Error Loading Grammars   Unable to open file: %r(   R   t   GRAMMAR_FILE_TYPESR?  R6  R;  R8  R   t   readR   R9  R   R   (   R   R   R   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR<    s    		c         G   s  t  d |  i d d  } | p d  Sn y+| i d  o) t i |  i |  i f t | d   n t | d  } |  i i	   } g  } | D]- } | i
   |  i i   j o | | q q ~ } g  } | D]- } | i
   |  i i   j o | | q q ~ }	 x | D] }
 | i d |
  q
Wx |	 D] }
 | i d |
  q,W| i   Wn) t j
 o } t i d d |  n Xd  S(	   NR2  R3  s   .cfgs   .pickleR4  s   %s
s   Error Saving Grammars   Unable to open file: %r(   R    RT  R?  R6  R7  R/   R  R8  R   t   productionsR   Rr   t   writet   closeR9  R   R   (   R   R   R   t   filet   prodsR|   t   pRr   R~   t   restt   prodRj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR;    s$    	)AA  	c         G   s   d |  _  t |  i  |  _ |  i i |  i  |  i i   |  _ |  i i	 |  i  |  i
 o |  i
 i |  i  n |  i
 o |  i
 i   n |  i o |  i i |  i  n |  i i   |  _ d  S(   Ni    (   R  R  R   R  R	  R  RD   R/   R  R   R  Rk   R   R  R
  R  (   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    	!!c         G   s   t  |  i |  i |  i  d  S(   N(   R   R6   R   R   (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR)  .  s    c         C   s;   | |  _  |  i i |  |  i o |  i i |  n d  S(   N(   R   R  R   R  (   R   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR   1  s    	c         G   s>   t  i |  i  } d } d } t |  i | | |  i |  d  S(   Ns	   Edit Texts   Enter a new sentence to parse.(   R  R  R  t   EntryDialogR6   t   set_sentence(   R   Rj   t   sentenceR7   t   instr(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR*  6  s    c         C   s#   t  | i    |  _ |  i   d  S(   N(   Rx   t   splitR  R  (   R   R`  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR_  <  s    c         G   sS   |  i  d  j	 o |  i  i   n t |  i |  i  |  _  |  i  i d |  i  d  S(   NRc   (   R  R2   R9   R.   R6   R/   Rh   RJ  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR=  D  s    !c         G   sC   |  i  d  j	 o |  i  i   n t |  i |  i |  i  |  _  d  S(   N(   R  R2   R9   R   R6   R/   R   (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR>  I  s    !c         C   s#   d |  _  |  i |  i i    d  S(   Ni    (   R  R  R  RT  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRA  R  s    	c         C   sb   |  i  i |  |  i i d t |   |  i i d t |   |  i i d t |   d  S(   NRm  (   R  R  Rq  R  R  Rp  Rr  (   R   Rm  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  V  s    c         C   s   t  |  i i    S(   N(   R  R  RT  (   R   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  \  s    c         C   sm  |  i  o d |  _  d  Sn |  i d   |  i i   o |  i } | d  j	 o] | d  j	 oP |  i i | |  g  |  i   } | d  j o |  i	 i
   d  |  _ q qi|  i i |  |  i   n |  i i |  |  i i   o d |  _  |  i   nj x# |  i D] } | d  j o Pq
q
W|  i	 i   |  i o |  i i   n |  i o |  i i   n d  S(   Ni    i   (   R  RL  R2   R  RT  R   R  t   set_strategyt   _apply_strategyR  R   R  t   _animate_strategyR  R   R  R  (   R   t   strategyt   edge_strategyt	   selectiont   newedgeRe   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   apply_strategyc  s0    
			
 c         G   s   d |  _  d  S(   Ni    (   R  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR(    s    i   c         C   s   |  i  d j o d  Sn |  i   d  j	 o |  i i   d j p |  i i   d j o d  Sn |  i i   d j o |  i i d |  i  q |  i i   d j o |  i i d |  i  q |  i i d |  i  n d  S(   Ni    i   i  i   i  i   (	   R  Rd  R2   R  RT  R  R6   t   afterRe  (   R   t   speed(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRe    s    ,c         C   s1   |  i  i   } | d  j	 o |  i |  n | S(   N(   R  t   nextR2   RN  (   R   t   new_edge(    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRd    s    c         C   sJ   | d  j o d |  i d <n) t |  } | |  i d <|  i i   } d  S(   NR   RH   (   R2   R  R  R  R  (   R   t   ruleR1  Rm  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyRL    s
    c         G   s   |  i  |  i d   d  S(   N(   Rj  t   _TD_INITR2   (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    c         G   s   |  i  |  i t  d  S(   N(   Rj  t
   _TD_EXPANDR  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    c         G   s   |  i  |  i t  d  S(   N(   Rj  t	   _TD_MATCHR  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR     s    c         G   s   |  i  |  i t  d  S(   N(   Rj  t   _BU_INITR  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR!    s    c         G   s   |  i  |  i t  d  S(   N(   Rj  t   _BU_RULER  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR"    s    c         G   s   |  i  |  i t  d  S(   N(   Rj  t   _FUNDAMENTALR  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR#    s    c         G   s   |  i  |  i t  d  S(   N(   Rj  t   _BU_STRATEGYR  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    c         G   s   |  i  |  i t  d  S(   N(   Rj  t   _TD_STRATEGYR  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    c         G   s   |  i  |  i t  d  S(   N(   Rj  t   _EARLEYR  (   R   Rj   (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR    s    (   s   Pickle files   .pickle(   s	   All filesR   (   s   Plaintext grammar files   .cfg(   s   Pickle files   .pickle(   s	   All filesR   (E   R*   R+   RG   R9   R   R  R]  R  R  R   R   R   R   R  RJ  RI  RK  RN  R&  RB  R5  RT  R   R'  R<  R;  R  R)  R   R*  R_  R=  R>  RA  R  R  R2   Rj  R(  Re  Rd  RL  t   TopDownInitRuleRp  t   TopDownExpandRuleRq  t   TopDownMatchRuleRr  t   BottomUpInitRuleRs  t   BottomUpPredictRuleRt  t   SingleEdgeFundamentalRuleRu  R  Rx  R  t   _EARLEY_INITRw  Rv  R  R  R   R!  R"  R#  R  R  R  (    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyR  n  s|   %								.		i	
						
																			%			
								c          C   s   t  d  }  d } d } t | i    } d GHx' |  i   D] } d Gt |  d GHq< Wd GHd | GHd	 GHt |  |  i   d  S(
   NsW  
    # Grammatical productions.
        S -> NP VP
        VP -> VP PP | V NP | V
        NP -> Det N | NP PP
        PP -> P NP
    # Lexical productions.
        NP -> 'John' | 'I'
        Det -> 'the' | 'my' | 'a'
        N -> 'dog' | 'cookie' | 'table' | 'cake' | 'fork'
        V -> 'ate' | 'saw'
        P -> 'on' | 'under' | 'with'
    s*   John ate the cake on the table with a forks   John ate the cake on the tables
   grammar= (s       t   ,t   )s   tokens = %rs,   Calling "ChartParserApp(grammar, tokens)"...(   R   Rx   Rb  RV  R  R  R   (   R   t   sentRC  Ro  (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pyt   app  s    	 	t   __main__R  (2   R   R6  t   tkFileDialogR    R   R4   t   mathR  t   os.pathR<  t   nltk.parse.chartt   nltkR   R   R   R   R   t   nltk.draw.utilt   nltk.draw.cfgR   t   nltk.draw.treeR	   R
   t   ColorizedListR   t   objectR.   R   R   RK  t   AbstractChartRuleR  Ry  R  R  Rz  R  R{  R  R}  R  R|  R  R~  R  R  R  R  R*   t   __all__(    (    (    s.   /p/zhu/06/nlp/nltk/nltk/app/chartparser_app.pys   <module>$   sH   
"
	   
  a	