def test_backoff_latin_lemmatizer_verbose(self): """Test LatinBackoffLemmatizer""" train = [[ ("ceterum", "ceterus"), ("antequam", "antequam"), ("destinata", "destino"), ("componam", "compono"), ]] lemmatizer = LatinBackoffLemmatizer(verbose=True) test_str = """Ceterum antequam destinata componam""" target = [ ("ceterum", "ceterum", "<UnigramLemmatizer: CLTK Sentence Training Data>"), ( "antequam", "antequam", "<UnigramLemmatizer: CLTK Sentence Training Data>", ), ( "destinata", "destino", "<UnigramLemmatizer: CLTK Sentence Training Data>", ), ("componam", "compono", "<DictLemmatizer: Morpheus Lemmas>"), ] tokenizer = LatinWordTokenizer() test_str = test_str.lower() test_str = replace_jv(test_str) tokens = tokenizer.tokenize(test_str) lemmas = lemmatizer.lemmatize(tokens) self.assertEqual(lemmas, target)
def test_regex_lemmatizer(self): """Test regex_lemmatizer()""" sub = [("(.)ab(o|is|it|imus|itis|unt)$", r"\1o")] lemmatizer = RegexpLemmatizer(sub) test_str = "amabimus" target = [("amabimus", "amo")] tokenizer = LatinWordTokenizer() test_str = test_str.lower() test_str = replace_jv(test_str) tokens = tokenizer.tokenize(test_str) lemmas = lemmatizer.lemmatize(tokens) self.assertEqual(lemmas, target)
def test_backoff_latin_lemmatizer(self): """Test LatinBackoffLemmatizer""" train = [[ ("ceterum", "ceterus"), ("antequam", "antequam"), ("destinata", "destino"), ("componam", "compono"), ]] lemmatizer = LatinBackoffLemmatizer() test_str = """Ceterum antequam destinata componam""" target = [ ("ceterum", "ceterum"), ("antequam", "antequam"), ("destinata", "destino"), ("componam", "compono"), ] tokenizer = LatinWordTokenizer() test_str = test_str.lower() test_str = replace_jv(test_str) tokens = tokenizer.tokenize(test_str) lemmas = lemmatizer.lemmatize(tokens) self.assertEqual(lemmas, target)
def test_dict_lemmatizer(self): """Test model_lemmatizer()""" lemmas = { "ceterum": "ceterus", "antequam": "antequam", "destinata": "destino", "componam": "compono", } lemmatizer = DictLemmatizer(lemmas=lemmas) test_str = "Ceterum antequam destinata componam" target = [ ("ceterum", "ceterus"), ("antequam", "antequam"), ("destinata", "destino"), ("componam", "compono"), ] # pylint: disable=line-too-long tokenizer = LatinWordTokenizer() test_str = test_str.lower() test_str = replace_jv(test_str) tokens = tokenizer.tokenize(test_str) lemmas = lemmatizer.lemmatize(tokens) self.assertEqual(lemmas, target)
def test_unigram_lemmatizer(self): """Test unigram_lemmatizer()""" train = [ [ ("ceterum", "ceterus"), ("antequam", "antequam"), ("destinata", "destino"), ("componam", "compono"), ] ] # pylint: disable=line-too-long lemmatizer = UnigramLemmatizer(train=train) test_str = """Ceterum antequam destinata componam""" target = [ ("ceterum", "ceterus"), ("antequam", "antequam"), ("destinata", "destino"), ("componam", "compono"), ] # pylint: disable=line-too-long tokenizer = LatinWordTokenizer() test_str = test_str.lower() test_str = replace_jv(test_str) tokens = tokenizer.tokenize(test_str) lemmas = lemmatizer.lemmatize(tokens) self.assertEqual(lemmas, target)
def test_tokenize_latin_words(self): word_tokenizer = LatinWordTokenizer() test = "Arma virumque cano, Troiae qui primus ab oris." tokens = word_tokenizer.tokenize(test) target = [ "Arma", "virum", "-que", "cano", ",", "Troiae", "qui", "primus", "ab", "oris", ".", ] self.assertEqual(tokens, target) test = ( "Hoc verumst, tota te ferri, Cynthia, Roma, et non ignota vivere nequitia?" ) tokens = word_tokenizer.tokenize(test) target = [ "Hoc", "verum", "est", ",", "tota", "te", "ferri", ",", "Cynthia", ",", "Roma", ",", "et", "non", "ignota", "vivere", "nequitia", "?", ] self.assertEqual(tokens, target) test = "Nec te decipiant veteres circum atria cerae. Tolle tuos tecum, pauper amator, avos!" tokens = word_tokenizer.tokenize(test) target = [ "Nec", "te", "decipiant", "veteres", "circum", "atria", "cerae", ".", "Tolle", "tuos", "cum", "te", ",", "pauper", "amator", ",", "avos", "!", ] self.assertEqual(tokens, target) test = "Neque enim, quod quisque potest, id ei licet, nec, si non obstatur, propterea etiam permittitur." tokens = word_tokenizer.tokenize(test) target = [ "Neque", "enim", ",", "quod", "quisque", "potest", ",", "id", "ei", "licet", ",", "nec", ",", "si", "non", "obstatur", ",", "propterea", "etiam", "permittitur", ".", ] self.assertEqual(tokens, target) test = "Quid opust verbis? lingua nullast qua negem quidquid roges." tokens = word_tokenizer.tokenize(test) target = [ "Quid", "opus", "est", "verbis", "?", "lingua", "nulla", "est", "qua", "negem", "quidquid", "roges", ".", ] self.assertEqual(tokens, target) test = "Textile post ferrumst, quia ferro tela paratur, nec ratione alia possunt tam levia gigni insilia ac fusi, radii, scapique sonantes." tokens = word_tokenizer.tokenize(test) target = [ "Textile", "post", "ferrum", "est", ",", "quia", "ferro", "tela", "paratur", ",", "nec", "ratione", "alia", "possunt", "tam", "levia", "gigni", "insilia", "ac", "fusi", ",", "radii", ",", "scapi", "-que", "sonantes", ".", ] self.assertEqual(tokens, target) test = "Cenavin ego heri in navi in portu Persico?" tokens = word_tokenizer.tokenize(test) target = [ "Cenavi", "-ne", "ego", "heri", "in", "navi", "in", "portu", "Persico", "?", ] self.assertEqual(tokens, target) test = ( "quae ripas Ubiorum contingebat in longitudinem pedum ducentorum rescindit" ) tokens = word_tokenizer.tokenize(test) target = [ "quae", "ripas", "Ubiorum", "contingebat", "in", "longitudinem", "pedum", "ducentorum", "rescindit", ] self.assertEqual(tokens, target)
def test_latin_word_tokenizer(self): """Test Latin-specific word tokenizer.""" word_tokenizer = LatinWordTokenizer() # Test sources: # - V. Aen. 1.1 # - Prop. 2.5.1-2 # - Ov. Am. 1.8.65-66 # - Cic. Phillip. 13.14 # - Plaut. Capt. 937 # - Lucr. DRN. 5.1351-53 # - Plaut. Bacch. 837-38 # - Plaut. Amph. 823 # - Caes. Bel. 6.29.2 tests = [ "Arma virumque cano, Troiae qui primus ab oris.", "Hoc verumst, tota te ferri, Cynthia, Roma, et non ignota vivere nequitia?", "Nec te decipiant veteres circum atria cerae. Tolle tuos tecum, pauper amator, avos!", "Neque enim, quod quisque potest, id ei licet, nec, si non obstatur, propterea etiam permittitur.", "Quid opust verbis? lingua nullast qua negem quidquid roges.", "Textile post ferrumst, quia ferro tela paratur, nec ratione alia possunt tam levia gigni insilia ac fusi, radii, scapique sonantes.", # pylint: disable=line-too-long "Dic sodes mihi, bellan videtur specie mulier?", "Cenavin ego heri in navi in portu Persico?", "quae ripas Ubiorum contingebat in longitudinem pedum ducentorum rescindit", ] results = [] for test in tests: result = word_tokenizer.tokenize(test) results.append(result) target = [ [ "Arma", "virum", "-que", "cano", ",", "Troiae", "qui", "primus", "ab", "oris", ".", ], [ "Hoc", "verum", "est", ",", "tota", "te", "ferri", ",", "Cynthia", ",", "Roma", ",", "et", "non", "ignota", "vivere", "nequitia", "?", ], [ "Nec", "te", "decipiant", "veteres", "circum", "atria", "cerae", ".", "Tolle", "tuos", "cum", "te", ",", "pauper", "amator", ",", "avos", "!", ], [ "Neque", "enim", ",", "quod", "quisque", "potest", ",", "id", "ei", "licet", ",", "nec", ",", "si", "non", "obstatur", ",", "propterea", "etiam", "permittitur", ".", ], [ "Quid", "opus", "est", "verbis", "?", "lingua", "nulla", "est", "qua", "negem", "quidquid", "roges", ".", ], [ "Textile", "post", "ferrum", "est", ",", "quia", "ferro", "tela", "paratur", ",", "nec", "ratione", "alia", "possunt", "tam", "levia", "gigni", "insilia", "ac", "fusi", ",", "radii", ",", "scapi", "-que", "sonantes", ".", ], [ "Dic", "si", "audes", "mihi", ",", "bella", "-ne", "videtur", "specie", "mulier", "?", ], [ "Cenavi", "-ne", "ego", "heri", "in", "navi", "in", "portu", "Persico", "?", ], [ "quae", "ripas", "Ubiorum", "contingebat", "in", "longitudinem", "pedum", "ducentorum", "rescindit", ], ] self.assertEqual(results, target)
def algorithm(self): return LatinWordTokenizer()