560 lines
12 KiB
Python
560 lines
12 KiB
Python
# -*- coding: utf-8 -*-
|
|
from __future__ import unicode_literals
|
|
|
|
from pypinyin.constants import Style
|
|
from pypinyin.style import register
|
|
from pypinyin.style._utils import replace_symbol_to_no_symbol
|
|
from pypinyin.style._utils import get_initials
|
|
|
|
# https://en.wikipedia.org/wiki/Wade%E2%80%93Giles
|
|
# https://web.archive.org/web/20070128065433/http://polaris.gseis.ucla.edu/skozerow/wadegiles.htm
|
|
# https://www.lib.uchicago.edu/about/directory/departments/eastasia/find/wade-giles-pinyin-conversion-table/
|
|
# https://www.zdic.net/ts/fulu/2019/05/18.html
|
|
_convert_table = [
|
|
|
|
['a', 'a'],
|
|
['ai', 'ai'],
|
|
['an', 'an'],
|
|
['ang', 'ang'],
|
|
['ao', 'ao'],
|
|
['zha', 'cha'],
|
|
['cha', 'ch\'a'],
|
|
['zhai', 'chai'],
|
|
['chai', 'ch\'ai'],
|
|
['zhan', 'chan'],
|
|
['chan', 'ch\'an'],
|
|
['zhang', 'chang'],
|
|
['chang', 'ch\'ang'],
|
|
['zhao', 'chao'],
|
|
['chao', 'ch\'ao'],
|
|
['zhe', 'che'],
|
|
['che', 'ch\'e'],
|
|
['zhen', 'chen'],
|
|
['chen', 'ch\'en'],
|
|
['zheng', 'cheng'],
|
|
['cheng', 'ch\'eng'],
|
|
['ji', 'chi'],
|
|
['qi', 'ch\'i'],
|
|
['jia', 'chia'],
|
|
['qia', 'ch\'ia'],
|
|
['jiang', 'chiang'],
|
|
['qiang', 'ch\'iang'],
|
|
['jiao', 'chiao'],
|
|
['qiao', 'ch\'iao'],
|
|
['jie', 'chieh'],
|
|
['qie', 'ch\'ieh'],
|
|
['jian', 'chien'],
|
|
['qian', 'ch\'ien'],
|
|
['zhi', 'chih'],
|
|
['chi', 'ch\'ih'],
|
|
['jin', 'chin'],
|
|
['qin', 'ch\'in'],
|
|
['jing', 'ching'],
|
|
['qing', 'ch\'ing'],
|
|
['jiu', 'chiu'],
|
|
['qiu', 'ch\'iu'],
|
|
['jiong', 'chiung'],
|
|
['qiong', 'ch\'iung'],
|
|
['zhuo', 'cho'],
|
|
['chuo', 'ch\'o'],
|
|
['zhou', 'chou'],
|
|
['chou', 'ch\'ou'],
|
|
['zhu', 'chu'],
|
|
['chu', 'ch\'u'],
|
|
['ju', 'chü'],
|
|
['qu', 'ch\'ü'],
|
|
['zhua', 'chua'],
|
|
['zhuai', 'chuai'],
|
|
['chuai', 'ch\'uai'],
|
|
['zhuan', 'chuan'],
|
|
['chuan', 'ch\'uan'],
|
|
['juan', 'chüan'],
|
|
['quan', 'ch\'üan'],
|
|
['zhuang', 'chuang'],
|
|
['chuang', 'ch\'uang'],
|
|
['jue', 'chüeh'],
|
|
['que', 'ch\'üeh'],
|
|
['zhui', 'chui'],
|
|
['chui', 'ch\'ui'],
|
|
['zhun', 'chun'],
|
|
['chun', 'ch\'un'],
|
|
['jun', 'chün'],
|
|
['qun', 'ch\'ün'],
|
|
['zhong', 'chung'],
|
|
['chong', 'ch\'ung'],
|
|
['en', 'en'],
|
|
['er', 'erh'],
|
|
['fa', 'fa'],
|
|
['fan', 'fan'],
|
|
['fang', 'fang'],
|
|
['fei', 'fei'],
|
|
['fen', 'fen'],
|
|
['feng', 'feng'],
|
|
['fo', 'fo'],
|
|
['fou', 'fou'],
|
|
['fu', 'fu'],
|
|
['ha', 'ha'],
|
|
['hai', 'hai'],
|
|
['han', 'han'],
|
|
['hang', 'hang'],
|
|
['hao', 'hao'],
|
|
['hei', 'hei'],
|
|
['hen', 'hen'],
|
|
['heng', 'heng'],
|
|
['he', 'ho'],
|
|
['hou', 'hou'],
|
|
['xi', 'hsi'],
|
|
['xia', 'hsia'],
|
|
['xiang', 'hsiang'],
|
|
['xiao', 'hsiao'],
|
|
['xie', 'hsieh'],
|
|
['xian', 'hsien'],
|
|
['xin', 'hsin'],
|
|
['xing', 'hsing'],
|
|
['xiu', 'hsiu'],
|
|
['xiong', 'hsiung'],
|
|
['xu', 'hsü'],
|
|
['xuan', 'hsüan'],
|
|
['xue', 'hsüeh'],
|
|
['xun', 'hsün'],
|
|
['hu', 'hu'],
|
|
['hua', 'hua'],
|
|
['huai', 'huai'],
|
|
['huan', 'huan'],
|
|
['huang', 'huang'],
|
|
['hui', 'hui'],
|
|
['hun', 'hun'],
|
|
['hong', 'hung'],
|
|
['huo', 'huo'],
|
|
['yi', 'i'],
|
|
['ran', 'jan'],
|
|
['rang', 'jang'],
|
|
['rao', 'jao'],
|
|
['re', 'je'],
|
|
['ren', 'jen'],
|
|
['reng', 'jeng'],
|
|
['ri', 'jih'],
|
|
['ruo', 'jo'],
|
|
['rou', 'jou'],
|
|
['ru', 'ju'],
|
|
['ruan', 'juan'],
|
|
['rui', 'jui'],
|
|
['run', 'jun'],
|
|
['rong', 'jung'],
|
|
['ga', 'ka'],
|
|
['ka', 'k\'a'],
|
|
['gai', 'kai'],
|
|
['kai', 'k\'ai'],
|
|
['gan', 'kan'],
|
|
['kan', 'k\'an'],
|
|
['gang', 'kang'],
|
|
['kang', 'k\'ang'],
|
|
['gao', 'kao'],
|
|
['kao', 'k\'ao'],
|
|
['gen', 'ken'],
|
|
['ken', 'k\'en'],
|
|
['geng', 'keng'],
|
|
['keng', 'k\'eng'],
|
|
['ge', 'ko'],
|
|
['ke', 'k\'o'],
|
|
['gou', 'kou'],
|
|
['kou', 'k\'ou'],
|
|
['gu', 'ku'],
|
|
['ku', 'k\'u'],
|
|
['gua', 'kua'],
|
|
['kua', 'k\'ua'],
|
|
['guai', 'kuai'],
|
|
['kuai', 'k\'uai'],
|
|
['guan', 'kuan'],
|
|
['kuan', 'k\'uan'],
|
|
['guang', 'kuang'],
|
|
['kuang', 'k\'uang'],
|
|
['gui', 'kuei'],
|
|
['kui', 'k\'uei'],
|
|
['gun', 'kun'],
|
|
['kun', 'k\'un'],
|
|
['gong', 'kung'],
|
|
['kong', 'k\'ung'],
|
|
['guo', 'kuo'],
|
|
['kuo', 'k\'uo'],
|
|
['la', 'la'],
|
|
['lai', 'lai'],
|
|
['lan', 'lan'],
|
|
['lang', 'lang'],
|
|
['lao', 'lao'],
|
|
['le', 'le'],
|
|
['lei', 'lei'],
|
|
['leng', 'leng'],
|
|
['li', 'li'],
|
|
['liang', 'liang'],
|
|
['liao', 'liao'],
|
|
['lie', 'lieh'],
|
|
['lian', 'lien'],
|
|
['lin', 'lin'],
|
|
['ling', 'ling'],
|
|
['liu', 'liu'],
|
|
['luo', 'lo'],
|
|
['lou', 'lou'],
|
|
['lu', 'lu'],
|
|
['lü', 'lü'],
|
|
['luan', 'luan'],
|
|
['luan', 'lüan'],
|
|
['lue', 'lüeh'],
|
|
['lun', 'lun'],
|
|
['long', 'lung'],
|
|
['ma', 'ma'],
|
|
['mai', 'mai'],
|
|
['man', 'man'],
|
|
['mang', 'mang'],
|
|
['mao', 'mao'],
|
|
['mei', 'mei'],
|
|
['men', 'men'],
|
|
['meng', 'meng'],
|
|
['mi', 'mi'],
|
|
['miao', 'miao'],
|
|
['mie', 'mieh'],
|
|
['mian', 'mien'],
|
|
['min', 'min'],
|
|
['ming', 'ming'],
|
|
['miu', 'miu'],
|
|
['mo', 'mo'],
|
|
['mou', 'mou'],
|
|
['mu', 'mu'],
|
|
['na', 'na'],
|
|
['nai', 'nai'],
|
|
['nan', 'nan'],
|
|
['nang', 'nang'],
|
|
['nao', 'nao'],
|
|
['nei', 'nei'],
|
|
['nen', 'nen'],
|
|
['neng', 'neng'],
|
|
['ni', 'ni'],
|
|
['niang', 'niang'],
|
|
['niao', 'niao'],
|
|
['nie', 'nieh'],
|
|
['nian', 'nien'],
|
|
['nin', 'nin'],
|
|
['ning', 'ning'],
|
|
['niu', 'niu'],
|
|
['nuo', 'no'],
|
|
['nou', 'nou'],
|
|
['nu', 'nu'],
|
|
['nü', 'nü'],
|
|
['nuan', 'nuan'],
|
|
['nue', 'nüeh'],
|
|
['nong', 'nung'],
|
|
['e', 'o'],
|
|
['ou', 'ou'],
|
|
['ba', 'pa'],
|
|
['pa', 'p\'a'],
|
|
['bai', 'pai'],
|
|
['pai', 'p\'ai'],
|
|
['ban', 'pan'],
|
|
['pan', 'p\'an'],
|
|
['bang', 'pang'],
|
|
['pang', 'p\'ang'],
|
|
['bao', 'pao'],
|
|
['pao', 'p\'ao'],
|
|
['bei', 'pei'],
|
|
['pei', 'p\'ei'],
|
|
['ben', 'pen'],
|
|
['pen', 'p\'en'],
|
|
['beng', 'peng'],
|
|
['peng', 'p\'eng'],
|
|
['bi', 'pi'],
|
|
['pi', 'p\'i'],
|
|
['biao', 'piao'],
|
|
['piao', 'p\'iao'],
|
|
['bie', 'pieh'],
|
|
['pie', 'p\'ieh'],
|
|
['bian', 'pien'],
|
|
['pian', 'p\'ien'],
|
|
['bin', 'pin'],
|
|
['pin', 'p\'in'],
|
|
['bing', 'ping'],
|
|
['ping', 'p\'ing'],
|
|
['bo', 'po'],
|
|
['po', 'p\'o'],
|
|
['pou', 'p\'ou'],
|
|
['bu', 'pu'],
|
|
['pu', 'p\'u'],
|
|
['sa', 'sa'],
|
|
['sai', 'sai'],
|
|
['san', 'san'],
|
|
['sang', 'sang'],
|
|
['sao', 'sao'],
|
|
['se', 'se'],
|
|
['sen', 'sen'],
|
|
['seng', 'seng'],
|
|
['sha', 'sha'],
|
|
['shai', 'shai'],
|
|
['shan', 'shan'],
|
|
['shang', 'shang'],
|
|
['shao', 'shao'],
|
|
['she', 'she'],
|
|
['shen', 'shen'],
|
|
['sheng', 'sheng'],
|
|
['shi', 'shih'],
|
|
['shou', 'shou'],
|
|
['shu', 'shu'],
|
|
['shua', 'shua'],
|
|
['shuai', 'shuai'],
|
|
['shuan', 'shuan'],
|
|
['shuang', 'shuang'],
|
|
['shui', 'shui'],
|
|
['shun', 'shun'],
|
|
['shuo', 'shuo'],
|
|
['suo', 'so'],
|
|
['sou', 'sou'],
|
|
['si', 'ssu'],
|
|
['su', 'su'],
|
|
['suan', 'suan'],
|
|
['sui', 'sui'],
|
|
['sun', 'sun'],
|
|
['song', 'sung'],
|
|
['da', 'ta'],
|
|
['ta', 't\'a'],
|
|
['dai', 'tai'],
|
|
['tai', 't\'ai'],
|
|
['dan', 'tan'],
|
|
['tan', 't\'an'],
|
|
['dang', 'tang'],
|
|
['tang', 't\'ang'],
|
|
['dao', 'tao'],
|
|
['tao', 't\'ao'],
|
|
['de', 'te'],
|
|
['te', 't\'e'],
|
|
['deng', 'teng'],
|
|
['teng', 't\'eng'],
|
|
['di', 'ti'],
|
|
['ti', 't\'i'],
|
|
['diao', 'tiao'],
|
|
['tiao', 't\'iao'],
|
|
['die', 'tieh'],
|
|
['tie', 't\'oeh'],
|
|
['dian', 'tien'],
|
|
['tian', 't\'ien'],
|
|
['ding', 'ting'],
|
|
['ting', 't\'ing'],
|
|
['diu', 'tiu'],
|
|
['duo', 'to'],
|
|
['tuo', 't\'o'],
|
|
['dou', 'tou'],
|
|
['tou', 't\'ou'],
|
|
['du', 'tu'],
|
|
['tu', 't\'u'],
|
|
['duan', 'tuan'],
|
|
['tuan', 't\'uan'],
|
|
['dui', 'tui'],
|
|
['tui', 't\'ui'],
|
|
['dun', 'tun'],
|
|
['tun', 't\'un'],
|
|
['dong', 'tung'],
|
|
['tong', 't\'ung'],
|
|
['za', 'tsa'],
|
|
['ca', 'ts\'a'],
|
|
['zai', 'tsai'],
|
|
['cai', 'ts\'ai'],
|
|
['zan', 'tsan'],
|
|
['can', 'ts\'an'],
|
|
['zang', 'tsang'],
|
|
['cang', 'ts\'ang'],
|
|
['zao', 'tsao'],
|
|
['cao', 'ts\'ao'],
|
|
['ze', 'tse'],
|
|
['ce', 'ts\'e'],
|
|
['zei', 'tsei'],
|
|
['zen', 'tsen'],
|
|
['cen', 'ts\'en'],
|
|
['zeng', 'tseng'],
|
|
['ceng', 'ts\'eng'],
|
|
['zuo', 'tso'],
|
|
['cuo', 'ts\'o'],
|
|
['zou', 'tsou'],
|
|
['cou', 'ts\'ou'],
|
|
['zu', 'tsu'],
|
|
['cu', 'ts\'u'],
|
|
['zuan', 'tsuan'],
|
|
['cuan', 'ts\'uan'],
|
|
['zui', 'tsui'],
|
|
['cui', 'ts\'ui'],
|
|
['zun', 'tsun'],
|
|
['cun', 'ts\'un'],
|
|
['zong', 'tsung'],
|
|
['cong', 'ts\'ung'],
|
|
['zi', 'tzu'],
|
|
['ci', 'tz\'u'],
|
|
['wa', 'wa'],
|
|
['wai', 'wai'],
|
|
['wan', 'wan'],
|
|
['wang', 'wang'],
|
|
['wei', 'wei'],
|
|
['wen', 'wen'],
|
|
['weng', 'weng'],
|
|
['wo', 'wo'],
|
|
['wu', 'wu'],
|
|
['ya', 'ya'],
|
|
['yai', 'yai'],
|
|
['yang', 'yang'],
|
|
['yao', 'yao'],
|
|
['ye', 'yeh'],
|
|
['yan', 'yen'],
|
|
['yin', 'yin'],
|
|
['ying', 'ying'],
|
|
['yo', 'yo'],
|
|
['you', 'yu'],
|
|
['yu', 'yü'],
|
|
['yuan', 'yüan'],
|
|
['yue', 'yüeh'],
|
|
['yun', 'yün'],
|
|
['yong', 'yung'],
|
|
|
|
['chua', 'ch`ua'],
|
|
['dei', 'tei'],
|
|
['den', 'ten'],
|
|
['diang', 'tiang'],
|
|
['ei', 'ei'],
|
|
['eng', 'eng'],
|
|
['gei', 'kei'],
|
|
['lia', 'lia'],
|
|
['lo', 'lo'],
|
|
['lüan', 'lüan'],
|
|
['lvan', 'lüan'],
|
|
['lüe', 'lüeh'],
|
|
['lve', 'lüeh'],
|
|
['lün', 'lün'],
|
|
['lvn', 'lün'],
|
|
['me', 'me'],
|
|
['ne', 'ne'],
|
|
['nia', 'nia'],
|
|
['nun', 'nun'],
|
|
['nüe', 'nüeh'],
|
|
['nve', 'nüeh'],
|
|
['o', 'o'],
|
|
['sei', 'sei'],
|
|
['shei', 'shei'],
|
|
['shong', 'shung'],
|
|
['zhei', 'chei'],
|
|
]
|
|
_convert_table.sort(key=lambda x: len(x[0]), reverse=True)
|
|
|
|
# https://www.mysmth.net/nForum/#!article/Linguistics/4991
|
|
_initial_table = [
|
|
['b', 'p'],
|
|
['p', 'p\''],
|
|
['m', 'm'],
|
|
['f', 'f'],
|
|
['d', 't'],
|
|
['t', 't\''],
|
|
['n', 'n'],
|
|
['l', 'l'],
|
|
['g', 'g'],
|
|
['k', 'k\''],
|
|
['h', 'h'],
|
|
['j', 'ch'],
|
|
['q', 'ch\''],
|
|
['x', 'hs'],
|
|
['zh', 'ch'],
|
|
['ch', 'ch\''],
|
|
['sh', 'sh'],
|
|
['r', 'j'],
|
|
['z', 'ts'],
|
|
['c', 'ts\''],
|
|
['s', 's'],
|
|
]
|
|
_initial_table.sort(key=lambda x: len(x[0]), reverse=True)
|
|
_tone_table = [
|
|
['i', 'i'],
|
|
['u', 'u'],
|
|
['ü', 'ü'],
|
|
['v', 'ü'],
|
|
['a', 'a'],
|
|
['ia', 'ia'],
|
|
['ua', 'ua'],
|
|
['o', 'o'],
|
|
['uo', 'o'],
|
|
['e', 'e'],
|
|
['ie', 'ieh'],
|
|
['üe', 'üeh'],
|
|
['ve', 'üeh'],
|
|
['ai', 'ei'],
|
|
['uei', 'ui'],
|
|
['ao', 'ao'],
|
|
['iao', 'iao'],
|
|
['ou', 'ou'],
|
|
['iou', 'iu'],
|
|
['an', 'an'],
|
|
['ian', 'ien'],
|
|
['uan', 'uan'],
|
|
['üan', 'üan'],
|
|
['van', 'üan'],
|
|
['en', 'en'],
|
|
['in', 'in'],
|
|
['uen', 'un'],
|
|
['ün', 'ün'],
|
|
['vn', 'ün'],
|
|
['ang', 'ang'],
|
|
['iang', 'iang'],
|
|
['uang', 'uang'],
|
|
['eng', 'eng'],
|
|
['ing', 'ing'],
|
|
['ueng', 'ueng'],
|
|
['ong', 'ung'],
|
|
['iong', 'iung'],
|
|
['ê', 'eh'],
|
|
['er', 'erh'],
|
|
]
|
|
_tone_table.sort(key=lambda x: len(x[0]), reverse=True)
|
|
_except_table = [
|
|
['zhi', 'chih'],
|
|
['chi', 'ch\'ih'],
|
|
['shi', 'shih'],
|
|
['ri', 'jih'],
|
|
['zi', 'tzu'],
|
|
['ci', 'tz\'u'],
|
|
['si', 'ssu'],
|
|
['guo', 'guo'],
|
|
['kuo', 'k\'uo'],
|
|
['huo', 'huo'],
|
|
['luo', 'luo'],
|
|
['jue', 'chüeh'],
|
|
['que', 'ch\'üeh'],
|
|
['xue', 'hsüeh'],
|
|
]
|
|
_except_table.sort(key=lambda x: len(x[0]), reverse=True)
|
|
|
|
|
|
def to_wade_glides(pinyin, **kwargs):
|
|
pinyin = replace_symbol_to_no_symbol(pinyin).replace('v', 'ü')
|
|
|
|
whole_converted = _convert_whole(pinyin, _except_table)
|
|
if whole_converted != pinyin:
|
|
return _fixed_result(whole_converted)
|
|
whole_converted = _convert_whole(pinyin, _convert_table)
|
|
if whole_converted != pinyin:
|
|
return _fixed_result(whole_converted)
|
|
|
|
initials = get_initials(pinyin, strict=False)
|
|
tones = pinyin[len(initials):]
|
|
|
|
initials = _convert_whole(initials, _initial_table)
|
|
tones = _convert_whole(tones, _tone_table)
|
|
|
|
return _fixed_result('{}{}'.format(initials, tones))
|
|
|
|
|
|
def _fixed_result(pinyin):
|
|
return pinyin.replace('ü', 'v')
|
|
|
|
|
|
def _convert_whole(chars, table):
|
|
for pair in table:
|
|
f, r = pair
|
|
if f == chars:
|
|
return r
|
|
|
|
return chars
|
|
|
|
|
|
register(Style.WADEGILES, func=to_wade_glides)
|