o
    i                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZmZ 	dddZ	dd Z
dd	 Zejddd
defddZedkr?e  dS dS )    N)
DictConfig	OmegaConf
ListConfigFc                 C   s  ddddddddddd
}i }i }t |d7}|D ],}|  d }	|  dd  }
|rAd|
}
|
dd}
dd	 |
D }
|
||	< qW d    n1 sPw   Y  t | d7}|D ],}|  d }	|  dd  }
|rd|
}
|
dd}
d
d	 |
D }
|
||	< q]W d    n1 sw   Y  t |d}|D ]}||v r<t|| || }|d  |d 7  < |d  |d 7  < |d  |d 7  < |d  |d 7  < |d  |d 7  < |d  |d 7  < |d  d7  < |d dkr|d  d7  < ||t| d  |ddtt	dd ||  d  |ddtt	dd ||  d  |
  q|d dkrSt|d d  |d  d!|d"< |d dkrit|d d  |d  d!|d#< |d |d$t|d"  d% t|d  d& t|d  d' t|d  d( t|d  d) t|d  d* d  |d+t|d#  d% t|d  d& t|d  d, d  |d-tt| d. tt||d   d/ d  |  d S )0Nr   g        )
WrdCorrInsDelSubSntErrS.Errwrong_wordswrong_sentencesr     c                 S      g | ]}|qS  r   .0xr   r   F/home/ubuntu/.local/lib/python3.10/site-packages/funasr/metrics/wer.py
<listcomp>&       zcompute_wer.<locals>.<listcomp>c                 S   r   r   r   r   r   r   r   r   /   r   wr   nwordsr   corr   wrongr   insr   delr	   subr
   r   
zref:	c                 S      |   S Nlowerr   r   r   r   <lambda>A       zcompute_wer.<locals>.<lambda>zhyp:	c                 S   r#   r$   r%   r'   r   r   r   r(   D   r)   d      r   r   z%WER z [ z / z, z ins, z del, z sub ]z%SER z ]zScored z sentences, z not present in hyp.)openstripsplitjoinreplacecompute_wer_by_linewriteprint_cer_detaillistmapflushroundstrlenclose)ref_filehyp_filecer_filecn_postprocessrsthyp_dictref_dict
hyp_readerlinekeyvalue
ref_readercer_detail_writerhyp_keyout_itemr   r   r   compute_wer   s   






""





	






	rJ   c                 C   s,  t tdd | } t tdd |}t| }t|}tj|d |d ftjd}tj|d |d ftjd}t|d D ]}||| d< q<t|d D ]}||d |< qKtd|d D ]c}td|d D ]Y}| |d  ||d  kr||d  |d  || |< qd||d  |d  d }||d  | d }	|| |d  d }
||	|
g}t|}|	|d }||| |< ||| |< qdq[g }|}|}|dddddd}|dks|dkrt
d|}t
d|}|| | dkr|d dkr|d dkr||d |d f |d  d7  < |d8 }|d8 }nE|| | d	kr*|d8 }|d
  d7  < n/|| | dkr@|d8 }|d  d7  < n|| | dkrY|d8 }|d8 }|d  d7  < |dk rl|dkrl|d  d7  < n|dk r~|dkr~|d
  d7  < |dks|dks|  || | }||d< |S )Nc                 S   r#   r$   r%   r'   r   r   r   r(   u   r)   z%compute_wer_by_line.<locals>.<lambda>c                 S   r#   r$   r%   r'   r   r   r   r(   v   r)   r   )dtyper   )r   r   r   r   r    r!   r   r+   r      r    r!   r   )r4   r5   r9   npzerosint16int8rangeminindexmaxappendreverse)hypreflen_hyplen_refcost_matrix
ops_matrixijsubstitution	insertiondeletioncompare_valmin_valoperation_idx	match_idxr?   i_idxj_idx	wrong_cntr   r   r   r1   t   sn   



r1   c                 C   s   dt | d  d t | d  d t | d  d t | d  d	 t | d
  d d| d | d   d d| d | d   S )Nz(nwords=r   z,cor=r   z,ins=r   z,del=r    z,sub=r!   z) corr:z{:.2%}z,cer:r   )r8   format)r?   r   r   r   r3      s8   



	

r3   )config_nameversion_basecfgc                 C   sl   |  dd }|  dd }|  dd }|  dd}|d u s$|d u s$|d u r-td td t|||| d S )Nr;   r<   r=   r>   Fzxusage : python -m  funasr.metrics.wer ++ref_file=test.ref ++hyp_file=test.hyp ++cer_file=test.wer ++cn_postprocess=falser   )getprintsysexitrJ   )rl   r;   r<   r=   r>   r   r   r   
main_hydra   s   
rq   __main__)F)osnumpyrM   ro   hydra	omegaconfr   r   r   rJ   r1   r3   mainrq   __name__r   r   r   r   <module>   s    
lI
