o
    e$                     @   s:   d dl Zd dlmZmZ dd Zdd ZG dd dZdS )	    N)deal_eb_tokendeal_bbc                 C   s   | \}}}}|\}}}}	t || t ||  t ||  t |	|  }
t || t ||  }t || t |	|  }|
t|| S N)absmin)Zbox_1Zbox_2x1y1Zx2y2Zx3Zy3Zx4Zy4disZdis_2Zdis_3 r   SD:\Projects\ConvertPro\env\Lib\site-packages\paddleocr/ppstructure/table/matcher.pydistance   s   0r   c           
      C   s   | d | d  | d | d   }|d |d  |d |d   }|| }t | d |d }t| d |d }t | d |d }t| d |d }||ksP||krRdS || ||  }	|	||	  d S )z
    computing IoU
    :param rec1: (y0, x0, y1, x1), which reflects
            (top, left, bottom, right)
    :param rec2: (y0, x0, y1, x1)
    :return: scala value of IoU
       r         g              ?)maxr   )
Zrec1Zrec2ZS_rec1ZS_rec2Zsum_areaZ	left_lineZ
right_lineZtop_lineZbottom_lineZ	intersectr   r   r   compute_iou   s    	 r   c                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )
TableMatchFc                 C   s   || _ || _d S r   )filter_ocr_result
use_master)selfr   r   r   r   r   __init__:   s   
zTableMatch.__init__c           	      C   s^   |\}}| j r| |||\}}| ||}| jr$| |||\}}|S | |||\}}|S r   )r   _filter_ocr_resultmatch_resultr   get_pred_html_masterget_pred_html)	r   Zstructure_resdt_boxesrec_respred_structurespred_bboxesmatched_indexZ	pred_htmlpredr   r   r   __call__>   s   zTableMatch.__call__c           
      C   s  i }t |D ]x\}}g }t |D ]?\}}t|dkr@t|dd d t|dd d t|dd d t|dd d g}|t||dt|| f q| }	t	|	dd d}	|
|	d | vrr|g||
|	d < q||
|	d  | q|S )	N   r   r   r   r   c                 S   s   | d | d fS )Nr   r   r   )itemr   r   r   <lambda>\   s    z)TableMatch.match_result.<locals>.<lambda>)key)	enumeratelennpr   r   appendr   r   copysortedindexkeys)
r   r   r    ZmatchediZgt_boxZ	distancesjZpred_boxZsorted_distancesr   r   r   r   L   s&   $$zTableMatch.match_resultc                 C   s|  g }d}|D ]}d|v rd|kr| d || v rd}d||| d  v r6t|| dkr6d}| d t|| D ]Y\}}	||	 d }
t|| dkrt|
dkrUq<|
d d	kra|
dd  }
d|
v rk|
d
d  }
d|
v ru|
d d }
t|
dkr|q<|t|| d krd	|
d kr|
d	7 }
| |
 q<|r| d d|kr|d n|| |d7 }q|| qd||fS )Nr   </td>	<td></td>z<td>F<b>r   T r   </b> )extendr/   r)   r(   r+   join)r   r   r!   ocr_contentsend_htmltd_indextagb_withr0   td_index_indexcontentr   r   r   r   c   sV   





zTableMatch.get_pred_htmlc                 C   st  g }d}|D ]}d|v rd}d}||  v rd||| d  v r*t|| dkr*d}t|| D ]X\}	}
||
 d }t|| dkrt|dkrIq0|d dkrU|dd  }d|v r_|d	d  }d
|v ri|d d }t|dkrpq0|	t|| d krd|d kr|d7 }||7 }q0|rd|}d|krd|}nd|}|d7 }t|}|| qd|}t|}||fS )Nr   r2   r9   Fr4   r   Tr5   r   r6   r7   r8   z	<b>{}</b>r3   z<td>{}</td>z{}</td>)r/   r)   r(   formatr   r+   r;   r   )r   r   r!   r<   r=   r>   tokentxtr@   r0   rA   rB   htmlr   r   r   r      sX   




zTableMatch.get_pred_html_masterc           	      C   sl   |d d dd df   }g }g }t||D ]\}}t|dd d |k r'q|| || q||fS )Nr   r   )r   zipr*   r   r+   )	r   r    r   r   r   Znew_dt_boxesZnew_rec_resboxZrecr   r   r   r      s   
zTableMatch._filter_ocr_resultN)FF)	__name__
__module____qualname__r   r#   r   r   r   r   r   r   r   r   r   9   s    
)*r   )numpyr*   Z$ppstructure.table.table_master_matchr   r   r   r   r   r   r   r   r   <module>   s
   	