282 lines
9.3 KiB
Python
282 lines
9.3 KiB
Python
#!/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()
|