从拼音中获取声调数

Wbo*_*boy 2 python ascii

假设我有一个拼音:

\n\n
g\xc4\x93ge\n
Run Code Online (Sandbox Code Playgroud)\n\n

我怎样才能得到重音字符的“音号”?\neg,在这种情况下,\xc4\x93 将是第一个音,理想的输出将是 ge1ge。但实际上,第一步是如何将音调转换为数字?

\n\n

输入/输出示例:

\n\n
g\xc4\x93ge\nn\xc7\x8einai\nw\xc3\xa0ip\xc3\xb3\n
Run Code Online (Sandbox Code Playgroud)\n\n

成为

\n\n
ge1ge\nna3inai\nwa4ipo2\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想在 python 中理想地做到这一点,但我很灵活。

\n\n

谢谢!:)

\n

Ser*_*sta 6

当用标准形式D(*)(分解)表示时,四拼音使用以下组合(unicode)符号:

\n\n
    \n
  • 结合马克龙(\'\\u0304\' ) 以获得音调 1
  • \n
  • 结合锐利口音 (\'\\u0301\' ) 组合为声调 2
  • \n
  • 结合卡隆(\'\\u030c\' ) 以获得音调 3
  • \n
  • 结合深沉的口音(\'\\u0300\' ) 来生成音调 4
  • \n
\n\n

这意味着 Python 中的自动处理几乎是微不足道的:将 (unicode) 字符串规范化为其规范形式 D,并将上述组合字符替换为其数字值

\n\n

代码可以是:

\n\n
def to_tone_number(s):\n    table = {0x304: ord(\'1\'), 0x301: ord(\'2\'), 0x30c: ord(\'3\'),\n         0x300: ord(\'4\')}\n    return unicodedata.normalize(\'NFD\', s).translate(table)\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后您可以使用:

\n\n
>>> print(to_tone_number(\'\'\'g\xc4\x93ge\nn\xc7\x8einai\nw\xc3\xa0ip\xc3\xb3\'\'\'))\nge1ge\nna3inai\nwa4ipo2\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Python 3 或 Python 2 中:

\n\n
>>> print(to_tone_number(u\'\'\'g\\u0113ge\nn\\u01ceinai\nw\\xe0ip\\xf3\'\'\'))\nge1ge\nna3inai\nwa4ipo2\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

(*) 参考文献:

\n\n\n