Вы можете использовать pywin32 для создания COM-сервера с использованием 32-разрядного Python, а затем использовать объект COM в 64-разрядном Python.
Вот небольшой китайский конвертер пиньинь, который я написал. Он принимает пронумерованный ввод, такой как wo3 shi4 mei3guo2ren2
и преобразует его в wǒ shì měiguórén
:
_UMLAUT_U = u'\N{LATIN SMALL LETTER U WITH DIAERESIS}'
# tone number to combining diacritical table.
_TONE = {u'1':u'\N{COMBINING MACRON}',
u'2':u'\N{COMBINING ACUTE ACCENT}',
u'3':u'\N{COMBINING CARON}',
u'4':u'\N{COMBINING GRAVE ACCENT}',
u'5':u''}
class Pinyin:
_public_methods_ = ['Convert']
_reg_progid_ = 'PythonUtil.Pinyin'
_reg_clsid_ = '{3A7A52BA-3162-4fc1-8182-869258D2754D}'
@staticmethod
def _convert(matchobj):
"""_convert(matchobj) -> replacement text
Helper function for re.sub with three groups.
Group 1 - one or more vowels
Group 2 - zero or more consonants
Group 3 - tone character '1'-'5'
Applies pinyin tone marks to the appropriate vowel.
Algorithm:
In vowels, replace 'v' with umlaut-u.
First 'a' or 'e' in vowels gets the mark,
else first 'ou', 'o' gets the mark,
else last vowel gets the mark.
"""
import unicodedata
vowels,consonants,tone = matchobj.groups()
vowels = vowels.replace(u'v',_UMLAUT_U)
n = vowels.lower().find(u'a')
if n == -1:
n = vowels.lower().find(u'e')
if n == -1:
n = vowels.lower().find(u'ou')
if n != -1:
# a, e, or ou found.
# Add accent after the a, e, or o
retval = vowels[:n+1] + _TONE[tone] + vowels[n+1:] + consonants
else:
# accent after the last vowel
retval = vowels + _TONE[tone] + consonants
return unicodedata.normalize('NFC',retval)
def Convert(self,pinyin_with_tone_numbers):
"""Convert(self,pinyin_with_tone_numbers) -> pinyin_with_tone_marks
Given a pinyin string with tone numbers, return a converted unicode
string with tone marks. Requires 'v' to represent umlaut-u.
"""
import re
# Calls conversion function for each match.
return re.sub(
u'''(?ix) # ignore case, verbose
([aeiouv]+) # one or more vowels (v for umlaut-u)
([^aeiouv]*) # zero or more non-vowels
([12345]) # tone mark 1-5
''',self._convert,pinyin_with_tone_numbers)
if __name__ == '__main__':
import win32com.server.register
win32com.server.register.UseCommandLine(Pinyin)
Запустите приведенный ниже скрипт, чтобы зарегистрировать COM-сервер, используя 32-битный Python, а затем в 64-битном Python:
>>> import win32com.client
>>> s=win32com.client.Dispatch('PythonUtil.Pinyin')
>>> s.Convert('wo3 shi4 mei3guo2ren2')
'wǒ shì měiguórén'
При необходимости адаптируйтесь к вашему приложению.