Viewing File: /home/ubuntu/.local/lib/python3.10/site-packages/tests/test_sqlite_phonemizer.py

#!/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()
Back to Directory File Manager