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