#!/usr/bin/env python3 """Tests for phonemization""" import unittest from gruut import sentences # Translation from https://omniglot.com for: # My hovercraft is full of eels. class PhonemizerTestCase(unittest.TestCase): """Test cases for phonemization""" def test_ar(self): """Arabic test""" self.assertEqual( get_phonemes("حَوّامتي مُمْتِلئة", "ar"), [ ("حَوَّامَتُي", ["ħ", "a", "u", "aː", "m", "t", "iː"]), ("مُمْتِلِئَة", ["m", "u", "m", "t", "i", "l", "i", "ʔ", "i"],), ], ) def test_cs(self): """Czech test""" self.assertEqual( get_phonemes("Moje vznášedlo je plné úhořů.", "cs-cz"), [ ("Moje", ["m", "o", "j", "ɛ"]), ("vznášedlo", ["v", "z", "n", "aː", "ʃ", "ɛ", "d", "l", "o"]), ("je", ["j", "ɛ"]), ("plné", ["p", "l", "n", "ɛː"]), ("úhořů", ["uː", "ɦ", "o", "r̝", "uː"]), (".", ["‖"]), ], ) def test_de_us(self): """German test""" self.assertEqual( get_phonemes("Mein Luftkissenfahrzeug ist voller Aale.", "de_DE"), [ ("Mein", ["m", "aɪ̯", "n"]), ( "Luftkissenfahrzeug", [ "l", "ʊ", "f", "t", "k", "ɪ", "s", "z", "ɛ", "n", "f", "a", "ʁ", "t", "s", "ɔ", "ɔʏ̯", "k", ], ), ("ist", ["ɪ", "s", "t"]), ("voller", ["v", "ɔ", "l", "l", "ɐ"]), ("Aale", ["ʔ", "aː", "l", "ə"]), (".", ["‖"]), ], ) def test_en_us(self): """English test""" self.assertEqual( get_phonemes("My hovercraft is full of eels.", "en_US"), [ ("My", ["m", "ˈaɪ"]), ("hovercraft", ["h", "ˈʌ", "v", "ɚ", "k", "ɹ", "ˌæ", "f", "t"],), ("is", ["ˈɪ", "z"]), ("full", ["f", "ˈʊ", "l"]), ("of", ["ə", "v"]), ("eels", ["ˈi", "l", "z"]), (".", ["‖"]), ], ) def test_es(self): """Spanish test""" self.assertEqual( get_phonemes("Mi aerodeslizador está lleno de anguilas.", "es_ES"), [ ("Mi", ["m", "i"]), ( "aerodeslizador", [ "a", "e", "ɾ", "o", "d", "e", "s", "l", "i", "θ", "a", "d", "o", "ɾ", ], ), ("está", ["e", "s", "t", "a"]), ("lleno", ["ʎ", "e", "n", "o"]), ("de", ["d", "e"]), ("anguilas", ["a", "n", "g", "i", "l", "a", "s"]), (".", ["‖"]), ], ) def test_fa(self): """Farsi test""" self.assertEqual( get_phonemes("هاورکرافت من پر مارماهى است", "fa"), [ ( "هاورکرافت", ["h", "ɒː", "v", "æ", "ɾ", "k", "æ", "ɾ", "ɒː", "f", "t", "e̞"], ), ("من", ["m", "æ", "n"],), ("پر", ["p", "o", "ɾ"]), ("مارماهى", ["m", "ɒː", "ɾ", "æ", "m", "ɒː", "h", "e̞", "l"]), ("است", ["æ", "s", "t"]), ], ) def test_fr(self): """French test""" self.assertEqual( get_phonemes("Mon aéroglisseur est plein d'anguilles.", "fr_FR"), [ ("Mon", ["m", "ɔ̃", "n"]), ("aéroglisseur", ["a", "e", "ʁ", "ɔ", "ɡ", "l", "i", "s", "œ", "ʁ"],), ("est", ["ɛ"]), ("plein", ["p", "l", "ɛ̃"]), ("d'anguilles", ["d", "ɑ̃", "ɡ", "i", "j"]), (".", ["‖"]), ], ) def test_it(self): """Italian test""" self.assertEqual( get_phonemes("Il mio hovercraft è pieno di anguille.", "it_IT"), [ ("Il", ["i", "l"]), ("mio", ["ˈm", "i", "o"],), ("hovercraft", ["o", "v", "e", "r", "k", "r", "a", "f", "t"]), ("è", ["ɛ"]), ("pieno", ["ˈp", "j", "ɛ", "n", "o"]), ("di", ["ˈd", "i"]), ("anguille", ["a", "n", "ɡ", "w", "i", "l", "l", "e"]), (".", ["‖"]), ], ) def test_lb(self): """Luxembourgish test""" self.assertEqual( get_phonemes( "An der Zäit hunn sech den Nordwand an d’Sonn gestridden.", "lb_LB" ), [ ("An", ["ɑ", "n"]), ("der", ["d", "ɐ"],), ("Zäit", ["ʦ", "æːɪ", "t"]), ("hunn", ["h", "u", "n"]), ("sech", ["z", "ə", "ɕ"]), ("den", ["d", "ə", "n"]), ("Nordwand", ["n", "o", "ʀ", "d", "v", "ɑ", "n", "t"]), ("an", ["ɑ", "n"]), ("d'Sonn", ["d", "z", "o", "n"]), ("gestridden", ["g", "ə", "ʃ", "t", "ʀ", "i", "d", "ə", "n"]), (".", ["‖"]), ], ) def test_nl(self): """Dutch test""" self.assertEqual( get_phonemes("Mijn luchtkussenboot zit vol paling.", "nl"), [ ("Mijn", ["m", "ɛi", "n"]), ( "luchtkussenboot", ["ˈl", "ʏ", "x", "t", "k", "ʏ", "s", "ə", "n", "ˌb", "o", "t"], ), ("zit", ["z", "ɪ", "t"]), ("vol", ["v", "ɔ", "l"]), ("paling", ["p", "a", "l", "ɪ", "ŋ"]), (".", ["‖"]), ], ) def test_pt(self): """Portuguese test""" self.assertEqual( get_phonemes("O meu hovercraft está cheio de enguias.", "pt"), [ ("O", ["u"]), ("meu", ["m", "ew"],), ("hovercraft", ["o", "v", "e", "ɹ", "k", "ɾ", "ɐ", "f", "t", "ʃ"]), ("está", ["e", "s", "t", "ɐ"]), ("cheio", ["ʃ", "ej", "u"]), ("de", ["d", "ʒ", "i"]), ("enguias", ["ẽ", "ɡ", "j", "ɐ", "s"]), (".", ["‖"]), ], ) def test_ru(self): """Russian test""" self.assertEqual( get_phonemes("Моё судно на воздушной подушке полно угрей.", "ru_RU"), [ ("Моё", ["m", "o", "j", "oː"]), ("судно", ["s", "uː", "d", "n", "o"],), ("на", ["n", "aː"]), ("воздушной", ["v", "o", "z", "d", "uː", "ʂ", "n", "o", "j"]), ("подушке", ["p", "o", "d", "uː", "ʂ", "kʲ", "e"]), ("полно", ["p", "oː", "l", "n", "o"]), ("угрей", ["u", "ɡ", "rʲ", "eː", "j"]), (".", ["‖"]), ], ) def test_sv(self): """Swedish test""" self.assertEqual( get_phonemes("Min svävare är full med ål.", "sv_SE"), [ ("Min", ["m", "iː", "n"]), ("svävare", ["²s", "v", "'ɛː", "v", "a", "r", "ɛ"],), ("är", ["ɛː", "r"]), ("full", ["f", "ɵ", "l"]), ("med", ["m", "eː", "d"]), ("ål", ["oː", "l"]), (".", ["‖"]), ], ) def test_sw(self): """Swahili test""" self.assertEqual( get_phonemes("Gari langu linaloangama limejaa na mikunga.", "sw"), [ ("Gari", ["ɠ", "ɑ", "ɾ", "i"]), ("langu", ["l", "ɑ", "ᵑg", "u"],), ( "linaloangama", ["l", "i", "n", "ɑ", "l", "ɔ", "ɑ", "ᵑg", "ɑ", "m", "ɑ"], ), ("limejaa", ["l", "i", "m", "ɛ", "ʄ", "ɑ", "ɑ"]), ("na", ["n", "ɑ"]), ("mikunga", ["m", "i", "k", "u", "ᵑg", "ɑ"]), (".", ["‖"]), ], ) def get_phonemes(text, lang): """Return (text, phonemes) for each word""" sentence = next(sentences(text, lang=lang)) return [(w.text, w.phonemes) for w in sentence if w.phonemes] # ----------------------------------------------------------------------------- if __name__ == "__main__": unittest.main()