import unittest from evaluation.rouge import RougeScorer from evaluation.bleu import BleuScorer from evaluation.metrics_manager import MetricsManager class TestEvaluation(unittest.TestCase): def setUp(self): self.rouge = RougeScorer() self.bleu = BleuScorer() self.manager = MetricsManager() def test_rouge_calculation(self): candidate = "natural language processing enables automatic text summarization" reference = "natural language processing creates automatic text summaries" scores = self.rouge.evaluate(candidate, reference) self.assertIn("rouge-1", scores) self.assertIn("rouge-2", scores) self.assertIn("rouge-l", scores) # ROUGE-1 should have positive precision, recall, and f1 self.assertGreater(scores["rouge-1"]["f1"], 0.4) self.assertGreater(scores["rouge-l"]["f1"], 0.4) def test_bleu_calculation(self): candidate = "the cat is sitting on the mat" reference = "the cat sits on the mat" scores = self.bleu.evaluate(candidate, reference) self.assertIn("bleu-1", scores) self.assertIn("bleu_cumulative", scores) self.assertGreater(scores["bleu-1"], 0.5) def test_metrics_manager(self): orig = "Natural language processing is an essential field. It enables machines to comprehend documents and produce concise summaries." summary = "NLP enables machines to produce summaries." ref = "NLP helps computers produce summaries." results = self.manager.evaluate_summary(orig, summary, reference_summary=ref, lang="en") self.assertIn("compression_ratio", results) self.assertIn("rouge", results) self.assertIn("bleu", results) self.assertLess(results["compression_ratio"], 1.0) if __name__ == "__main__": unittest.main()