diff --git a/sacrebleu/metrics/base.py b/sacrebleu/metrics/base.py index 8aa693a..91ed153 100644 --- a/sacrebleu/metrics/base.py +++ b/sacrebleu/metrics/base.py @@ -83,9 +83,10 @@ def format( return sc if is_json: - for param in signature.split("|"): - key, value = param.split(":") - d[key] = value + if signature: + for param in signature.split("|"): + key, value = param.split(":") + d[key] = value return json.dumps(d, indent=1, ensure_ascii=False) return full_score diff --git a/test/test_metrics_base.py b/test/test_metrics_base.py index 679ec71..5f5d291 100644 --- a/test/test_metrics_base.py +++ b/test/test_metrics_base.py @@ -1,10 +1,25 @@ +import json from contextlib import nullcontext as does_not_raise import pytest +from sacrebleu.metrics import BLEU, CHRF, TER from sacrebleu.metrics.base import Metric +@pytest.mark.parametrize("metric_class", [BLEU, CHRF, TER]) +@pytest.mark.parametrize("kwargs", [{}, {"signature": ""}]) +def test_score_format_json_without_signature(metric_class, kwargs): + metric = metric_class() + score = metric.corpus_score(["The model learns from data."], [["The model learns from text."]]) + + result = json.loads(score.format(width=3, is_json=True, **kwargs)) + + assert result["name"] == score.name + assert result["score"] == round(score.score, 3) + assert result["signature"] == "" + + class ConcreteTestMetric(Metric): """Concrete test metric so the ABC can be instantiated."""