Simon Clematide
Add Annotate & Export tab and public API endpoints (/annotate, /render, /models)
ad9385f Download tests/test_annotate.py from simon-clmtd/universal-dependencies-visualizer: direct link, hf CLI and curl.
- Browser
- Download file 2.54 kB
-
https://huggingface.co/spaces/simon-clmtd/universal-dependencies-visualizer/resolve/main/tests/test_annotate.py
- Command line
-
hf download hf://spaces/simon-clmtd/universal-dependencies-visualizer/tests/test_annotate.py
-
curl -L -o test_annotate.py https://huggingface.co/spaces/simon-clmtd/universal-dependencies-visualizer/resolve/main/tests/test_annotate.py
2.54 kB
| import unittest | |
| from core.annotate import annotate_text, merge_conllu, resolve_model | |
| PART = """# generator = UDPipe 2, https://lindat.mff.cuni.cz/services/udpipe | |
| # udpipe_model = german-hdt-ud-2.17-251125 | |
| # newdoc | |
| # newpar | |
| # sent_id = 1 | |
| # text = {text} | |
| 1\t{text}\t_\tNOUN\t_\t_\t0\troot\t_\t_ | |
| """ | |
| class FakeClient: | |
| def __init__(self, error=None): | |
| self.calls = [] | |
| self.error = error | |
| def parse_sentence(self, text, model, strip_morphology=True, cache=None): | |
| self.calls.append((text, model, strip_morphology)) | |
| if self.error: | |
| return {"conllu": "", "model": model, "error": self.error} | |
| return {"conllu": PART.format(text=text), "model": model, "error": None} | |
| class AnnotateTests(unittest.TestCase): | |
| def test_resolve_model_accepts_label_and_id(self): | |
| self.assertEqual(resolve_model("UDPipe · german-gsd-ud-2.17-251125"), "german-gsd-ud-2.17-251125") | |
| self.assertEqual(resolve_model("german-gsd-ud-2.17-251125"), "german-gsd-ud-2.17-251125") | |
| with self.assertRaises(ValueError): | |
| resolve_model("german") | |
| def test_lines_are_parsed_separately_and_renumbered(self): | |
| client = FakeClient() | |
| result = annotate_text("Eins\n\n Zwei \n", "german-hdt-ud-2.17-251125", client=client) | |
| self.assertEqual([call[0] for call in client.calls], ["Eins", "Zwei"]) | |
| self.assertTrue(client.calls[0][2]) | |
| conllu = result["conllu"] | |
| self.assertEqual(result["sentences"], 2) | |
| self.assertEqual(conllu.count("# generator"), 1) | |
| self.assertNotIn("# newdoc", conllu) | |
| self.assertIn("# sent_id = 1\n# text = Eins", conllu) | |
| self.assertIn("# sent_id = 2\n# text = Zwei", conllu) | |
| self.assertTrue(conllu.endswith("\n\n")) | |
| def test_morphology_flag_is_passed(self): | |
| client = FakeClient() | |
| annotate_text("Eins", "german-hdt-ud-2.17-251125", include_morphology=True, client=client) | |
| self.assertFalse(client.calls[0][2]) | |
| def test_one_line_may_yield_several_sentences(self): | |
| merged = merge_conllu([PART.format(text="A") + PART.format(text="B")], "m") | |
| self.assertIn("# sent_id = 2\n# text = B", merged) | |
| def test_errors(self): | |
| with self.assertRaises(ValueError): | |
| annotate_text(" \n ", "german-hdt-ud-2.17-251125", client=FakeClient()) | |
| with self.assertRaises(RuntimeError): | |
| annotate_text("Eins", "german-hdt-ud-2.17-251125", client=FakeClient(error="down")) | |
| if __name__ == "__main__": | |
| unittest.main() | |