|
|
|
|
|
|
|
|
phoneme_mapped_index = { |
|
|
|
|
|
'SIL': 0, |
|
|
|
|
|
|
|
|
'i': 1, |
|
|
'i:': 2, |
|
|
'ɨ': 3, |
|
|
'ɪ': 4, |
|
|
|
|
|
|
|
|
'e': 5, |
|
|
'e:': 6, |
|
|
'ɛ': 7, |
|
|
|
|
|
|
|
|
'ə': 8, |
|
|
'ɚ': 9, |
|
|
'ʌ': 10, |
|
|
|
|
|
|
|
|
'u': 11, |
|
|
'u:': 12, |
|
|
'ʊ': 13, |
|
|
'ɯ': 14, |
|
|
'o': 15, |
|
|
'o:': 16, |
|
|
'ɔ': 17, |
|
|
|
|
|
|
|
|
'a': 18, |
|
|
'a:': 19, |
|
|
'æ': 20, |
|
|
|
|
|
|
|
|
'y': 21, |
|
|
'ø': 22, |
|
|
|
|
|
|
|
|
'aɪ': 23, |
|
|
'eɪ': 24, |
|
|
'aʊ': 25, |
|
|
'oʊ': 26, |
|
|
'ɔɪ': 27, |
|
|
|
|
|
|
|
|
'p': 28, |
|
|
'b': 29, |
|
|
't': 30, |
|
|
'd': 31, |
|
|
'k': 32, |
|
|
'g': 33, |
|
|
'q': 34, |
|
|
|
|
|
|
|
|
'ts': 35, |
|
|
's': 36, |
|
|
'z': 37, |
|
|
'tʃ': 38, |
|
|
'dʒ': 39, |
|
|
'ʃ': 40, |
|
|
'ʒ': 41, |
|
|
'ɕ': 42, |
|
|
|
|
|
|
|
|
'f': 43, |
|
|
'v': 44, |
|
|
'θ': 45, |
|
|
'ð': 46, |
|
|
'ç': 47, |
|
|
'x': 48, |
|
|
'ɣ': 49, |
|
|
'h': 50, |
|
|
'ʁ': 51, |
|
|
|
|
|
|
|
|
'm': 52, |
|
|
'n': 53, |
|
|
'ɲ': 54, |
|
|
'ŋ': 55, |
|
|
|
|
|
|
|
|
'l': 56, |
|
|
'ɭ': 57, |
|
|
'ɾ': 58, |
|
|
'ɹ': 59, |
|
|
'j': 60, |
|
|
'w': 61, |
|
|
|
|
|
|
|
|
'tʲ': 62, |
|
|
'nʲ': 63, |
|
|
'rʲ': 64, |
|
|
'ɭʲ': 65, |
|
|
|
|
|
|
|
|
'noise': 66 |
|
|
} |
|
|
|
|
|
|
|
|
phoneme_groups_mapper = {0: 0, 1: 1, 2: 1, 3: 3, 4: 1, 5: 1, 6: 1, 7: 1, 8: 2, 9: 2, 10: 2, 11: 3, 12: 3, 13: 3, 14: 3, 15: 3, 16: 3, 17: 3, 18: 4, 19: 4, 20: 4, 21: 1, 22: 1, 23: 5, 24: 5, 25: 5, 26: 5, 27: 5, 28: 6, 29: 7, 30: 6, 31: 7, 32: 6, 33: 7, 34: 6, 35: 10, 36: 8, 37: 9, 38: 10, 39: 11, 40: 8, 41: 9, 42: 8, 43: 8, 44: 9, 45: 8, 46: 9, 47: 8, 48: 8, 49: 9, 50: 8, 51: 9, 52: 12, 53: 12, 54: 12, 55: 12, 56: 13, 57: 13, 58: 14, 59: 14, 60: 15, 61: 15, 62: 6, 63: 12, 64: 14, 65: 13, 66: 16} |
|
|
|
|
|
|
|
|
phoneme_groups_index = {'SIL': 0, 'front_vowels': 1, 'central_vowels': 2, 'back_vowels': 3, 'low_vowels': 4, 'diphthongs': 5, 'voiceless_stops': 6, 'voiced_stops': 7, 'voiceless_fricatives': 8, 'voiced_fricatives': 9, 'voiceless_affricates': 10, 'voiced_affricates': 11, 'nasals': 12, 'laterals': 13, 'rhotics': 14, 'glides': 15, 'noise': 16} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
complete_vocab = {'SIL': 4914031, 'a': 1604572, 'n': 1501496, 't': 1345451, 's': 1242856, 'i': 1207390, 'e': 985568, 'o': 850470, 'm': 840466, 'l': 840200, 'r': 825931, 'd': 821689, 'k': 814493, 'ɛ': 700232, 'p': 607786, 'ə': 492948, 'v': 432914, 'j': 430514, 'u': 422499, 'ɾ': 419723, 'b': 413539, 'ɑ': 399576, 'ɔ': 344276, 'ʌ': 334025, 'ɪ': 294767, 'f': 292469, 'z': 286215, 'ɡ': 267606, 'ʃ': 249935, 'ɐ': 247989, 'w': 222719, 'ʊ': 200737, 'h': 189391, 'ʁ': 161395, 'ð': 159285, 'ɨ': 157902, 'x': 151422, 'eː': 141335, 'y': 138328, 'iː': 135167, 'ŋ': 118468, 'aɪ': 104170, 'ts': 96727, 'ɹ': 96111, 'æ': 83801, 'tʃ': 83484, 'θ': 81846, 'ʒ': 81251, 'uː': 79788, 'aː': 69487, 'ɕ': 68197, 'β': 67991, 'oː': 67190, 'ɑː': 66515, 'ɣ': 64902, 'eɪ': 63049, 'tʲ': 60946, 'ø': 58520, 'ɭ': 58455, 'nʲ': 56439, 'dʒ': 54175, 'ɑ̃': 53516, 'aʊ': 53297, 'q': 49319, 'ɲ': 48479, 'rʲ': 46853, 'ɭʲ': 45521, 'ɔ̃': 44985, 'ɯ': 43339, 'sʲ': 38535, 'ɲʲ': 38014, 'ɒ': 37682, 'vʲ': 37231, 'ʎ': 37145, 'ç': 35610, 'ʋ': 32705, 'ɚ': 32019, 'tɕ': 32006, 'mʲ': 31189, 'dʲ': 29989, 'ɜ': 27714, 'ja': 27523, 'ʔ': 26931, 'oʊ': 26398, 'ɑɨ': 24604, 'tʃʲ': 24301, '1': 23766, 'dʑ': 22131, 'ɛɪ': 21834, 'tː': 21127, 'ᵻ': 20631, 'ɛ̃': 20508, 'uɨ': 20396, 'ɫ': 19763, 'ɬ': 19662, 'ʑ': 18169, 'œ': 17838, 'oɪ': 16897, 'ɔɨ': 16178, 'ɔː': 15555, 'ɐ̃': 15510, 'ɨː': 15065, 'ɜː': 14661, 'ju': 14500, 'pʲ': 14429, 'aɨ': 13971, 'əl': 13858, 'ɵ': 13512, 'kʲ': 13204, 'ss': 12685, 'ɐ̃ʊ̃': 12237, 't[': 12211, 'əɪ': 12209, 'ɑːɹ': 10053, 'bʲ': 9958, 'd[': 9275, 'yː': 9033, 'eʊ': 8931, 'ɨu': 7653, 'ɡʲ': 7633, 'ɔːɹ': 7072, '(en)': 6245, 'œy': 6018, 'kː': 5801, 'əɨ': 5629, 'ɔø': 5613, 'oːɹ': 5458, 'u"': 5356, 'fʲ': 5315, 'pː': 5307, 'ɛɹ': 5299, 'ɪː': 5068, '??': 5027, 'ɛː': 4894, 'øː': 4796, 'ɔɪ': 4603, 'dZ': 4345, 'ɪu': 4320, 'c': 4200, 'S': 4197, 'ʕ': 4050, '(fr)': 3885, 'ʌʊ': 3787, 'tS': 3731, 'oe': 3730, 'iə': 3654, 'dʒː': 3441, 'ɪɹ': 3101, 'r̝̊': 3099, 'bː': 3051, 'ɟ': 2761, 'uɪ': 2632, 'ʊɹ': 2589, 'tʃː': 2564, 'ħ': 2318, 'ũ': 2158, 's^': 2080, 't̪': 1778, 'r̝': 1702, 'ɪ^': 1651, 'tsː': 1558, 'dzː': 1479, 'r̩': 1272, 'u:': 1189, 'aɪɚ': 1180, '(de)': 1166, 's̪': 1070, 'dz': 1027, 'iʊ': 940, 'aɪə': 928, 'dˤ': 920, 'χ': 845, 'æi': 819, 'œ̃': 766, '(it)': 719, 'ɑ:': 715, 'o:': 623, 'n̩': 587, 'l̩': 536, 'æː': 534, 'dː': 532, 'õ': 491, 'N': 490, 'y:': 415, 'pf': 342, 'əʊ': 342, 'ʝ': 323, 't^': 288, 'oe:': 257, '(nl)': 237, 'ɛʊ': 237, '(ptpt)': 196, 'e:': 183, 'eə': 144, 'd^': 131, 'i.ː': 129, 'yʊ': 101, 't^ː': 79, 'nl': 76, '(fa)': 65, 'æiː': 64, 'yi': 63, '(es)': 61, 'dʒʲ': 47, 'qː': 43, '(ru)': 40, 'ɡː': 37, 'ɪuː': 37, 'ʊə': 34, 'X': 31, 'a.ː': 31, 'u.ː': 31, 'rr': 25, 'mb': 25, 'ɵː': 24, 'd̪w': 23, 'ʂ': 22, '(tt)': 22, 'dm': 20, 'daː': 17, 'əː': 17, 'it': 17, 'ɡd': 17, 'mj': 16, 'db': 16, 'wb': 16, 'iːː': 15, 'mt': 15, 'ɑk': 15, 'i:': 15, 'da': 14, 'nb': 14, 'eð': 13, 'mx': 13, 'maː': 13, 'tk': 13, 'niː': 13, 'rb': 13, 'mh': 13, 'dˤdˤ': 13, 'fm': 13, 'nm': 11, 'eːh': 11, 'mtʃ': 11, 'ma': 11, 'ʊːt': 11, 'aːn': 11, 'iːe': 11, 'im': 10, 'eːb': 10, 'np': 10, 'aɪaɪ': 9, 'ʃj': 9, 'eːt': 9, 'jː': 8, 'mv': 8, 'ae': 8, 'ed': 8, 'nn': 8, 'dtʃ': 8, 'ɑh': 8, 'tr': 7, 'sb': 7, 'tn': 7, 'lx': 7, 'eːa': 7, 'il': 7, 'ɑj': 7, 'ɑaː': 7, 'oːs': 7, 'eːq': 7, 'ah': 7, 'bb': 7, 'or': 7, 'ɑm': 7, 'kt': 7, 'as': 7, 'eβ': 6, 'eːd': 6, 'ob': 6, 'eːuː': 6, 'rtʃ': 6, 'ʃd': 6, 'md': 6, 'duː': 6, 'eːaː': 6, 'ɡz': 6, 'hx': 6, 'lk': 6, 'eːf': 6, 'ɑq': 6, 'nk': 6, 'nx': 6, 'nj': 6, 'dɔ': 6, 'is': 6, 'aɪp': 6, 'əm': 6, 'laː': 5, 'tb': 5, 'aa': 5, 'zm': 5, 'ntʃ': 5, 'ep': 5, 'bh': 5, 'lh': 5, 'do': 5, 'eːp': 5, 'miː': 5, 'tuː': 5, 'lm': 5, 'mr': 5, 'sz': 5, 'nv': 4, 'in': 4, 'ɑuː': 4, 'iaː': 4, 'oːb': 4, 'uːm': 4, 'naː': 4, 'eːs': 4, 'itʃ': 4, 'eːv': 4, 'az': 4, 'ha': 4, 'dɡ': 4, 'hb': 4, 'mf': 4, 'ɑn': 4, 'ia': 4, 'lb': 4, 'na': 4, 'ld': 4, 'd̪': 4, 'ndʒ': 3, 'uːk': 3, 'uːb': 3, 'mo': 3, 'ɡh': 3, 'mk': 3, 'dk': 3, 'eːtʃ': 3, 'dp': 3, 'tiː': 3, 'bv': 3, 'ta': 3, 'th': 3, 'ip': 3, 'eːj': 3, 'eːx': 3, 'mz': 3, 'eːz': 3, '(pl)': 2, 'diː': 2, 'eh': 2, 'biː': 2, 'mʃ': 2, 'mn': 2, 'dʒv': 2, 'hʃ': 2, 'liː': 2, 'mɡ': 2, 'jiː': 2, 'ms': 2, 'ʃz': 2, 'ne': 2, 'on': 2, 'raː': 2, 'nh': 2, 'eːʃ': 2, 'rm': 2, 'ʊː': 2, 'laɪ': 1, 'ɑa': 1, 'td': 1, 'eːe': 1, 'mp': 1, 'ɑt': 1, 'nr': 1, 'me': 1, 'ɑo': 1, 'ik': 1, 'iːv': 1, 'dh': 1, 'eːɑ': 1, 'dl': 1, 'ʃdʒ': 1, 'ns': 1} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
base_phonemes = [ |
|
|
|
|
|
'x', 'ç', 'ɣ', 'ʁ', 'ts', 'tʃ', 'ʌ', 'ɭ', |
|
|
|
|
|
'p', 'b', 't', 'd', 'k', 'ɡ', 'ʔ', |
|
|
|
|
|
|
|
|
'f', 'v', 'θ', 'ð', 's', 'z', 'ʃ', 'ʒ', 'h', 'ʂ', 'ʐ', 'ɕ', 'ʑ', 'ʁ', |
|
|
|
|
|
|
|
|
'ts', 'dz', 'tɕ', 'dʑ', 'tʃ', 'dʒ', 'pf', |
|
|
|
|
|
|
|
|
'm', 'n', 'ŋ', |
|
|
|
|
|
|
|
|
'l', 'ɫ', 'ɹ', 'j', 'w', 'ɾ', |
|
|
|
|
|
|
|
|
'nʲ', 'lʲ', 'rʲ', |
|
|
|
|
|
|
|
|
'i', 'iː', 'ɪ', 'e', 'eː', 'ɛ', 'æ', |
|
|
'a', 'aː', 'ɑː', |
|
|
'o', 'ɔː', 'ʊ', |
|
|
'u', 'uː', |
|
|
'ə', 'ɚ', 'ʌ', 'ɨ', 'ɤ', 'ɯ', |
|
|
'œ', 'ø', 'øː', 'ʏ', 'yː', |
|
|
|
|
|
|
|
|
'eɪ', 'aɪ', 'ɔɪ', 'oʊ', 'aʊ', |
|
|
|
|
|
|
|
|
'ɒ', 'ɜː', 'ɲ', |
|
|
|
|
|
'noise', 'SIL' |
|
|
] |
|
|
|
|
|
phoneme_mapping = { |
|
|
|
|
|
|
|
|
'ə': 'ə', |
|
|
|
|
|
'ʌ': 'ʌ', |
|
|
'ɪ': 'ɪ', 'i': 'i', |
|
|
'iː': 'i:', |
|
|
'ʊ': 'ʊ', |
|
|
'u': 'u', |
|
|
'uː': 'u:', |
|
|
'ɛ': 'ɛ', 'e': 'e', 'eː': 'e:', |
|
|
'ɔː': 'ɔ', 'ɔ': 'ɔ', |
|
|
|
|
|
'ɒ': 'a', |
|
|
'æ': 'æ', |
|
|
|
|
|
'ɑː': 'a:', |
|
|
'ɑ': 'a', |
|
|
'a': 'a', |
|
|
'ɜː': 'ʌ', |
|
|
'ɜ': 'ʌ', |
|
|
'ɚ': 'ɚ', |
|
|
'o': 'o', |
|
|
'ɨ': 'ɨ', |
|
|
|
|
|
|
|
|
'eɪ': 'eɪ', 'aɪ': 'aɪ', 'ɔɪ': 'ɔɪ', |
|
|
'aʊ': 'aʊ', 'oʊ': 'oʊ', |
|
|
|
|
|
|
|
|
'ʌʊ': 'aʊ', 'eʊ': 'aʊ', 'ɛʊ': 'aʊ', 'əʊ': 'oʊ', |
|
|
'ɛɪ': 'eɪ', 'ʊɪ': 'aɪ', 'ea': 'eɪ', |
|
|
'aʊ̯': 'aʊ', 'aɪ̯': 'aɪ', 'ɔʏ̯': 'ɔɪ', |
|
|
|
|
|
|
|
|
'p': 'p', 'b': 'b', 't': 't', 'd': 'd', |
|
|
'k': 'k', 'g': 'g', 'm': 'm', 'n': 'n', |
|
|
'ŋ': 'ŋ', 'f': 'f', 'v': 'v', 'θ': 'θ', |
|
|
'ð': 'ð', 's': 's', 'z': 'z', 'ʃ': 'ʃ', |
|
|
'ʒ': 'ʒ', 'h': 'h', 'l': 'l', 'ɹ': 'ɹ', |
|
|
'j': 'j', 'w': 'w', 'ɲ': 'ɲ', 'ɾ': 'ɾ', |
|
|
|
|
|
|
|
|
|
|
|
'ɣ': 'ɣ', |
|
|
|
|
|
'ʁ': 'ʁ', |
|
|
'r': 'ɹ', |
|
|
|
|
|
'x': 'x', |
|
|
|
|
|
|
|
|
'ç': 'ç', |
|
|
'ʂ': 'ʃ', |
|
|
'ʐ': 'ʒ', |
|
|
|
|
|
'ɕ': 'ɕ', |
|
|
'ʑ': 'ʒ', |
|
|
|
|
|
|
|
|
|
|
|
'ts': 'ts', |
|
|
'dz': 'dʒ', |
|
|
|
|
|
'tʃ': 'tʃ', |
|
|
|
|
|
'dʒ': 'dʒ', |
|
|
'tɕ': 'tʃ', |
|
|
'dʑ': 'dʒ', |
|
|
'pf': 'f', |
|
|
|
|
|
|
|
|
'tʲ': 'tʲ', |
|
|
|
|
|
'nʲ': 'nʲ', |
|
|
|
|
|
'rʲ': 'rʲ', |
|
|
|
|
|
'lʲ': 'l', |
|
|
'dʲ': 'd', 'sʲ': 's', 'vʲ': 'v', |
|
|
'fʲ': 'f', 'mʲ': 'm', |
|
|
'pʲ': 'p', 'kʲ': 'k', 'bʲ': 'b', |
|
|
'ɲʲ': 'ɲ', 'dʒʲ': 'dʒ', |
|
|
|
|
|
|
|
|
'tː': 't', 'dː': 'd', 'kː': 'k', |
|
|
'gː': 'g', 'pː': 'p', 'bː': 'b', |
|
|
'fː': 'f', 'vː': 'v', 'sː': 's', |
|
|
'zː': 'z', 'ʃː': 'ʃ', 'ʒː': 'ʒ', |
|
|
'mː': 'm', 'nː': 'n', 'ŋː': 'ŋ', |
|
|
'lː': 'l', 'rː': 'ɹ', 'jː': 'j', |
|
|
|
|
|
|
|
|
'ɑ̃': 'a', 'ɛ̃': 'ɛ', 'ɔ̃': 'ɔ', |
|
|
'ũ': 'u', 'õ': 'oʊ', 'ɐ̃': 'ʌ', |
|
|
|
|
|
|
|
|
'ɑːɹ': 'ɚ', 'ɔːɹ': 'ɚ', |
|
|
'ʊɹ': 'ɚ', 'ɪɹ': 'ɚ', 'ɛɹ': 'ɚ', |
|
|
'oːɹ': 'ɚ', |
|
|
|
|
|
|
|
|
'ia': 'i:', 'ua': 'u:', |
|
|
'ɔø': 'ɔ', 'iːɛ': 'i:', |
|
|
'ʊə': 'ʊ', 'iə': 'i:', |
|
|
'eə': 'ɛ', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'əl': 'l', |
|
|
'n̩': 'n', |
|
|
'ʃf': 'ʃ', |
|
|
'eð': 'ð', |
|
|
'ns': 'n', |
|
|
'nd': 'n', |
|
|
'ʃts': 'ts', |
|
|
|
|
|
|
|
|
'SIL': 'SIL', |
|
|
'noise': 'noise', |
|
|
'': 'SIL', |
|
|
'ʔ': 'noise', |
|
|
|
|
|
|
|
|
'(en)': 'SIL', '(es)': 'SIL', '(fr)': 'SIL', |
|
|
'(de)': 'SIL', '(it)': 'SIL', '(nl)': 'SIL', |
|
|
'(pl)': 'SIL', '(ru)': 'SIL', '(ptpt)': 'SIL', |
|
|
|
|
|
|
|
|
'??': 'noise', 'uk': 'noise', 'it': 'noise', |
|
|
'ɡd': 'noise', 'rd': 'noise', 'as': 'noise', |
|
|
'up': 'noise', 'os': 'noise', 'kf': 'noise', |
|
|
'1': 'noise', 'ʃd': 'noise', 'ʃz': 'noise', |
|
|
'ʃn': 'noise', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'y': 'y', |
|
|
'yː': 'y', |
|
|
'œ': 'ø', |
|
|
'ø': 'ø', |
|
|
'øː': 'ø', |
|
|
'ɐ': 'ʌ', |
|
|
'aː': 'a:', |
|
|
|
|
|
'oː': 'o:', |
|
|
'ɛː': 'ɛ', |
|
|
'ɪː': 'i:', |
|
|
'ɵ': 'ʊ', |
|
|
'ᵻ': 'ɪ', |
|
|
|
|
|
|
|
|
'aa': 'a', |
|
|
'ɐɐ': 'a', |
|
|
'ææ': 'æ', |
|
|
|
|
|
|
|
|
'yʊ': 'u', |
|
|
'œy': 'ɔɪ', |
|
|
'uɪ': 'aɪ', |
|
|
'oɪ': 'ɔɪ', |
|
|
'iʊ': 'u', |
|
|
'aɪə': 'aɪ', |
|
|
'aɪɚ': 'aɪ', |
|
|
|
|
|
|
|
|
'ɐ̃ʊ̃': 'aʊ', |
|
|
'œ̃': 'ɛ', |
|
|
|
|
|
|
|
|
'ʝ': 'j', |
|
|
'ɟ': 'ʒ', |
|
|
'ʋ': 'v', |
|
|
'd̪': 'd', |
|
|
't̪': 't', |
|
|
'ɬ': 'l', |
|
|
'ʎ': 'l', |
|
|
'β': 'v', |
|
|
'ɡ': 'g', |
|
|
|
|
|
|
|
|
'ɡː': 'g', |
|
|
'tsː': 'ts', |
|
|
'dzː': 'd', |
|
|
|
|
|
'tʃː': 'tʃ', |
|
|
'dʒː': 'dʒ', |
|
|
'ss': 's', |
|
|
|
|
|
|
|
|
'ɡʲ': 'g', |
|
|
|
|
|
|
|
|
'dɔ': 'noise', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'ja': 'j', |
|
|
'ju': 'j', |
|
|
'tʃʲ': 'tʃ', |
|
|
|
|
|
'ɭ': 'ɭ', |
|
|
'ɭʲ': 'ɭʲ', |
|
|
'u"': 'u', |
|
|
'ɪ^': 'ɪ', |
|
|
'sz': 's', |
|
|
|
|
|
'q': 'q', |
|
|
|
|
|
'qː': 'q', |
|
|
'r̝̊': 'ɹ', |
|
|
'r̝': 'ɹ', |
|
|
'r̩': 'ɹ', |
|
|
'l̩': 'l', |
|
|
'c': 'k', |
|
|
|
|
|
|
|
|
'uɨ': 'ɨ', |
|
|
'aɨ': 'aɪ', |
|
|
'ɨu': 'u:', |
|
|
'ɪu': 'u:', |
|
|
'ɨː': 'ɨ', |
|
|
'ɑɨ': 'aɪ', |
|
|
'əɪ': 'eɪ', |
|
|
'əɨ': 'ɨ', |
|
|
'ɔɨ': 'ɔɪ', |
|
|
'ɪuː': 'u:', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'nm': 'n', |
|
|
'nn': 'n', |
|
|
'mn': 'm', |
|
|
'mm': 'm', |
|
|
'na': 'n', |
|
|
'maː': 'm', |
|
|
'mz': 'm', |
|
|
'ms': 'm', |
|
|
'mf': 'm', |
|
|
'mɡ': 'm', |
|
|
'mx': 'm', |
|
|
'mv': 'm', |
|
|
'mʃ': 'm', |
|
|
|
|
|
|
|
|
'dk': 'd', |
|
|
'dp': 'd', |
|
|
'db': 'd', |
|
|
'td': 't', |
|
|
'tb': 't', |
|
|
'tn': 't', |
|
|
|
|
|
|
|
|
'eːs': 'e:', |
|
|
'eːt': 'e:', |
|
|
'eːp': 'e:', |
|
|
'eːf': 'e:', |
|
|
'eːz': 'e:', |
|
|
'eːj': 'e:', |
|
|
'eːx': 'e:', |
|
|
'eːʃ': 'e:', |
|
|
'oːs': 'o:', |
|
|
'oːb': 'o:', |
|
|
|
|
|
|
|
|
'ɑj': 'aɪ', |
|
|
'ɑh': 'a', |
|
|
'ɑm': 'a', |
|
|
'ɑk': 'a', |
|
|
'ɑn': 'a', |
|
|
'ɑq': 'a', |
|
|
'ɑt': 'a', |
|
|
'ɑo': 'a', |
|
|
'ɑa': 'a', |
|
|
'ɑaː': 'a:', |
|
|
'ɑuː': 'aʊ', |
|
|
|
|
|
|
|
|
'dʒv': 'dʒ', |
|
|
'bv': 'b', |
|
|
'bh': 'b', |
|
|
'ɡh': 'g', |
|
|
'ɡz': 'g', |
|
|
'hx': 'x', |
|
|
'ʃj': 'ʃ', |
|
|
|
|
|
|
|
|
'(fa)': 'SIL', |
|
|
'bb': 'b', |
|
|
|
|
|
'uːb': 'u:', |
|
|
'uːk': 'u:', |
|
|
'laɪ': 'noise', |
|
|
|
|
|
|
|
|
|
|
|
'əː': 'ə', |
|
|
'æː': 'æ', |
|
|
'æi': 'eɪ', |
|
|
'æiː': 'eɪ', |
|
|
'ɵː': 'ʊ', |
|
|
|
|
|
'ɯ': 'ɯ', |
|
|
|
|
|
|
|
|
'e:': 'e:', |
|
|
'eː': 'e:', |
|
|
|
|
|
'o:': 'o:', |
|
|
'y:': 'y', |
|
|
'u:': 'u:', |
|
|
'i:': 'i:', |
|
|
'ɑ:': 'a', |
|
|
'oe:': 'ø', |
|
|
'oe': 'ø', |
|
|
|
|
|
|
|
|
'S': 's', |
|
|
'N': 'n', |
|
|
'X': 'k', |
|
|
'tS': 'tʃ', |
|
|
'dZ': 'dʒ', |
|
|
|
|
|
|
|
|
't^': 't', |
|
|
's^': 's', |
|
|
'd^': 'd', |
|
|
't^ː': 't', |
|
|
't[': 't', |
|
|
'd[': 'd', |
|
|
|
|
|
|
|
|
'ʕ': 'h', |
|
|
'ħ': 'h', |
|
|
'dˤ': 'd', |
|
|
's̪': 's', |
|
|
'χ': 'x', |
|
|
'dˤdˤ': 'd', |
|
|
'dd': 'd', |
|
|
|
|
|
|
|
|
'i.ː': 'i:', |
|
|
'a.ː': 'a:', |
|
|
'u.ː': 'u:', |
|
|
|
|
|
|
|
|
'ɫ': 'l', |
|
|
|
|
|
|
|
|
'kt': 'noise', |
|
|
'd̪w': 'noise', |
|
|
'wb': 'noise', |
|
|
'fm': 'noise', |
|
|
|
|
|
|
|
|
'ʊːt': 'noise', |
|
|
'aɪp': 'noise', |
|
|
'əm': 'noise', |
|
|
'aːn': 'a:', |
|
|
'iːe': 'i:', |
|
|
'yi': 'i:', |
|
|
|
|
|
|
|
|
'(tt)': 'SIL', |
|
|
|
|
|
|
|
|
'iːː': 'i:', |
|
|
|
|
|
|
|
|
'aɪaɪ': 'aɪ', |
|
|
|
|
|
|
|
|
'ndʒ': 'dʒ', |
|
|
'tr': 'noise', |
|
|
'eβ': 'noise', |
|
|
|
|
|
|
|
|
|
|
|
'ʂʲ': 'ʃ', |
|
|
'nʲʲ': 'nʲ', |
|
|
'tsʲ': 'ts', |
|
|
'xʲ': 'h', |
|
|
'dʑʲ': 'dʒ', |
|
|
'ɕʲ': 'ɕ', |
|
|
'tɕʲ': 'ʃ', |
|
|
'tʲʲ': 'tʲ', |
|
|
'ʒʲ': 'ʒ', |
|
|
'ʃʲʲ': 'ʃ', |
|
|
'tsʲʲ': 'ts', |
|
|
'ɾʲʲ': 'ɾ', |
|
|
'zʲʲ': 'z', |
|
|
'ɾʲ': 'rʲ', |
|
|
'ʃʲ': 'ʃ', |
|
|
'mʲʲ': 'm', |
|
|
'ʲ': 'noise', |
|
|
|
|
|
|
|
|
'uo': 'oʊ', |
|
|
'ee': 'i:', |
|
|
'ie': 'i:', |
|
|
'ai': 'aɪ', |
|
|
'ui': 'u:', |
|
|
'au': 'aʊ', |
|
|
'eɑ': 'ɛ', |
|
|
'iu': 'u:', |
|
|
'auː': 'aʊ', |
|
|
'ei': 'eɪ', |
|
|
'eu': 'oʊ', |
|
|
'aiː': 'aɪ', |
|
|
'iuː': 'u:', |
|
|
'eiː': 'eɪ', |
|
|
'euː': 'oʊ', |
|
|
'ɔa': 'ɔ', |
|
|
'yɪ': 'y', |
|
|
'iɪ': 'i:', |
|
|
'eo': 'oʊ', |
|
|
|
|
|
|
|
|
'cː': 'k', |
|
|
|
|
|
|
|
|
|
|
|
'iɜk': 'noise', 'onɡ5': 'noise', 'ts.': 'ts', 'ə5': 'noise', |
|
|
'ŋf': 'noise', 'u2': 'noise', 'oɜɕ': 'noise', 'iɜ': 'noise', |
|
|
|
|
|
|
|
|
|
|
|
'ls': 'noise', |
|
|
'll': 'noise', |
|
|
|
|
|
|
|
|
'øːl': 'noise', |
|
|
'øːs': 'noise', |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'h̩': 'h', |
|
|
'ɹ̩': 'ɹ', |
|
|
'ŋ̩': 'ŋ', |
|
|
'ɫ̩': 'l', |
|
|
'v̩': 'v', |
|
|
'm̩': 'm', |
|
|
|
|
|
|
|
|
'pʰ': 'p', |
|
|
'tʰ': 't', |
|
|
'kʰ': 'k', |
|
|
'sʰ': 's', |
|
|
'ʃʰ': 'ʃ', |
|
|
'cʰ': 'k', |
|
|
't͡sʰ': 'ts', |
|
|
't͡ʃʰ': 'tʃ', |
|
|
'ɕʰ': 'ɕ', |
|
|
|
|
|
|
|
|
'tʷ': 't', |
|
|
'kʷ': 'k', |
|
|
'pʷ': 'p', |
|
|
'ʒʷ': 'ʒ', |
|
|
'xʷ': 'h', |
|
|
'dʷ': 'd', |
|
|
'bʷ': 'b', |
|
|
'mʷ': 'm', |
|
|
'ŋʷ': 'ŋ', |
|
|
|
|
|
|
|
|
'ʈ': 't', |
|
|
'ɖ': 'd', |
|
|
'ɳ': 'n', |
|
|
'ɻ': 'ɹ', |
|
|
'ɽ': 'ɾ', |
|
|
|
|
|
|
|
|
'n̤': 'n', |
|
|
'b̤': 'b', |
|
|
'j̤': 'j', |
|
|
'a̤': 'a', |
|
|
'i̤ː': 'i:', |
|
|
'o̤': 'o', |
|
|
'o̤ː': 'o:', |
|
|
|
|
|
|
|
|
'ãː': 'a:', |
|
|
'ẽ': 'e', |
|
|
'ɪ̃': 'ɪ', |
|
|
'ỹ': 'y', |
|
|
'õː': 'o:', |
|
|
'æ̃': 'æ', |
|
|
'ʌ̃': 'ʌ', |
|
|
'ə̃': 'ə', |
|
|
'ã': 'a', |
|
|
'ĩ': 'i:', |
|
|
'ĩː': 'i:', |
|
|
'ũː': 'u:', |
|
|
|
|
|
|
|
|
't͡s': 'ts', |
|
|
't͡ʃ': 'tʃ', |
|
|
'd͡ʒ': 'dʒ', |
|
|
't͡ɬ': 't', |
|
|
|
|
|
|
|
|
'tʼ': 't', |
|
|
'kʼ': 'k', |
|
|
'qʼ': 'q', |
|
|
'pʼ': 'p', |
|
|
'sʼ': 's', |
|
|
|
|
|
|
|
|
'ʏ': 'ɪ', |
|
|
'ʏː': 'y', |
|
|
'ʊː': 'ʊ', |
|
|
'ɤ': 'ə', |
|
|
'ɤː': 'ə', |
|
|
'œː': 'ø', |
|
|
'ɯː': 'u:', |
|
|
'ɛ̤': 'ɛ', |
|
|
|
|
|
|
|
|
'ĕ': 'e', |
|
|
'ă': 'a', |
|
|
'ĭ': 'ɪ', |
|
|
'ŏ': 'o', |
|
|
'ŭ': 'ʊ', |
|
|
|
|
|
|
|
|
'ḛ': 'e', |
|
|
'ḭ': 'i', |
|
|
'o̰': 'o', |
|
|
'ɛ̰': 'ɛ', |
|
|
'a̰': 'a', |
|
|
'ʊ̰': 'ʊ', |
|
|
|
|
|
|
|
|
'ɦ': 'h', |
|
|
'ʍ': 'w', |
|
|
'ɢ': 'g', |
|
|
'ɱ': 'm', |
|
|
'ʔ': 'noise', |
|
|
'ɮ': 'z', |
|
|
'ɸ': 'f', |
|
|
|
|
|
|
|
|
'k͡p': 'k', |
|
|
'ɡ͡b': 'g', |
|
|
'p͡t': 'p', |
|
|
'b͡d': 'b', |
|
|
|
|
|
|
|
|
'ʔː': 'q', |
|
|
'hː': 'h', |
|
|
|
|
|
'æ̆': 'æ', |
|
|
'ɜ̆': 'ə', |
|
|
'ɔ̆': 'ʌ', |
|
|
'ə̠': 'ʌ', |
|
|
'ə̆': 'ə', |
|
|
'ɒː': 'a:', |
|
|
|
|
|
|
|
|
'd͡ʒʰ': 'dʒ', |
|
|
't͡sʼ': 'ts', |
|
|
't͡ʃʼ': 'tʃ', |
|
|
't͡ɬʼ': 't', |
|
|
't͡ʃʲ': 'tʃ', |
|
|
'd͡ʒʲ': 'dʒ', |
|
|
|
|
|
|
|
|
'e̥': 'e', |
|
|
'ɲ̥': 'ɲ', |
|
|
'm̥': 'm', |
|
|
'n̥': 'n', |
|
|
'l̥': 'l', |
|
|
'r̥': 'ɹ', |
|
|
'ŋ̥': 'ŋ', |
|
|
'i̥': 'i', |
|
|
'u̥': 'u:', |
|
|
'ʎ̥': 'l', |
|
|
|
|
|
|
|
|
'tʰː': 't', |
|
|
'çː': 'ç', |
|
|
'xː': 'h', |
|
|
'ɟː': 'ʒ', |
|
|
'l̪ː': 'l', |
|
|
'pʰː': 'p', |
|
|
'θː': 'θ', |
|
|
'ɲː': 'ɲ', |
|
|
'wː': 'w', |
|
|
|
|
|
|
|
|
'kʰʲ': 'k', |
|
|
'kʼʲ': 'k', |
|
|
'qʰʷ': 'q', |
|
|
'kʰʷ': 'k', |
|
|
'kʷʰ': 'k', |
|
|
'kʷʼ': 'k', |
|
|
'qʷ': 'q', |
|
|
'qʷʼ': 'q', |
|
|
'qʰ': 'q', |
|
|
'q̠': 'q', |
|
|
'ɢʲ': 'g', |
|
|
'ɡʷ': 'g', |
|
|
|
|
|
|
|
|
'e˞': 'ɚ', |
|
|
'a˞': 'ɚ', |
|
|
'o˞': 'ɚ', |
|
|
'u˞': 'ɚ', |
|
|
'i˞': 'ɚ', |
|
|
|
|
|
|
|
|
'ɛ̃ː': 'ɛ', |
|
|
'ʊ̃': 'ʊ', |
|
|
'z̃': 'z', |
|
|
'j̃': 'j', |
|
|
'w̃': 'w', |
|
|
'ʊ̰̃': 'ʊ', |
|
|
'æ̃ː': 'æ', |
|
|
'ɔ̃ː': 'ɔ', |
|
|
'ɛ̰̃': 'ɛ', |
|
|
|
|
|
|
|
|
'd̪ʰ': 'd', |
|
|
't̪ʰ': 't', |
|
|
't̪ʲ': 'tʲ', |
|
|
'tʲʰ': 'tʲ', |
|
|
'dʰ': 'd', |
|
|
'ðʲ': 'ð', |
|
|
'zʲ': 'z', |
|
|
'zʷ': 'z', |
|
|
|
|
|
|
|
|
'ʃʷ': 'ʃ', |
|
|
'ɕʷ': 'ɕ', |
|
|
'ʑʷ': 'ʒ', |
|
|
'ʕʷ': 'h', |
|
|
'ħʷ': 'h', |
|
|
'ʁʷ': 'ɹ', |
|
|
'χʲ': 'h', |
|
|
'hʲ': 'h', |
|
|
|
|
|
|
|
|
'ɨ̠': 'ɨ', |
|
|
'ʊ̠': 'ʊ', |
|
|
'ʊ̟': 'ʊ', |
|
|
'æ̟': 'æ', |
|
|
'ə̟': 'ə', |
|
|
|
|
|
|
|
|
'n̪': 'n', |
|
|
'l̪': 'l', |
|
|
|
|
|
|
|
|
'ö': 'ø', |
|
|
'ü': 'y', |
|
|
'ʉ': 'ɨ', |
|
|
'ɞ': 'ə', |
|
|
'ɤ̈': 'ə', |
|
|
'ɯ̈': 'ɨ', |
|
|
|
|
|
|
|
|
'ɗ': 'd', |
|
|
'ɓ': 'b', |
|
|
'ʄ': 'ʒ', |
|
|
'dˀ': 'd', |
|
|
'bˀ': 'b', |
|
|
'ˀa': 'a', |
|
|
|
|
|
|
|
|
'ʈʰ': 't', |
|
|
'ɖʰ': 'd', |
|
|
|
|
|
|
|
|
'ɥ': 'j', |
|
|
'ʀ': 'ɹ', |
|
|
'ɹ̝': 'ɹ', |
|
|
'ṽ': 'v', |
|
|
'ə̥': 'ə', |
|
|
'ə̯': 'ə', |
|
|
'i̯': 'i', |
|
|
'l̴': 'l', |
|
|
'dⁿ': 'd', |
|
|
'tⁿ': 't', |
|
|
|
|
|
|
|
|
'd̪̤': 'd', |
|
|
'ɑ̤': 'a', |
|
|
'ṳː': 'u:', |
|
|
'ṳ': 'u:', |
|
|
'ɯ̤': 'u:', |
|
|
'ɪ̰': 'ɪ', |
|
|
'ɔ̰': 'ɔ', |
|
|
'ɔ̤': 'ɔ', |
|
|
|
|
|
|
|
|
'ɑ̝': 'a', |
|
|
'ɛ̞': 'ɛ', |
|
|
'ɛ̝': 'ɛ', |
|
|
'e̝': 'e', |
|
|
'o̝': 'o', |
|
|
'u̝': 'u:', |
|
|
'ɑ̞': 'a', |
|
|
'a̘': 'a', |
|
|
'ä': 'a', |
|
|
|
|
|
|
|
|
'ɛ̈': 'ɛ', |
|
|
'œ̈': 'ø', |
|
|
'ʌ̈': 'ʌ', |
|
|
'ɛ̠': 'ɛ', |
|
|
'a̠': 'a', |
|
|
'o̠': 'o', |
|
|
'i̠': 'i', |
|
|
|
|
|
|
|
|
't̠': 't', |
|
|
'd̠': 'd', |
|
|
'n̠': 'n', |
|
|
't̟': 't', |
|
|
'r̟': 'ɹ', |
|
|
'r̠': 'ɹ', |
|
|
'rˠ': 'ɹ', |
|
|
'ɪ̥': 'ɪ', |
|
|
'ʔʷ': 'noise', |
|
|
'ɕʼ': 'ɕ', |
|
|
'cʼ': 'k', |
|
|
'cʷʰ': 'k', |
|
|
'w̝': 'w', |
|
|
|
|
|
'ʃ̠': 'ʃ', |
|
|
'ɪ̰̃': 'ɪ', |
|
|
'tʷʼ': 't', |
|
|
'ŋʲ': 'ŋ', |
|
|
'bʰ': 'b', |
|
|
'æ̈': 'æ', |
|
|
'ɘ': 'ə', |
|
|
'tsʰ': 'ts', |
|
|
'r̩ː': 'ɚ', |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
def get_compound_phoneme_mapping(phoneme): |
|
|
|
|
|
if phoneme in phoneme_mapping: |
|
|
return phoneme_mapping[phoneme] |
|
|
|
|
|
|
|
|
mapped = "" |
|
|
remaining = phoneme |
|
|
while remaining: |
|
|
found = False |
|
|
|
|
|
for i in range(len(remaining), 0, -1): |
|
|
subset = remaining[:i] |
|
|
if subset in phoneme_mapping: |
|
|
mapped += phoneme_mapping[subset] |
|
|
remaining = remaining[i:] |
|
|
found = True |
|
|
break |
|
|
if not found: |
|
|
|
|
|
remaining = remaining[1:] |
|
|
|
|
|
return mapped if mapped else "noise" |
|
|
|
|
|
|
|
|
|
|
|
def create_normalized_mapping(mapping_dict): |
|
|
|
|
|
|
|
|
from unicodedata import normalize |
|
|
"""Create a mapping dictionary with normalized Unicode characters.""" |
|
|
return { |
|
|
normalize('NFC', key): normalize('NFC', value) |
|
|
for key, value in mapping_dict.items() |
|
|
} |
|
|
|
|
|
|
|
|
phoneme_mapper = create_normalized_mapping(phoneme_mapping) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def analyze_phoneme_merger(phoneme_mapper): |
|
|
|
|
|
def check_circular_refs(mapper): |
|
|
issues = [] |
|
|
for phoneme, target in mapper.items(): |
|
|
if target in mapper and mapper[target] != target: |
|
|
issues.append(f"Potential circular reference: {phoneme} -> {target} -> {mapper[target]}") |
|
|
return issues |
|
|
|
|
|
|
|
|
def check_vowel_consistency(mapper): |
|
|
issues = [] |
|
|
|
|
|
vowel_pairs = [ |
|
|
('ɑː', 'ɑːɹ'), |
|
|
('ɔː', 'ɔːɹ'), |
|
|
('iː', 'iə'), |
|
|
('ʊ', 'ʊɹ'), |
|
|
] |
|
|
|
|
|
for v1, v2 in vowel_pairs: |
|
|
if v1 in mapper and v2 in mapper: |
|
|
if mapper[v1] != mapper[v2]: |
|
|
issues.append(f"Inconsistent vowel mapping: {v1} -> {mapper[v1]} but {v2} -> {mapper[v2]}") |
|
|
return issues |
|
|
|
|
|
|
|
|
def check_r_colored_consistency(mapper): |
|
|
issues = [] |
|
|
r_colored = ['ɪɹ', 'ɛɹ', 'ʊɹ'] |
|
|
target = 'ɚ' |
|
|
|
|
|
for phoneme in r_colored: |
|
|
if phoneme in mapper and mapper[phoneme] != target: |
|
|
issues.append(f"Inconsistent r-colored vowel: {phoneme} -> {mapper[phoneme]}, expected -> {target}") |
|
|
return issues |
|
|
|
|
|
|
|
|
def check_compound_handling(mapper): |
|
|
issues = [] |
|
|
for phoneme in mapper: |
|
|
if len(phoneme) > 1 and phoneme not in ['tʃ', 'dʒ', 'aɪ', 'eɪ', 'oʊ', 'aʊ', 'ɔɪ', 'iə', 'uː', 'iː', 'ɑː', 'ɔː', 'ɜː', 'əl']: |
|
|
if not phoneme.startswith(mapper[phoneme][0]): |
|
|
issues.append(f"Potentially incorrect compound mapping: {phoneme} -> {mapper[phoneme]}") |
|
|
return issues |
|
|
|
|
|
|
|
|
all_issues = [] |
|
|
all_issues.extend(check_circular_refs(phoneme_mapper)) |
|
|
all_issues.extend(check_vowel_consistency(phoneme_mapper)) |
|
|
all_issues.extend(check_r_colored_consistency(phoneme_mapper)) |
|
|
|
|
|
|
|
|
print("Testing complete vocab:") |
|
|
for kv in list(complete_vocab.keys()): |
|
|
mapped = get_compound_phoneme_mapping(kv) |
|
|
if (mapped != kv): |
|
|
if (mapped == 'noise') or (complete_vocab[kv] > 5000): |
|
|
print(f"{kv} -> {mapped} \tcount: {complete_vocab[kv]}") |
|
|
|
|
|
|
|
|
missing_phonemes = set(complete_vocab.keys()) - set(phoneme_mapping.keys()) |
|
|
|
|
|
print(f"Missing phonemes: {missing_phonemes}") |
|
|
for phoneme in missing_phonemes: |
|
|
print(f"{phoneme} -> {complete_vocab[phoneme]}") |
|
|
|
|
|
return all_issues |
|
|
|
|
|
|
|
|
|
|
|
def create_new_index(): |
|
|
|
|
|
|
|
|
phoneme_vocab_mapped_counts = {} |
|
|
for key, value in phoneme_mapper.items(): |
|
|
if value not in phoneme_vocab_mapped_counts: |
|
|
phoneme_vocab_mapped_counts[value] = 0 |
|
|
phoneme_vocab_mapped_counts[value] += 1 |
|
|
|
|
|
print(f"Mapped: {len(phoneme_mapper)} phonemes onto {len(phoneme_vocab_mapped_counts)} phonemes") |
|
|
|
|
|
|
|
|
sorted_phonemes = sorted( |
|
|
[p for p in phoneme_vocab_mapped_counts.keys() if p not in ['SIL', 'noise']], |
|
|
key=lambda x: phoneme_vocab_mapped_counts[x], |
|
|
reverse=True |
|
|
) |
|
|
|
|
|
|
|
|
phoneme_mapped_index = {} |
|
|
|
|
|
|
|
|
phoneme_mapped_index['SIL'] = 0 |
|
|
|
|
|
|
|
|
for i, phoneme in enumerate(sorted_phonemes): |
|
|
phoneme_mapped_index[phoneme] = i + 1 |
|
|
|
|
|
|
|
|
phoneme_mapped_index['noise'] = len(sorted_phonemes) + 1 |
|
|
|
|
|
print("New index created:") |
|
|
print(phoneme_mapped_index) |
|
|
|
|
|
|
|
|
print("Unique phonemes in the new index:") |
|
|
print(list(phoneme_mapped_index.keys())) |
|
|
|
|
|
issues = analyze_phoneme_merger(phoneme_mapper) |
|
|
|
|
|
|
|
|
|
|
|
print("Found the following potential issues:") |
|
|
for i, issue in enumerate(issues, 1): |
|
|
print(f"{i}. {issue}") |
|
|
|
|
|
|
|
|
mapped_phonemes = set(phoneme_mapped_index.keys()) |
|
|
merger_outputs = set(p for p in phoneme_mapper.values() if not p.endswith('*')) |
|
|
missing_indices = merger_outputs - mapped_phonemes |
|
|
extra_indices = mapped_phonemes - merger_outputs |
|
|
|
|
|
print("\nIndex validation:") |
|
|
if missing_indices: |
|
|
print(f"Merged phonemes missing from index: {missing_indices}") |
|
|
if extra_indices: |
|
|
print(f"Extra phonemes in index: {extra_indices}") |
|
|
print("Done") |
|
|
|
|
|
def check_missing_phonemes(): |
|
|
|
|
|
|
|
|
test_phonemes = ['a', 'd͡ʒ', 'ʃʲ', 'm', 'ɜ', 'ɘ', 'ʃ', 't͡ʃʰ', 'r', 'ä', 't͡ʃ', 'ə̆', 'pʰ', 'ɜ̆', 'ʌ̈', 't', 'ʃʰ', 'kʼ', 'ʒʲ', 'ə', 'ă', 'b', 'ɨ', 'æ̈', 'j', 'ɛ̈', 'p', 'd', 'n', 'ɥ', 'ɡ', 't͡ʃʼ', 'χ', 'ˀa', 'ʒ', 'ħʷ', 'ɹ', 'ħ', 'œ̈', 'ɾ', 'ʁ', 'ɤ̈', 'z', 'i', 'χʲ', 'tʰ', 's', 'ʁʷ', 'h', 'ɛ', 'k', 'ɑ', 'x', 'ɔ', 'o', 'u', 'e', 'ɑ̃', 'ŋ', 'l', 'ʊ', 'ã', 'q̠', 'õ', 'w', 'β', 'f', 'v', 'ʎ', 'oː', 'eː', 'kʰ', 'ð', 'œ', 'ɹ̩', 'ɛ̝', 'ʔ', 'l̥', 'e̝', 'aː', 'uː', 'iː', 'ʌ̃', 'æ', 'ẽ', 'y', 'yː', 'ɪː', 'ɛː', 'øː', 'œː', 'ɑː', 'o̝', 'ʌ', 'ø', 'ɯ', 'sː', 'ɛ̃', 'c', 'ɪ', 'ɟ', 'ɲ', 'æː', 'æ̃ː', 'ʉ', 'ɫ̩', 'ʋ', 'ɫ', 'kʲ', 'ɣ', 'ɦ', 'n̩', 'ɸ', 'dʰ', 'm̩', 'h̩', 'ç', 'bʰ', 't̪', 'd̪', 'd̪̤', 'b̤', 'n̪', 'ĩ', 'ũː', 'ũ', 'j̤', 'l̪', 'pː', 'kː', 'rː', 'nː', 'l̪ː', 'bː', 'mː', 'ɞ', 't̪ʲ', 'hː', 'ʔː', 'tː', 'dː', 'ʈ', 'ɖ', 'ʂ', 'ʐ', 'r̥', 'ɔː', 'ʏː', 'ʏ', 'θ', 'n̥', 'cː', 'ɟː', 'fː', 'lː', 'ŋ̥', 'ə̯', 'ə̟', 'i̯', 'ʊ̟', 'ɛ̞', 'ʊ̠', 'r̟', 'r̠', 'ɕ', 'pʲ', 'bʲ', 'ŭ', 'tʲ', 'ĕ', 'dʲ', 'ɡʲ', 'nʲ', 'fʲ', 'zʲ', 'vʲ', 'lʲ', 'sʲ', 'xʲ', 'hʲ', 'ŏ', 'mʲ', 't͡ʃʲ', 'd͡ʒʲ', 'æ̆', 'ŋʲ', 'rʲ', 'ɾʲ', 'ĭ', 'ɔ̆', 's̪', 'ɱ', 'ɽ', 'ɳ', 'ʈʰ', 'ɖʰ', 'ɵ', 't̪ʰ', 'd͡ʒʰ', 'ɭ', 'ʊ̃', 'sʰ', 'ḭ', 'cʰ', 'ʊ̰', 'ɛ̰', 'ɪ̰', 'a̰', 'ḛ', 'o̰', 'ɛ̰̃', 'ɪ̃', 'ʊ̰̃', 'ɲ̥', 'æ̃', 'm̥', 'ɪ̰̃', 'ɔ̰', 'wː', 'ɔ̃ː', 'ɗ', 'ɔ̃', 'õː', 'ɯː', 'ə̃', 'tʰː', 'pʰː', 'vː', 'zː', 'ʃː', 'jː', 'ɲː', 'xː', 'çː', 'ɓ', 'ãː', 't͡sʼ', 'ɻ', 'ʀ', 't͡s', 'a', 'b', 'w', 'e', 'ɔ', 'p', 'ɛ', 't', 'o', 't͡ʃ', 'u', 'd', 'k', 'ɔ̃', 'kʷ', 'ɡ', 'k͡p', 'm', 'n', 'n̠', 'j', 'f', 's', 'ç', 'ɹ', 'l', 'i', 'ʍ', 'd̠', 'ʐ', 'ŋ', 'ɥ', 't̠', 'ɕʷ', 'ɕ', 'pʰ', 'tʰ', 'sʰ', 'kʰ', 'z', 'ä', 'h', 'v', 'ʃ', 'ʒ', 'r', 'ü', 'y', 'ʔ', 'ɪ', 'æ', 'ə', 'q̠', 'ɞ', 't͡ʃʰ', 'ĩ', 'ã', 'õ', 'ʋ', 'x', 'ɾ', 'ɓ', 'ɗ', 'c', 'ɟ', 'ʄ', 'aː', 'ɲ', 'ɔː', 'tʲ', 'oː', 'ɤː', 'uː', 'ʊː', 'ɳ', 'ɯː', 'ðʲ', 'tʲʰ', 'ɛ̃', 'ɣ', 'kʲ', 'ũ', 'ĩː', 'rˠ', 'ɛ̃ː', 'ãː', 'ɔ̃ː', 'ũː', 't̪', 'ʑʷ', 'ʑ', 'ɡʷ', 'ŋʷ', 'ɽ', 'o̠', 'w̃', 'ɯ', 'ö', 'ɡ͡b', 'd͡ʒ', 'ʁ', 'q', 'i̠', 'ɛ̠', 'v̩', 'l̥', 'ɤ', 'r̥', 'ɢ', 'ɢʲ', 'χ', 'kʰʲ', 'm̥', 'n̥', 'nː', 'pː', 'lː', 'rː', 'æː', 'eː', 'o˞', 'e˞', 'a˞', 'i˞', 'iː', 'u˞', 'ʕʷ', 'ʕ', 'xʷ', 'ɬ', 'qʷ', 'ɑ', 'ɪ̃', 'ẽ', 'ʊ', 'd̪', 'd͡ʒʰ', 'ɦ', 't̪ʰ', 'd̪ʰ', 'dʰ', 'bʰ', 'ʌ', 'pʼ', 'ʊ̃', 'kʼ', 'β', 'kʼʲ', 'ħ', 'qʼ', 'cʼ', 'kʰʷ', 'qʰʷ', 'ɨ', 'ð', 'ɖ', 'ɸ', 'ʏ', 'ø', 'l̩', 'dʷ', 'pʷ', 'bʷ', 'tʷ', 'ṽ', 'z̃', 'ʃʷ', 'ʒʷ', 'a̘', 't͡s', 'n̤', 'ŋ̩', 'h̩', 'ɹ̝', 'ɑː', 'ɑ̞', 'ɑ̝', 'ɛː', 'ɪː', 'u̝', 'sʲ', 'ɜ', 'ɨː', 'θ', 'l̴', 'n̩', 'j̃', 't͡ɬ', 'sʼ', 'kʷʼ', 'cʰ', 'qʷʼ', 'zʷ', 'qʰ', 'kʷʰ', 't͡ɬʼ', 'cʷʰ', 'ʁʷ', 'tʷʼ', 'a̤', 'ɔ̤', 'o̤ː', 'i̤ː', 'ṳ', 'o̤', 'ṳː', 'ɯ̤', 'tʼ', 'ɑ̃', 'ɫ', 'ɑ̤', 'ʌ̃', 'ɛ̤', 'p͡t', 'b͡d', 'mʷ', 'w̝', 'ʎ̥', 'ɮ', 'ʃ̠', 'fː', 'i̥', 'u̥', 'ɪ̥', 'zː', 'sː', 'ʎ', 'ə̥', 'ʃː', 'e̥', 'ỹ', 'ɯ̈', 'ʉ', 'ɒ', 'xː', 'l̪', 'n̪', 'θː', 'ɒː', 'dˀ', 'bˀ', 't̟', 'æ̟', 'dⁿ', 'ɨ̠', 'tⁿ', 'a̠', 't͡sʰ', 'ɕʰ', 'm̩', 'ɭ', 'ə̃', 'ɕʼ', 't͡ʃʼ', 'ʔʷ', 'tsʰ'] |
|
|
missing_phonemes = set(test_phonemes) - set(phoneme_mapper.keys()) |
|
|
print(f"Missing phonemes: {missing_phonemes}") |
|
|
print(len(missing_phonemes)) |
|
|
|
|
|
|
|
|
noise_phonemes = [k for k, v in phoneme_mapper.items() if v == 'noise'] |
|
|
noise_phonemes_in_test_set = set(noise_phonemes) & set(test_phonemes) |
|
|
print(f"Noise phonemes in test set: {noise_phonemes_in_test_set}") |
|
|
|
|
|
|
|
|
def check_duplicates(): |
|
|
from collections import defaultdict |
|
|
|
|
|
|
|
|
key_value_pairs = defaultdict(set) |
|
|
|
|
|
|
|
|
for key, value in phoneme_mapper.items(): |
|
|
key_value_pairs[key].add(value) |
|
|
|
|
|
|
|
|
duplicates = {key: values for key, values in key_value_pairs.items() if len(values) > 1} |
|
|
|
|
|
print("Duplicate keys with different values:", len(duplicates)) |
|
|
for key, values in duplicates.items(): |
|
|
print(f"Key '{key}' has different values: {values}") |
|
|
|
|
|
|
|
|
|
|
|
def make_phoneme_groups(): |
|
|
|
|
|
|
|
|
phoneme_groups_19 = { |
|
|
|
|
|
"high_front_vowels": ["i", "i:", "ɪ", "y", "ʏ", "iː"], |
|
|
"high_back_vowels": ["u", "u:", "ʊ", "ɯ", "ʉ", "ɨ", "uː"], |
|
|
"mid_front_vowels": ["e", "e:", "ɛ", "ø", "œ", "eː"], |
|
|
"mid_central_vowels": ["ə", "ɜ", "ɜ:", "ɚ", "ʌ", "ɘ", "ɵ"], |
|
|
"mid_back_vowels": ["o", "o:", "ɔ", "ɔ:", "ɤ", "oː"], |
|
|
"low_vowels": ["a", "a:", "æ", "ɐ", "ɑ", "ɑ:", "ɒ", "aː"], |
|
|
"diphthongs": ["aɪ", "eɪ", "ɔɪ", "aʊ", "oʊ", "ɛə", "ɪə", "ʊə"], |
|
|
|
|
|
|
|
|
"voiceless_stops": ["p", "t", "k", "q", "ʔ", "ʈ", "c"], |
|
|
"voiced_stops": ["b", "d", "g", "ɢ", "ɖ", "ɟ"], |
|
|
"voiceless_fricatives": ["f", "θ", "s", "ʃ", "ç", "x", "h", "ħ", "ʂ", "ɕ", "χ"], |
|
|
"voiced_fricatives": ["v", "ð", "z", "ʒ", "ʝ", "ɣ", "ʕ", "ʐ", "ʑ", "ʁ"], |
|
|
"voiceless_affricates": ["ts", "tʃ", "tɕ", "ʈʂ"], |
|
|
"voiced_affricates": ["dz", "dʒ", "dʑ", "ɖʐ"], |
|
|
"nasals": ["m", "n", "ɲ", "ŋ", "ɴ", "ɱ", "ɳ"], |
|
|
|
|
|
|
|
|
"laterals": ["l", "ɭ", "ʎ", "ʟ"], |
|
|
"rhotics": ["r", "ɾ", "ɹ", "ʀ", "ɽ", "ɻ"], |
|
|
"glides": ["j", "w", "ɥ", "ɰ"], |
|
|
"palatalized": ["ɭʲ", "rʲ", "tʲ", "nʲ"], |
|
|
|
|
|
"SIL": ["SIL"], |
|
|
"noise": ["noise"], |
|
|
} |
|
|
|
|
|
phoneme_groups = { |
|
|
|
|
|
"front_vowels": ["i", "i:", "ɪ", "y", "ʏ", "iː", "e", "e:", "ɛ", "ø", "œ", "eː"], |
|
|
"central_vowels": ["ə", "ɜ", "ɜ:", "ɚ", "ʌ", "ɘ", "ɵ"], |
|
|
"back_vowels": ["u", "u:", "ʊ", "ɯ", "ʉ", "ɨ", "uː", "o", "o:", "ɔ", "ɔ:", "ɤ", "oː"], |
|
|
"low_vowels": ["a", "a:", "æ", "ɐ", "ɑ", "ɑ:", "ɒ", "aː"], |
|
|
"diphthongs": ["aɪ", "eɪ", "ɔɪ", "aʊ", "oʊ", "ɛə", "ɪə", "ʊə"], |
|
|
|
|
|
|
|
|
"voiceless_stops": ["p", "t", "k", "q", "ʔ", "ʈ", "c", "tʲ"], |
|
|
"voiced_stops": ["b", "d", "g", "ɢ", "ɖ", "ɟ"], |
|
|
"voiceless_fricatives": ["f", "θ", "s", "ʃ", "ç", "x", "h", "ħ", "ʂ", "ɕ", "χ"], |
|
|
"voiced_fricatives": ["v", "ð", "z", "ʒ", "ʝ", "ɣ", "ʕ", "ʐ", "ʑ", "ʁ"], |
|
|
|
|
|
|
|
|
"voiceless_affricates": ["ts", "tʃ", "tɕ", "ʈʂ"], |
|
|
"voiced_affricates": ["dz", "dʒ", "dʑ", "ɖʐ"], |
|
|
|
|
|
|
|
|
"nasals": ["m", "n", "nʲ", "ɲ", "ŋ", "ɴ", "ɱ", "ɳ"], |
|
|
|
|
|
|
|
|
"laterals": ["l", "ɭ", "ɭʲ", "ʎ", "ʟ"], |
|
|
|
|
|
|
|
|
"rhotics": ["r", "rʲ", "ɾ", "ɹ", "ʀ", "ɽ", "ɻ"], |
|
|
|
|
|
|
|
|
"glides": ["j", "w", "ɥ", "ɰ"], |
|
|
|
|
|
|
|
|
"SIL": ["SIL"], |
|
|
"noise": ["noise"], |
|
|
} |
|
|
|
|
|
|
|
|
phoneme_groups_flat = [p for g in phoneme_groups for p in phoneme_groups[g]] |
|
|
extra_phonemes = set(phoneme_groups_flat)- set(phoneme_mapped_index.keys()) |
|
|
print(f"extra phonemes: {extra_phonemes}") |
|
|
missing_phonemes = set(phoneme_mapped_index.keys()) - set(phoneme_groups_flat) |
|
|
print(f"missing phonemes: {missing_phonemes}") |
|
|
assert len(missing_phonemes) == 0, "Phoneme groups do not cover all phonemes" |
|
|
|
|
|
|
|
|
for p in extra_phonemes: |
|
|
for g in phoneme_groups: |
|
|
if p in phoneme_groups[g]: |
|
|
phoneme_groups[g].remove(p) |
|
|
|
|
|
|
|
|
|
|
|
phoneme_groups_based = {} |
|
|
for g in phoneme_groups: |
|
|
phoneme_groups_based[g] = [phoneme_mapped_index[p] for p in phoneme_groups[g]] |
|
|
|
|
|
|
|
|
for g in phoneme_groups: |
|
|
for p in phoneme_groups[g]: |
|
|
assert phoneme_mapped_index[p] in phoneme_groups_based[g], f"{p} not in {g}" |
|
|
|
|
|
|
|
|
global phoneme_groups_index |
|
|
|
|
|
phoneme_groups_index = {} |
|
|
phoneme_groups_index = { "SIL": 0,} |
|
|
for i, g in enumerate(phoneme_groups): |
|
|
if (g != "SIL") and (g != "noise"): |
|
|
phoneme_groups_index[g] = i+1 |
|
|
phoneme_groups_index["noise"] = len(phoneme_groups_index) |
|
|
print("phoneme_groups_index:", phoneme_groups_index) |
|
|
print("total groups (excluding noise)", len(phoneme_groups_index)-1) |
|
|
|
|
|
|
|
|
|
|
|
base66_to_groups = {} |
|
|
for p in phoneme_mapped_index: |
|
|
for g in phoneme_groups: |
|
|
if p in phoneme_groups[g]: |
|
|
base66_to_groups[phoneme_mapped_index[p]] = phoneme_groups_index[g] |
|
|
|
|
|
|
|
|
|
|
|
assert len(base66_to_groups) == len(phoneme_mapped_index), "Not all phonemes are mapped to a group" |
|
|
print("base66_to_groups:", base66_to_groups) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
make_phoneme_groups() |