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.
12345678910111213141516171819202122232425262728293031323334353637# -*- 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