从拼音中获取音调编号

时间:2017-03-17 10:06:52

标签: python ascii

说我有一个拼音:

gēge

我如何获得重音字符的“音调编号”? 例如,在这种情况下,ē将是第一音,理想输出将是ge1ge。但实际上,第一步是如何将音调转换为数字?

输入/输出示例:

gēge
nǎinai
wàipó

BECOMES

ge1ge
na3inai
wa4ipo2

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

谢谢! :)

2 个答案:

答案 0 :(得分:3)

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

  • 组合MACRON('\u0304')进行音调1
  • 为音调2组合ACUTE ACCENT('\u0301'
  • 组合CARON('\u030c')获得音调3
  • 为音调4组合GRAVE ACCENT('\u0300'

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

代码可以是:

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

然后您可以使用:

>>> print(to_tone_number('''gēge
nǎinai
wàipó'''))
ge1ge
na3inai
wa4ipo2

在Python 3中,或在Python 2中:

>>> print(to_tone_number(u'''g\u0113ge
n\u01ceinai
w\xe0ip\xf3'''))
ge1ge
na3inai
wa4ipo2

(*)参考:

答案 1 :(得分:0)

使用正则表达式。有一个有用的正则表达式命令:

re.findall() 

您可以先使用它来识别所有重音字符,然后用字符串替换方法替换它们,

str.replace('ē','e3') 

例如