nltk 将arpabetMap到国际音标(IPA)对于cmudict来说会更好,

cld4siwp  于 4个月前  发布在  其他
关注(0)|答案(1)|浏览(71)

我不确定这是否能正确处理压力标记(我只是将其转换为上标),我也不确定它应该放在哪里,但认为这可能会启发有人正确地添加它。

_MAP_ARPA_IPA = {"AA": "ɑ", "AE": "æ", "AH": "ʌ", "AO": "ɔ","AW": "aʊ",
                "AX": "ə", "AXR": "ɚ", "AY": "aɪ", "EH": "ɛ", "ER": "ɝ",
                "EY": "eɪ", "IH": "ɪ", "IX": "ɨ", "IY": "i", "OW": "oʊ",
                "OY": "ɔɪ", "UH": "ʊ", "UW": "u", "UX": "ʉ", "B": "b",
                "CH": "tʃ", "D": "d", "DH": "ð", "DX": "ɾ", "EL": "l̩",
                "EM": "m̩", "EN": "n̩", "F": "f", "G": "ɡ", "HH": "h",
                "H": "h", "JH": "dʒ", "K": "k", "L": "l", "M": "m",
                "N": "n", "NG": "ŋ", "NX": "ɾ̃", "P": "p", "Q": "ʔ",
                "R": "ɹ", "S": "s", "SH": "ʃ", "T": "t", "TH": "θ",
                "V": "v", "W": "w", "WH": "ʍ", "Y": "j", "Z": "z",
                "ZH": "ʒ"}

_MAP_ARPA_AUX = {
    "0": "⁰", "1": "¹", "2": "²", "3": "³", "4": "⁴",
    "5": "⁵", "6": "⁶", "7": "⁷", "8": "⁸", "9": "⁹",
    "-": "-",   "!": "!", "+": "+",
    "/": "/",   "#": "#", ":": ":"}

def arpa2ipa(tag, mapping, aux_map):
  """
  function definition:
  --> takes an Arpabet tag and maps into IPA
  stress is shown as a superscript

  >>> arpa2ipa("AA", _MAP_ARPA_IPA, _MAP_ARPA_AUX)
  "ɑ"
  >>> arpa2ipa("IY0", _MAP_ARPA_IPA, _MAP_ARPA_AUX)
  "i⁰"
  """
  if tag[-1] in aux_map:
    assert tag[:-1] in mapping, f"Unexpected arpabet: {tag[:-1]}"
    return mapping[tag[:-1]] + aux_map[tag[-1]]
  else:
    assert tag in mapping, f"Unexpected arpabet: {tag}"
    return mapping[tag]

使用示例:

>>> green = ["G", "R", "IY0", "N"]
>>> print(green, [arpa2ipa(l, _MAP_ARPA_IPA, _MAP_ARPA_AUX) for l in green ])
['ɡ', 'ɹ', 'i⁰', 'n']

我在整个词汇表中运行了它,它可以转换每个发音而没有任何错误。

35g0bw71

35g0bw711#

这将是cmudict语料库阅读器的一个有用的附加功能。它最终可能会进入一个单独的模块,特别是如果NLTK有更多的IPA音标或TTS材料。同时,它与cmudict最紧密地连接在一起。

相关问题