Skip to content

Instantly share code, notes, and snippets.

@naiaden
Last active March 3, 2017 22:35
Show Gist options
  • Select an option

  • Save naiaden/e1a517f6cd0a248147c79ef2588c37eb to your computer and use it in GitHub Desktop.

Select an option

Save naiaden/e1a517f6cd0a248147c79ef2588c37eb to your computer and use it in GitHub Desktop.
Determine WER
import sys
from operator import itemgetter
from os import listdir
from os.path import isfile, join
nbest_path = sys.argv[1]#"/scratch/lonrust/cococpypv3/input/nbest/comp-c"
output_path = sys.argv[2]#"/scratch/lonrust/cococpypv3/nbest_rescored/comp-c"
nbest_files = [f for f in listdir(nbest_path) if isfile(join(nbest_path, f))]
nbest_ids = set()
for f in nbest_files:
nbest_ids.add(f.split(".")[0])
for nid in nbest_ids:
nid_based_files = []
for nfile in nbest_files:
if nfile.startswith(nid):
ntimes = nfile.split(".")[2]
nstart = ntimes.split(":")[1]
with open(nfile, 'r', encoding = "ISO-8859-1") as f:
tokens = f.readline().strip().split(" ")[3:]
filtered_tokens = list(filter(lambda a: a != '<s>' and a!= '</s>' and a!= '<sil>', tokens))
nid_based_files.append([nid, nstart, nfile, filtered_tokens])
nid_based_files.sort(key=lambda x: int(x[1]))
with open(output_path + "/" + nid + ".reranked", 'w', encoding = "ISO-8859-1") as f:
for nbf in nid_based_files:
try:
f.write(' '.join(nbf[3]) + " ")
except TypeError:
print(nbf[3])
[onrust@deneve scripts]$ spr_scoreres -ref ~/reranking/fv800475.reference -tst ~/reranking/fv800475.reranked_plain -PAR -nr stdout
CORPUS (nil)
=================================
Entry number = 0/-1
Input string: maar_Sun_Dance_riep_mevrouw_Brogen_lachend_hoe_kun_je_zo_harteloos_zijn_ik_ben_niet_harteloos_vond_Sun_Dance_het_is_gewoon_waar_Man_zegt_altijd_dat_hij_het_leuk_vindt_om_ziek_te_zijn_op_dat_ogenblik_werd_er_geklopt_en_stak_meneer_Robinson_zijn_hoofd_om_de_woonkamerdeur_kom_binnen_kom_binnen_riep_mevrouw_Brogen_het_hindert_niet_dat_je_lekt_ik_ben_eigenlijk_te_nat_zei_meneer_Robinson_vermoeid_maar_hij_stapte_toch_naar_binnen_hij_zag_er_vreselijk_afgemat_uit_en_het_leek_wel_of_hij_net_was_aangespoeld_u_bent_toch_niet_zo_nat_geworden_op_die_paar_meter_door_de_tuin_heen_riep_Robin_uit_dat_heb_je_goed_gezien_zei_meneer_Robinson_hij_schudde_het_natte_haar_uit_z'n_ogen_en_blies_op_z'n_vingers_ik_ben_op_het_strand_geweest_om_die_verd_die_vervl_die_krankzinnige_hond_van_ons_te_roepen_een_half_uur_lang_en_begin_nu_niet_gelijk_tegen_me_te_jammeren_Mier_niemand_heeft_hem_naar_buiten_gestuurd_het_was_z'n_eigen_idee_hij_glipte_langs_me_heen_toen_ik_probeerde_de_brievenbus_dicht_te_maken_zodat_de_regen_niet_naar_binnen_zou_waaien_en_ik_ben_er_net_achter_gekomen_dat_je_moeder_op_de_drempel_naar_hem_heeft_staan_roepen_in_die_wind_hoe_gaat_het_met_haar_onderbrak_mevrouw_Brogen_hem_nog_min_of_meer_hetzelfde_dank_je_antwoordde_meneer_Robinson_hij_bukte_zich_om_een_stapel_cadeautjes_onder_de_kerstboom_te_leggen_ik_moest_je_hartelijk_bedanken_dat_je_het_hele_stel_vanmiddag_hier_wilde_hebben_en_je_een_gelukkig_kerstfeest_wensen_en_je_moest_je_geen_zorgen_maken_je_krijgt_bezoek_morgen_is_het_niet_alleen_Robins_vriend_Dani<EB>l_en_z'n_vader_en_moeder_antwoordde_mevrouw_Brogen_dus_als_ik_wat_kan_doen_wat_dan_ook_zeg_het_dan_en_zeg_tegen_haar_dat_ze_veel_te_veel_heeft_meegegeven_zoveel_pakjes_dat_zegt_ze_van_jou_ook_je_kan_nooit_te_veel_Kerstmis_hebben_zei_Robin_en_Ouwe_Lap_komt_heus_gauw_weer_terug_hij_weet_echt_nog_wel_wat_hij_doet (351)
Recognized: maar_samen_Beyns_riep_mevrouw_belopen_lachend_hoe_kun_je_zo_harteloos_zijn_ik_ben_niet_harteloos_Handzame_mens_het_is_gewoon_waren_waarom_zegt_altijd_dat_het_leuk_vindt_om_ziek_te_zijn_op_dat_ogenblik_werd_er_geklopt_een_sterk_Mr_Robinson_zijn_hoofd_om_de_bomen_raakte_kom_binnen_kom_binnen_ik_ben_verbroken_het_hindert_niet_uitgelekt_in_een_eigen_lijkt_en_dat_zij_Mr_Robinson_vermoeid_maar_hij_stapte_toch_naar_binnen_hijsen_haar_vreselijke_afgemaakt_bij_en_het_leek_wel_of_hij_net_was_aangespoeld_ik_ben_toch_niet_zo_nat_geworden_op_die_paar_meter_door_De_Deyne_��n_Een_probleem_uit_dat_het_je_goed_gezien_zij_mengen_Robinson_hij_scheidde_het_natte_haren_uit_zijn_ogen_en_blies_op_zijn_vingers_ik_ben_beschaamd_geweest_om_leverde_die_vervoeren_die_krankzinnige_om_vanalles_te_roepen_een_halfuur_lang_en_begin_nu_niet_gelijk_tegen_Wetteren_Jan_Renier_niemand_heeft_hem_naar_buiten_gestuurd_het_was_zijn_eigen_idee_hij_glipte_langs_me_heen_toen_ik_probeerde_de_brievenbus_dicht_te_maken_zodat_de_regen_niet_naar_binnen_zou_waaien_en_ik_ben_er_net_achter_gekomen_dat_je_moeder_op_de_drempel_naar_hem_heeft_samenroepen_in_die_wind_hoe_gaat_het_met_haar_onderbuik_mevrouw_berokkent_hem_toch_min_of_meer_hetzelfde_drankje_antwoordde_meneer_mensen_hij_beukte_zich_om_een_stapel_cadeautjes_onder_de_kerstboom_te_leggen_ik_moest_je_hartelijk_bedanken_dat_je_het_hele_stel_vanmiddag_geen_wilde_hebben_en_je_een_gelukkig_kerstfeest_wensen_en_je_moest_je_geen_zorgen_maak_ik_het_bezoek_morgen_is_het_niet_alleen_Robbins_vriendin_Danielle_en_zijn_vader_en_moeder_antwoordde_mevrouw_brokken_dus_als_ik_wat_kan_doen_wat_dan_ook_zeggen_dan_en_zeg_tegen_haar_dat_ze_veel_te_veel_heeft_meegegeven_hoeveel_pakjes_dat_zegt_ze_van_jou_ook_je_kan_nooit_teveel_Kerstmis_hebben_zei_Robin_en_ouwe_rat_komt_wel_eens_gauw_weer_terug_hij_weet_echt_nog_wel_wat_hij_doet (339)
Difference: maar_Sun#S#samen_Dance#S#Beyns_riep_mevrouw_Brogen#S#belopen_lachend_hoe_kun_je_zo_harteloos_zijn_ik_ben_niet_harteloos_D#vond_Sun#S#Handzame_Dance#S#mens_het_is_gewoon_waar#S#waren_Man#S#waarom_zegt_altijd_dat_D#hij_het_leuk_vindt_om_ziek_te_zijn_op_dat_ogenblik_werd_er_geklopt_en#S#een_stak#S#sterk_meneer#S#Mr_Robinson_zijn_hoofd_om_de_woonkamerdeur#S#bomen_I#raakte_kom_binnen_kom_binnen_riep#S#ik_mevrouw#S#ben_Brogen#S#verbroken_het_hindert_niet_D#dat_je#S#uitgelekt_lekt#S#in_ik#S#een_ben#S#eigen_eigenlijk#S#lijkt_te#S#en_nat#S#dat_zei#S#zij_meneer#S#Mr_Robinson_vermoeid_maar_hij_stapte_toch_naar_binnen_D#hij_zag#S#hijsen_er#S#haar_vreselijk#S#vreselijke_afgemat#S#afgemaakt_uit#S#bij_en_het_leek_wel_of_hij_net_was_aangespoeld_u#S#ik_bent#S#ben_toch_niet_zo_nat_geworden_op_die_paar_meter_door_de#S#De_tuin#S#Deyne_heen#S#��n_riep#S#Een_Robin#S#probleem_uit_dat_heb#S#het_je_goed_gezien_zei#S#zij_meneer#S#mengen_Robinson_hij_schudde#S#scheidde_het_natte_haar#S#haren_uit_z'n#S#zijn_ogen_en_blies_op_z'n#S#zijn_vingers_ik_ben_D#op_D#het_strand#S#beschaamd_geweest_om_D#die_verd#S#leverde_die_vervl#S#vervoeren_die_krankzinnige_D#hond_van#S#om_ons#S#vanalles_te_roepen_een_D#half_uur#S#halfuur_lang_en_begin_nu_niet_gelijk_tegen_D#me_te#S#Wetteren_jammeren#S#Jan_Mier#S#Renier_niemand_heeft_hem_naar_buiten_gestuurd_het_was_z'n#S#zijn_eigen_idee_hij_glipte_langs_me_heen_toen_ik_probeerde_de_brievenbus_dicht_te_maken_zodat_de_regen_niet_naar_binnen_zou_waaien_en_ik_ben_er_net_achter_gekomen_dat_je_moeder_op_de_drempel_naar_hem_heeft_D#staan_roepen#S#samenroepen_in_die_wind_hoe_gaat_het_met_haar_onderbrak#S#onderbuik_mevrouw_Brogen#S#berokkent_hem_nog#S#toch_min_of_meer_hetzelfde_D#dank_je#S#drankje_antwoordde_meneer_Robinson#S#mensen_hij_bukte#S#beukte_zich_om_een_stapel_cadeautjes_onder_de_kerstboom_te_leggen_ik_moest_je_hartelijk_bedanken_dat_je_het_hele_stel_vanmiddag_hier#S#geen_wilde_hebben_en_je_een_gelukkig_kerstfeest_wensen_en_je_moest_je_geen_zorgen_maken#S#maak_je#S#ik_krijgt#S#het_bezoek_morgen_is_het_niet_alleen_Robins#S#Robbins_vriend#S#vriendin_Dani<EB>l#S#Danielle_en_z'n#S#zijn_vader_en_moeder_antwoordde_mevrouw_Brogen#S#brokken_dus_als_ik_wat_kan_doen_wat_dan_ook_D#zeg_het#S#zeggen_dan_en_zeg_tegen_haar_dat_ze_veel_te_veel_heeft_meegegeven_zoveel#S#hoeveel_pakjes_dat_zegt_ze_van_jou_ook_je_kan_nooit_D#te_veel#S#teveel_Kerstmis_hebben_zei_Robin_en_Ouwe#S#ouwe_Lap#S#rat_komt_heus#S#wel_I#eens_gauw_weer_terug_hij_weet_echt_nog_wel_wat_hij_doet
Nsub= 74, Nins= 2, Ndel= 14, Ntot= 90
==================================================================
Number of entries = 1
Number of correctly recognized strings = 0
==================================================================
Global number of errors = 90/351 (I=2, D=14, S=74)
Percent insertions = 0.57%
Percent deletions = 3.99%
Percent substitutions = 21.08%
==================================================================
Word recognition rate = 74.36 % correct
String recognition rate = 0.00 % correct
==================================================================
Word error rate = 25.64 %
String error rate = 100.00 %
==================================================================
WER=25.64%, (ins=0.57%, del=3.99%, sub=21.08%), #W=351, #S=1, #I=2, #D=14, #S=74, ACC=25.07%
==================================================================
[onrust@deneve scripts]$ /users/spraak/spchprog/SPRAAK/v1.2/bin/Linux_x86_64/spr_scoreres -ref ~/reranking/fv800475.reference -tst ~/reranking/fv800475.reranked_plain -PAR -nr stdout
1. Obtain nbest lists (*best.txt)
2. Obtain references (*.stm)
3. Run all the experiments (rescore)
wrexpper
4. Run nbest2hyp.py on all files from #3
python nbest2hyp.py /esat/spchdisk/scratch/onrust/nbest/comp-g/original_nbest/ /esat/spchdisk/scratch/onrust/nbest/comp-g/original_hyp/
5. Run stm2ref.sh on all references
for f in *.stm; do { cut -d' ' -f 7- $f | tr '\n' ' '; echo ;} > ../ref/$(basename $f .stm).ref; done
6. Run refhyp2wer.sh for scorez
for f in *.reranked; do /users/spraak/spchprog/SPRAAK/v1.2/build/Linux_x86_64/bin/spr_scoreres -ref /esat/spchdisk/scratch/onrust/nbest/comp-g/ref/$(basename $f .reranked).ref -tst /esat/spchdisk/scratch/onrust/nbest/comp-g/original_hyp/$(basename $f .reranked).reranked -PAR -nr stdout | grep "Word error rate" | sed 's/.* = \(.*\) %/\1/'; done > ../original.wer
7. Compute average WER
awk '{ total += $1; count++ } END { print total/count }' original.wer
spr_scoreres -ref $1 -tst $2 -PAR -nr stdout
cut -d' ' -f 7- $1 | tr '\n' ' '
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment