from typing import Optional from typing import Text def right_mark_index(pinyin_no_tone: Text) -> Optional[int]: """ 标调位置 有 ɑ 不放过,   没 ɑ 找 o、e;   ɑ、o、e、i、u、ü   标调就按这顺序;   i、u 若是连在一起,   谁在后面就标谁。 有ɑ不放过(有ɑ一定要标在ɑ上); 无ɑ找oe(没有ɑ的时候标在o上,如果没有o则标在e上); iu并列标在后(iu, ui的情况,标在后面的字母上,比如说iu应该标u,ui应该标i); 单个韵母不用说(只能标在单韵母上) http://www.hwjyw.com/resource/content/2010/06/04/8183.shtml https://www.zhihu.com/question/23655297 https://github.com/mozillazg/python-pinyin/issues/160 http://www.pinyin.info/rules/where.html """ # 有 ɑ 不放过, 没 ɑ 找 o、e for c in ['a', 'o', 'e']: if c in pinyin_no_tone: return pinyin_no_tone.index(c) # i、u 若是连在一起,谁在后面就标谁 for c in ['iu', 'ui']: if c in pinyin_no_tone: return pinyin_no_tone.index(c) + 1 # ɑ、o、e、i、u、ü for c in ['i', 'u', 'v', 'ü']: if c in pinyin_no_tone: return pinyin_no_tone.index(c) # n, m, ê for c in ['n', 'm', 'ê']: if c in pinyin_no_tone: return pinyin_no_tone.index(c)