L'informatique pour les littéraires

Convertir les numéros de tons pinyin en accents

Voici un super petit script en python2 qui convertit les numéros des tons en accents: tian1 devient  tiān.

Dans notepad++ avec python script, cela fonctionne parfaitement. J’ai juste ajouté les éléments pour que cela ajoute le texte à la fin de la sélection.

# -*- coding: utf-8 -*-
# https://stackoverflow.com/a/21488584

import re
#les 3 lignes suivantes sont ajoutées pour des problèmes d'encodage
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
 
pinyinToneMarks = {
    u'a': u'āáǎà', u'e': u'ēéěè', u'i': u'īíǐì',
    u'o': u'ōóǒò', u'u': u'ūúǔù', u'ü': u'ǖǘǚǜ',
    u'A': u'ĀÁǍÀ', u'E': u'ĒÉĚÈ', u'I': u'ĪÍǏÌ',
    u'O': u'ŌÓǑÒ', u'U': u'ŪÚǓÙ', u'Ü': u'ǕǗǙǛ'
}

#pinyinToneMarks = pinyinToneMarks.decode('utf8')
 
def convertPinyinCallback(m):
    tone=int(m.group(3))%5
    r=m.group(1).replace(u'v', u'ü').replace(u'V', u'Ü')
    # for multiple vowels, use first one if it is a/e/o, otherwise use second one
    pos=0
    if len(r)>1 and not r[0] in 'aeoAEO':
        pos=1
    if tone != 0:
        r=r[0:pos]+pinyinToneMarks[r[pos]][tone-1]+r[pos+1:]
    return r+m.group(2)
 
def convertPinyin(s):
    #ajouter .encode('utf8') pour les problèmes d'encodage de ü en ǚ
    #return ' ' + re.sub(ur'([aeiouüvÜ]{1,3})(n?g?r?)([012345])', convertPinyinCallback, s, flags=re.IGNORECASE)
    return ' ' + re.sub(ur'([aeiouüvÜ]{1,3})(n?g?r?)([012345])'.encode('utf8'), convertPinyinCallback, s, flags=re.IGNORECASE)
 
#print convertPinyin(u'Ni3 hao3 ma0?')
#editor.addText(convertPinyin(editor.getText()))
editor.insertText(editor.getSelectionEnd(), convertPinyin(editor.getSelText()))

source

https://stackoverflow.com/a/21488584
Notez qu’il y a aussi une version python3: https://stackoverflow.com/questions/8200349/convert-numbered-pinyin-to-pinyin-with-tone-marks