U
    e$                     @   sB   d dl mZ d dlmZ G dd deZdd Zedkr>e  dS )	    )chain)Counterc                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdd Z	e
dd Ze
dddZe
dd Zdd Zdd ZdddZdS ) 
FStructurec                 C   s"   || krg | |< | |  | dS )zo
        Append 'item' to the list at 'key'.  If no list exists for 'key', then
        construct one.
        N)append)selfkeyitem r	   M/var/www/html/assets/scripts/venv/lib/python3.8/site-packages/nltk/sem/lfg.py
safeappend   s    zFStructure.safeappendc                 C   s   t | | | d S N)dict__setitem__lower)r   r   valuer	   r	   r
   r      s    zFStructure.__setitem__c                 C   s   t | | S r   )r   __getitem__r   r   r   r	   r	   r
   r      s    zFStructure.__getitem__c                 C   s   t | | S r   )r   __contains__r   r   r	   r	   r
   r      s    zFStructure.__contains__c                 C   s   |   }||S r   )to_depgraphto_glueformula_list)r   Z	glue_dictdepgraphr	   r	   r
   r   !   s    zFStructure.to_glueformula_listNc           	      C   s   ddl m} | }|j}| |dd | D ]Z\}}dd | D D ]>}|d |krH|d }|d |g  |d | |d	  qHq.|d
 |_|S )Nr   DependencyGraphROOTc                 s   s   | ]}|d  dkr|V  qdS )relZTOPNr	   ).0nr	   r	   r
   	<genexpr>/   s      z)FStructure.to_depgraph.<locals>.<genexpr>headr   depsaddress   )	nltk.parse.dependencygraphr   nodes_to_depgraphitemsvalues
setdefaultr   root)	r   r   r   r   r#   r    nodeZn2Zrelationr	   r	   r
   r   %   s    
zFStructure.to_depgraphc           	   
   C   s   t |}|| || jd | jd ||d t| D ]}t| | D ]}t|trd|||| qFt|trt |}|| ||d |d ||d qFt|tr|D ]}|||| qqFt	d| qFq6d S )Nr   r!   )r    wordtagr   r   0feature %s is not an FStruct, a list, or a tuple)
lenupdatepredsorted
isinstancer   r$   tuplelist	Exception)	r   r#   r   r   indexfeaturer   Z	new_indexr   r	   r	   r
   r$   9   s:    


	
zFStructure._to_depgraphc                 C   s   t | j| S r   )r   _read_depgraphr(   r   r	   r	   r
   read_depgraph]   s    zFStructure.read_depgraphc           	   
      s   |s
t  }| d  dkr*| d | d fS t }d |_t| |_||_| d | d  }}|d d dkr|dd dkr|d	d
 ||d d f|_|js||f|_ fddt	
| d  D }|D ] }||d t| || q|S d S )Nr   )specpunctr*   r+      ZVB   Dtense)ZPASTr?   c                    s   g | ]} j | qS r	   )r#   )r   idxr8   r	   r
   
<listcomp>z   s   z-FStructure._read_depgraph.<locals>.<listcomp>r   )r   r   r   r/   _make_labelgetlabelparentr   r   from_iterabler&   r7   )	r)   r   Zlabel_counterrE   Zfstructr*   r+   childrenchildr	   r8   r
   r7   a   s0    

zFStructure._read_depgraphc                 C   sh   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g| d  }t | d }|dkr`|t| S |S dS )z
        Pick an alphabetic character as identifier for an entity in the model.

        :param value: where to index into the list of characters
        :type value: int
        fghijklmr   opqrstuvwxyzabcder!      r   N)intstr)r   letternumr	   r	   r
   rB      sB    	zFStructure._make_labelc                 C   s   |   ddS )N
 )__str__replacer   r	   r	   r
   __repr__   s    zFStructure.__repr__c                 C   s   |   S r   )pretty_formatrk   r	   r	   r
   ri      s    zFStructure.__str__r=   c                 C   s*  zd| j  }W n tk
r&   d}Y nX z|d| jd  7 }W n tk
rR   Y nX t| D ]}| | D ]}t|tr|t| d t| j  }|dd| |||7 }qht|t	r|dd| ||d 7 }qht|t
r|d	d| |d
d|t| d   |7 }qhtd| qhq\|d S )Nz%s:[[z	pred '%s'r   r=   z
{}{} {} z

{}{} '{}'z
{}{} {{{}}}z
%sr<   r,   ])rD   	NameErrorr/   r0   r1   r   r-   formatrm   r2   r3   joinr4   )r   indentaccumr6   r   Znext_indentr	   r	   r
   rm      s:    


zFStructure.pretty_format)N)NN)r=   )__name__
__module____qualname__r   r   r   r   r   r   r$   staticmethodr9   r7   rB   rl   ri   rm   r	   r	   r	   r
   r      s    	
$
$
)r   c                  C   sT   ddl m}  | d}| d}| d}| d}||||g}|D ]}tt| q<d S )Nr   r   zEsso       NNP     2       SUB
said       VBD     0       ROOT
the        DT      5       NMOD
Whiting    NNP     5       NMOD
field      NN      6       SUB
started    VBD     2       VMOD
production NN      6       OBJ
Tuesday    NNP     6       VMOD
zUJohn    NNP     2       SUB
sees    VBP     0       ROOT
Mary    NNP     2       OBJ
zWa       DT      2       SPEC
man     NN      3       SUBJ
walks   VB      0       ROOT
zevery   DT      2       SPEC
girl    NN      3       SUBJ
chases  VB      0       ROOT
a       DT      5       SPEC
dog     NN      3       OBJ
)r"   r   printr   r9   )r   Zdg1Zdg2Zdg3Zdg4Z	depgraphsdgr	   r	   r
   demo_read_depgraph   s     
r|   __main__N)	itertoolsr   Znltk.internalsr   r   r   r|   rv   r	   r	   r	   r
   <module>	   s    K,