o
    )jn                     @   s   d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ ejeejdG dd deZedee dee fddZdS )    N)contextmanager)DictIterableListTuple)SmoothingFunctioncorpus_bleu)Rouge)Metrics)Metric)METRICS
MetricKeys)rebuild_chinese_str)default_group)Z	group_keymodule_namec                   @   s|   e Zd ZdZdddZdeeee f deeee f fdd	Zd
edede	fddZ
dd ZdddZdd Zdd ZdS )TextGenerationMetrica>  The metric computation class for text generation classes.

    This metric class calculates F1 of the rouge scores for the whole evaluation dataset.

    Args:
        target_text: The key of the target text column in the `inputs` arg.
        pred_text: The key of the predicted text column in the `outputs` arg.
    tgtspredsc                 C   s$   g | _ g | _t | _|| _|| _d S N)r   r   r	   rougetarget_text	pred_text)selfr   r    r   j/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/metrics/text_generation_metric.py__init__   s
   
zTextGenerationMetric.__init__outputsinputsc                 C   sL   || j  }|| j }|D ]
}| jt| q|D ]
}| jt| qd S r   )r   r   r   appendr   r   )r   r   r   Zground_truthsZeval_resultstruthresultr   r   r   add$   s   

zTextGenerationMetric.addpredtgtreturnc                 C   s2   dt dt fdd}t||dkot||dkS )Nstringr$   c                 S   s   |  dd ddS )N  .)replace)r%   r   r   r   remove_useless.   s   z3TextGenerationMetric._check.<locals>.remove_uselessr   )strlen)r   r"   r#   r*   r   r   r   _check,   s    zTextGenerationMetric._checkc                    s   j sJ d fddt j  jD }t| \}}dtdtf fdd}t||  jj||d}W d    n1 s>w   Y  |td	d
 |}|tdd
 |}dd  j D }dd  jD }	t	|	|dt
 jd}
t	|	|t
 jd}tj|tj|tj|
tj|iS )Nz0preds in TextGenerationMetric must not be empty!c                    s$   g | ]\}}  ||r||fqS r   )r-   ).0r"   r#   r   r   r   
<listcomp>5   s    
z1TextGenerationMetric.evaluate.<locals>.<listcomp>iterr$   c                    s   t | t j S r   )sumr,   r   )r1   r/   r   r   mean9   s   z+TextGenerationMetric.evaluate.<locals>.mean)Zhypsrefsc                 S      | d d S )Nzrouge-1fr   Zscorer   r   r   <lambda>>       z/TextGenerationMetric.evaluate.<locals>.<lambda>c                 S   r5   )Nzrouge-lr6   r   r7   r   r   r   r8   ?   r9   c                 S   s   g | ]	}|  d qS r&   stripsplitr.   Zeachr   r   r   r0   A   s    c                 S   s   g | ]
}|  d gqS r:   r;   r>   r   r   r   r0   B   s    )   r   r   r   )weightssmoothing_function)rA   )r   zipr   r   floatextend_recursion_limitr   Z
get_scoresmapr   r   Zmethod3r   ZROUGE_1ZROUGE_LZBLEU_1ZBLEU_4)r   tmpr   r   r3   Zrouge_scoresZrouge_1Zrouge_lZ	pred_listZtgt_listZbleu_1Zbleu_4r   r/   r   evaluate3   s6   zTextGenerationMetric.evaluateotherc                 C   s    | j |j  | j|j d S r   )r   extendr   )r   rH   r   r   r   mergeS   s   zTextGenerationMetric.mergec                 C   s   | j | jfS r   )r   r   r/   r   r   r   __getstate__W   s   z!TextGenerationMetric.__getstate__c                 C   s   |    |\| _| _d S r   )r   r   r   )r   stater   r   r   __setstate__Z   s   z!TextGenerationMetric.__setstate__N)r   r   )rH   r   )__name__
__module____qualname____doc__r   r   r+   r   r!   boolr-   rG   rJ   rK   rM   r   r   r   r   r      s    
	*
 r   r   r   c                 c   sT    t  }tdd | D tdd |D  }||kr t | d V  t | d S )Nc                 s       | ]}t |V  qd S r   r,   )r.   r"   r   r   r   	<genexpr>b   s    z)extend_recursion_limit.<locals>.<genexpr>c                 s   rS   r   rT   )r.   r#   r   r   r   rU   c   s    )sysgetrecursionlimitmaxsetrecursionlimit)r   r   Zorigin_limitZ	new_limitr   r   r   rD   _   s   
rD   )rV   
contextlibr   typingr   r   r   r   Znltk.translate.bleu_scorer   r   r   r	   Zmodelscope.metainfor
   Zmodelscope.metrics.baser   Zmodelscope.metrics.builderr   r   Zmodelscope.utils.chinese_utilsr   Zmodelscope.utils.registryr   Zregister_moduleZtext_gen_metricr   r+   rD   r   r   r   r   <module>   s    L 