batchalign 0.8.2.post3__tar.gz → 0.8.2.post6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {batchalign-0.8.2.post3/batchalign.egg-info → batchalign-0.8.2.post6}/PKG-INFO +1 -1
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/cli/dispatch.py +39 -10
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/analysis/compare.py +27 -6
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/version +1 -1
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6/batchalign.egg-info}/PKG-INFO +1 -1
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/LICENSE +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/MANIFEST.in +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/README.md +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/__main__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/cli/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/cli/bench.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/cli/cache.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/cli/cli.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/constants.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/document.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/errors.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/base.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/chat/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/chat/file.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/chat/generator.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/chat/lexer.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/chat/parser.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/chat/utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/textgrid/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/textgrid/file.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/textgrid/generator.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/formats/textgrid/parser.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/audio_io.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/resolve.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/speaker/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/speaker/config.yaml +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/speaker/infer.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/speaker/utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/training/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/training/run.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/training/utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utterance/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utterance/cantonese_infer.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utterance/dataset.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utterance/execute.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utterance/infer.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utterance/prep.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utterance/train.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/wave2vec/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/wave2vec/infer_fa.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/whisper/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/whisper/infer_asr.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/whisper/infer_fa.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/analysis/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/analysis/eval.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2chinese.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/deu.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/ell.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/eng.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/eus.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/fra.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/hrv.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/ind.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/jpn.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/nld.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/por.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/spa.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/tha.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/oai_whisper.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/rev.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/whisper.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/whisperx.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/avqi/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/avqi/engine.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/base.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cache.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/cleanup.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/disfluencies.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/parse_support.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/retrace.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/support/filled_pauses.eng +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/support/replacements.eng +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/support/test.test +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/diarization/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/diarization/pyannote.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/dispatch.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/fa/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/fa/wave2vec_fa.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/fa/whisper_fa.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/coref.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/en/irr.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/fr/apm.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/fr/apmn.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/fr/case.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/ja/verbforms.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/ud.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/opensmile/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/opensmile/engine.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/pipeline.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/speaker/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/speaker/nemo_speaker.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/translate/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/translate/gtrans.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/translate/seamless.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/translate/utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/utr/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/utr/rev_utr.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/utr/utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/utr/whisper_utr.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/utterance/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/utterance/ud_utterance.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/cli/test_dispatch_memory.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/conftest.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_file.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_generator.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_lexer.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_parser.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/textgrid/test_textgrid.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/models/test_audio_io.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/models/test_audio_lazy.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/analysis/test_eval.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/asr/test_asr_pipeline.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/asr/test_asr_utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/cache/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/cache/test_cache.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/cleanup/test_disfluency.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/cleanup/test_parse_support.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/fa/test_fa_pipeline.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/fa/test_fa_short_segments.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/fixures.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/test_pipeline.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/test_pipeline_models.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/test_document.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/utils/__init__.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/utils/abbrev.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/utils/compounds.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/utils/config.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/utils/device.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/utils/dp.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/utils/names.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/utils/utils.py +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign.egg-info/SOURCES.txt +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign.egg-info/dependency_links.txt +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign.egg-info/entry_points.txt +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign.egg-info/requires.txt +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign.egg-info/top_level.txt +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/setup.cfg +0 -0
- {batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/setup.py +0 -0
|
@@ -220,22 +220,19 @@ def _run_pipeline_for_file(command, pipeline, file, output, loader_info, writer_
|
|
|
220
220
|
main_doc = CHATFile(path=str(p)).doc
|
|
221
221
|
gold_doc = CHATFile(path=str(gold_path), special_mor_=True).doc
|
|
222
222
|
|
|
223
|
-
# Pipeline:
|
|
223
|
+
# Pipeline: compare (runs morphosyntax internally) -> compare_analysis
|
|
224
224
|
result = pipeline(main_doc, callback=progress_callback, gold=gold_doc)
|
|
225
225
|
|
|
226
226
|
# Write annotated CHAT
|
|
227
227
|
CHATFile(doc=result["doc"]).write(output,
|
|
228
228
|
merge_abbrev=local_kwargs.get("merge_abbrev", False))
|
|
229
229
|
|
|
230
|
-
# Write metrics CSV
|
|
231
|
-
import
|
|
230
|
+
# Write metrics as JSON sidecar for consolidated CSV later
|
|
231
|
+
import json as _json
|
|
232
232
|
metrics = result["metrics"]
|
|
233
|
-
|
|
234
|
-
with open(
|
|
235
|
-
|
|
236
|
-
writer.writerow(["metric", "value"])
|
|
237
|
-
for k, v in metrics.items():
|
|
238
|
-
writer.writerow([k, v])
|
|
233
|
+
json_path = P(output).with_suffix(".compare.json")
|
|
234
|
+
with open(json_path, 'w') as f:
|
|
235
|
+
_json.dump(metrics, f)
|
|
239
236
|
|
|
240
237
|
elif command == "opensmile":
|
|
241
238
|
from batchalign.document import Document
|
|
@@ -388,7 +385,7 @@ Cmd2Task = {
|
|
|
388
385
|
"coref": "coref",
|
|
389
386
|
"translate": "translate",
|
|
390
387
|
"opensmile": "opensmile",
|
|
391
|
-
"compare": "
|
|
388
|
+
"compare": "compare,compare_analysis",
|
|
392
389
|
}
|
|
393
390
|
|
|
394
391
|
# this is the main runner used by all functions
|
|
@@ -1049,6 +1046,38 @@ def _dispatch(command, lang, num_speakers,
|
|
|
1049
1046
|
if not pool_mode_enabled:
|
|
1050
1047
|
_persist_memory_history()
|
|
1051
1048
|
|
|
1049
|
+
# --- Consolidate per-file compare metrics into a single CSV ---
|
|
1050
|
+
if command == "compare" and outputs:
|
|
1051
|
+
import csv
|
|
1052
|
+
import json as _json
|
|
1053
|
+
|
|
1054
|
+
all_metrics = [] # list of (filename, metrics_dict)
|
|
1055
|
+
all_keys = [] # ordered superset of metric keys
|
|
1056
|
+
|
|
1057
|
+
for output_path in outputs:
|
|
1058
|
+
json_path = Path(output_path).with_suffix(".compare.json")
|
|
1059
|
+
if not json_path.exists():
|
|
1060
|
+
continue
|
|
1061
|
+
try:
|
|
1062
|
+
with open(json_path, 'r') as f:
|
|
1063
|
+
metrics = _json.load(f)
|
|
1064
|
+
rel = os.path.relpath(output_path, out_dir)
|
|
1065
|
+
all_metrics.append((rel, metrics))
|
|
1066
|
+
for k in metrics:
|
|
1067
|
+
if k not in all_keys:
|
|
1068
|
+
all_keys.append(k)
|
|
1069
|
+
json_path.unlink()
|
|
1070
|
+
except Exception:
|
|
1071
|
+
pass
|
|
1072
|
+
|
|
1073
|
+
if all_metrics:
|
|
1074
|
+
csv_path = Path(out_dir) / "compare.csv"
|
|
1075
|
+
with open(csv_path, 'w', newline='') as f:
|
|
1076
|
+
writer = csv.writer(f)
|
|
1077
|
+
writer.writerow(["file"] + all_keys)
|
|
1078
|
+
for filename, metrics in all_metrics:
|
|
1079
|
+
writer.writerow([filename] + [metrics.get(k, "") for k in all_keys])
|
|
1080
|
+
|
|
1052
1081
|
if len(errors) > 0:
|
|
1053
1082
|
C.print()
|
|
1054
1083
|
for file, trcbk, err, captured in errors:
|
|
@@ -4,7 +4,7 @@ Engines for transcript comparison against gold-standard references.
|
|
|
4
4
|
|
|
5
5
|
CompareEngine (PROCESSING): Aligns main vs gold transcripts word-by-word
|
|
6
6
|
using the same conform/match_fn logic as WER evaluation, then annotates
|
|
7
|
-
each
|
|
7
|
+
each gold utterance with comparison tokens (%xsrep / %xsmor).
|
|
8
8
|
|
|
9
9
|
CompareAnalysisEngine (ANALYSIS): Reads the comparison annotations and
|
|
10
10
|
computes error-rate metrics for CSV output.
|
|
@@ -208,6 +208,11 @@ def _find_best_segment(gold_tokens, main_tokens, mfn):
|
|
|
208
208
|
elif len_delta == best_len_delta and end > best[1]:
|
|
209
209
|
best = (start, end)
|
|
210
210
|
|
|
211
|
+
# If no tokens overlap at all, return an empty window so the caller
|
|
212
|
+
# doesn't consume main tokens that belong to a later gold utterance.
|
|
213
|
+
if best_score <= 0:
|
|
214
|
+
return 0, 0
|
|
215
|
+
|
|
211
216
|
return best
|
|
212
217
|
|
|
213
218
|
|
|
@@ -249,6 +254,15 @@ def conform_with_mapping(words, conform_fn):
|
|
|
249
254
|
class CompareEngine(BatchalignEngine):
|
|
250
255
|
tasks = [Task.COMPARE]
|
|
251
256
|
|
|
257
|
+
def __init__(self):
|
|
258
|
+
self._stanza = None
|
|
259
|
+
|
|
260
|
+
def _get_stanza(self):
|
|
261
|
+
if self._stanza is None:
|
|
262
|
+
from batchalign.pipelines.morphosyntax import StanzaEngine
|
|
263
|
+
self._stanza = StanzaEngine()
|
|
264
|
+
return self._stanza
|
|
265
|
+
|
|
252
266
|
def process(self, doc, **kwargs):
|
|
253
267
|
gold = kwargs.get("gold")
|
|
254
268
|
if not gold or not isinstance(gold, Document):
|
|
@@ -256,6 +270,12 @@ class CompareEngine(BatchalignEngine):
|
|
|
256
270
|
f"CompareEngine requires a 'gold' Document kwarg, got '{type(gold)}'"
|
|
257
271
|
)
|
|
258
272
|
|
|
273
|
+
# --- 0. Run morphosyntax on both docs ---
|
|
274
|
+
stanza = self._get_stanza()
|
|
275
|
+
non_gold_kwargs = {k: v for k, v in kwargs.items() if k != "gold"}
|
|
276
|
+
doc = stanza.process(doc, **non_gold_kwargs)
|
|
277
|
+
gold = stanza.process(gold, **non_gold_kwargs)
|
|
278
|
+
|
|
259
279
|
# --- 1. Extract words from main utterances ---
|
|
260
280
|
main_utterances = [
|
|
261
281
|
u for u in doc.content if isinstance(u, Utterance)
|
|
@@ -343,16 +363,14 @@ class CompareEngine(BatchalignEngine):
|
|
|
343
363
|
gold_form = gold_info[orig_gold_idx][2]
|
|
344
364
|
last_gold_form_idx = gold_form_idx
|
|
345
365
|
|
|
366
|
+
# Copy timing from main; keep gold's own morphology
|
|
346
367
|
if main_form.time is not None:
|
|
347
368
|
gold_form.time = main_form.time
|
|
348
|
-
|
|
349
|
-
gold_form.morphology = main_form.morphology
|
|
350
|
-
if main_form.dependency is not None:
|
|
351
|
-
gold_form.dependency = main_form.dependency
|
|
369
|
+
gold_form.dependency = None
|
|
352
370
|
|
|
353
371
|
utt_positioned[utt_idx].append((gold_form_idx, CompareToken(
|
|
354
372
|
text=item.key,
|
|
355
|
-
pos=_get_pos(
|
|
373
|
+
pos=_get_pos(gold_form),
|
|
356
374
|
status="match"
|
|
357
375
|
)))
|
|
358
376
|
local_main_cursor += 1
|
|
@@ -365,6 +383,8 @@ class CompareEngine(BatchalignEngine):
|
|
|
365
383
|
gold_form = gold_info[orig_gold_idx][2]
|
|
366
384
|
last_gold_form_idx = gold_form_idx
|
|
367
385
|
|
|
386
|
+
gold_form.dependency = None
|
|
387
|
+
|
|
368
388
|
utt_positioned[utt_idx].append((gold_form_idx, CompareToken(
|
|
369
389
|
text=item.key,
|
|
370
390
|
pos=_get_pos(gold_form),
|
|
@@ -401,6 +421,7 @@ class CompareEngine(BatchalignEngine):
|
|
|
401
421
|
form.morphology = [Morphology(
|
|
402
422
|
pos="PUNCT", lemma=form.text.strip(), feats=""
|
|
403
423
|
)]
|
|
424
|
+
form.dependency = None
|
|
404
425
|
utt_positioned[utt_idx].sort(key=lambda x: x[0])
|
|
405
426
|
|
|
406
427
|
# --- 7. Set comparison on each gold utterance ---
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/models/utterance/cantonese_infer.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/asr/num2lang/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/disfluencies.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/parse_support.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/cleanup/support/test.test
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/diarization/__init__.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/diarization/pyannote.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/__init__.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/coref.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/en/irr.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/fr/apm.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/fr/apmn.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/fr/case.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/morphosyntax/ja/verbforms.py
RENAMED
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/opensmile/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/speaker/nemo_speaker.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/translate/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/translate/seamless.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/utterance/__init__.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/pipelines/utterance/ud_utterance.py
RENAMED
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/cli/test_dispatch_memory.py
RENAMED
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_file.py
RENAMED
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_lexer.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_parser.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/chat/test_chat_utils.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/formats/textgrid/test_textgrid.py
RENAMED
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/models/test_audio_lazy.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/analysis/test_eval.py
RENAMED
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/asr/test_asr_utils.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/cache/__init__.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/cache/test_cache.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/fa/test_fa_pipeline.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/test_pipeline.py
RENAMED
|
File without changes
|
{batchalign-0.8.2.post3 → batchalign-0.8.2.post6}/batchalign/tests/pipelines/test_pipeline_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|