
    9in                        S SK r S SKJr  S SKJrJrJrJr  S SKJ	r	J
r
  S SKJr  S SKJr  S SKJr  S SKJrJr  S S	KJr  S S
KJr  \R0                  " \\R2                  S9 " S S\5      5       r\S\\   S\\   4S j5       rg)    N)contextmanager)DictIterableListTuple)SmoothingFunctioncorpus_bleu)Rouge)Metrics)Metric)METRICS
MetricKeys)rebuild_chinese_str)default_group)	group_keymodule_namec                       \ rS rSrSrSS jrS\\\\   4   S\\\\   4   4S jr	S\S\S	\
4S
 jrS rSS jrS rS rSrg)TextGenerationMetric   a*  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.
c                 V    / U l         / U l        [        5       U l        Xl        X l        g N)predstgtsr
   rougetarget_text	pred_text)selfr   r   s      i/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/metrics/text_generation_metric.py__init__TextGenerationMetric.__init__   s$     "
!	W
&"    outputsinputsc                     X R                      nXR                     nU H'  nU R                  R                  [	        U5      5        M)     U H'  nU R
                  R                  [	        U5      5        M)     g r   )r   r   r   appendr   r   )r   r"   r#   ground_truthseval_resultstruthresults          r   addTextGenerationMetric.add$   s`    //0~~."EII078 #"FJJ1&9: #r!   predtgtreturnc                     S[         S[         4S jn[        U" U5      5      S:g  =(       a    [        U" U5      5      S:g  $ )Nstringr.   c                 F    U R                  SS5      R                  SS5      $ )N  .)replace)r0   s    r   remove_useless3TextGenerationMetric._check.<locals>.remove_useless.   s     >>#r*223;;r!   r   )strlen)r   r,   r-   r6   s       r   _checkTextGenerationMetric._check,   s@    	<3 	<3 	< >$'(A-O#nS6I2Ja2OOr!   c                   ^  T R                   (       d   S5       e[        T R                   T R                  5       VVs/ s H   u  pT R                  X5      (       d  M  X4PM"     nnn[        U6 u  pES[        S[
        4U 4S jjn[        XE5         T R                  R                  XES9nS S S 5        U" [        S W5      5      nU" [        S U5      5      n	T R                    V
s/ s H!  oR                  5       R                  S5      PM#     nn
T R                   V
s/ s H"  oR                  5       R                  S5      /PM$     nn
[        UUS	[        5       R                  S
9n[        UU[        5       R                  S9n[        R                   U[        R"                  U	[        R$                  U[        R&                  U0$ s  snnf ! , (       d  f       GN)= fs  sn
f s  sn
f )Nz0preds in TextGenerationMetric must not be empty!iterr.   c                 F   > [        U 5      [        TR                  5      -  $ r   )sumr9   r   )r=   r   s    r   mean+TextGenerationMetric.evaluate.<locals>.mean9   s    t9s4::..r!   )hypsrefsc                     U S   S   $ )Nzrouge-1f scores    r   <lambda>/TextGenerationMetric.evaluate.<locals>.<lambda>>       y)9#)>r!   c                     U S   S   $ )Nzrouge-lrE   rF   rG   s    r   rI   rJ   ?   rK   r!   r2   )   r   r   r   )weightssmoothing_function)rO   )r   zipr   r:   r   floatextend_recursion_limitr   
get_scoresmapstripsplitr	   r   method3r   ROUGE_1ROUGE_LBLEU_1BLEU_4)r   r,   r-   tmpr   r   r@   rouge_scoresrouge_1rouge_leach	pred_listtgt_listbleu_1bleu_4s   `              r   evaluateTextGenerationMetric.evaluate3   s   zzMMMz,/

DII,F *,Fyt++d( {,F *3i	/x 	/E 	/ $E0::00e0GL 1s>MNs>MN9=DZZ\'',	D:>))D)$ZZ\'',-)D 02::	<
 02::<
 vv	
 	
/* 10
 EDs#   GGG&(G)G#
Gc                     U R                   R                  UR                   5        U R                  R                  UR                  5        g r   )r   extendr   )r   others     r   mergeTextGenerationMetric.mergeS   s.    

%++&		$r!   c                 2    U R                   U R                  4$ r   )r   r   )r   s    r   __getstate__!TextGenerationMetric.__getstate__W   s    zz499$$r!   c                 B    U R                  5         Uu  U l        U l        g r   )r   r   r   )r   states     r   __setstate__!TextGenerationMetric.__setstate__Z   s     %
DIr!   )r   r   r   r   r   N)r   r   )ri   r   )__name__
__module____qualname____firstlineno____doc__r   r   r8   r   r*   boolr:   re   rj   rm   rq   __static_attributes__rF   r!   r   r   r      sl    #;4T#Y/ ;c49n9M ;P3 PS PT P
@%%&r!   r   r   r   c              #      #    [         R                  " 5       n[        S U  5       5      [        S U 5       5      -  nX2:  a  [         R                  " U5        S v   [         R                  " U5        g 7f)Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   r9   ).0r,   s     r   	<genexpr>)extend_recursion_limit.<locals>.<genexpr>b   s      ' % II %   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r|   )r}   r-   s     r   r~   r   c   s     ,F#SXXr   )sysgetrecursionlimitmaxsetrecursionlimit)r   r   origin_limit	new_limits       r   rR   rR   _   sc     ((*L ' %' '),,F,F)FGIi(	,'s   A1A3)r   
contextlibr   typingr   r   r   r   nltk.translate.bleu_scorer   r	   r   r
   modelscope.metainfor   modelscope.metrics.baser   modelscope.metrics.builderr   r   modelscope.utils.chinese_utilsr   modelscope.utils.registryr   register_moduletext_gen_metricr   r8   rR   rF   r!   r   <module>r      s     % . . D  ' * : > 3 	)@)@BI&6 I&BI&X (%* (E#J ( (r!   