├── .gitattributes ├── .gitignore ├── .idea ├── .gitignore ├── cnfurikana.iml ├── inspectionProfiles │ ├── Project_Default.xml │ └── profiles_settings.xml ├── misc.xml ├── modules.xml └── vcs.xml ├── CNfurikana v1.2.0.spec ├── Qt5UI.py ├── README.md ├── TkGui.py ├── __pycache__ ├── Qt5UI.cpython-38.pyc ├── readFromFile.cpython-37.pyc ├── readFromFile.cpython-38.pyc └── realtimeConvert.cpython-38.pyc ├── a.txt ├── cnfurikana-1.3.x-qt.spec ├── cnfurikana-1.4.x-qt.spec ├── conv ├── __init__.py ├── __pycache__ │ ├── __init__.cpython-37.pyc │ ├── __init__.cpython-38.pyc │ ├── constants.cpython-37.pyc │ ├── constants.cpython-38.pyc │ ├── conventer.cpython-37.pyc │ └── conventer.cpython-38.pyc ├── allpronunce.txt ├── constants.py ├── conventer.py ├── kanalist.txt ├── kanalist0.txt ├── pre.zip ├── table.json ├── test.py └── tool.py ├── localization.py ├── preferences.py ├── readFromFile-QT.py ├── readFromFile.py ├── readFromFile.spec ├── realtimeConvert.py ├── resources ├── bg-sample-full.png ├── bg-sample-scroll.png └── bg-sample.png ├── settings ├── cinderella.qss ├── settings-cn.ini ├── settings-jp.ini └── settings.ini └── table.py /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /dist/ 3 | /output/ 4 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/cnfurikana.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /CNfurikana v1.2.0.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | 3 | block_cipher = None 4 | 5 | 6 | a = Analysis(['main.py'], 7 | pathex=['D:\\Github\\cnfurikana'], 8 | binaries=[], 9 | datas=[], 10 | hiddenimports=[], 11 | hookspath=[], 12 | runtime_hooks=[], 13 | excludes=['pyqt'], 14 | win_no_prefer_redirects=False, 15 | win_private_assemblies=False, 16 | cipher=block_cipher, 17 | noarchive=False) 18 | pyz = PYZ(a.pure, a.zipped_data, 19 | cipher=block_cipher) 20 | exe = EXE(pyz, 21 | a.scripts, 22 | [], 23 | exclude_binaries=True, 24 | name='CNfurikana v1.2.0', 25 | debug=False, 26 | bootloader_ignore_signals=False, 27 | strip=False, 28 | upx=True, 29 | console=False ) 30 | coll = COLLECT(exe, 31 | a.binaries, 32 | a.zipfiles, 33 | a.datas, 34 | strip=False, 35 | upx=True, 36 | upx_exclude=[], 37 | name='CNfurikana v1.2.0') 38 | -------------------------------------------------------------------------------- /Qt5UI.py: -------------------------------------------------------------------------------- 1 | """ 2 | CNfurikana 3 | v1.2.0 4 | 5 | https://github.com/Gleiphir 6 | All rights reserved 7 | 8 | distributed under MIT license 9 | 10 | It's a free software, do NOT pay for this. 11 | 此为自由软件,请不要为此付费。 12 | これはフリーソフトであるので無料です。 13 | 14 | """ 15 | 16 | about_text = """ \ 17 | v1.2.0\n 18 | https://github.com/Gleiphir\n 19 | All rights reserved\n 20 | \n 21 | distributed under MIT license\n 22 | \n 23 | It's a free software, do NOT pay for this.\n 24 | 此为自由软件,请不要为此付费。\n 25 | これはフリーソフトであるので無料です。\n 26 | \n 27 | 辛苦了,字幕组的各位\n 28 | 时代变了,这也许能帮上忙 29 | """ 30 | 31 | 32 | import time 33 | from conv.constants import config as conf 34 | 35 | from PyQt5.QtWidgets import QApplication, \ 36 | QWidget, QMainWindow, QMessageBox, \ 37 | QFileDialog, QPushButton, QLabel, \ 38 | QGridLayout, QLineEdit, QFrame 39 | from PyQt5.QtGui import QFont 40 | import conv.conventer 41 | import os 42 | import sys 43 | 44 | 45 | #breakpoint() 46 | font_size = conf['Intval','fontsize'] 47 | 48 | 49 | def HTMLify(text:str)-> str: 50 | return text.replace('\n','
') 51 | 52 | class mainWindow (QMainWindow): 53 | def __init__(self): 54 | super().__init__() 55 | 56 | self.setFont(QFont('microsoft Yahei',font_size)) 57 | self.setWindowTitle(conf['Text','windowtitle']) 58 | 59 | self.file_path = '' 60 | #self.maxLineWidthpx = QApplication.desktop().availableGeometry().width() // 2 61 | #self.maxLineWidth = self.maxLineWidthpx // (font_size * 4 //3) 62 | # 1px = 0.75point 63 | 64 | self.maxLineWidth = conf['Intval','LineWidth'] # in char 65 | 66 | self.LHintRT = QLabel(self) 67 | self.LHintRT.setText(conf['Text', 'hintRT']) 68 | 69 | self.LRTIn = QLineEdit(self) 70 | 71 | self.LRTOut = QLabel(self) 72 | #self.LRTOut.setMaximumWidth(self.maxLineWidth) 73 | #self.LRTOut.setWordWrap(True) 74 | 75 | self.LHintFile = QLabel(self) 76 | self.LHintFile.setText(conf['Text', 'hintFile']) 77 | 78 | self.LFileName = QLabel(self) 79 | 80 | self.markBtn = QPushButton(conf['Text','Bmark'], self) 81 | self.markBtn.clicked.connect(self.convertRT) 82 | 83 | self.browseBtn = QPushButton(conf['Text','Bbrowse'], self) 84 | self.browseBtn.clicked.connect(self.browse) 85 | 86 | self.genFileBtn = QPushButton(conf['Text','Bgenerate'], self) 87 | self.genFileBtn.clicked.connect(self.convertFile) 88 | 89 | 90 | self.aboutBtn = QPushButton(conf['Text','Babout'], self) 91 | self.aboutBtn.clicked.connect(self.about) 92 | 93 | 94 | self.QuitBtn = QPushButton(conf['Text','Bquit'], self) 95 | self.QuitBtn.clicked.connect(self.close) 96 | 97 | self.Cwidget = QFrame(self) 98 | 99 | self.initUI() 100 | 101 | def initUI(self): 102 | for key in self.__dict__: 103 | if isinstance(self.__dict__[key],QWidget): 104 | self.__dict__[key].setObjectName(key) 105 | #print(key) 106 | 107 | 108 | self.setCentralWidget(self.Cwidget) 109 | 110 | grid = QGridLayout() 111 | grid.setSpacing(5) 112 | self.Cwidget.setLayout(grid) 113 | 114 | 115 | 116 | grid.addWidget(self.LHintRT, 0, 0) 117 | grid.addWidget(self.LRTIn, 1, 0) 118 | grid.addWidget(self.markBtn, 1, 1) 119 | grid.addWidget(self.LRTOut, 2, 0) 120 | 121 | grid.addWidget(self.LHintFile, 4, 0) 122 | grid.addWidget(self.genFileBtn, 4, 1) 123 | grid.addWidget(self.LFileName, 5, 0) 124 | 125 | grid.addWidget(self.browseBtn, 5, 1) 126 | 127 | 128 | grid.addWidget(self.aboutBtn, 6, 1) 129 | grid.addWidget(self.QuitBtn, 7, 1) 130 | 131 | self.setLayout(grid) 132 | self.setGeometry(300, 300, 350, 300) 133 | #print(conf['customFile','stylish']) 134 | #self.setStyleSheet('QPushButton{color:red;}') 135 | self.setStyleSheet(conf['customFile','stylish']) 136 | 137 | 138 | def convertRT(self): 139 | cvr = conv.conventer.conventer(self.maxLineWidth) 140 | res = cvr.feed(self.LRTIn.text()) 141 | 142 | text = '' 143 | line3 = [''.join(l) for l in res] 144 | lines = [] 145 | pos = [x for x in range(0, len(line3[1]),self.maxLineWidth)];pos.append(len(line3[1])) 146 | #print("linewidth",self.maxLineWidth) 147 | for ind in range(len(pos)-1): 148 | for i in range(3): 149 | lines.append( "".join([ line3[i][ pos[ind]:pos[ind+1] ] ]) + "\n" ) 150 | text = "".join(lines) 151 | #print(text) 152 | self.LRTOut.setText(text) 153 | 154 | def convertFile(self): 155 | cvr = conv.conventer.conventer(self.maxLineWidth) 156 | if len(self.file_path) <= 0: 157 | QMessageBox.warning(self, "File required", conf['TextWarning','fileNotSpecified']) 158 | return 159 | if not os.path.exists(self.file_path): 160 | QMessageBox.warning(self, "File Not found", conf['TextWarning','fileNotFound'])#legacy(for safety) 161 | return 162 | name, suf = os.path.splitext(os.path.basename(self.file_path)) 163 | 164 | tstamp = time.strftime("%y%m%d-%H%M", time.localtime()) 165 | os.makedirs(os.path.join(os.getcwd(), "output/"),exist_ok=True) 166 | of_path = os.path.join(os.getcwd(), "output/", name + tstamp + suf) 167 | print(of_path) 168 | res = [] 169 | with open(self.file_path, encoding="utf-8") as ifp: 170 | for iline in ifp.readlines(): 171 | for oline in cvr.feed(iline[:-1]): 172 | res.append(''.join(oline)) 173 | res.append(os.linesep) 174 | 175 | with open(of_path, "w", encoding="utf-8") as ofp: 176 | ofp.writelines(res) 177 | QMessageBox.information(self, 'convert done', '写入完成\n{}'.format(of_path)) 178 | 179 | def about(self): 180 | QMessageBox.about(self, 'about', '

'+ HTMLify(about_text) + "

") 181 | 182 | def browse(self): 183 | 184 | self.file_path,filetype= QFileDialog.getOpenFileName(self,"Source File") 185 | #if filetype 186 | self.LFileName.setText(self.file_path) 187 | #SV_file_path.set("source: [ " + file_path + " ]") 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | if __name__ == '__main__': 197 | app = QApplication(sys.argv) 198 | mainW = mainWindow() 199 | mainW.show() 200 | sys.exit(app.exec_()) 201 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CNfurikana 2 | 3 | Auto mark Chinese pronunciation by marking furikana on characters. 4 | 5 | 轻量级的用假名标注中文音调与读音的软件。 6 | 7 | 基于pypinyin以及jieba等库。 8 | 9 | 便于阅读某些不熟练而又不得不快速准确读出的东西,例如直播间的superchat等。 10 | 11 | 同时也是日语母语者学习中文的助力。 12 | 13 | 第三方web版:https://github.com/ZhaoWeicheng98/cnfurikana-web 14 | 15 | # Release 16 | ## Latest 17 | ### 1.4.0-cinderella 18 | 允许利用QSS进行UI自定义化。提供了示例及教程,见https://www.bilibili.com/read/cv8395252 19 | 20 | https://github.com/Gleiphir/cnfurikana/releases/download/1.4.0/CNfurikana-1.4.0-cinderella.zip 21 | 22 | ## Legacy 23 | ### 1.3.1-qt 24 | 自行完成了界面的日语翻译。 25 | 如有相关建议请随时提出,如有志参与也欢迎联系。 26 | 27 | 请以conv/settings-jp.ini或conv/settings-cn.ini覆盖conv/settings.ini以切换至对应的语言。 28 | 29 | 整理了UI界面。 30 | 31 | 现在主程序改为使用PyQt5构建,为下一个小版本的界面美化打下基础。 32 | 33 | https://github.com/Gleiphir/cnfurikana/releases/download/v1.3.1/CNfurikana-1.3.1-qt.zip 34 | 35 | 36 | 37 | 38 | ### 1.2.0-Legacy 39 | 40 | https://github.com/Gleiphir/cnfurikana/releases/download/v1.2.0e/CNfurikana-Legacy.zip 41 | 42 | 使用制表符,在大多数情况下解决了可能存在的对齐问题。 43 | 44 | 增加了实时短句翻译功能。与原本的文档翻译整合在一起。 45 | 46 | 整理了UI界面。 47 | 48 | 现在主程序名为CNfurikana了。 49 | 50 | 51 | 52 | 53 | ### 1.1.0 54 | 基于Tkinter的UI现在可以选择原始文件而非输入路径了。 55 | 56 | 换用全角空格,大幅优化了对齐问题。 57 | 58 | 这是第一个实用化版本,之后的中版本号将在重大更新发表时更新。 59 | 60 | 61 | 62 | 63 | ### 1.0.0 64 | 基于Tkinter的轻量级UI,用于文本处理。 65 | 66 | 67 | # Dependency 68 | 69 | pypinyin>=0.39.1 70 | jieba>=0.42.1 71 | python>=3.8.0 72 | PyQt5 >= 5.15.1 73 | 74 | # License 75 | MIT License 76 | -------------------------------------------------------------------------------- /TkGui.py: -------------------------------------------------------------------------------- 1 | """ 2 | CNfurikana 3 | v1.2.0 4 | 5 | https://github.com/Gleiphir 6 | All rights reserved 7 | 8 | distributed under MIT license 9 | 10 | It's a free software, do NOT pay for this. 11 | 此为自由软件,请不要为此付费。 12 | これはフリーソフトであるので無料です。 13 | 14 | """ 15 | 16 | 17 | 18 | about_text = """ \ 19 | v1.2.0\n 20 | https://github.com/Gleiphir\n 21 | All rights reserved\n 22 | \n 23 | distributed under MIT license\n 24 | \n 25 | It's a free software, do NOT pay for this.\n 26 | 此为自由软件,请不要为此付费。\n 27 | これはフリーソフトであるので無料です。\n 28 | \n 29 | 辛苦了,字幕组的各位\n 30 | 时代变了,这也许能帮上忙 31 | """ 32 | 33 | import time 34 | from tkinter import * 35 | from tkinter import messagebox 36 | from tkinter import filedialog 37 | from tkinter import ttk 38 | 39 | 40 | import conv.conventer 41 | import os 42 | 43 | root = Tk() 44 | 45 | #ttk.Separator(root, orient=VERTICAL).grid(column=1, row=0, rowspan=5, sticky='ns') 46 | ttk.Separator(root).grid(column=3, rowspan=2, sticky="ew",padx = 2) 47 | 48 | root.title('中文假名注音程序') 49 | 50 | v2 = StringVar() 51 | v2.set('\n\n\n\n\n') 52 | 53 | file_path = '[ ]' 54 | SV_file_path = StringVar() 55 | 56 | LoshiraseRT = Label(root, text='将需要注音的内容输入下方,点击右侧按钮注音') 57 | LoshiraseRT.grid(row=0, column=0, padx=2, pady=5) 58 | 59 | LRTIn = Entry(width=40) 60 | LRTIn.grid(row=1, column=0, padx=2, pady=5) 61 | 62 | 63 | LRTOut = Label(root, textvariable=v2) 64 | LRTOut.grid(row=2, column=0, padx=2, pady=5) 65 | 66 | LoshiraseF = Label(root, text='将需要注音的内容逐行写入txt,在下面选择txt文件名\n将会在工作目录下output文件夹内生成文件名为原文件名+日期时间的注音txt文件\n请使用UTF-8编码\n') 67 | LoshiraseF.grid(row=4, column=0, padx=2, pady=5) 68 | 69 | 70 | LFileName = Label(root,textvariable=SV_file_path) 71 | LFileName.grid(row=5, column=0, padx=2, pady=5) 72 | 73 | 74 | 75 | 76 | 77 | def convertRT(): 78 | cvr = conv.conventer.conventer(10) 79 | res = cvr.feed(LRTIn.get()) 80 | text = '' 81 | for ln in res: 82 | text += ''.join(ln) +'\n' 83 | print(text) 84 | v2.set('\n' + text+ '\n') 85 | 86 | 87 | def convertFile(): 88 | cvr = conv.conventer.conventer(10) 89 | if not os.path.exists(file_path): 90 | messagebox.showwarning("File Not found","找不到文档") 91 | return 92 | name,suf = os.path.splitext(os.path.basename(file_path)) 93 | 94 | tstamp = time.strftime("%y%m%d-%H%M", time.localtime()) 95 | of_path = os.path.join(os.getcwd(),"output/",name + tstamp + suf) 96 | print(of_path) 97 | res = [] 98 | with open(file_path,encoding="utf-8") as ifp: 99 | for iline in ifp.readlines(): 100 | for oline in cvr.feed(iline[:-1]): 101 | res.append(''.join(oline)) 102 | res.append(os.linesep) 103 | 104 | with open(of_path, "w", encoding="utf-8") as ofp: 105 | ofp.writelines(res) 106 | messagebox.showinfo('写入完成', '写入完成\n{}'.format(of_path)) 107 | 108 | 109 | def about(): 110 | messagebox.showinfo('关于',about_text) 111 | 112 | def browse(): 113 | global file_path 114 | file_path = filedialog.askopenfilename() 115 | SV_file_path.set("source: [ "+ file_path + " ]") 116 | 117 | Button(root, text='注音', width=10, command=convertRT) \ 118 | \ 119 | .grid(row=1, column=1, sticky=E, padx=10, pady=5) 120 | 121 | 122 | 123 | Button(root, text='浏览', width=10, command=browse) \ 124 | \ 125 | .grid(row=5, column=1, sticky=E, padx=10, pady=5) 126 | 127 | Button(root, text='生成文档', width=10, command=convertFile) \ 128 | \ 129 | .grid(row=4, column=1, sticky=E, padx=10, pady=5) 130 | 131 | Button(root, text='关于', width=10, command=about) \ 132 | \ 133 | .grid(row=6, column=0, sticky=W, padx=10, pady=5) 134 | 135 | Button(root, text='点击退出', width=10, command=root.quit) \ 136 | \ 137 | .grid(row=6, column=1, sticky=E, padx=50, pady=5) 138 | 139 | # 退出按钮必须是双击打开.py文件才可以,而不是在IDLE下调试运行时 140 | 141 | 142 | mainloop() -------------------------------------------------------------------------------- /__pycache__/Qt5UI.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/__pycache__/Qt5UI.cpython-38.pyc -------------------------------------------------------------------------------- /__pycache__/readFromFile.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/__pycache__/readFromFile.cpython-37.pyc -------------------------------------------------------------------------------- /__pycache__/readFromFile.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/__pycache__/readFromFile.cpython-38.pyc -------------------------------------------------------------------------------- /__pycache__/realtimeConvert.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/__pycache__/realtimeConvert.cpython-38.pyc -------------------------------------------------------------------------------- /a.txt: -------------------------------------------------------------------------------- 1 | 我是一只猫,直到今天还没有名字。 2 | 我自己都不知道在哪里出生,只记得第一次我看到怪物——人的时候, 3 | 好像是在一个暗沉潮湿的地方,我还哭叫,并发出“喵喵”的声音。 4 | 我第一次看见的那个人是个“穷学生”,这我也是后来才听说的,人类中最凶狠的一种就是他们。 5 | 听说把我们抓去煮熟吃的,就是这群穷学生。 6 | -------------------------------------------------------------------------------- /cnfurikana-1.3.x-qt.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | 3 | block_cipher = None 4 | 5 | 6 | a = Analysis(['Qt5UI.py'], 7 | pathex=['D:\\Github\\cnfurikana'], 8 | binaries=[], 9 | datas=[( 'conv\\table.json', 'conv' ), 10 | ( 'conv\\settings.ini', 'conv' ), 11 | ( 'conv\\settings-cn.ini', 'conv' ), 12 | ( 'conv\\settings-jp.ini', 'conv' ),], 13 | hiddenimports=[], 14 | hookspath=[], 15 | runtime_hooks=[], 16 | excludes=[], 17 | win_no_prefer_redirects=False, 18 | win_private_assemblies=False, 19 | cipher=block_cipher, 20 | noarchive=False) 21 | pyz = PYZ(a.pure, a.zipped_data, 22 | cipher=block_cipher) 23 | exe = EXE(pyz, 24 | a.scripts, 25 | [], 26 | exclude_binaries=True, 27 | name='cnfurikana-1.3.0qt', 28 | debug=False, 29 | bootloader_ignore_signals=False, 30 | strip=False, 31 | upx=True, 32 | console=False ) 33 | coll = COLLECT(exe, 34 | a.binaries, 35 | a.zipfiles, 36 | a.datas, 37 | strip=False, 38 | upx=True, 39 | upx_exclude=[], 40 | name='CNfurikana-1.3.1-qt') 41 | -------------------------------------------------------------------------------- /cnfurikana-1.4.x-qt.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | 3 | block_cipher = None 4 | 5 | 6 | a = Analysis(['Qt5UI.py'], 7 | pathex=['D:\\Github\\cnfurikana'], 8 | binaries=[], 9 | datas=[( 'conv\\table.json', 'conv' ), 10 | ( 'resources', 'resources' ), 11 | ( 'settings', 'settings' ),], 12 | hiddenimports=[], 13 | hookspath=[], 14 | runtime_hooks=[], 15 | excludes=[], 16 | win_no_prefer_redirects=False, 17 | win_private_assemblies=False, 18 | cipher=block_cipher, 19 | noarchive=False) 20 | pyz = PYZ(a.pure, a.zipped_data, 21 | cipher=block_cipher) 22 | exe = EXE(pyz, 23 | a.scripts, 24 | [], 25 | exclude_binaries=True, 26 | name='cnfurikana-1.4.0qt', 27 | debug=False, 28 | bootloader_ignore_signals=False, 29 | strip=False, 30 | upx=True, 31 | console=False ) 32 | coll = COLLECT(exe, 33 | a.binaries, 34 | a.zipfiles, 35 | a.datas, 36 | strip=False, 37 | upx=True, 38 | upx_exclude=[], 39 | name='CNfurikana-1.4.0-qt') 40 | -------------------------------------------------------------------------------- /conv/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/conv/__init__.py -------------------------------------------------------------------------------- /conv/__pycache__/__init__.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/conv/__pycache__/__init__.cpython-37.pyc -------------------------------------------------------------------------------- /conv/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/conv/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /conv/__pycache__/constants.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/conv/__pycache__/constants.cpython-37.pyc -------------------------------------------------------------------------------- /conv/__pycache__/constants.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/conv/__pycache__/constants.cpython-38.pyc -------------------------------------------------------------------------------- /conv/__pycache__/conventer.cpython-37.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/conv/__pycache__/conventer.cpython-37.pyc -------------------------------------------------------------------------------- /conv/__pycache__/conventer.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/conv/__pycache__/conventer.cpython-38.pyc -------------------------------------------------------------------------------- /conv/allpronunce.txt: -------------------------------------------------------------------------------- 1 | 【A】 2 | a(啊) ai(哀) an(安) ang(肮) ao(熬) [5个] 3 | 【B】 4 | ba(八) bai(百) ban(班) bang(帮) bao(包) bei(悲) ben(奔) beng(崩) bi(比) bian(边) biao(标)bie(别) bin(宾) bing(兵) bo(波) bu(不) [16个] 5 | 【C】 6 | ca(擦) cai(才) can(参) cang(仓) cao(操) ce(册) cen(参) ceng(层) cha(查) chai(柴) chan(产)chang(长) chao(抄) che(车) chen(晨) cheng(成) chi(吃) chong(充) chou(抽) chu(出) chuan(川)chuai(揣) chuang(创) chui(吹) chun(春) chuo(绰) ci(词) cong(聪) cou(凑) cu(粗) cuan(窜) cui(崔)cun(村) cuo(错) [34个] 7 | 【D】 8 | da(大) dai(呆) dan(单) dang(当) dao(刀) de(德) dei(得) den(扽) deng(灯) di(地) dian(点) diao(刁) die(跌)ding(丁) diu(丢) dong(冬) dou(斗) du(读) duan(端) dui(对) dun(吨) duo(多) [22个] 9 | 【E】 10 | e(鹅) ei(欸) en(恩) eng(鞥) er(儿) [5个] 11 | 【F】 12 | fa(发) fan(反) fang(方) fei(飞) fen(分) feng(风) fo(佛) fou(否) fu(夫) [9个] 13 | 【G】 14 | ga(伽) gai(该) gan(干) gang(刚) gao(高) ge(哥) gei(给) gen(根) geng(耕) gong(工) gou(沟)gu(姑) gua(瓜) guai(怪) guan(关) guang(光) gui(规) gun(棍) guo(国) [19个] 15 | 【H】 16 | ha(哈) hai(还) han(含) hang(航) hao(好) he(喝) hei(黑) hen(很) heng(横) hong(轰) hou(猴)hu(乎) hua(花) huai(怀) huan(欢) huang(荒) hui(灰) hun(昏) huo(火) [19个] 17 | 【J】 18 | ji(机) jia(家) jian(坚) jiang(江) jiao(交) jie(阶) jin(斤) jing(京) jiong(炯) jiu(究) ju(居) juan(卷)jue(决) jun(军) [14个] 19 | 【K】 20 | ka(卡) kai(开) kan(刊) kang(康) kao(考) ke(科) ken(肯) keng(坑) kong(空) kou(口) ku(苦)kua(夸) kuai(快) kuan(宽) kuang(狂) kui(亏) kun(困) kuo(阔) [18个] 21 | 【L】 22 | la(拉) lai(来) lan(兰) lang(狼) lao(劳) le(乐) lei(雷) leng(冷) li(离) lia(俩) lian(连) liang(良)liao(辽) lie(列) lin(林) ling(灵) liu(刘) long(龙) lou(楼) lu(路) lv(驴) luan(乱) lve(略) lun(抡)luo(罗) [25个] 23 | 【M】 24 | ma(妈) mai(麦) man(满) mang(忙) mao(毛) me(么) mei(眉) men(门) meng(蒙) mi(迷) mian(棉)miao(苗) mie(灭) min(民) ming(明) miu(谬) mo(模) mou(某) mu(目) [19个] 25 | 【N】 26 | na(那) nai(奶) nan(南) nang(囊) nao(脑) ne(呢) nei(内) nen(嫩) neng(能) ni(你) nian(年)niang(娘) niao(鸟) nie(捏) nin(您) ning(宁) niu(牛) nong(农) nou(耨) nu(奴) nv(女)nuan(暖) nve(虐) nuo(挪) [24个] 27 | 【O】 28 | o(哦) ou(欧) [2个] 29 | 【P】 30 | pa(趴) pai(拍) pan(盘) pang(旁) pao(跑) pei(培) pen(盆) peng(朋) pi(批) pian(偏)piao(飘) pie(撇) pin(拼) ping(平) po(坡) pou(剖) pu(扑) [17个] 31 | 【Q】 32 | qi(七) qia(恰) qian(千) qiang(枪) qiao(悄) qie(切) qin(亲) qing(青) qiong(穷) qiu(秋)qu(区) quan(全) que(缺) qun(群) [14个] 33 | 【R】 34 | ran(然) rang(让) rao(饶) re(热) ren(人) reng(扔) ri(日) rong(荣) rou(肉) ru(如)ruan(软) rui(锐) run(润) ruo(弱) [14个] 35 | 【S】 36 | sa(洒) sai(赛) san(三) sang(桑) sao(扫) se(色) sen(森) seng(僧) sha(杀) shai(晒) shan(山)shang(伤) shao(烧) she(舌) shen(深) sheng(生) shi(师) shou(手) shu(书) shua(刷) shuai(摔)shuan(拴) shuang(爽) shui(水) shun(顺) shuo(说) si(思) song(松) sou(搜) su(苏) suan(算) sui(岁) sun(孙)suo(所) [34个] 37 | 【T】 38 | ta(它) tai(台) tan(贪) tang(糖) tao(桃) te(特) teng(疼) ti(题) tian(天) tiao(条) tie(铁)ting(听) tong(通) tou(头) tu(土) tuan(团) tui(推) tun(吞) tuo(脱) [19个] 39 | 【W】 40 | wa(挖) wai(外) wan(完) wang(王) wei(威) wen(温) weng(翁) wo(我) wu(无) [9个] 41 | 【X】 42 | xi(西) xia(下) xian(先) xiang(香) xiao(小) xie(写) xin(心) xing(星) xiong(胸) xiu(休) xu(须)xuan(宣) xue(学) xun(寻) [14个] 43 | 【Y】 44 | ya(压) yan(烟) yang(央) yao(要) ye(业) yi(一) yin(音) ying(英) yong(用) you(优) yu(雨)yuan(元) yue(月) yun(云) [14个] 45 | 【Z】 46 | za(杂) zai(载) zan(咱) zang(脏) zao(早) ze(责) zei(贼) zen(怎) zeng(增) zha(扎) zhai(摘)zhan(占) zhang(张) zhao(照) zhe(这) zhen(针) zheng(正) zhi(支) zhong(中) zhou(周) zhu(朱)zhua(抓)zhuai(拽) zhuan(专) zhuang(庄) zhui(追) zhun(准) zhuo(捉) zi(资) zong(宗) zou(走) zu(足)zuan(钻) zui(最) zun(尊) zuo(作) [36个] -------------------------------------------------------------------------------- /conv/constants.py: -------------------------------------------------------------------------------- 1 | #preferences 2 | 3 | from dataclasses import dataclass 4 | from enum import Enum 5 | import configparser 6 | import os 7 | def isCNchar(uncchr) -> bool : 8 | return '\u4e00' <= uncchr <= '\u9fa5' 9 | 10 | 11 | class display_style(Enum): 12 | katagana = 0 # default 13 | pin_yin = 1 # 14 | hiragana = 2 # 15 | eng_style = 3 # beta 16 | kanji = 4 # beta 17 | 18 | """ 19 | “君子引而不发,跃如也。” 20 | 21 | katagana カタカナ 22 | ジュン ズ イン ア ブ ファ ユエ ル イエ 23 | 24 | hiragana 平仮名 25 | じゅん ず いん あ ぶ ふぁ ゆえ る いえ 26 | 27 | pin_yin 28 | jūn zi yǐn ér bù fā , yuè rú yě 。 29 | 30 | plain_pin_yin 31 | eng_style 英語(beta) 32 | june zu in er boo fah yue roo yeah 33 | 34 | kanji style (beta) 35 | 順 ず いん あ ぶ ふぁ 故 る 家 36 | 37 | 这里的都是我自己看着写的,实际以https://dokochina.com/fayin.htm为准 38 | 暂不支持台湾地区的BOPOMOFO注音 39 | """ 40 | 41 | class ToneMark(Enum): 42 | std_style = 0 # no marks, as marks are inline with pinyin style 43 | num_style_follow = 1 # 1,2,3,4 44 | num_style_above = 2 # 1,2,3,4 45 | arrow_style = 3 46 | ascii_style = 4 47 | 48 | 49 | #5:轻声 50 | style_arrows = [ 51 | "\u3000\u3000",# placeholder 52 | "→\u3000", 53 | "↗\u3000", 54 | "↘↗", 55 | "↘\u3000", 56 | "·\u3000" 57 | ] 58 | 59 | style_ascii = [ 60 | "\u3000",# placeholder 61 | r"—", 62 | r"/", 63 | r"V", 64 | "\\", 65 | "·" 66 | ] 67 | 68 | symb_split = [ 69 | '', 70 | ' ', 71 | '~', 72 | '|', 73 | '-', 74 | '\t' 75 | ] 76 | 77 | @dataclass 78 | class custom_prf: 79 | display_option:int 80 | ToneMark:int 81 | spliter:int 82 | 83 | 84 | 85 | 86 | class _conf ( configparser.ConfigParser ): 87 | def __init__(self): 88 | super(_conf, self).__init__() 89 | self.valid = False 90 | 91 | 92 | def getVal(self, section, option, *, raw=False, vars=None, 93 | fallback=configparser._UNSET, **kwargs): 94 | 95 | if section == 'Intval': 96 | return super()._get_conv(section, option, int, raw=raw, vars=vars, 97 | fallback=fallback, **kwargs) 98 | elif section == 'Floatval': 99 | return super()._get_conv(section, option, float, raw=raw, vars=vars, 100 | fallback=fallback, **kwargs) 101 | elif section == 'customFile': 102 | try: 103 | with open( 104 | os.path.join( 105 | os.getcwd(), 106 | super()._get_conv(section, option,str, raw=raw, vars=vars, 107 | fallback=fallback, **kwargs)) 108 | , encoding='utf-8') as F: 109 | s = ''.join(F.readlines()) 110 | return s 111 | except: 112 | return '' 113 | else: 114 | return super().get(section, option) 115 | 116 | 117 | def __getitem__(self, item): 118 | #print(item) 119 | if not self.valid: 120 | return None 121 | try : 122 | assert len(item ) ==2 123 | except AssertionError as e: 124 | print(e) 125 | return self.getVal(section=item[0],option=item[1]) 126 | 127 | def getDictOf(self,section): 128 | return dict(self.items(section)) 129 | 130 | def load(self,fpath): 131 | try: 132 | with open(fpath, encoding='utf-8') as F: 133 | self.read_file(F) 134 | self.valid = True 135 | except FileNotFoundError as eF: 136 | self.valid = False 137 | 138 | 139 | 140 | class _coustomConfFile(): 141 | def __init__(self): 142 | super(_coustomConfFile, self).__init__() 143 | self.valid = False 144 | 145 | 146 | def getFullText(self, section, option, *, raw=False, vars=None, 147 | fallback=configparser._UNSET, **kwargs): 148 | 149 | if section == 'Intval': 150 | return super()._get_conv(section, option, int, raw=raw, vars=vars, 151 | fallback=fallback, **kwargs) 152 | elif section == 'Floatval': 153 | return super()._get_conv(section, option, float, raw=raw, vars=vars, 154 | fallback=fallback, **kwargs) 155 | elif section == 'customFile': 156 | try: 157 | print(os.path.join( 158 | os.getcwd(), 159 | super()._get_conv(section, option, raw=raw, vars=vars, 160 | fallback=fallback, **kwargs))) 161 | with open(os.path.join( 162 | os.getcwd(), 163 | super()._get_conv(section, option, raw=raw, vars=vars, 164 | fallback=fallback, **kwargs)),encoding='utf-8') as F: 165 | s = ''.join(F.readlines()) 166 | print(s) 167 | return s 168 | except FileNotFoundError as eF: 169 | print(os.path.join( 170 | os.getcwd(), 171 | super()._get_conv(section, option, raw=raw, vars=vars, 172 | fallback=fallback, **kwargs))) 173 | return '' 174 | 175 | else: 176 | return super().get(section, option) 177 | 178 | 179 | 180 | 181 | def __getitem__(self, item): 182 | #print(item) 183 | assert isinstance(item,str) 184 | if item == 'stylish': 185 | pass 186 | 187 | def load(self, fpath): 188 | try: 189 | with open(fpath, encoding='utf-8') as F: 190 | self.read_file(F) 191 | self.valid = True 192 | except FileNotFoundError as eF: 193 | self.valid = False 194 | 195 | config = _conf() 196 | #config.getSection() 197 | #coustomconf = _coustomConfFile() 198 | #coustomconf(config.getDictOf('customFile')) 199 | 200 | assert os.path.isfile(os.path.join(os.getcwd(), "settings/settings.ini")) 201 | config.load(os.path.join(os.getcwd(), "settings/settings.ini")) 202 | #print(config.sections()) 203 | 204 | 205 | # QML selectors: https://doc.qt.io/qt-5/stylesheet-syntax.html#selector-types -------------------------------------------------------------------------------- /conv/conventer.py: -------------------------------------------------------------------------------- 1 | """ 2 | data originate from https://dokochina.com/fayin.htm 3 | """ 4 | import json 5 | import jieba 6 | import conv.constants as C 7 | from pypinyin import lazy_pinyin, Style 8 | import os 9 | 10 | class conventer(): 11 | def __init__(self,linewidth): 12 | self.linewidth = linewidth 13 | self.toneSymbols = C.style_arrows 14 | self.splSymbol = C.symb_split[5] 15 | #TODO:更换注音符号 16 | with open(os.path.join(os.getcwd(),"conv/table.json"),encoding='utf-8') as f: 17 | self.trans2kana = json.load(f) 18 | #print(self.trans2kana) 19 | 20 | 21 | def toSign(self, pinyin:str): 22 | # style = Style.TONE3, strict =True 23 | #print(pinyin) 24 | if not isinstance(pinyin,str): 25 | return [ 0,self.toneSymbols[0], pinyin[0] ] # non-CN 26 | #print(pinyin[:-2]) 27 | return [ int(pinyin[-1]),self.toneSymbols[int(pinyin[-1])], self.trans2kana[pinyin[:-1]] ]#声调+注音 28 | 29 | 30 | def kanaify(self,s:str): 31 | pinyinLst = lazy_pinyin(s, style=Style.TONE3, neutral_tone_with_five=True,errors=lambda x : (x,)) 32 | CNchrLst = [x for x in s if C.isCNchar(x)]# generator 33 | #print(pinyinLst) 34 | res = [] 35 | for _ in pinyinLst: 36 | tmp = self.toSign(_) 37 | if tmp[0] == 0: 38 | tmp.append(tmp[1]) 39 | else: 40 | tmp.append(CNchrLst.pop(0)) 41 | #print(tmp) 42 | res.append( tmp.copy() )# 声调+ 注音 + 汉字 43 | return res 44 | 45 | def showInLine(self,kanalist:list): 46 | #避免将注音标记等在行尾截断。 47 | #TODO:↑ 48 | text = [[],[],[]] 49 | for char in kanalist: 50 | char[2] = ''.join(char[2]) 51 | if char[0] == 0: 52 | for n in (0, 1, 2): 53 | text[n].append(char[2]) 54 | continue 55 | del char[0] 56 | # 任何注音方式都不会比汉字本身更短 57 | maxlen = max([len(part) for part in char ]) 58 | 59 | for n in (0,1,2): 60 | 61 | #print(char, maxlen,(maxlen - len(char[n]))) 62 | char[n] = ''.join([char[n],'\u3000'* (maxlen - len(char[n])),self.splSymbol ]) 63 | 64 | text[n].append( char[n]) 65 | #TODO:添加对其他注音风格的支持 66 | #TODO:行间分割线 67 | #text.append(C.config['Text','btwLine']) 68 | return text 69 | 70 | def feed(self,text:str): 71 | return self.showInLine(self.kanaify(text)) 72 | 73 | def setlinewidth(self,width): 74 | self.linewidth = width 75 | 76 | if __name__ =='__main__': 77 | conv = conventer(10) 78 | T = "孟武伯问:“子路仁乎?”子曰:“不知也。”又问,子曰:“由也,千乘之国,可使治其赋也,不知其仁也。”“求也何如?”子曰:“求也,千室之邑、百乘之家,可使为之宰也,不知其仁也。”“赤也何如?”子曰:“赤也,束带立于朝,可使与宾客言也,不知其仁也。”" 79 | res = conv.feed(T) 80 | for i in range(3): 81 | print(res[i]) 82 | 83 | -------------------------------------------------------------------------------- /conv/kanalist.txt: -------------------------------------------------------------------------------- 1 |  ̄/ 2 | アー/アー 3 | 啊 4 |  ̄ 5 | アイ 6 | 哀 7 |  ̄ 8 | アン 9 | 安 10 |  ̄ 11 | アン 12 | 肮 13 |  ̄// 14 | アオ/アオ 15 | 熬 16 | \ 17 | グェ゛ァ 18 | 个 19 |  ̄ 20 | バー 21 | 八 22 | ∨ 23 | バイ 24 | 百 25 |  ̄ 26 | バン 27 | 班 28 |  ̄ 29 | バン 30 | 帮 31 |  ̄ 32 | バオ 33 | 包 34 |  ̄ 35 | ベイ 36 | 悲 37 |  ̄/\ 38 | ベン/ベン 39 | 奔 40 |  ̄ 41 | ボン 42 | 崩 43 | ∨ 44 | ビー 45 | 比 46 |  ̄ 47 | ビィェン 48 | 边 49 |  ̄ 50 | ビィャォ 51 | 标 52 | //\ 53 | ビィェ/ビィェ 54 | 别 55 |  ̄ 56 | ビン 57 | 宾 58 |  ̄ 59 | ビン 60 | 兵 61 |  ̄ 62 | ブォ 63 | 波 64 | //\ 65 | ブー/ブー 66 | 不 67 | \ 68 | グェ゛ァ 69 | 个 70 |  ̄ 71 | ツァ 72 | 擦 73 | / 74 | ツァィ 75 | 才 76 |  ̄/ ̄/ ̄ 77 | ツァン/ツェン/シェン 78 | 参 79 |  ̄ 80 | ツァン 81 | 仓 82 |  ̄ 83 | ツァォ 84 | 操 85 | \ 86 | ツェ゛ァ 87 | 册 88 |  ̄/ ̄/ ̄ 89 | ツァン/ツェン/シェン 90 | 参 91 | / 92 | ツォン 93 | 层 94 | / 95 | チャ 96 | 查 97 | / 98 | チャイ 99 | 柴 100 | ∨ 101 | チャン 102 | 产 103 | //∨ 104 | チャン/ヂャン 105 | 长 106 |  ̄ 107 | チャオ 108 | 抄 109 |  ̄ 110 | チェ゛ァ 111 | 车 112 | / 113 | チェン 114 | 晨 115 | / 116 | チォン 117 | 成 118 |  ̄ 119 | チー 120 | 吃 121 |  ̄ 122 | チョン 123 | 充 124 |  ̄ 125 | チョウ 126 | 抽 127 |  ̄ 128 | チュ 129 | 出 130 |  ̄ 131 | チュァン 132 | 川 133 |  ̄/∨/\ 134 | チュァイ/チュァイ/チュァイ 135 | 揣 136 | \/ ̄ 137 | チュゥァン/チュゥァン 138 | 创 139 |  ̄ 140 | チュイ(チュェイ) 141 | 吹 142 |  ̄ 143 | チュン 144 | 春 145 |  ̄/\ 146 | チャオ/チュォ 147 | 绰 148 | / 149 | ツー 150 | 词 151 |  ̄ 152 | ツォン 153 | 聪 154 | \ 155 | コゥ  156 | 凑 157 |  ̄ 158 | ツゥ 159 | 粗 160 | \ 161 | ツァン 162 | 窜 163 |  ̄ 164 | ツイ(ツェイ) 165 | 崔 166 |  ̄ 167 | ツン 168 | 村 169 | \ 170 | ツゥォ 171 | 错 172 | \ 173 | グェ゛ァ 174 | 个 175 | \ 176 | ダー 177 | 大 178 |  ̄ 179 | ダイ 180 | 呆 181 |  ̄ 182 | ダン 183 | 单 184 |  ̄/\ 185 | ダン/ダン 186 | 当 187 |  ̄ 188 | ダオ 189 | 刀 190 | / 191 | デェ゛ァ 192 | 德 193 | ///∨ 194 | デェ゛ァ/デェ゛ァ/デイ 195 | 得 196 | - 197 | 扽 198 |  ̄ 199 | ドン 200 | 灯 201 | \ 202 | ディ 203 | 地 204 | ∨ 205 | ディェン 206 | 点 207 |  ̄ 208 | ディァォ 209 | 刁 210 |  ̄ 211 | ディェ 212 | 跌 213 |  ̄ 214 | ディン 215 | 丁 216 |  ̄ 217 | ディゥ 218 | 丢 219 |  ̄ 220 | ドン 221 | 冬 222 | ∨/\ 223 | ドウ/ドウ 224 | 斗 225 | / 226 | ドゥ 227 | 读 228 |  ̄ 229 | ドゥァン 230 | 端 231 | \ 232 | ドゥイ(ドゥェイ) 233 | 对 234 |  ̄ 235 | ドゥン 236 | 吨 237 |  ̄ 238 | ドゥォ 239 | 多 240 | \ 241 | グェ゛ァ 242 | 个 243 | / 244 | ェ゛ァ 245 | 鹅 246 | ∨ 247 | ェ゛ァ 248 | 欸 249 |  ̄ 250 | エン 251 | 恩 252 | - 253 | 鞥 254 | / 255 | ェ゛ァー 256 | 儿 257 | \ 258 | グェ゛ァ 259 | 个 260 |  ̄/\ 261 | ファ/ファ 262 | 发 263 | ∨ 264 | ファン 265 | 反 266 |  ̄ 267 | ファン 268 | 方 269 |  ̄ 270 | フェイ 271 | 飞 272 |  ̄/\/ 273 | フェン/フェン/フェン 274 | 分 275 |  ̄ 276 | フォン 277 | 风 278 | / 279 | フォ 280 | 佛 281 | ∨ 282 | フォウ 283 | 否 284 |  ̄ 285 | フー 286 | 夫 287 | \ 288 | グェ゛ァ 289 | 个 290 |  ̄/ ̄// 291 | ガー/ジャ/チィェ 292 | 伽 293 |  ̄ 294 | ガイ 295 | 该 296 |  ̄/\ 297 | ガン/ガン 298 | 干 299 |  ̄ 300 | ガン 301 | 刚 302 |  ̄ 303 | ガオ 304 | 高 305 |  ̄ 306 | グェ゛ァ 307 | 哥 308 | ∨ 309 | ゲイ 310 | 给 311 |  ̄ 312 | ゲン 313 | 根 314 |  ̄ 315 | ゴン 316 | 耕 317 |  ̄ 318 | ゴン 319 | 工 320 |  ̄ 321 | ゴウ 322 | 沟 323 |  ̄ 324 | グー 325 | 姑 326 |  ̄ 327 | グァ 328 | 瓜 329 | \ 330 | グゥァイ 331 | 怪 332 |  ̄ 333 | グァン 334 | 关 335 |  ̄ 336 | グゥァン 337 | 光 338 |  ̄ 339 | グゥイ(グゥェイ) 340 | 规 341 | \ 342 | ガン 343 | 棍 344 | / 345 | グゥォ 346 | 国 347 | \ 348 | グェ゛ァ 349 | 个 350 | ∨/ ̄ 351 | ハー/ハー 352 | 哈 353 | /// 354 | ハイ/ファン 355 | 还 356 | / 357 | ハン 358 | 含 359 | / 360 | ハン 361 | 航 362 | ∨/\ 363 | ハオ/ハオ 364 | 好 365 |  ̄ 366 | フェ゛ァ 367 | 喝 368 |  ̄ 369 | ヘイ 370 | 黑 371 | ∨ 372 | ヘン 373 | 很 374 | //\ 375 | ホン/ホン 376 | 横 377 |  ̄ 378 | ホン 379 | 轰 380 | / 381 | ホウ 382 | 猴 383 |  ̄ 384 | フー 385 | 乎 386 |  ̄ 387 | ファ 388 | 花 389 | / 390 | フゥァイ 391 | 怀 392 |  ̄ 393 | ファン 394 | 欢 395 |  ̄ 396 | フゥァン 397 | 荒 398 |  ̄ 399 | フゥイ(フゥェイ) 400 | 灰 401 |  ̄ 402 | フン 403 | 昏 404 | ∨ 405 | フォ 406 | 火 407 | \ 408 | グェ゛ァ 409 | 个 410 |  ̄ 411 | ジー 412 | 机 413 |  ̄ 414 | ジャ 415 | 家 416 |  ̄ 417 | ジィェン 418 | 坚 419 |  ̄ 420 | ジィァン 421 | 江 422 |  ̄ 423 | ジャオ 424 | 交 425 |  ̄ 426 | ジェ 427 | 阶 428 |  ̄ 429 | ジン 430 | 斤 431 |  ̄ 432 | ジン 433 | 京 434 | ∨ 435 | ジィォン 436 | 炯 437 |  ̄ 438 | ジゥ 439 | 究 440 |  ̄ 441 | ジュ 442 | 居 443 | ∨/\ 444 | ジュェン/ジュェン 445 | 卷 446 | / 447 | ジュェ 448 | 决 449 |  ̄ 450 | ジュン 451 | 军 452 | \ 453 | グェ゛ァ 454 | 个 455 | ∨ 456 | カー 457 | 卡 458 |  ̄ 459 | カイ 460 | 开 461 |  ̄ 462 | カン 463 | 刊 464 |  ̄ 465 | カン 466 | 康 467 | ∨ 468 | カオ 469 | 考 470 |  ̄ 471 | クェ゛ァ 472 | 科 473 | ∨ 474 | ケン 475 | 肯 476 |  ̄ 477 | コン 478 | 坑 479 |  ̄/\ 480 | コン/コン 481 | 空 482 | ∨ 483 | コウ 484 | 口 485 | ∨ 486 | クー 487 | 苦 488 |  ̄ 489 | クァ 490 | 夸 491 | \ 492 | クァィ 493 | 快 494 |  ̄ 495 | クァン 496 | 宽 497 | / 498 | クゥァン 499 | 狂 500 |  ̄ 501 | クゥイ(クゥェイ) 502 | 亏 503 | \ 504 | クン 505 | 困 506 | \ 507 | クォ 508 | 阔 509 | \ 510 | グェ゛ァ 511 | 个 512 |  ̄ 513 | ラー 514 | 拉 515 | / 516 | ライ 517 | 来 518 | / 519 | ラン 520 | 兰 521 | / 522 | ラン 523 | 狼 524 | / 525 | ラオ 526 | 劳 527 | \/\ 528 | ラ/ユェ 529 | 乐 530 | / 531 | レイ 532 | 雷 533 | ∨ 534 | ラン 535 | 冷 536 | / 537 | リー 538 | 离 539 | ∨/∨ 540 | リィァン/リィァ 541 | 俩 542 | / 543 | リィェン 544 | 连 545 | / 546 | リィァン 547 | 良 548 | / 549 | リィァォ 550 | 辽 551 | \ 552 | リィェ 553 | 列 554 | / 555 | リン 556 | 林 557 | / 558 | リン 559 | 灵 560 | / 561 | リィゥ 562 | 刘 563 | / 564 | ロン 565 | 龙 566 | / 567 | ロウ 568 | 楼 569 | \ 570 | ルー 571 | 路 572 | / 573 | リュ 574 | 驴 575 | \ 576 | ルゥァン 577 | 乱 578 | \ 579 | リュェ 580 | 略 581 |  ̄// 582 | ルゥン/ルゥン 583 | 抡 584 | / 585 | ルゥォ 586 | 罗 587 | \ 588 | グェ゛ァ 589 | 个 590 |  ̄ 591 | マー 592 | 妈 593 | \ 594 | マイ 595 | 麦 596 | ∨ 597 | マン 598 | 满 599 | / 600 | マン 601 | 忙 602 | / 603 | マオ 604 | 毛 605 | ムェ゛ァ 606 | 么 607 | / 608 | メイ 609 | 眉 610 | / 611 | メン 612 | 门 613 |  ̄///∨ 614 | モン/モン/モン 615 | 蒙 616 | / 617 | ミィ 618 | 迷 619 | / 620 | ミィェン 621 | 棉 622 | / 623 | ミィァォ 624 | 苗 625 | \ 626 | ミィェ 627 | 灭 628 | / 629 | ミン 630 | 民 631 | / 632 | ミン 633 | 明 634 | \ 635 | ミィゥ 636 | 谬 637 | /// 638 | ムォ/ムー 639 | 模 640 | ∨ 641 | モウ 642 | 某 643 | \ 644 | ムー 645 | 目 646 | \ 647 | グェ゛ァ 648 | 个 649 | \ 650 | ナー 651 | 那 652 | ∨ 653 | ナイ 654 | 奶 655 | / 656 | ナン 657 | 南 658 | / 659 | ナン 660 | 囊 661 | ∨ 662 | ナオ 663 | 脑 664 | ヌェ゛ァ 665 | 呢 666 | \ 667 | ネイ 668 | 内 669 | \ 670 | ネン 671 | 嫩 672 | / 673 | ノン 674 | 能 675 | ∨ 676 | ニー 677 | 你 678 | / 679 | ニィェン 680 | 年 681 | / 682 | ニィァン 683 | 娘 684 | ∨ 685 | ニィァォ 686 | 鸟 687 |  ̄ 688 | ニィェ 689 | 捏 690 | / 691 | ニン 692 | 您 693 | //\ 694 | ニン/ニン 695 | 宁 696 | / 697 | ニィゥ 698 | 牛 699 | / 700 | ノン 701 | 农 702 | \ 703 | ノウ 704 | 耨 705 | / 706 | ヌー 707 | 奴 708 | ∨ 709 | ニュ 710 | 女 711 | ∨ 712 | ヌァン 713 | 暖 714 | \/\ 715 | ヌーェ゛ァ/ニュェ 716 | 虐 717 | / 718 | ヌオ 719 | 挪 720 | \ 721 | グェ゛ァ 722 | 个 723 | ////\ 724 | ェ゛ァ/ゥオ/ゥオ 725 | 哦 726 |  ̄ 727 | オウ 728 | 欧 729 | \ 730 | グェ゛ァ 731 | 个 732 |  ̄ 733 | パー 734 | 趴 735 |  ̄ 736 | パイ 737 | 拍 738 | / 739 | パン 740 | 盘 741 | / 742 | パン 743 | 旁 744 | ∨ 745 | パオ 746 | 跑 747 | / 748 | ペイ 749 | 培 750 | / 751 | ペン 752 | 盆 753 | / 754 | ポン 755 | 朋 756 |  ̄ 757 | ピー 758 | 批 759 |  ̄ 760 | ピィェン 761 | 偏 762 |  ̄ 763 | ピィァオ 764 | 飘 765 |  ̄/∨ 766 | ピェ/ピェ 767 | 撇 768 |  ̄ 769 | ピン 770 | 拼 771 | / 772 | ピン 773 | 平 774 |  ̄ 775 | ポォ 776 | 坡 777 |  ̄ 778 | ポウ 779 | 剖 780 |  ̄ 781 | プー 782 | 扑 783 | \ 784 | グェ゛ァ 785 | 个 786 |  ̄ 787 | チー 788 | 七 789 | \ 790 | チィァ 791 | 恰 792 |  ̄ 793 | チィェン 794 | 千 795 |  ̄ 796 | チィァン 797 | 枪 798 |  ̄/∨ 799 | チィァォ/チィァォ 800 | 悄 801 |  ̄/\ 802 | チィェ/チィェ 803 | 切 804 |  ̄ 805 | チン 806 | 亲 807 |  ̄ 808 | チン 809 | 青 810 | / 811 | チォン 812 | 穷 813 |  ̄ 814 | チィゥ 815 | 秋 816 |  ̄ 817 | チュ 818 | 区 819 | / 820 | チュェン 821 | 全 822 |  ̄ 823 | チュェ 824 | 缺 825 | / 826 | チュン 827 | 群 828 | \ 829 | グェ゛ァ 830 | 个 831 | / 832 | ラン 833 | 然 834 | \ 835 | ラン 836 | 让 837 | / 838 | ラオ 839 | 饶 840 | \ 841 | ルェ゛ァ 842 | 热 843 | / 844 | レン 845 | 人 846 |  ̄ 847 | ロン 848 | 扔 849 | \ 850 | リ゛ー 851 | 日 852 | / 853 | ロン 854 | 荣 855 | \ 856 | ロウ 857 | 肉 858 | / 859 | ルー 860 | 如 861 | ∨ 862 | ルァン 863 | 软 864 | \ 865 | ルイ(ルェイ) 866 | 锐 867 | \ 868 | ルン 869 | 润 870 | \ 871 | ルォ 872 | 弱 873 | \ 874 | グェ゛ァ 875 | 个 876 | ∨ 877 | サー 878 | 洒 879 | \ 880 | サイ 881 | 赛 882 |  ̄ 883 | サン 884 | 三 885 |  ̄ 886 | サン 887 | 桑 888 | ∨/\ 889 | サオ/サオ 890 | 扫 891 | \ 892 | スェ゛ァ 893 | 色 894 |  ̄ 895 | セン 896 | 森 897 |  ̄ 898 | ソン 899 | 僧 900 |  ̄ 901 | シャ 902 | 杀 903 | \ 904 | シャイ 905 | 晒 906 |  ̄ 907 | シャン 908 | 山 909 |  ̄ 910 | シャン 911 | 伤 912 |  ̄ 913 | シャオ 914 | 烧 915 | / 916 | シェ゛ァ 917 | 舌 918 |  ̄ 919 | シェン 920 | 深 921 |  ̄ 922 | シォン 923 | 生 924 |  ̄ 925 | シー 926 | 师 927 | ∨ 928 | ショウ 929 | 手 930 |  ̄ 931 | シュ 932 | 书 933 |  ̄ 934 | シュァ 935 | 刷 936 |  ̄ 937 | シュァイ 938 | 摔 939 |  ̄ 940 | シュァン 941 | 拴 942 | ∨ 943 | シュゥァン 944 | 爽 945 | ∨ 946 | シュイ(シュェイ) 947 | 水 948 | \ 949 | シュン 950 | 顺 951 |  ̄ 952 | シュォ 953 | 说 954 |  ̄ 955 | スー 956 | 思 957 |  ̄ 958 | ソン 959 | 松 960 |  ̄ 961 | ソウ 962 | 搜 963 |  ̄ 964 | スー 965 | 苏 966 | \ 967 | スゥァン 968 | 算 969 | \ 970 | スイ(スェイ) 971 | 岁 972 |  ̄ 973 | スン 974 | 孙 975 | ∨ 976 | スォ 977 | 所 978 | \ 979 | グェ゛ァ 980 | 个 981 |  ̄ 982 | ター 983 | 它 984 | / 985 | タイ 986 | 台 987 |  ̄ 988 | タン 989 | 贪 990 | / 991 | タン 992 | 糖 993 | / 994 | タオ 995 | 桃 996 | \ 997 | テェ゛ァ 998 | 特 999 | / 1000 | トン 1001 | 疼 1002 | / 1003 | ティ 1004 | 题 1005 |  ̄ 1006 | ティェン 1007 | 天 1008 | / 1009 | ティァォ 1010 | 条 1011 | ∨ 1012 | ティェ 1013 | 铁 1014 |  ̄ 1015 | ティン 1016 | 听 1017 |  ̄ 1018 | トン 1019 | 通 1020 | / 1021 | トウ 1022 | 头 1023 | ∨ 1024 | トゥ 1025 | 土 1026 | / 1027 | トゥァン 1028 | 团 1029 |  ̄ 1030 | トゥイ(トゥェイ) 1031 | 推 1032 |  ̄ 1033 | トゥン 1034 | 吞 1035 |  ̄ 1036 | トゥォ 1037 | 脱 1038 | \ 1039 | グェ゛ァ 1040 | 个 1041 |  ̄ 1042 | ウァ 1043 | 挖 1044 | \ 1045 | ワィ 1046 | 外 1047 | / 1048 | ワン 1049 | 完 1050 | / 1051 | ワン 1052 | 王 1053 |  ̄ 1054 | ウェイ 1055 | 威 1056 |  ̄ 1057 | ウェン 1058 | 温 1059 |  ̄ 1060 | ウォン 1061 | 翁 1062 | ∨ 1063 | ウォ 1064 | 我 1065 | / 1066 | ウー 1067 | 无 1068 | \ 1069 | グェ゛ァ 1070 | 个 1071 |  ̄ 1072 | シー 1073 | 西 1074 | \ 1075 | シァ 1076 | 下 1077 |  ̄ 1078 | シィェン 1079 | 先 1080 |  ̄ 1081 | シィァン 1082 | 香 1083 | ∨ 1084 | シァォ 1085 | 小 1086 | ∨ 1087 | シェ 1088 | 写 1089 |  ̄ 1090 | シン 1091 | 心 1092 |  ̄ 1093 | シン 1094 | 星 1095 |  ̄ 1096 | シィォン 1097 | 胸 1098 |  ̄ 1099 | シゥ 1100 | 休 1101 |  ̄ 1102 | シュ 1103 | 须 1104 |  ̄ 1105 | シュェン 1106 | 宣 1107 | / 1108 | シュェ 1109 | 学 1110 | / 1111 | シュン 1112 | 寻 1113 | \ 1114 | グェ゛ァ 1115 | 个 1116 |  ̄ 1117 | ヤー 1118 | 压 1119 |  ̄ 1120 | イェン 1121 | 烟 1122 |  ̄ 1123 | ヤン 1124 | 央 1125 |  ̄/\ 1126 | イャォ/イャォ 1127 | 要 1128 | \ 1129 | イェ 1130 | 业 1131 |  ̄ 1132 | イー 1133 | 一 1134 |  ̄ 1135 | イン 1136 | 音 1137 |  ̄ 1138 | イン 1139 | 英 1140 | \ 1141 | ヨン 1142 | 用 1143 |  ̄ 1144 | ヨウ 1145 | 优 1146 | ∨ 1147 | ユー 1148 | 雨 1149 | / 1150 | ユェン 1151 | 元 1152 | \ 1153 | ユェ 1154 | 月 1155 | / 1156 | ユン 1157 | 云 1158 | \ 1159 | グェ゛ァ 1160 | 个 1161 | / 1162 | ザー 1163 | 杂 1164 | \/∨ 1165 | ザイ/ザイ 1166 | 载 1167 | / 1168 | ザン 1169 | 咱 1170 |  ̄ 1171 | ザン 1172 | 脏 1173 | ∨ 1174 | ザオ 1175 | 早 1176 | / 1177 | ゼェ゛ァ 1178 | 责 1179 | / 1180 | ゼイ 1181 | 贼 1182 | ∨ 1183 | ゼン 1184 | 怎 1185 |  ̄ 1186 | ゾン 1187 | 增 1188 |  ̄/ ̄ 1189 | ヂャ/ザー 1190 | 扎 1191 |  ̄ 1192 | ヂャイ 1193 | 摘 1194 | \ 1195 | ヂャン 1196 | 占 1197 |  ̄ 1198 | ヂャン 1199 | 张 1200 | \ 1201 | ヂャオ 1202 | 照 1203 | \ 1204 | ヂェ゛ァ 1205 | 这 1206 |  ̄ 1207 | ヂェン 1208 | 针 1209 | \ 1210 | ヂォン 1211 | 正 1212 |  ̄ 1213 | ヂー 1214 | 支 1215 |  ̄/\ 1216 | ヂョン/ヂョン 1217 | 中 1218 |  ̄ 1219 | ヂョウ 1220 | 周 1221 |  ̄ 1222 | ヂュ 1223 | 朱 1224 |  ̄ 1225 | ヂュア 1226 | 抓 1227 | \/ ̄/\ 1228 | イェ/ヂュァイ/ヂュァイ 1229 | 拽 1230 |  ̄ 1231 | ヂュァン 1232 | 专 1233 |  ̄ 1234 | ヂュゥァン 1235 | 庄 1236 |  ̄ 1237 | ヂュイ(ヂュェイ) 1238 | 追 1239 | ∨ 1240 | ヂュン 1241 | 准 1242 |  ̄ 1243 | ヂュオ 1244 | 捉 1245 |  ̄ 1246 | ズー 1247 | 资 1248 |  ̄ 1249 | ゾン 1250 | 宗 1251 | ∨ 1252 | ゾウ 1253 | 走 1254 | / 1255 | ズー 1256 | 足 1257 |  ̄/\ 1258 | ズァン/ズァン 1259 | 钻 1260 | \ 1261 | ズイ(ズェイ) 1262 | 最 1263 |  ̄ 1264 | ズン 1265 | 尊 1266 |  ̄/\ 1267 | 1268 | ズゥォ/ズゥォ 1269 | 1270 | 作 1271 | 1272 | \ 1273 | 1274 | グェ゛ァ 1275 | 1276 | 个 1277 | -------------------------------------------------------------------------------- /conv/kanalist0.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 |  ̄/ 4 | 5 | アー/アー 6 | 7 | 啊 8 | 9 |  ̄ 10 | 11 | アイ 12 | 13 | 哀 14 | 15 |  ̄ 16 | 17 | アン 18 | 19 | 安 20 | 21 |  ̄ 22 | 23 | アン 24 | 25 | 肮 26 | 27 |  ̄// 28 | 29 | アオ/アオ 30 | 31 | 熬 32 | 33 | \ 34 | 35 | グェ゛ァ 36 | 37 | 个 38 | 39 |  ̄ 40 | 41 | バー 42 | 43 | 八 44 | 45 | ∨ 46 | 47 | バイ 48 | 49 | 百 50 | 51 |  ̄ 52 | 53 | バン 54 | 55 | 班 56 | 57 |  ̄ 58 | 59 | バン 60 | 61 | 帮 62 | 63 |  ̄ 64 | 65 | バオ 66 | 67 | 包 68 | 69 |  ̄ 70 | 71 | ベイ 72 | 73 | 悲 74 | 75 |  ̄/\ 76 | 77 | ベン/ベン 78 | 79 | 奔 80 | 81 |  ̄ 82 | 83 | ボン 84 | 85 | 崩 86 | 87 | ∨ 88 | 89 | ビー 90 | 91 | 比 92 | 93 |  ̄ 94 | 95 | ビィェン 96 | 97 | 边 98 | 99 |  ̄ 100 | 101 | ビィャォ 102 | 103 | 标 104 | 105 | //\ 106 | 107 | ビィェ/ビィェ 108 | 109 | 别 110 | 111 |  ̄ 112 | 113 | ビン 114 | 115 | 宾 116 | 117 |  ̄ 118 | 119 | ビン 120 | 121 | 兵 122 | 123 |  ̄ 124 | 125 | ブォ 126 | 127 | 波 128 | 129 | //\ 130 | 131 | ブー/ブー 132 | 133 | 不 134 | 135 | \ 136 | 137 | グェ゛ァ 138 | 139 | 个 140 | 141 |  ̄ 142 | 143 | ツァ 144 | 145 | 擦 146 | 147 | / 148 | 149 | ツァィ 150 | 151 | 才 152 | 153 |  ̄/ ̄/ ̄ 154 | 155 | ツァン/ツェン/シェン 156 | 157 | 参 158 | 159 |  ̄ 160 | 161 | ツァン 162 | 163 | 仓 164 | 165 |  ̄ 166 | 167 | ツァォ 168 | 169 | 操 170 | 171 | \ 172 | 173 | ツェ゛ァ 174 | 175 | 册 176 | 177 |  ̄/ ̄/ ̄ 178 | 179 | ツァン/ツェン/シェン 180 | 181 | 参 182 | 183 | / 184 | 185 | ツォン 186 | 187 | 层 188 | 189 | / 190 | 191 | チャ 192 | 193 | 查 194 | 195 | / 196 | 197 | チャイ 198 | 199 | 柴 200 | 201 | ∨ 202 | 203 | チャン 204 | 205 | 产 206 | 207 | //∨ 208 | 209 | チャン/ヂャン 210 | 211 | 长 212 | 213 |  ̄ 214 | 215 | チャオ 216 | 217 | 抄 218 | 219 |  ̄ 220 | 221 | チェ゛ァ 222 | 223 | 车 224 | 225 | / 226 | 227 | チェン 228 | 229 | 晨 230 | 231 | / 232 | 233 | チォン 234 | 235 | 成 236 | 237 |  ̄ 238 | 239 | チー 240 | 241 | 吃 242 | 243 |  ̄ 244 | 245 | チョン 246 | 247 | 充 248 | 249 |  ̄ 250 | 251 | チョウ 252 | 253 | 抽 254 | 255 |  ̄ 256 | 257 | チュ 258 | 259 | 出 260 | 261 |  ̄ 262 | 263 | チュァン 264 | 265 | 川 266 | 267 |  ̄/∨/\ 268 | 269 | チュァイ/チュァイ/チュァイ 270 | 271 | 揣 272 | 273 | \/ ̄ 274 | 275 | チュゥァン/チュゥァン 276 | 277 | 创 278 | 279 |  ̄ 280 | 281 | チュイ(チュェイ) 282 | 283 | 吹 284 | 285 |  ̄ 286 | 287 | チュン 288 | 289 | 春 290 | 291 |  ̄/\ 292 | 293 | チャオ/チュォ 294 | 295 | 绰 296 | 297 | / 298 | 299 | ツー 300 | 301 | 词 302 | 303 |  ̄ 304 | 305 | ツォン 306 | 307 | 聪 308 | 309 | \ 310 | 311 | コゥ  312 | 313 | 凑 314 | 315 |  ̄ 316 | 317 | ツゥ 318 | 319 | 粗 320 | 321 | \ 322 | 323 | ツァン 324 | 325 | 窜 326 | 327 |  ̄ 328 | 329 | ツイ(ツェイ) 330 | 331 | 崔 332 | 333 |  ̄ 334 | 335 | ツン 336 | 337 | 村 338 | 339 | \ 340 | 341 | ツゥォ 342 | 343 | 错 344 | 345 | \ 346 | 347 | グェ゛ァ 348 | 349 | 个 350 | 351 | \ 352 | 353 | ダー 354 | 355 | 大 356 | 357 |  ̄ 358 | 359 | ダイ 360 | 361 | 呆 362 | 363 |  ̄ 364 | 365 | ダン 366 | 367 | 单 368 | 369 |  ̄/\ 370 | 371 | ダン/ダン 372 | 373 | 当 374 | 375 |  ̄ 376 | 377 | ダオ 378 | 379 | 刀 380 | 381 | / 382 | 383 | デェ゛ァ 384 | 385 | 德 386 | 387 | ///∨ 388 | 389 | デェ゛ァ/デェ゛ァ/デイ 390 | 391 | 得 392 | 393 | - 394 | 395 | 扽 396 | 397 |  ̄ 398 | 399 | ドン 400 | 401 | 灯 402 | 403 | \ 404 | 405 | ディ 406 | 407 | 地 408 | 409 | ∨ 410 | 411 | ディェン 412 | 413 | 点 414 | 415 |  ̄ 416 | 417 | ディァォ 418 | 419 | 刁 420 | 421 |  ̄ 422 | 423 | ディェ 424 | 425 | 跌 426 | 427 |  ̄ 428 | 429 | ディン 430 | 431 | 丁 432 | 433 |  ̄ 434 | 435 | ディゥ 436 | 437 | 丢 438 | 439 |  ̄ 440 | 441 | ドン 442 | 443 | 冬 444 | 445 | ∨/\ 446 | 447 | ドウ/ドウ 448 | 449 | 斗 450 | 451 | / 452 | 453 | ドゥ 454 | 455 | 读 456 | 457 |  ̄ 458 | 459 | ドゥァン 460 | 461 | 端 462 | 463 | \ 464 | 465 | ドゥイ(ドゥェイ) 466 | 467 | 对 468 | 469 |  ̄ 470 | 471 | ドゥン 472 | 473 | 吨 474 | 475 |  ̄ 476 | 477 | ドゥォ 478 | 479 | 多 480 | 481 | \ 482 | 483 | グェ゛ァ 484 | 485 | 个 486 | 487 | / 488 | 489 | ェ゛ァ 490 | 491 | 鹅 492 | 493 | ∨ 494 | 495 | ェ゛ァ 496 | 497 | 欸 498 | 499 |  ̄ 500 | 501 | エン 502 | 503 | 恩 504 | 505 | - 506 | 507 | 鞥 508 | 509 | / 510 | 511 | ェ゛ァー 512 | 513 | 儿 514 | 515 | \ 516 | 517 | グェ゛ァ 518 | 519 | 个 520 | 521 |  ̄/\ 522 | 523 | ファ/ファ 524 | 525 | 发 526 | 527 | ∨ 528 | 529 | ファン 530 | 531 | 反 532 | 533 |  ̄ 534 | 535 | ファン 536 | 537 | 方 538 | 539 |  ̄ 540 | 541 | フェイ 542 | 543 | 飞 544 | 545 |  ̄/\/ 546 | 547 | フェン/フェン/フェン 548 | 549 | 分 550 | 551 |  ̄ 552 | 553 | フォン 554 | 555 | 风 556 | 557 | / 558 | 559 | フォ 560 | 561 | 佛 562 | 563 | ∨ 564 | 565 | フォウ 566 | 567 | 否 568 | 569 |  ̄ 570 | 571 | フー 572 | 573 | 夫 574 | 575 | \ 576 | 577 | グェ゛ァ 578 | 579 | 个 580 | 581 |  ̄/ ̄// 582 | 583 | ガー/ジャ/チィェ 584 | 585 | 伽 586 | 587 |  ̄ 588 | 589 | ガイ 590 | 591 | 该 592 | 593 |  ̄/\ 594 | 595 | ガン/ガン 596 | 597 | 干 598 | 599 | 600 | 601 |  ̄ 602 | 603 | ガン 604 | 605 | 刚 606 | 607 |  ̄ 608 | 609 | ガオ 610 | 611 | 高 612 | 613 |  ̄ 614 | 615 | グェ゛ァ 616 | 617 | 哥 618 | 619 | ∨ 620 | 621 | ゲイ 622 | 623 | 给 624 | 625 |  ̄ 626 | 627 | ゲン 628 | 629 | 根 630 | 631 |  ̄ 632 | 633 | ゴン 634 | 635 | 耕 636 | 637 |  ̄ 638 | 639 | ゴン 640 | 641 | 工 642 | 643 |  ̄ 644 | 645 | ゴウ 646 | 647 | 沟 648 | 649 |  ̄ 650 | 651 | グー 652 | 653 | 姑 654 | 655 |  ̄ 656 | 657 | グァ 658 | 659 | 瓜 660 | 661 | \ 662 | 663 | グゥァイ 664 | 665 | 怪 666 | 667 |  ̄ 668 | 669 | グァン 670 | 671 | 关 672 | 673 |  ̄ 674 | 675 | グゥァン 676 | 677 | 光 678 | 679 |  ̄ 680 | 681 | グゥイ(グゥェイ) 682 | 683 | 规 684 | 685 | \ 686 | 687 | ガン 688 | 689 | 棍 690 | 691 | / 692 | 693 | グゥォ 694 | 695 | 国 696 | 697 | \ 698 | 699 | グェ゛ァ 700 | 701 | 个 702 | 703 | ∨/ ̄ 704 | 705 | ハー/ハー 706 | 707 | 哈 708 | 709 | /// 710 | 711 | ハイ/ファン 712 | 713 | 还 714 | 715 | / 716 | 717 | ハン 718 | 719 | 含 720 | 721 | / 722 | 723 | ハン 724 | 725 | 航 726 | 727 | ∨/\ 728 | 729 | ハオ/ハオ 730 | 731 | 好 732 | 733 |  ̄ 734 | 735 | フェ゛ァ 736 | 737 | 喝 738 | 739 |  ̄ 740 | 741 | ヘイ 742 | 743 | 黑 744 | 745 | ∨ 746 | 747 | ヘン 748 | 749 | 很 750 | 751 | //\ 752 | 753 | ホン/ホン 754 | 755 | 横 756 | 757 |  ̄ 758 | 759 | ホン 760 | 761 | 轰 762 | 763 | / 764 | 765 | ホウ 766 | 767 | 猴 768 | 769 |  ̄ 770 | 771 | フー 772 | 773 | 乎 774 | 775 |  ̄ 776 | 777 | ファ 778 | 779 | 花 780 | 781 | / 782 | 783 | フゥァイ 784 | 785 | 怀 786 | 787 |  ̄ 788 | 789 | ファン 790 | 791 | 欢 792 | 793 |  ̄ 794 | 795 | フゥァン 796 | 797 | 荒 798 | 799 |  ̄ 800 | 801 | フゥイ(フゥェイ) 802 | 803 | 灰 804 | 805 |  ̄ 806 | 807 | フン 808 | 809 | 昏 810 | 811 | ∨ 812 | 813 | フォ 814 | 815 | 火 816 | 817 | \ 818 | 819 | グェ゛ァ 820 | 821 | 个 822 | 823 |  ̄ 824 | 825 | ジー 826 | 827 | 机 828 | 829 |  ̄ 830 | 831 | ジャ 832 | 833 | 家 834 | 835 |  ̄ 836 | 837 | ジィェン 838 | 839 | 坚 840 | 841 |  ̄ 842 | 843 | ジィァン 844 | 845 | 江 846 | 847 |  ̄ 848 | 849 | ジャオ 850 | 851 | 交 852 | 853 |  ̄ 854 | 855 | ジェ 856 | 857 | 阶 858 | 859 |  ̄ 860 | 861 | ジン 862 | 863 | 斤 864 | 865 |  ̄ 866 | 867 | ジン 868 | 869 | 京 870 | 871 | ∨ 872 | 873 | ジィォン 874 | 875 | 炯 876 | 877 |  ̄ 878 | 879 | ジゥ 880 | 881 | 究 882 | 883 |  ̄ 884 | 885 | ジュ 886 | 887 | 居 888 | 889 | ∨/\ 890 | 891 | ジュェン/ジュェン 892 | 893 | 卷 894 | 895 | / 896 | 897 | ジュェ 898 | 899 | 决 900 | 901 |  ̄ 902 | 903 | ジュン 904 | 905 | 军 906 | 907 | \ 908 | 909 | グェ゛ァ 910 | 911 | 个 912 | 913 | ∨ 914 | 915 | カー 916 | 917 | 卡 918 | 919 |  ̄ 920 | 921 | カイ 922 | 923 | 开 924 | 925 |  ̄ 926 | 927 | カン 928 | 929 | 刊 930 | 931 |  ̄ 932 | 933 | カン 934 | 935 | 康 936 | 937 | ∨ 938 | 939 | カオ 940 | 941 | 考 942 | 943 |  ̄ 944 | 945 | クェ゛ァ 946 | 947 | 科 948 | 949 | ∨ 950 | 951 | ケン 952 | 953 | 肯 954 | 955 |  ̄ 956 | 957 | コン 958 | 959 | 坑 960 | 961 |  ̄/\ 962 | 963 | コン/コン 964 | 965 | 空 966 | 967 | ∨ 968 | 969 | コウ 970 | 971 | 口 972 | 973 | ∨ 974 | 975 | クー 976 | 977 | 苦 978 | 979 |  ̄ 980 | 981 | クァ 982 | 983 | 夸 984 | 985 | \ 986 | 987 | クァィ 988 | 989 | 快 990 | 991 |  ̄ 992 | 993 | クァン 994 | 995 | 宽 996 | 997 | / 998 | 999 | クゥァン 1000 | 1001 | 狂 1002 | 1003 |  ̄ 1004 | 1005 | クゥイ(クゥェイ) 1006 | 1007 | 亏 1008 | 1009 | \ 1010 | 1011 | クン 1012 | 1013 | 困 1014 | 1015 | \ 1016 | 1017 | クォ 1018 | 1019 | 阔 1020 | 1021 | \ 1022 | 1023 | グェ゛ァ 1024 | 1025 | 个 1026 | 1027 |  ̄ 1028 | 1029 | ラー 1030 | 1031 | 拉 1032 | 1033 | / 1034 | 1035 | ライ 1036 | 1037 | 来 1038 | 1039 | / 1040 | 1041 | ラン 1042 | 1043 | 兰 1044 | 1045 | / 1046 | 1047 | ラン 1048 | 1049 | 狼 1050 | 1051 | / 1052 | 1053 | ラオ 1054 | 1055 | 劳 1056 | 1057 | \/\ 1058 | 1059 | ラ/ユェ 1060 | 1061 | 乐 1062 | 1063 | / 1064 | 1065 | レイ 1066 | 1067 | 雷 1068 | 1069 | ∨ 1070 | 1071 | ラン 1072 | 1073 | 冷 1074 | 1075 | / 1076 | 1077 | リー 1078 | 1079 | 离 1080 | 1081 | ∨/∨ 1082 | 1083 | リィァン/リィァ 1084 | 1085 | 俩 1086 | 1087 | / 1088 | 1089 | リィェン 1090 | 1091 | 连 1092 | 1093 | / 1094 | 1095 | リィァン 1096 | 1097 | 良 1098 | 1099 | / 1100 | 1101 | リィァォ 1102 | 1103 | 辽 1104 | 1105 | \ 1106 | 1107 | リィェ 1108 | 1109 | 列 1110 | 1111 | / 1112 | 1113 | リン 1114 | 1115 | 林 1116 | 1117 | / 1118 | 1119 | リン 1120 | 1121 | 灵 1122 | 1123 | / 1124 | 1125 | リィゥ 1126 | 1127 | 刘 1128 | 1129 | / 1130 | 1131 | ロン 1132 | 1133 | 龙 1134 | 1135 | / 1136 | 1137 | ロウ 1138 | 1139 | 楼 1140 | 1141 | \ 1142 | 1143 | ルー 1144 | 1145 | 路 1146 | 1147 | / 1148 | 1149 | リュ 1150 | 1151 | 驴 1152 | 1153 | \ 1154 | 1155 | ルゥァン 1156 | 1157 | 乱 1158 | 1159 | \ 1160 | 1161 | リュェ 1162 | 1163 | 略 1164 | 1165 |  ̄// 1166 | 1167 | ルゥン/ルゥン 1168 | 1169 | 抡 1170 | 1171 | / 1172 | 1173 | ルゥォ 1174 | 1175 | 罗 1176 | 1177 | \ 1178 | 1179 | グェ゛ァ 1180 | 1181 | 个 1182 | 1183 |  ̄ 1184 | 1185 | マー 1186 | 1187 | 妈 1188 | 1189 | \ 1190 | 1191 | マイ 1192 | 1193 | 麦 1194 | 1195 | ∨ 1196 | 1197 | マン 1198 | 1199 | 满 1200 | 1201 | 1202 | / 1203 | 1204 | マン 1205 | 1206 | 忙 1207 | 1208 | / 1209 | 1210 | マオ 1211 | 1212 | 毛 1213 | 1214 | ムェ゛ァ 1215 | 1216 | 么 1217 | 1218 | / 1219 | 1220 | メイ 1221 | 1222 | 眉 1223 | 1224 | / 1225 | 1226 | メン 1227 | 1228 | 门 1229 | 1230 |  ̄///∨ 1231 | 1232 | モン/モン/モン 1233 | 1234 | 蒙 1235 | 1236 | / 1237 | 1238 | ミィ 1239 | 1240 | 迷 1241 | 1242 | / 1243 | 1244 | ミィェン 1245 | 1246 | 棉 1247 | 1248 | / 1249 | 1250 | ミィァォ 1251 | 1252 | 苗 1253 | 1254 | \ 1255 | 1256 | ミィェ 1257 | 1258 | 灭 1259 | 1260 | / 1261 | 1262 | ミン 1263 | 1264 | 民 1265 | 1266 | / 1267 | 1268 | ミン 1269 | 1270 | 明 1271 | 1272 | \ 1273 | 1274 | ミィゥ 1275 | 1276 | 谬 1277 | 1278 | /// 1279 | 1280 | ムォ/ムー 1281 | 1282 | 模 1283 | 1284 | ∨ 1285 | 1286 | モウ 1287 | 1288 | 某 1289 | 1290 | \ 1291 | 1292 | ムー 1293 | 1294 | 目 1295 | 1296 | \ 1297 | 1298 | グェ゛ァ 1299 | 1300 | 个 1301 | 1302 | \ 1303 | 1304 | ナー 1305 | 1306 | 那 1307 | 1308 | ∨ 1309 | 1310 | ナイ 1311 | 1312 | 奶 1313 | 1314 | / 1315 | 1316 | ナン 1317 | 1318 | 南 1319 | 1320 | / 1321 | 1322 | ナン 1323 | 1324 | 囊 1325 | 1326 | ∨ 1327 | 1328 | ナオ 1329 | 1330 | 脑 1331 | 1332 | ヌェ゛ァ 1333 | 1334 | 呢 1335 | 1336 | \ 1337 | 1338 | ネイ 1339 | 1340 | 内 1341 | 1342 | \ 1343 | 1344 | ネン 1345 | 1346 | 嫩 1347 | 1348 | / 1349 | 1350 | ノン 1351 | 1352 | 能 1353 | 1354 | ∨ 1355 | 1356 | ニー 1357 | 1358 | 你 1359 | 1360 | / 1361 | 1362 | ニィェン 1363 | 1364 | 年 1365 | 1366 | / 1367 | 1368 | ニィァン 1369 | 1370 | 娘 1371 | 1372 | ∨ 1373 | 1374 | ニィァォ 1375 | 1376 | 鸟 1377 | 1378 |  ̄ 1379 | 1380 | ニィェ 1381 | 1382 | 捏 1383 | 1384 | / 1385 | 1386 | ニン 1387 | 1388 | 您 1389 | 1390 | //\ 1391 | 1392 | ニン/ニン 1393 | 1394 | 宁 1395 | 1396 | / 1397 | 1398 | ニィゥ 1399 | 1400 | 牛 1401 | 1402 | / 1403 | 1404 | ノン 1405 | 1406 | 农 1407 | 1408 | \ 1409 | 1410 | ノウ 1411 | 1412 | 耨 1413 | 1414 | / 1415 | 1416 | ヌー 1417 | 1418 | 奴 1419 | 1420 | ∨ 1421 | 1422 | ニュ 1423 | 1424 | 女 1425 | 1426 | ∨ 1427 | 1428 | ヌァン 1429 | 1430 | 暖 1431 | 1432 | \/\ 1433 | 1434 | ヌーェ゛ァ/ニュェ 1435 | 1436 | 虐 1437 | 1438 | / 1439 | 1440 | ヌオ 1441 | 1442 | 挪 1443 | 1444 | \ 1445 | 1446 | グェ゛ァ 1447 | 1448 | 个 1449 | 1450 | ////\ 1451 | 1452 | ェ゛ァ/ゥオ/ゥオ 1453 | 1454 | 哦 1455 | 1456 |  ̄ 1457 | 1458 | オウ 1459 | 1460 | 欧 1461 | 1462 | \ 1463 | 1464 | グェ゛ァ 1465 | 1466 | 个 1467 | 1468 |  ̄ 1469 | 1470 | パー 1471 | 1472 | 趴 1473 | 1474 |  ̄ 1475 | 1476 | パイ 1477 | 1478 | 拍 1479 | 1480 | / 1481 | 1482 | パン 1483 | 1484 | 盘 1485 | 1486 | / 1487 | 1488 | パン 1489 | 1490 | 旁 1491 | 1492 | ∨ 1493 | 1494 | パオ 1495 | 1496 | 跑 1497 | 1498 | / 1499 | 1500 | ペイ 1501 | 1502 | 培 1503 | 1504 | / 1505 | 1506 | ペン 1507 | 1508 | 盆 1509 | 1510 | / 1511 | 1512 | ポン 1513 | 1514 | 朋 1515 | 1516 |  ̄ 1517 | 1518 | ピー 1519 | 1520 | 批 1521 | 1522 |  ̄ 1523 | 1524 | ピィェン 1525 | 1526 | 偏 1527 | 1528 |  ̄ 1529 | 1530 | ピィァオ 1531 | 1532 | 飘 1533 | 1534 |  ̄/∨ 1535 | 1536 | ピェ/ピェ 1537 | 1538 | 撇 1539 | 1540 |  ̄ 1541 | 1542 | ピン 1543 | 1544 | 拼 1545 | 1546 | / 1547 | 1548 | ピン 1549 | 1550 | 平 1551 | 1552 |  ̄ 1553 | 1554 | ポォ 1555 | 1556 | 坡 1557 | 1558 |  ̄ 1559 | 1560 | ポウ 1561 | 1562 | 剖 1563 | 1564 |  ̄ 1565 | 1566 | プー 1567 | 1568 | 扑 1569 | 1570 | \ 1571 | 1572 | グェ゛ァ 1573 | 1574 | 个 1575 | 1576 |  ̄ 1577 | 1578 | チー 1579 | 1580 | 七 1581 | 1582 | \ 1583 | 1584 | チィァ 1585 | 1586 | 恰 1587 | 1588 |  ̄ 1589 | 1590 | チィェン 1591 | 1592 | 千 1593 | 1594 |  ̄ 1595 | 1596 | チィァン 1597 | 1598 | 枪 1599 | 1600 |  ̄/∨ 1601 | 1602 | チィァォ/チィァォ 1603 | 1604 | 悄 1605 | 1606 |  ̄/\ 1607 | 1608 | チィェ/チィェ 1609 | 1610 | 切 1611 | 1612 |  ̄ 1613 | 1614 | チン 1615 | 1616 | 亲 1617 | 1618 |  ̄ 1619 | 1620 | チン 1621 | 1622 | 青 1623 | 1624 | / 1625 | 1626 | チォン 1627 | 1628 | 穷 1629 | 1630 |  ̄ 1631 | 1632 | チィゥ 1633 | 1634 | 秋 1635 | 1636 |  ̄ 1637 | 1638 | チュ 1639 | 1640 | 区 1641 | 1642 | / 1643 | 1644 | チュェン 1645 | 1646 | 全 1647 | 1648 |  ̄ 1649 | 1650 | チュェ 1651 | 1652 | 缺 1653 | 1654 | / 1655 | 1656 | チュン 1657 | 1658 | 群 1659 | 1660 | \ 1661 | 1662 | グェ゛ァ 1663 | 1664 | 个 1665 | 1666 | / 1667 | 1668 | ラン 1669 | 1670 | 然 1671 | 1672 | \ 1673 | 1674 | ラン 1675 | 1676 | 让 1677 | 1678 | / 1679 | 1680 | ラオ 1681 | 1682 | 饶 1683 | 1684 | \ 1685 | 1686 | ルェ゛ァ 1687 | 1688 | 热 1689 | 1690 | / 1691 | 1692 | レン 1693 | 1694 | 人 1695 | 1696 |  ̄ 1697 | 1698 | ロン 1699 | 1700 | 扔 1701 | 1702 | \ 1703 | 1704 | リ゛ー 1705 | 1706 | 日 1707 | 1708 | / 1709 | 1710 | ロン 1711 | 1712 | 荣 1713 | 1714 | \ 1715 | 1716 | ロウ 1717 | 1718 | 肉 1719 | 1720 | / 1721 | 1722 | ルー 1723 | 1724 | 如 1725 | 1726 | ∨ 1727 | 1728 | ルァン 1729 | 1730 | 软 1731 | 1732 | \ 1733 | 1734 | ルイ(ルェイ) 1735 | 1736 | 锐 1737 | 1738 | \ 1739 | 1740 | ルン 1741 | 1742 | 润 1743 | 1744 | \ 1745 | 1746 | ルォ 1747 | 1748 | 弱 1749 | 1750 | \ 1751 | 1752 | グェ゛ァ 1753 | 1754 | 个 1755 | 1756 | ∨ 1757 | 1758 | サー 1759 | 1760 | 洒 1761 | 1762 | \ 1763 | 1764 | サイ 1765 | 1766 | 赛 1767 | 1768 |  ̄ 1769 | 1770 | サン 1771 | 1772 | 三 1773 | 1774 |  ̄ 1775 | 1776 | サン 1777 | 1778 | 桑 1779 | 1780 | ∨/\ 1781 | 1782 | サオ/サオ 1783 | 1784 | 扫 1785 | 1786 | \ 1787 | 1788 | スェ゛ァ 1789 | 1790 | 色 1791 | 1792 |  ̄ 1793 | 1794 | セン 1795 | 1796 | 森 1797 | 1798 | 1799 |  ̄ 1800 | 1801 | ソン 1802 | 1803 | 僧 1804 | 1805 |  ̄ 1806 | 1807 | シャ 1808 | 1809 | 杀 1810 | 1811 | \ 1812 | 1813 | シャイ 1814 | 1815 | 晒 1816 | 1817 |  ̄ 1818 | 1819 | シャン 1820 | 1821 | 山 1822 | 1823 |  ̄ 1824 | 1825 | シャン 1826 | 1827 | 伤 1828 | 1829 |  ̄ 1830 | 1831 | シャオ 1832 | 1833 | 烧 1834 | 1835 | / 1836 | 1837 | シェ゛ァ 1838 | 1839 | 舌 1840 | 1841 |  ̄ 1842 | 1843 | シェン 1844 | 1845 | 深 1846 | 1847 |  ̄ 1848 | 1849 | シォン 1850 | 1851 | 生 1852 | 1853 |  ̄ 1854 | 1855 | シー 1856 | 1857 | 师 1858 | 1859 | ∨ 1860 | 1861 | ショウ 1862 | 1863 | 手 1864 | 1865 |  ̄ 1866 | 1867 | シュ 1868 | 1869 | 书 1870 | 1871 |  ̄ 1872 | 1873 | シュァ 1874 | 1875 | 刷 1876 | 1877 |  ̄ 1878 | 1879 | シュァイ 1880 | 1881 | 摔 1882 | 1883 |  ̄ 1884 | 1885 | シュァン 1886 | 1887 | 拴 1888 | 1889 | ∨ 1890 | 1891 | シュゥァン 1892 | 1893 | 爽 1894 | 1895 | ∨ 1896 | 1897 | シュイ(シュェイ) 1898 | 1899 | 水 1900 | 1901 | \ 1902 | 1903 | シュン 1904 | 1905 | 顺 1906 | 1907 |  ̄ 1908 | 1909 | シュォ 1910 | 1911 | 说 1912 | 1913 |  ̄ 1914 | 1915 | スー 1916 | 1917 | 思 1918 | 1919 |  ̄ 1920 | 1921 | ソン 1922 | 1923 | 松 1924 | 1925 |  ̄ 1926 | 1927 | ソウ 1928 | 1929 | 搜 1930 | 1931 |  ̄ 1932 | 1933 | スー 1934 | 1935 | 苏 1936 | 1937 | \ 1938 | 1939 | スゥァン 1940 | 1941 | 算 1942 | 1943 | \ 1944 | 1945 | スイ(スェイ) 1946 | 1947 | 岁 1948 | 1949 |  ̄ 1950 | 1951 | スン 1952 | 1953 | 孙 1954 | 1955 | ∨ 1956 | 1957 | スォ 1958 | 1959 | 所 1960 | 1961 | \ 1962 | 1963 | グェ゛ァ 1964 | 1965 | 个 1966 | 1967 |  ̄ 1968 | 1969 | ター 1970 | 1971 | 它 1972 | 1973 | / 1974 | 1975 | タイ 1976 | 1977 | 台 1978 | 1979 |  ̄ 1980 | 1981 | タン 1982 | 1983 | 贪 1984 | 1985 | / 1986 | 1987 | タン 1988 | 1989 | 糖 1990 | 1991 | / 1992 | 1993 | タオ 1994 | 1995 | 桃 1996 | 1997 | \ 1998 | 1999 | テェ゛ァ 2000 | 2001 | 特 2002 | 2003 | / 2004 | 2005 | トン 2006 | 2007 | 疼 2008 | 2009 | / 2010 | 2011 | ティ 2012 | 2013 | 题 2014 | 2015 |  ̄ 2016 | 2017 | ティェン 2018 | 2019 | 天 2020 | 2021 | / 2022 | 2023 | ティァォ 2024 | 2025 | 条 2026 | 2027 | ∨ 2028 | 2029 | ティェ 2030 | 2031 | 铁 2032 | 2033 |  ̄ 2034 | 2035 | ティン 2036 | 2037 | 听 2038 | 2039 |  ̄ 2040 | 2041 | トン 2042 | 2043 | 通 2044 | 2045 | / 2046 | 2047 | トウ 2048 | 2049 | 头 2050 | 2051 | ∨ 2052 | 2053 | トゥ 2054 | 2055 | 土 2056 | 2057 | / 2058 | 2059 | トゥァン 2060 | 2061 | 团 2062 | 2063 |  ̄ 2064 | 2065 | トゥイ(トゥェイ) 2066 | 2067 | 推 2068 | 2069 |  ̄ 2070 | 2071 | トゥン 2072 | 2073 | 吞 2074 | 2075 |  ̄ 2076 | 2077 | トゥォ 2078 | 2079 | 脱 2080 | 2081 | \ 2082 | 2083 | グェ゛ァ 2084 | 2085 | 个 2086 | 2087 |  ̄ 2088 | 2089 | ウァ 2090 | 2091 | 挖 2092 | 2093 | \ 2094 | 2095 | ワィ 2096 | 2097 | 外 2098 | 2099 | / 2100 | 2101 | ワン 2102 | 2103 | 完 2104 | 2105 | / 2106 | 2107 | ワン 2108 | 2109 | 王 2110 | 2111 |  ̄ 2112 | 2113 | ウェイ 2114 | 2115 | 威 2116 | 2117 |  ̄ 2118 | 2119 | ウェン 2120 | 2121 | 温 2122 | 2123 |  ̄ 2124 | 2125 | ウォン 2126 | 2127 | 翁 2128 | 2129 | ∨ 2130 | 2131 | ウォ 2132 | 2133 | 我 2134 | 2135 | / 2136 | 2137 | ウー 2138 | 2139 | 无 2140 | 2141 | \ 2142 | 2143 | グェ゛ァ 2144 | 2145 | 个 2146 | 2147 |  ̄ 2148 | 2149 | シー 2150 | 2151 | 西 2152 | 2153 | \ 2154 | 2155 | シァ 2156 | 2157 | 下 2158 | 2159 |  ̄ 2160 | 2161 | シィェン 2162 | 2163 | 先 2164 | 2165 |  ̄ 2166 | 2167 | シィァン 2168 | 2169 | 香 2170 | 2171 | ∨ 2172 | 2173 | シァォ 2174 | 2175 | 小 2176 | 2177 | ∨ 2178 | 2179 | シェ 2180 | 2181 | 写 2182 | 2183 |  ̄ 2184 | 2185 | シン 2186 | 2187 | 心 2188 | 2189 |  ̄ 2190 | 2191 | シン 2192 | 2193 | 星 2194 | 2195 |  ̄ 2196 | 2197 | シィォン 2198 | 2199 | 胸 2200 | 2201 |  ̄ 2202 | 2203 | シゥ 2204 | 2205 | 休 2206 | 2207 |  ̄ 2208 | 2209 | シュ 2210 | 2211 | 须 2212 | 2213 |  ̄ 2214 | 2215 | シュェン 2216 | 2217 | 宣 2218 | 2219 | / 2220 | 2221 | シュェ 2222 | 2223 | 学 2224 | 2225 | / 2226 | 2227 | シュン 2228 | 2229 | 寻 2230 | 2231 | \ 2232 | 2233 | グェ゛ァ 2234 | 2235 | 个 2236 | 2237 |  ̄ 2238 | 2239 | ヤー 2240 | 2241 | 压 2242 | 2243 |  ̄ 2244 | 2245 | イェン 2246 | 2247 | 烟 2248 | 2249 |  ̄ 2250 | 2251 | ヤン 2252 | 2253 | 央 2254 | 2255 |  ̄/\ 2256 | 2257 | イャォ/イャォ 2258 | 2259 | 要 2260 | 2261 | \ 2262 | 2263 | イェ 2264 | 2265 | 业 2266 | 2267 |  ̄ 2268 | 2269 | イー 2270 | 2271 | 一 2272 | 2273 |  ̄ 2274 | 2275 | イン 2276 | 2277 | 音 2278 | 2279 |  ̄ 2280 | 2281 | イン 2282 | 2283 | 英 2284 | 2285 | \ 2286 | 2287 | ヨン 2288 | 2289 | 用 2290 | 2291 |  ̄ 2292 | 2293 | ヨウ 2294 | 2295 | 优 2296 | 2297 | ∨ 2298 | 2299 | ユー 2300 | 2301 | 雨 2302 | 2303 | / 2304 | 2305 | ユェン 2306 | 2307 | 元 2308 | 2309 | \ 2310 | 2311 | ユェ 2312 | 2313 | 月 2314 | 2315 | / 2316 | 2317 | ユン 2318 | 2319 | 云 2320 | 2321 | \ 2322 | 2323 | グェ゛ァ 2324 | 2325 | 个 2326 | 2327 | / 2328 | 2329 | ザー 2330 | 2331 | 杂 2332 | 2333 | \/∨ 2334 | 2335 | ザイ/ザイ 2336 | 2337 | 载 2338 | 2339 | / 2340 | 2341 | ザン 2342 | 2343 | 咱 2344 | 2345 |  ̄ 2346 | 2347 | ザン 2348 | 2349 | 脏 2350 | 2351 | ∨ 2352 | 2353 | ザオ 2354 | 2355 | 早 2356 | 2357 | / 2358 | 2359 | ゼェ゛ァ 2360 | 2361 | 责 2362 | 2363 | / 2364 | 2365 | ゼイ 2366 | 2367 | 贼 2368 | 2369 | ∨ 2370 | 2371 | ゼン 2372 | 2373 | 怎 2374 | 2375 |  ̄ 2376 | 2377 | ゾン 2378 | 2379 | 增 2380 | 2381 |  ̄/ ̄ 2382 | 2383 | ヂャ/ザー 2384 | 2385 | 扎 2386 | 2387 |  ̄ 2388 | 2389 | ヂャイ 2390 | 2391 | 摘 2392 | 2393 | \ 2394 | 2395 | ヂャン 2396 | 2397 | 占 2398 | 2399 | 2400 |  ̄ 2401 | 2402 | ヂャン 2403 | 2404 | 张 2405 | 2406 | \ 2407 | 2408 | ヂャオ 2409 | 2410 | 照 2411 | 2412 | \ 2413 | 2414 | ヂェ゛ァ 2415 | 2416 | 这 2417 | 2418 |  ̄ 2419 | 2420 | ヂェン 2421 | 2422 | 针 2423 | 2424 | \ 2425 | 2426 | ヂォン 2427 | 2428 | 正 2429 | 2430 |  ̄ 2431 | 2432 | ヂー 2433 | 2434 | 支 2435 | 2436 |  ̄/\ 2437 | 2438 | ヂョン/ヂョン 2439 | 2440 | 中 2441 | 2442 |  ̄ 2443 | 2444 | ヂョウ 2445 | 2446 | 周 2447 | 2448 |  ̄ 2449 | 2450 | ヂュ 2451 | 2452 | 朱 2453 | 2454 |  ̄ 2455 | 2456 | ヂュア 2457 | 2458 | 抓 2459 | 2460 | \/ ̄/\ 2461 | 2462 | イェ/ヂュァイ/ヂュァイ 2463 | 2464 | 拽 2465 | 2466 |  ̄ 2467 | 2468 | ヂュァン 2469 | 2470 | 专 2471 | 2472 |  ̄ 2473 | 2474 | ヂュゥァン 2475 | 2476 | 庄 2477 | 2478 |  ̄ 2479 | 2480 | ヂュイ(ヂュェイ) 2481 | 2482 | 追 2483 | 2484 | ∨ 2485 | 2486 | ヂュン 2487 | 2488 | 准 2489 | 2490 |  ̄ 2491 | 2492 | ヂュオ 2493 | 2494 | 捉 2495 | 2496 |  ̄ 2497 | 2498 | ズー 2499 | 2500 | 资 2501 | 2502 |  ̄ 2503 | 2504 | ゾン 2505 | 2506 | 宗 2507 | 2508 | ∨ 2509 | 2510 | ゾウ 2511 | 2512 | 走 2513 | 2514 | / 2515 | 2516 | ズー 2517 | 2518 | 足 2519 | 2520 |  ̄/\ 2521 | 2522 | ズァン/ズァン 2523 | 2524 | 钻 2525 | 2526 | \ 2527 | 2528 | ズイ(ズェイ) 2529 | 2530 | 最 2531 | 2532 |  ̄ 2533 | 2534 | ズン 2535 | 2536 | 尊 2537 | 2538 |  ̄/\ 2539 | 2540 | ズゥォ/ズゥォ 2541 | 2542 | 作 2543 | 2544 | \ 2545 | 2546 | グェ゛ァ 2547 | 2548 | 个 2549 | -------------------------------------------------------------------------------- /conv/pre.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/conv/pre.zip -------------------------------------------------------------------------------- /conv/table.json: -------------------------------------------------------------------------------- 1 | {"a": ["\u30a2\u30fc"], "ai": ["\u30a7\u309b\u30a1"], "an": ["\u30a2\u30f3"], "ang": ["\u30a2\u30f3"], "ao": ["\u30a2\u30aa"], "ge": ["\u30b0\u30a7\u309b\u30a1"], "ba": ["\u30d0\u30fc"], "bai": ["\u30d0\u30a4"], "ban": ["\u30d0\u30f3"], "bang": ["\u30d0\u30f3"], "bao": ["\u30d0\u30aa"], "bei": ["\u30d9\u30a4"], "ben": ["\u30d9\u30f3"], "beng": ["\u30dc\u30f3"], "bi": ["\u30d3\u30fc"], "bian": ["\u30d3\u30a3\u30a7\u30f3"], "biao": ["\u30d3\u30a3\u30e3\u30a9"], "bie": ["\u30d3\u30a3\u30a7"], "bin": ["\u30d3\u30f3"], "bing": ["\u30d3\u30f3"], "bo": ["\u30d6\u30a9"], "bu": ["\u30d6\u30fc"], "ca": ["\u30c4\u30a1"], "cai": ["\u30c4\u30a1\u30a3"], "can": ["\u30c4\u30a1\u30f3", "\u30b7\u30a7\u30f3"], "cang": ["\u30c4\u30a1\u30f3"], "cao": ["\u30c4\u30a1\u30a9"], "ce": ["\u30c4\u30a7\u309b\u30a1"], "ceng": ["\u30c4\u30a9\u30f3"], "cha": ["\u30c1\u30e3"], "chai": ["\u30c1\u30e3\u30a4"], "chan": ["\u30c1\u30e3\u30f3"], "zhang": ["\u30c2\u30e3\u30f3"], "chao": ["\u30c1\u30e3\u30aa"], "che": ["\u30c1\u30a7\u309b\u30a1"], "chen": ["\u30c1\u30a7\u30f3"], "cheng": ["\u30c1\u30a9\u30f3"], "chi": ["\u30c1\u30fc"], "chong": ["\u30c1\u30e7\u30f3"], "chou": ["\u30c1\u30e7\u30a6"], "chu": ["\u30c1\u30e5"], "chuan": ["\u30c1\u30e5\u30a1\u30f3"], "chuai": ["\u30c1\u30e5\u30a1\u30a4"], "chuang": ["\u30c1\u30e5\u30a5\u30a1\u30f3"], "chui": ["\u30c1\u30e5\u30a4\uff08\u30c1\u30e5\u30a7\u30a4\uff09"], "chun": ["\u30c1\u30e5\u30f3"], "chuo": ["\u30c1\u30e5\u30a9"], "ci": ["\u30c4\u30fc"], "cong": ["\u30c4\u30a9\u30f3"], "cou": ["\u30b3\u30a5"], "cu": ["\u30c4\u30a5"], "cuan": ["\u30c4\u30a1\u30f3"], "cui": ["\u30c4\u30a4\uff08\u30c4\u30a7\u30a4\uff09"], "cun": ["\u30c4\u30f3"], "cuo": ["\u30c4\u30a5\u30a9"], "da": ["\u30c0\u30fc"], "dai": ["\u30c0\u30a4"], "dan": ["\u30c0\u30f3"], "dang": ["\u30c0\u30f3"], "dao": ["\u30c0\u30aa"], "de": ["\u30c7\u30a3"], "den": ["\u30c9\u30f3"], "deng": ["\u30c9\u30f3"], "dian": ["\u30c7\u30a3\u30a7\u30f3"], "diao": ["\u30c7\u30a3\u30a1\u30a9"], "die": ["\u30c7\u30a3\u30a7"], "ding": ["\u30c7\u30a3\u30f3"], "diu": ["\u30c7\u30a3\u30a5"], "dong": ["\u30c9\u30f3"], "dou": ["\u30c9\u30a6"], "du": ["\u30c9\u30a5"], "duan": ["\u30c9\u30a5\u30a1\u30f3"], "dui": ["\u30c9\u30a5\u30a4\uff08\u30c9\u30a5\u30a7\u30a4\uff09"], "dun": ["\u30c9\u30a5\u30f3"], "duo": ["\u30c9\u30a5\u30a9"], "e": ["\u30a7\u309b\u30a1"], "en": ["\u30a8\u30f3"], "eng": ["-"], "er": ["\u30a7\u309b\u30a1\u30fc"], "fa": ["\u30d5\u30a1"], "fan": ["\u30d5\u30a1\u30f3"], "fang": ["\u30d5\u30a1\u30f3"], "fei": ["\u30d5\u30a7\u30a4"], "fen": ["\u30d5\u30a7\u30f3"], "feng": ["\u30d5\u30a9\u30f3"], "fu": ["\u30d5\u30fc"], "fou": ["\u30d5\u30a9\u30a6"], "ga": ["\u30c1\u30a3\u30a7"], "gai": ["\u30ac\u30a4"], "gan": ["\u30ac\u30f3"], "gang": ["\u30ac\u30f3"], "gao": ["\u30ac\u30aa"], "gei": ["\u30b2\u30a4"], "gen": ["\u30b2\u30f3"], "geng": ["\u30b4\u30f3"], "gong": ["\u30b4\u30f3"], "gou": ["\u30b4\u30a6"], "gu": ["\u30b0\u30fc"], "gua": ["\u30b0\u30a1"], "guai": ["\u30b0\u30a5\u30a1\u30a4"], "guan": ["\u30b0\u30a1\u30f3"], "guang": ["\u30b0\u30a5\u30a1\u30f3"], "gui": ["\u30b0\u30a5\u30a4\uff08\u30b0\u30a5\u30a7\u30a4\uff09"], "gun": ["\u30ac\u30f3"], "guo": ["\u30b0\u30a5\u30a9"], "ha": ["\u30cf\u30fc"], "hai": ["\u30d5\u30a1\u30f3"], "han": ["\u30cf\u30f3"], "hang": ["\u30cf\u30f3"], "hao": ["\u30cf\u30aa"], "he": ["\u30d5\u30a7\u309b\u30a1"], "hei": ["\u30d8\u30a4"], "hen": ["\u30d8\u30f3"], "heng": ["\u30db\u30f3"], "hong": ["\u30db\u30f3"], "hou": ["\u30db\u30a6"], "hu": ["\u30d5\u30fc"], "hua": ["\u30d5\u30a1"], "huai": ["\u30d5\u30a5\u30a1\u30a4"], "huan": ["\u30d5\u30a1\u30f3"], "huang": ["\u30d5\u30a5\u30a1\u30f3"], "hui": ["\u30d5\u30a5\u30a4\uff08\u30d5\u30a5\u30a7\u30a4\uff09"], "hun": ["\u30d5\u30f3"], "huo": ["\u30d5\u30a9"], "ji": ["\u30b8\u30fc"], "jia": ["\u30b8\u30e3"], "jian": ["\u30b8\u30a3\u30a7\u30f3"], "jiang": ["\u30b8\u30a3\u30a1\u30f3"], "jiao": ["\u30b8\u30e3\u30aa"], "jie": ["\u30b8\u30a7"], "jin": ["\u30b8\u30f3"], "jing": ["\u30b8\u30f3"], "jiong": ["\u30b8\u30a3\u30a9\u30f3"], "jiu": ["\u30b8\u30a5"], "ju": ["\u30b8\u30e5"], "juan": ["\u30b8\u30e5\u30a7\u30f3"], "jue": ["\u30b8\u30e5\u30a7"], "jun": ["\u30b8\u30e5\u30f3"], "ka": ["\u30ab\u30fc"], "kai": ["\u30ab\u30a4"], "kan": ["\u30ab\u30f3"], "kang": ["\u30ab\u30f3"], "kao": ["\u30ab\u30aa"], "ke": ["\u30af\u30a7\u309b\u30a1"], "ken": ["\u30b1\u30f3"], "keng": ["\u30b3\u30f3"], "kong": ["\u30b3\u30f3"], "kou": ["\u30b3\u30a6"], "ku": ["\u30af\u30fc"], "kua": ["\u30af\u30a1"], "kuai": ["\u30af\u30a1\u30a3"], "kuan": ["\u30af\u30a1\u30f3"], "kuang": ["\u30af\u30a5\u30a1\u30f3"], "kui": ["\u30af\u30a5\u30a4\uff08\u30af\u30a5\u30a7\u30a4\uff09"], "kun": ["\u30af\u30f3"], "kuo": ["\u30af\u30a9"], "la": ["\u30e9\u30fc"], "lai": ["\u30e9\u30a4"], "lan": ["\u30e9\u30f3"], "lang": ["\u30e9\u30f3"], "lao": ["\u30e9\u30aa"], "le": ["\u30e9"], "lei": ["\u30ec\u30a4"], "leng": ["\u30e9\u30f3"], "li": ["\u30ea\u30fc"], "lia": ["\u30ea\u30a3\u30a1\u30f3", "\u30ea\u30a3\u30a1"], "lian": ["\u30ea\u30a3\u30a7\u30f3"], "liang": ["\u30ea\u30a3\u30a1\u30f3"], "liao": ["\u30ea\u30a3\u30a1\u30a9"], "lie": ["\u30ea\u30a3\u30a7"], "lin": ["\u30ea\u30f3"], "ling": ["\u30ea\u30f3"], "liu": ["\u30ea\u30a3\u30a5"], "long": ["\u30ed\u30f3"], "lou": ["\u30ed\u30a6"], "lu": ["\u30eb\u30fc"], "lv": ["\u30ea\u30e5"], "luan": ["\u30eb\u30a5\u30a1\u30f3"], "lve": ["\u30ea\u30e5\u30a7"], "lun": ["\u30eb\u30a5\u30f3"], "luo": ["\u30eb\u30a5\u30a9"], "ma": ["\u30de\u30fc"], "mai": ["\u30de\u30a4"], "man": ["\u30de\u30f3"], "mang": ["\u30de\u30f3"], "mao": ["\u30de\u30aa"], "me": ["\u30e0\u30a7\u309b\u30a1"], "mei": ["\u30e1\u30a4"], "men": ["\u30e1\u30f3"], "meng": ["\u30e2\u30f3"], "mi": ["\u30df\u30a3"], "mian": ["\u30df\u30a3\u30a7\u30f3"], "miao": ["\u30df\u30a3\u30a1\u30a9"], "mie": ["\u30df\u30a3\u30a7"], "min": ["\u30df\u30f3"], "ming": ["\u30df\u30f3"], "miu": ["\u30df\u30a3\u30a5"], "mo": ["\u30e0\u30fc"], "mou": ["\u30e2\u30a6"], "mu": ["\u30e0\u30fc"], "na": ["\u30ca\u30fc"], "nai": ["\u30ca\u30a4"], "nan": ["\u30ca\u30f3"], "nang": ["\u30ca\u30f3"], "nao": ["\u30ca\u30aa"], "ne": ["\u30cc\u30a7\u309b\u30a1"], "nei": ["\u30cd\u30a4"], "nen": ["\u30cd\u30f3"], "neng": ["\u30ce\u30f3"], "ni": ["\u30cb\u30fc"], "nian": ["\u30cb\u30a3\u30a7\u30f3"], "niang": ["\u30cb\u30a3\u30a1\u30f3"], "niao": ["\u30cb\u30a3\u30a1\u30a9"], "nie": ["\u30cb\u30a3\u30a7"], "nin": ["\u30cb\u30f3"], "ning": ["\u30cb\u30f3"], "niu": ["\u30cb\u30a3\u30a5"], "nong": ["\u30ce\u30f3"], "nou": ["\u30ce\u30a6"], "nu": ["\u30cc\u30fc"], "nv": ["\u30cb\u30e5"], "nuan": ["\u30cc\u30a1\u30f3"], "nve": ["\u30cc\u30fc\u30a7\u309b\u30a1", "\u30cb\u30e5\u30a7"], "nuo": ["\u30cc\u30aa"], "o": ["\u30a5\u30aa"], "ou": ["\u30aa\u30a6"], "pa": ["\u30d1\u30fc"], "pai": ["\u30d1\u30a4"], "pan": ["\u30d1\u30f3"], "pang": ["\u30d1\u30f3"], "pao": ["\u30d1\u30aa"], "pei": ["\u30da\u30a4"], "pen": ["\u30da\u30f3"], "peng": ["\u30dd\u30f3"], "pi": ["\u30d4\u30fc"], "pian": ["\u30d4\u30a3\u30a7\u30f3"], "piao": ["\u30d4\u30a3\u30a1\u30aa"], "pie": ["\u30d4\u30a7"], "pin": ["\u30d4\u30f3"], "ping": ["\u30d4\u30f3"], "po": ["\u30dd\u30a9"], "pou": ["\u30dd\u30a6"], "pu": ["\u30d7\u30fc"], "qi": ["\u30c1\u30fc"], "qia": ["\u30c1\u30a3\u30a1"], "qian": ["\u30c1\u30a3\u30a7\u30f3"], "qiang": ["\u30c1\u30a3\u30a1\u30f3"], "qiao": ["\u30c1\u30a3\u30a1\u30a9"], "qie": ["\u30c1\u30a3\u30a7"], "qin": ["\u30c1\u30f3"], "qing": ["\u30c1\u30f3"], "qiong": ["\u30c1\u30a9\u30f3"], "qiu": ["\u30c1\u30a3\u30a5"], "qu": ["\u30c1\u30e5"], "quan": ["\u30c1\u30e5\u30a7\u30f3"], "que": ["\u30c1\u30e5\u30a7"], "qun": ["\u30c1\u30e5\u30f3"], "ran": ["\u30e9\u30f3"], "rang": ["\u30e9\u30f3"], "rao": ["\u30e9\u30aa"], "re": ["\u30eb\u30a7\u309b\u30a1"], "ren": ["\u30ec\u30f3"], "reng": ["\u30ed\u30f3"], "ri": ["\u30ea\u309b\u30fc"], "rong": ["\u30ed\u30f3"], "rou": ["\u30ed\u30a6"], "ru": ["\u30eb\u30fc"], "ruan": ["\u30eb\u30a1\u30f3"], "rui": ["\u30eb\u30a4\uff08\u30eb\u30a7\u30a4\uff09"], "run": ["\u30eb\u30f3"], "ruo": ["\u30eb\u30a9"], "sa": ["\u30b5\u30fc"], "sai": ["\u30b5\u30a4"], "san": ["\u30b5\u30f3"], "sang": ["\u30b5\u30f3"], "sao": ["\u30b5\u30aa"], "se": ["\u30b9\u30a7\u309b\u30a1"], "sen": ["\u30bb\u30f3"], "seng": ["\u30bd\u30f3"], "sha": ["\u30b7\u30e3"], "shai": ["\u30b7\u30e3\u30a4"], "shan": ["\u30b7\u30e3\u30f3"], "shang": ["\u30b7\u30e3\u30f3"], "shao": ["\u30b7\u30e3\u30aa"], "she": ["\u30b7\u30a7\u309b\u30a1"], "shen": ["\u30b7\u30a7\u30f3"], "sheng": ["\u30b7\u30a9\u30f3"], "shi": ["\u30b7\u30fc"], "shou": ["\u30b7\u30e7\u30a6"], "shu": ["\u30b7\u30e5"], "shua": ["\u30b7\u30e5\u30a1"], "shuai": ["\u30b7\u30e5\u30a1\u30a4"], "shuan": ["\u30b7\u30e5\u30a1\u30f3"], "shuang": ["\u30b7\u30e5\u30a5\u30a1\u30f3"], "shui": ["\u30b7\u30e5\u30a4\uff08\u30b7\u30e5\u30a7\u30a4\uff09"], "shun": ["\u30b7\u30e5\u30f3"], "shuo": ["\u30b7\u30e5\u30a9"], "si": ["\u30b9\u30fc"], "song": ["\u30bd\u30f3"], "sou": ["\u30bd\u30a6"], "su": ["\u30b9\u30fc"], "suan": ["\u30b9\u30a5\u30a1\u30f3"], "sui": ["\u30b9\u30a4\uff08\u30b9\u30a7\u30a4\uff09"], "sun": ["\u30b9\u30f3"], "suo": ["\u30b9\u30a9"], "ta": ["\u30bf\u30fc"], "tai": ["\u30bf\u30a4"], "tan": ["\u30bf\u30f3"], "tang": ["\u30bf\u30f3"], "tao": ["\u30bf\u30aa"], "te": ["\u30c6\u30a7\u309b\u30a1"], "teng": ["\u30c8\u30f3"], "ti": ["\u30c6\u30a3"], "tian": ["\u30c6\u30a3\u30a7\u30f3"], "tiao": ["\u30c6\u30a3\u30a1\u30a9"], "tie": ["\u30c6\u30a3\u30a7"], "ting": ["\u30c6\u30a3\u30f3"], "tong": ["\u30c8\u30f3"], "tou": ["\u30c8\u30a6"], "tu": ["\u30c8\u30a5"], "tuan": ["\u30c8\u30a5\u30a1\u30f3"], "tui": ["\u30c8\u30a5\u30a4\uff08\u30c8\u30a5\u30a7\u30a4\uff09"], "tun": ["\u30c8\u30a5\u30f3"], "tuo": ["\u30c8\u30a5\u30a9"], "wa": ["\u30a6\u30a1"], "wai": ["\u30ef\u30a3"], "wan": ["\u30ef\u30f3"], "wang": ["\u30ef\u30f3"], "wei": ["\u30a6\u30a7\u30a4"], "wen": ["\u30a6\u30a7\u30f3"], "weng": ["\u30a6\u30a9\u30f3"], "wo": ["\u30a6\u30a9"], "wu": ["\u30a6\u30fc"], "xi": ["\u30b7\u30fc"], "xia": ["\u30b7\u30a1"], "xian": ["\u30b7\u30a3\u30a7\u30f3"], "xiang": ["\u30b7\u30a3\u30a1\u30f3"], "xiao": ["\u30b7\u30a1\u30a9"], "xie": ["\u30b7\u30a7"], "xin": ["\u30b7\u30f3"], "xing": ["\u30b7\u30f3"], "xiong": ["\u30b7\u30a3\u30a9\u30f3"], "xiu": ["\u30b7\u30a5"], "xu": ["\u30b7\u30e5"], "xuan": ["\u30b7\u30e5\u30a7\u30f3"], "xue": ["\u30b7\u30e5\u30a7"], "xun": ["\u30b7\u30e5\u30f3"], "ya": ["\u30e4\u30fc"], "yan": ["\u30a4\u30a7\u30f3"], "yang": ["\u30e4\u30f3"], "yao": ["\u30a4\u30e3\u30a9"], "ye": ["\u30a4\u30a7"], "yi": ["\u30a4\u30fc"], "yin": ["\u30a4\u30f3"], "ying": ["\u30a4\u30f3"], "yong": ["\u30e8\u30f3"], "you": ["\u30e8\u30a6"], "yu": ["\u30e6\u30fc"], "yuan": ["\u30e6\u30a7\u30f3"], "yue": ["\u30e6\u30a7"], "yun": ["\u30e6\u30f3"], "za": ["\u30b6\u30fc"], "zai": ["\u30b6\u30a4"], "zan": ["\u30b6\u30f3"], "zang": ["\u30b6\u30f3"], "zao": ["\u30b6\u30aa"], "ze": ["\u30bc\u30a7\u309b\u30a1"], "zei": ["\u30bc\u30a4"], "zen": ["\u30bc\u30f3"], "zeng": ["\u30be\u30f3"], "zha": ["\u30c2\u30e3", "\u30b6\u30fc"], "zhai": ["\u30c2\u30e3\u30a4"], "zhan": ["\u30c2\u30e3\u30f3"], "zhao": ["\u30c2\u30e3\u30aa"], "zhe": ["\u30c2\u30a7\u309b\u30a1"], "zhen": ["\u30c2\u30a7\u30f3"], "zheng": ["\u30c2\u30a9\u30f3"], "zhi": ["\u30c2\u30fc"], "zhong": ["\u30c2\u30e7\u30f3"], "zhou": ["\u30c2\u30e7\u30a6"], "zhu": ["\u30c2\u30e5"], "zhua": ["\u30c2\u30e5\u30a2"], "zhuai": ["\u30c2\u30e5\u30a1\u30a4"], "zhuan": ["\u30c2\u30e5\u30a1\u30f3"], "zhuang": ["\u30c2\u30e5\u30a5\u30a1\u30f3"], "zhui": ["\u30c2\u30e5\u30a4\uff08\u30c2\u30e5\u30a7\u30a4\uff09"], "zhun": ["\u30c2\u30e5\u30f3"], "zhuo": ["\u30c2\u30e5\u30aa"], "zi": ["\u30ba\u30fc"], "zong": ["\u30be\u30f3"], "zou": ["\u30be\u30a6"], "zu": ["\u30ba\u30fc"], "zuan": ["\u30ba\u30a1\u30f3"], "zui": ["\u30ba\u30a4\uff08\u30ba\u30a7\u30a4\uff09"], "zun": ["\u30ba\u30f3"], "zuo": ["\u30ba\u30a5\u30a9"], "di": "\u30c7\u30a3"} -------------------------------------------------------------------------------- /conv/test.py: -------------------------------------------------------------------------------- 1 | 2 | from __future__ import unicode_literals 3 | 4 | from itertools import chain 5 | 6 | import pytest 7 | 8 | from pypinyin import ( 9 | lazy_pinyin, pinyin, NORMAL, TONE, TONE2, TONE3, INITIALS, 10 | FIRST_LETTER, FINALS, FINALS_TONE, FINALS_TONE2, FINALS_TONE3 11 | ) 12 | 13 | # test data from http://www.moe.edu.cn/s78/A19/yxs_left/moe_810/s230/195802/t19580201_186000.html # noqa 14 | # 声母表 15 | data_for_initials = [ 16 | ['玻', dict(style=INITIALS), ['b']], 17 | ['坡', dict(style=INITIALS), ['p']], 18 | ['摸', dict(style=INITIALS), ['m']], 19 | ['佛', dict(style=INITIALS), ['f']], 20 | ['得', dict(style=INITIALS), ['d']], 21 | ['特', dict(style=INITIALS), ['t']], 22 | ['讷', dict(style=INITIALS), ['n']], 23 | ['勒', dict(style=INITIALS), ['l']], 24 | ['哥', dict(style=INITIALS), ['g']], 25 | ['科', dict(style=INITIALS), ['k']], 26 | ['喝', dict(style=INITIALS), ['h']], 27 | ['基', dict(style=INITIALS), ['j']], 28 | ['欺', dict(style=INITIALS), ['q']], 29 | ['希', dict(style=INITIALS), ['x']], 30 | ['知', dict(style=INITIALS), ['zh']], 31 | ['蚩', dict(style=INITIALS), ['ch']], 32 | ['诗', dict(style=INITIALS), ['sh']], 33 | ['日', dict(style=INITIALS), ['r']], 34 | ['资', dict(style=INITIALS), ['z']], 35 | ['雌', dict(style=INITIALS), ['c']], 36 | ['思', dict(style=INITIALS), ['s']], 37 | ] 38 | 39 | 40 | @pytest.mark.parametrize('hans, kwargs, result', data_for_initials) 41 | def test_initials(hans, kwargs, result): 42 | assert lazy_pinyin(hans, **kwargs) == result 43 | assert list(chain(*pinyin(hans, **kwargs))) == result 44 | 45 | 46 | # 韵母表 47 | data_for_finals = [ 48 | ['衣', dict(style=FINALS), ['i']], 49 | ['乌', dict(style=FINALS), ['u']], 50 | ['迂', dict(style=FINALS), ['v']], 51 | ['啊', dict(style=FINALS), ['a']], 52 | ['呀', dict(style=FINALS), ['ia']], 53 | ['蛙', dict(style=FINALS), ['ua']], 54 | ['喔', dict(style=FINALS), ['o']], 55 | ['窝', dict(style=FINALS), ['uo']], 56 | ['鹅', dict(style=FINALS), ['e']], 57 | ['耶', dict(style=FINALS), ['ie']], 58 | ['约', dict(style=FINALS), ['ve']], 59 | ['哀', dict(style=FINALS), ['ai']], 60 | ['歪', dict(style=FINALS), ['uai']], 61 | # ['欸', dict(style=FINALS), ['ei']], 62 | ['诶', dict(style=FINALS), ['ei']], 63 | ['威', dict(style=FINALS), ['uei']], 64 | ['熬', dict(style=FINALS), ['ao']], 65 | ['腰', dict(style=FINALS), ['iao']], 66 | ['欧', dict(style=FINALS), ['ou']], 67 | ['忧', dict(style=FINALS), ['iou']], 68 | ['安', dict(style=FINALS), ['an']], 69 | ['烟', dict(style=FINALS), ['ian']], 70 | ['弯', dict(style=FINALS), ['uan']], 71 | ['冤', dict(style=FINALS), ['van']], 72 | ['恩', dict(style=FINALS), ['en']], 73 | ['因', dict(style=FINALS), ['in']], 74 | ['温', dict(style=FINALS), ['uen']], 75 | ['晕', dict(style=FINALS), ['vn']], 76 | ['昂', dict(style=FINALS), ['ang']], 77 | ['央', dict(style=FINALS), ['iang']], 78 | ['汪', dict(style=FINALS), ['uang']], 79 | ['亨', dict(style=FINALS), ['eng']], 80 | ['英', dict(style=FINALS), ['ing']], 81 | ['翁', dict(style=FINALS), ['ueng']], 82 | ['轰', dict(style=FINALS), ['ong']], 83 | ['雍', dict(style=FINALS), ['iong']], 84 | ['儿', dict(style=FINALS), ['er']], 85 | ] 86 | 87 | 88 | @pytest.mark.parametrize('hans, kwargs, result', data_for_finals) 89 | def test_finals(hans, kwargs, result): 90 | assert lazy_pinyin(hans, **kwargs) == result 91 | assert pinyin(hans, **kwargs) == [result] 92 | 93 | 94 | # 零声母 95 | data_for_zero_consonant = [ 96 | # i行的韵母,前面没有声母的时候,写成yi(衣),ya(呀),ye(耶),yao(腰), 97 | # you(忧),yan(烟),yin(因),yang(央),ying(英),yong(雍)。 98 | 99 | ['衣', dict(style=NORMAL), ['yi']], 100 | ['衣', dict(style=FINALS), ['i']], 101 | ['衣', dict(style=FINALS, strict=False), ['i']], 102 | ['呀', dict(style=NORMAL), ['ya']], 103 | ['呀', dict(style=FINALS), ['ia']], 104 | ['呀', dict(style=FINALS, strict=False), ['a']], 105 | ['耶', dict(style=NORMAL), ['ye']], 106 | ['耶', dict(style=FINALS), ['ie']], 107 | ['耶', dict(style=FINALS, strict=False), ['e']], 108 | ['腰', dict(style=NORMAL), ['yao']], 109 | ['腰', dict(style=FINALS), ['iao']], 110 | ['腰', dict(style=FINALS, strict=False), ['ao']], 111 | ['忧', dict(style=NORMAL), ['you']], 112 | ['忧', dict(style=FINALS), ['iou']], 113 | ['忧', dict(style=FINALS, strict=False), ['ou']], 114 | ['烟', dict(style=NORMAL), ['yan']], 115 | ['烟', dict(style=FINALS), ['ian']], 116 | ['烟', dict(style=FINALS, strict=False), ['an']], 117 | ['因', dict(style=NORMAL), ['yin']], 118 | ['因', dict(style=FINALS), ['in']], 119 | ['因', dict(style=FINALS, strict=False), ['in']], 120 | ['央', dict(style=NORMAL), ['yang']], 121 | ['央', dict(style=FINALS), ['iang']], 122 | ['央', dict(style=FINALS, strict=False), ['ang']], 123 | ['英', dict(style=NORMAL), ['ying']], 124 | ['英', dict(style=FINALS), ['ing']], 125 | ['英', dict(style=FINALS, strict=False), ['ing']], 126 | ['雍', dict(style=NORMAL), ['yong']], 127 | ['雍', dict(style=FINALS), ['iong']], 128 | ['雍', dict(style=FINALS, strict=False), ['ong']], 129 | 130 | ['宜', dict(style=NORMAL), ['yi']], 131 | ['宜', dict(style=NORMAL, strict=False), ['yi']], 132 | ['宜', dict(style=TONE), ['yí']], 133 | ['宜', dict(style=TONE, strict=False), ['yí']], 134 | ['宜', dict(style=TONE2), ['yi2']], 135 | ['宜', dict(style=TONE2, strict=False), ['yi2']], 136 | ['宜', dict(style=TONE3), ['yi2']], 137 | ['宜', dict(style=TONE3, strict=False), ['yi2']], 138 | ['宜', dict(style=INITIALS), ['']], 139 | ['宜', dict(style=INITIALS, strict=False), ['y']], 140 | ['宜', dict(style=FIRST_LETTER), ['y']], 141 | ['宜', dict(style=FIRST_LETTER, strict=False), ['y']], 142 | ['宜', dict(style=FINALS), ['i']], 143 | ['宜', dict(style=FINALS, strict=False), ['i']], 144 | ['宜', dict(style=FINALS_TONE), ['í']], 145 | ['宜', dict(style=FINALS_TONE, strict=False), ['í']], 146 | ['宜', dict(style=FINALS_TONE2), ['i2']], 147 | ['宜', dict(style=FINALS_TONE2, strict=False), ['i2']], 148 | ['宜', dict(style=FINALS_TONE3), ['i2']], 149 | ['宜', dict(style=FINALS_TONE3, strict=False), ['i2']], 150 | 151 | ['盐', dict(style=NORMAL), ['yan']], 152 | ['盐', dict(style=NORMAL, strict=False), ['yan']], 153 | ['盐', dict(style=TONE), ['yán']], 154 | ['盐', dict(style=TONE, strict=False), ['yán']], 155 | ['盐', dict(style=TONE2), ['ya2n']], 156 | ['盐', dict(style=TONE2, strict=False), ['ya2n']], 157 | ['盐', dict(style=TONE3), ['yan2']], 158 | ['盐', dict(style=TONE3, strict=False), ['yan2']], 159 | ['盐', dict(style=INITIALS), ['']], 160 | ['盐', dict(style=INITIALS, strict=False), ['y']], 161 | ['盐', dict(style=FIRST_LETTER), ['y']], 162 | ['盐', dict(style=FIRST_LETTER, strict=False), ['y']], 163 | ['盐', dict(style=FINALS), ['ian']], 164 | ['盐', dict(style=FINALS, strict=False), ['an']], 165 | ['盐', dict(style=FINALS_TONE), ['ián']], 166 | ['盐', dict(style=FINALS_TONE, strict=False), ['án']], 167 | ['盐', dict(style=FINALS_TONE2), ['ia2n']], 168 | ['盐', dict(style=FINALS_TONE2, strict=False), ['a2n']], 169 | ['盐', dict(style=FINALS_TONE3), ['ian2']], 170 | ['盐', dict(style=FINALS_TONE3, strict=False), ['an2']], 171 | 172 | 173 | # u行的韵母,前面没有声母的时候,写成wu(乌),wa(蛙),wo(窝),wai(歪), 174 | # wei(威),wan(弯),wen(温),wang(汪),weng(翁)。 175 | ['乌', dict(style=NORMAL), ['wu']], 176 | ['乌', dict(style=FINALS), ['u']], 177 | ['乌', dict(style=FINALS, strict=False), ['u']], 178 | ['蛙', dict(style=NORMAL), ['wa']], 179 | ['蛙', dict(style=FINALS), ['ua']], 180 | ['蛙', dict(style=FINALS, strict=False), ['a']], 181 | ['窝', dict(style=NORMAL), ['wo']], 182 | ['窝', dict(style=FINALS), ['uo']], 183 | ['窝', dict(style=FINALS, strict=False), ['o']], 184 | ['歪', dict(style=NORMAL), ['wai']], 185 | ['歪', dict(style=FINALS), ['uai']], 186 | ['歪', dict(style=FINALS, strict=False), ['ai']], 187 | ['威', dict(style=NORMAL), ['wei']], 188 | ['威', dict(style=FINALS), ['uei']], 189 | ['威', dict(style=FINALS, strict=False), ['ei']], 190 | ['弯', dict(style=NORMAL), ['wan']], 191 | ['弯', dict(style=FINALS), ['uan']], 192 | ['弯', dict(style=FINALS, strict=False), ['an']], 193 | ['温', dict(style=NORMAL), ['wen']], 194 | ['温', dict(style=FINALS), ['uen']], 195 | ['温', dict(style=FINALS, strict=False), ['en']], 196 | ['汪', dict(style=NORMAL), ['wang']], 197 | ['汪', dict(style=FINALS), ['uang']], 198 | ['汪', dict(style=FINALS, strict=False), ['ang']], 199 | ['翁', dict(style=NORMAL), ['weng']], 200 | ['翁', dict(style=FINALS), ['ueng']], 201 | ['翁', dict(style=FINALS, strict=False), ['eng']], 202 | 203 | ['武', dict(style=NORMAL), ['wu']], 204 | ['武', dict(style=NORMAL, strict=False), ['wu']], 205 | ['武', dict(style=TONE), ['wǔ']], 206 | ['武', dict(style=TONE, strict=False), ['wǔ']], 207 | ['武', dict(style=TONE2), ['wu3']], 208 | ['武', dict(style=TONE2, strict=False), ['wu3']], 209 | ['武', dict(style=TONE3), ['wu3']], 210 | ['武', dict(style=TONE3, strict=False), ['wu3']], 211 | ['武', dict(style=INITIALS), ['']], 212 | ['武', dict(style=INITIALS, strict=False), ['w']], 213 | ['武', dict(style=FIRST_LETTER), ['w']], 214 | ['武', dict(style=FIRST_LETTER, strict=False), ['w']], 215 | ['武', dict(style=FINALS), ['u']], 216 | ['武', dict(style=FINALS, strict=False), ['u']], 217 | ['武', dict(style=FINALS_TONE), ['ǔ']], 218 | ['武', dict(style=FINALS_TONE, strict=False), ['ǔ']], 219 | ['武', dict(style=FINALS_TONE2), ['u3']], 220 | ['武', dict(style=FINALS_TONE2, strict=False), ['u3']], 221 | ['武', dict(style=FINALS_TONE3), ['u3']], 222 | ['武', dict(style=FINALS_TONE3, strict=False), ['u3']], 223 | 224 | ['旺', dict(style=NORMAL), ['wang']], 225 | ['旺', dict(style=NORMAL, strict=False), ['wang']], 226 | ['旺', dict(style=TONE), ['wàng']], 227 | ['旺', dict(style=TONE, strict=False), ['wàng']], 228 | ['旺', dict(style=TONE2), ['wa4ng']], 229 | ['旺', dict(style=TONE2, strict=False), ['wa4ng']], 230 | ['旺', dict(style=TONE3), ['wang4']], 231 | ['旺', dict(style=TONE3, strict=False), ['wang4']], 232 | ['旺', dict(style=INITIALS), ['']], 233 | ['旺', dict(style=INITIALS, strict=False), ['w']], 234 | ['旺', dict(style=FIRST_LETTER), ['w']], 235 | ['旺', dict(style=FIRST_LETTER, strict=False), ['w']], 236 | ['旺', dict(style=FINALS), ['uang']], 237 | ['旺', dict(style=FINALS, strict=False), ['ang']], 238 | ['旺', dict(style=FINALS_TONE), ['uàng']], 239 | ['旺', dict(style=FINALS_TONE, strict=False), ['àng']], 240 | ['旺', dict(style=FINALS_TONE2), ['ua4ng']], 241 | ['旺', dict(style=FINALS_TONE2, strict=False), ['a4ng']], 242 | ['旺', dict(style=FINALS_TONE3), ['uang4']], 243 | ['旺', dict(style=FINALS_TONE3, strict=False), ['ang4']], 244 | 245 | 246 | # ü行的韵母,前面没有声母的时候,写成yu(迂),yue(约),yuan(冤), 247 | ['迂', dict(style=NORMAL), ['yu']], 248 | ['迂', dict(style=FINALS), ['v']], 249 | ['迂', dict(style=FINALS, strict=False), ['u']], 250 | ['约', dict(style=NORMAL), ['yue']], 251 | ['约', dict(style=FINALS), ['ve']], 252 | ['约', dict(style=FINALS, strict=False), ['ue']], 253 | ['冤', dict(style=NORMAL), ['yuan']], 254 | ['冤', dict(style=FINALS), ['van']], 255 | ['冤', dict(style=FINALS, strict=False), ['uan']], 256 | 257 | ['鱼', dict(style=NORMAL), ['yu']], 258 | ['鱼', dict(style=NORMAL, strict=False), ['yu']], 259 | ['鱼', dict(style=TONE), ['yú']], 260 | ['鱼', dict(style=TONE, strict=False), ['yú']], 261 | ['鱼', dict(style=TONE2), ['yu2']], 262 | ['鱼', dict(style=TONE2, strict=False), ['yu2']], 263 | ['鱼', dict(style=TONE3), ['yu2']], 264 | ['鱼', dict(style=TONE3, strict=False), ['yu2']], 265 | ['鱼', dict(style=INITIALS), ['']], 266 | ['鱼', dict(style=INITIALS, strict=False), ['y']], 267 | ['鱼', dict(style=FIRST_LETTER), ['y']], 268 | ['鱼', dict(style=FIRST_LETTER, strict=False), ['y']], 269 | ['鱼', dict(style=FINALS), ['v']], 270 | ['鱼', dict(style=FINALS, strict=False), ['u']], 271 | ['鱼', dict(style=FINALS_TONE), ['ǘ']], 272 | ['鱼', dict(style=FINALS_TONE, strict=False), ['ú']], 273 | ['鱼', dict(style=FINALS_TONE2), ['v2']], 274 | ['鱼', dict(style=FINALS_TONE2, strict=False), ['u2']], 275 | ['鱼', dict(style=FINALS_TONE3), ['v2']], 276 | ['鱼', dict(style=FINALS_TONE3, strict=False), ['u2']], 277 | 278 | ['约', dict(style=NORMAL), ['yue']], 279 | ['约', dict(style=NORMAL, strict=False), ['yue']], 280 | ['约', dict(style=TONE), ['yuē']], 281 | ['约', dict(style=TONE, strict=False), ['yuē']], 282 | ['约', dict(style=TONE2), ['yue1']], 283 | ['约', dict(style=TONE2, strict=False), ['yue1']], 284 | ['约', dict(style=TONE3), ['yue1']], 285 | ['约', dict(style=TONE3, strict=False), ['yue1']], 286 | ['约', dict(style=INITIALS), ['']], 287 | ['约', dict(style=INITIALS, strict=False), ['y']], 288 | ['约', dict(style=FIRST_LETTER), ['y']], 289 | ['约', dict(style=FIRST_LETTER, strict=False), ['y']], 290 | ['约', dict(style=FINALS), ['ve']], 291 | ['约', dict(style=FINALS, strict=False), ['ue']], 292 | ['约', dict(style=FINALS_TONE), ['üē']], 293 | ['约', dict(style=FINALS_TONE, strict=False), ['uē']], 294 | ['约', dict(style=FINALS_TONE2), ['ve1']], 295 | ['约', dict(style=FINALS_TONE2, strict=False), ['ue1']], 296 | ['约', dict(style=FINALS_TONE3), ['ve1']], 297 | ['约', dict(style=FINALS_TONE3, strict=False), ['ue1']], 298 | 299 | ['元', dict(style=NORMAL), ['yuan']], 300 | ['元', dict(style=NORMAL, strict=False), ['yuan']], 301 | ['元', dict(style=TONE), ['yuán']], 302 | ['元', dict(style=TONE, strict=False), ['yuán']], 303 | ['元', dict(style=TONE2), ['yua2n']], 304 | ['元', dict(style=TONE2, strict=False), ['yua2n']], 305 | ['元', dict(style=TONE3), ['yuan2']], 306 | ['元', dict(style=TONE3, strict=False), ['yuan2']], 307 | ['元', dict(style=INITIALS), ['']], 308 | ['元', dict(style=INITIALS, strict=False), ['y']], 309 | ['元', dict(style=FIRST_LETTER), ['y']], 310 | ['元', dict(style=FIRST_LETTER, strict=False), ['y']], 311 | ['元', dict(style=FINALS), ['van']], 312 | ['元', dict(style=FINALS, strict=False), ['uan']], 313 | ['元', dict(style=FINALS_TONE), ['üán']], 314 | ['元', dict(style=FINALS_TONE, strict=False), ['uán']], 315 | ['元', dict(style=FINALS_TONE2), ['va2n']], 316 | ['元', dict(style=FINALS_TONE2, strict=False), ['ua2n']], 317 | ['元', dict(style=FINALS_TONE3), ['van2']], 318 | ['元', dict(style=FINALS_TONE3, strict=False), ['uan2']], 319 | 320 | # yun 不应该受 un -> uen 规则的影响 321 | ['晕', dict(style=NORMAL), ['yun']], 322 | ['晕', dict(style=NORMAL, strict=False), ['yun']], 323 | ['晕', dict(style=TONE), ['yūn']], 324 | ['晕', dict(style=TONE, strict=False), ['yūn']], 325 | ['晕', dict(style=TONE2), ['yu1n']], 326 | ['晕', dict(style=TONE2, strict=False), ['yu1n']], 327 | ['晕', dict(style=TONE3), ['yun1']], 328 | ['晕', dict(style=TONE3, strict=False), ['yun1']], 329 | ['晕', dict(style=INITIALS), ['']], 330 | ['晕', dict(style=INITIALS, strict=False), ['y']], 331 | ['晕', dict(style=FIRST_LETTER), ['y']], 332 | ['晕', dict(style=FIRST_LETTER, strict=False), ['y']], 333 | ['晕', dict(style=FINALS), ['vn']], 334 | ['晕', dict(style=FINALS, strict=False), ['un']], 335 | ['晕', dict(style=FINALS_TONE), ['ǖn']], 336 | ['晕', dict(style=FINALS_TONE, strict=False), ['ūn']], 337 | ['晕', dict(style=FINALS_TONE2), ['v1n']], 338 | ['晕', dict(style=FINALS_TONE2, strict=False), ['u1n']], 339 | ['晕', dict(style=FINALS_TONE3), ['vn1']], 340 | ['晕', dict(style=FINALS_TONE3, strict=False), ['un1']], 341 | ] 342 | 343 | 344 | @pytest.mark.parametrize('hans, kwargs, result', data_for_zero_consonant) 345 | def test_zero_consonant(hans, kwargs, result): 346 | assert lazy_pinyin(hans, **kwargs) == result 347 | assert pinyin(hans, **kwargs) == [result] 348 | 349 | 350 | data_for_uv = [ 351 | # ü行的韵跟声母j,q,x拼的时候,写成ju(居),qu(区),xu(虚), 352 | # ü上两点也省略;但是跟声母n,l拼的时候,仍然写成nü(女),lü(吕)。 353 | ['居', dict(style=NORMAL), ['ju']], 354 | ['居', dict(style=FINALS), ['v']], 355 | ['居', dict(style=FINALS, strict=False), ['u']], 356 | ['区', dict(style=NORMAL), ['qu']], 357 | ['区', dict(style=FINALS), ['v']], 358 | ['区', dict(style=FINALS, strict=False), ['u']], 359 | ['虚', dict(style=NORMAL), ['xu']], 360 | ['虚', dict(style=FINALS), ['v']], 361 | ['虚', dict(style=FINALS, strict=False), ['u']], 362 | ['女', dict(style=NORMAL), ['nv']], 363 | ['女', dict(style=FINALS), ['v']], 364 | ['女', dict(style=FINALS, strict=False), ['v']], 365 | ['吕', dict(style=NORMAL), ['lv']], 366 | ['吕', dict(style=FINALS), ['v']], 367 | ['吕', dict(style=FINALS, strict=False), ['v']], 368 | 369 | ['具', dict(style=NORMAL), ['ju']], 370 | ['具', dict(style=NORMAL, strict=False), ['ju']], 371 | ['具', dict(style=TONE), ['jù']], 372 | ['具', dict(style=TONE, strict=False), ['jù']], 373 | ['具', dict(style=TONE2), ['ju4']], 374 | ['具', dict(style=TONE2, strict=False), ['ju4']], 375 | ['具', dict(style=TONE3), ['ju4']], 376 | ['具', dict(style=TONE3, strict=False), ['ju4']], 377 | ['具', dict(style=INITIALS), ['j']], 378 | ['具', dict(style=INITIALS, strict=False), ['j']], 379 | ['具', dict(style=FIRST_LETTER), ['j']], 380 | ['具', dict(style=FIRST_LETTER, strict=False), ['j']], 381 | ['具', dict(style=FINALS), ['v']], 382 | ['具', dict(style=FINALS, strict=False), ['u']], 383 | ['具', dict(style=FINALS_TONE), ['ǜ']], 384 | ['具', dict(style=FINALS_TONE, strict=False), ['ù']], 385 | ['具', dict(style=FINALS_TONE2), ['v4']], 386 | ['具', dict(style=FINALS_TONE2, strict=False), ['u4']], 387 | ['具', dict(style=FINALS_TONE3), ['v4']], 388 | ['具', dict(style=FINALS_TONE3, strict=False), ['u4']], 389 | 390 | ['取', dict(style=NORMAL), ['qu']], 391 | ['取', dict(style=NORMAL, strict=False), ['qu']], 392 | ['取', dict(style=TONE), ['qǔ']], 393 | ['取', dict(style=TONE, strict=False), ['qǔ']], 394 | ['取', dict(style=TONE2), ['qu3']], 395 | ['取', dict(style=TONE2, strict=False), ['qu3']], 396 | ['取', dict(style=TONE3), ['qu3']], 397 | ['取', dict(style=TONE3, strict=False), ['qu3']], 398 | ['取', dict(style=INITIALS), ['q']], 399 | ['取', dict(style=INITIALS, strict=False), ['q']], 400 | ['取', dict(style=FIRST_LETTER), ['q']], 401 | ['取', dict(style=FIRST_LETTER, strict=False), ['q']], 402 | ['取', dict(style=FINALS), ['v']], 403 | ['取', dict(style=FINALS, strict=False), ['u']], 404 | ['取', dict(style=FINALS_TONE), ['ǚ']], 405 | ['取', dict(style=FINALS_TONE, strict=False), ['ǔ']], 406 | ['取', dict(style=FINALS_TONE2), ['v3']], 407 | ['取', dict(style=FINALS_TONE2, strict=False), ['u3']], 408 | ['取', dict(style=FINALS_TONE3), ['v3']], 409 | ['取', dict(style=FINALS_TONE3, strict=False), ['u3']], 410 | 411 | ['徐', dict(style=NORMAL), ['xu']], 412 | ['徐', dict(style=NORMAL, strict=False), ['xu']], 413 | ['徐', dict(style=TONE), ['xú']], 414 | ['徐', dict(style=TONE, strict=False), ['xú']], 415 | ['徐', dict(style=TONE2), ['xu2']], 416 | ['徐', dict(style=TONE2, strict=False), ['xu2']], 417 | ['徐', dict(style=TONE3), ['xu2']], 418 | ['徐', dict(style=TONE3, strict=False), ['xu2']], 419 | ['徐', dict(style=INITIALS), ['x']], 420 | ['徐', dict(style=INITIALS, strict=False), ['x']], 421 | ['徐', dict(style=FIRST_LETTER), ['x']], 422 | ['徐', dict(style=FIRST_LETTER, strict=False), ['x']], 423 | ['徐', dict(style=FINALS), ['v']], 424 | ['徐', dict(style=FINALS, strict=False), ['u']], 425 | ['徐', dict(style=FINALS_TONE), ['ǘ']], 426 | ['徐', dict(style=FINALS_TONE, strict=False), ['ú']], 427 | ['徐', dict(style=FINALS_TONE2), ['v2']], 428 | ['徐', dict(style=FINALS_TONE2, strict=False), ['u2']], 429 | ['徐', dict(style=FINALS_TONE3), ['v2']], 430 | ['徐', dict(style=FINALS_TONE3, strict=False), ['u2']], 431 | 432 | ['女', dict(style=NORMAL), ['nv']], 433 | ['女', dict(style=NORMAL, strict=False), ['nv']], 434 | ['女', dict(style=TONE), ['nǚ']], 435 | ['女', dict(style=TONE, strict=False), ['nǚ']], 436 | ['女', dict(style=TONE2), ['nv3']], 437 | ['女', dict(style=TONE2, strict=False), ['nv3']], 438 | ['女', dict(style=TONE3), ['nv3']], 439 | ['女', dict(style=TONE3, strict=False), ['nv3']], 440 | ['女', dict(style=INITIALS), ['n']], 441 | ['女', dict(style=INITIALS, strict=False), ['n']], 442 | ['女', dict(style=FIRST_LETTER), ['n']], 443 | ['女', dict(style=FIRST_LETTER, strict=False), ['n']], 444 | ['女', dict(style=FINALS), ['v']], 445 | ['女', dict(style=FINALS, strict=False), ['v']], 446 | ['女', dict(style=FINALS_TONE), ['ǚ']], 447 | ['女', dict(style=FINALS_TONE, strict=False), ['ǚ']], 448 | ['女', dict(style=FINALS_TONE2), ['v3']], 449 | ['女', dict(style=FINALS_TONE2, strict=False), ['v3']], 450 | ['女', dict(style=FINALS_TONE3), ['v3']], 451 | ['女', dict(style=FINALS_TONE3, strict=False), ['v3']], 452 | 453 | ['吕', dict(style=NORMAL), ['lv']], 454 | ['吕', dict(style=NORMAL, strict=False), ['lv']], 455 | ['吕', dict(style=TONE), ['lǚ']], 456 | ['吕', dict(style=TONE, strict=False), ['lǚ']], 457 | ['吕', dict(style=TONE2), ['lv3']], 458 | ['吕', dict(style=TONE2, strict=False), ['lv3']], 459 | ['吕', dict(style=TONE3), ['lv3']], 460 | ['吕', dict(style=TONE3, strict=False), ['lv3']], 461 | ['吕', dict(style=INITIALS), ['l']], 462 | ['吕', dict(style=INITIALS, strict=False), ['l']], 463 | ['吕', dict(style=FIRST_LETTER), ['l']], 464 | ['吕', dict(style=FIRST_LETTER, strict=False), ['l']], 465 | ['吕', dict(style=FINALS), ['v']], 466 | ['吕', dict(style=FINALS, strict=False), ['v']], 467 | ['吕', dict(style=FINALS_TONE), ['ǚ']], 468 | ['吕', dict(style=FINALS_TONE, strict=False), ['ǚ']], 469 | ['吕', dict(style=FINALS_TONE2), ['v3']], 470 | ['吕', dict(style=FINALS_TONE2, strict=False), ['v3']], 471 | ['吕', dict(style=FINALS_TONE3), ['v3']], 472 | ['吕', dict(style=FINALS_TONE3, strict=False), ['v3']], 473 | ] 474 | 475 | 476 | @pytest.mark.parametrize('hans, kwargs, result', data_for_uv) 477 | def test_uv(hans, kwargs, result): 478 | assert lazy_pinyin(hans, **kwargs) == result 479 | assert pinyin(hans, **kwargs) == [result] 480 | 481 | 482 | data_for_iou = [ 483 | # iou,uei,uen前面加声母的时候,写成iu,ui,un。 484 | # 例如niu(牛),gui(归),lun(论)。 485 | ['牛', dict(style=NORMAL), ['niu']], 486 | ['牛', dict(style=FINALS), ['iou']], 487 | ['牛', dict(style=FINALS, strict=False), ['iu']], 488 | ['归', dict(style=NORMAL), ['gui']], 489 | ['归', dict(style=FINALS), ['uei']], 490 | ['归', dict(style=FINALS, strict=False), ['ui']], 491 | ['论', dict(style=NORMAL), ['lun']], 492 | ['论', dict(style=FINALS), ['uen']], 493 | ['论', dict(style=FINALS, strict=False), ['un']], 494 | 495 | ['牛', dict(style=NORMAL), ['niu']], 496 | ['牛', dict(style=NORMAL, strict=False), ['niu']], 497 | ['牛', dict(style=TONE), ['niú']], 498 | ['牛', dict(style=TONE, strict=False), ['niú']], 499 | ['牛', dict(style=TONE2), ['niu2']], 500 | ['牛', dict(style=TONE2, strict=False), ['niu2']], 501 | ['牛', dict(style=TONE3), ['niu2']], 502 | ['牛', dict(style=TONE3, strict=False), ['niu2']], 503 | ['牛', dict(style=INITIALS), ['n']], 504 | ['牛', dict(style=INITIALS, strict=False), ['n']], 505 | ['牛', dict(style=FIRST_LETTER), ['n']], 506 | ['牛', dict(style=FIRST_LETTER, strict=False), ['n']], 507 | ['牛', dict(style=FINALS), ['iou']], 508 | ['牛', dict(style=FINALS, strict=False), ['iu']], 509 | ['牛', dict(style=FINALS_TONE), ['ioú']], 510 | ['牛', dict(style=FINALS_TONE, strict=False), ['iú']], 511 | ['牛', dict(style=FINALS_TONE2), ['iou2']], 512 | ['牛', dict(style=FINALS_TONE2, strict=False), ['iu2']], 513 | ['牛', dict(style=FINALS_TONE3), ['iou2']], 514 | ['牛', dict(style=FINALS_TONE3, strict=False), ['iu2']], 515 | ] 516 | 517 | 518 | @pytest.mark.parametrize('hans, kwargs, result', data_for_iou) 519 | def test_iou(hans, kwargs, result): 520 | assert lazy_pinyin(hans, **kwargs) == result 521 | assert pinyin(hans, **kwargs) == [result] 522 | 523 | 524 | data_for_uei = [ 525 | # iou,uei,uen前面加声母的时候,写成iu,ui,un。 526 | # 例如niu(牛),gui(归),lun(论)。 527 | ['鬼', dict(style=NORMAL), ['gui']], 528 | ['鬼', dict(style=NORMAL, strict=False), ['gui']], 529 | ['鬼', dict(style=TONE), ['guǐ']], 530 | ['鬼', dict(style=TONE, strict=False), ['guǐ']], 531 | ['鬼', dict(style=TONE2), ['gui3']], 532 | ['鬼', dict(style=TONE2, strict=False), ['gui3']], 533 | ['鬼', dict(style=TONE3), ['gui3']], 534 | ['鬼', dict(style=TONE3, strict=False), ['gui3']], 535 | ['鬼', dict(style=INITIALS), ['g']], 536 | ['鬼', dict(style=INITIALS, strict=False), ['g']], 537 | ['鬼', dict(style=FIRST_LETTER), ['g']], 538 | ['鬼', dict(style=FIRST_LETTER, strict=False), ['g']], 539 | ['鬼', dict(style=FINALS), ['uei']], 540 | ['鬼', dict(style=FINALS, strict=False), ['ui']], 541 | ['鬼', dict(style=FINALS_TONE), ['ueǐ']], 542 | ['鬼', dict(style=FINALS_TONE, strict=False), ['uǐ']], 543 | ['鬼', dict(style=FINALS_TONE2), ['uei3']], 544 | ['鬼', dict(style=FINALS_TONE2, strict=False), ['ui3']], 545 | ['鬼', dict(style=FINALS_TONE3), ['uei3']], 546 | ['鬼', dict(style=FINALS_TONE3, strict=False), ['ui3']], 547 | ] 548 | 549 | 550 | @pytest.mark.parametrize('hans, kwargs, result', data_for_uei) 551 | def test_uei(hans, kwargs, result): 552 | assert lazy_pinyin(hans, **kwargs) == result 553 | assert pinyin(hans, **kwargs) == [result] 554 | 555 | 556 | data_for_uen = [ 557 | # iou,uei,uen前面加声母的时候,写成iu,ui,un。 558 | # 例如niu(牛),gui(归),lun(论)。 559 | ['论', dict(style=NORMAL), ['lun']], 560 | ['论', dict(style=TONE), ['lùn']], 561 | ['论', dict(style=TONE, strict=False), ['lùn']], 562 | ['论', dict(style=TONE2), ['lu4n']], 563 | ['论', dict(style=TONE2, strict=False), ['lu4n']], 564 | ['论', dict(style=TONE3), ['lun4']], 565 | ['论', dict(style=TONE3, strict=False), ['lun4']], 566 | ['论', dict(style=INITIALS), ['l']], 567 | ['论', dict(style=INITIALS, strict=False), ['l']], 568 | ['论', dict(style=FIRST_LETTER), ['l']], 569 | ['论', dict(style=FIRST_LETTER, strict=False), ['l']], 570 | ['论', dict(style=FINALS), ['uen']], 571 | ['论', dict(style=FINALS, strict=False), ['un']], 572 | ['论', dict(style=FINALS_TONE), ['ùen']], 573 | ['论', dict(style=FINALS_TONE, strict=False), ['ùn']], 574 | ['论', dict(style=FINALS_TONE2), ['u4en']], 575 | ['论', dict(style=FINALS_TONE2, strict=False), ['u4n']], 576 | ['论', dict(style=FINALS_TONE3), ['uen4']], 577 | ['论', dict(style=FINALS_TONE3, strict=False), ['un4']], 578 | ] 579 | 580 | 581 | @pytest.mark.parametrize('hans, kwargs, result', data_for_uen) 582 | def test_uen(hans, kwargs, result): 583 | assert lazy_pinyin(hans, **kwargs) == result 584 | assert pinyin(hans, **kwargs) == [result] 585 | 586 | 587 | if __name__ == '__main__': 588 | import pytest 589 | pytest.cmdline.main() -------------------------------------------------------------------------------- /conv/tool.py: -------------------------------------------------------------------------------- 1 | from pypinyin import pinyin, lazy_pinyin,Style 2 | from conv.constants import isCNchar 3 | import json 4 | if __name__ =='__main__': 5 | with open(r'D:\Github\cnfurikana\conv\allpronunce.txt',encoding='utf-8') as F: 6 | L = [ c for c in F.read() if isCNchar(c) ] 7 | print(len(L)) 8 | T = ''.join(L) 9 | for i in range(5): 10 | print(T[i*100 : i*100 +100]) 11 | 12 | with open(r'D:\Github\cnfurikana\conv\kanalist0.txt',encoding='utf-8') as F: 13 | Ls = [ l for l in F.readlines() ] 14 | for l in Ls: 15 | if len(l.strip()) ==0 :Ls.remove(l) 16 | else:print(len(l.strip()),l) 17 | with open(r'D:\Github\cnfurikana\conv\kanalist.txt','w', encoding='utf-8') as f: 18 | f.writelines(Ls) 19 | 20 | with open(r'D:\Github\cnfurikana\conv\kanalist0.txt', encoding='utf-8') as F: 21 | dic = {} 22 | Ls = [l for l in F.readlines()] 23 | for ind,l in enumerate(Ls): 24 | if isCNchar(l[0]): 25 | dic [lazy_pinyin(l[0], style=Style.NORMAL, neutral_tone_with_five=True)[0]] = list(set(Ls[ind-2].strip().split('/'))) 26 | dic['den'] = dic['deng'].copy() 27 | for key in dic: 28 | if len(dic[key]) > 1: 29 | print(key,dic[key]) 30 | #手动去多音 31 | del dic['can'][1] 32 | del dic['ga'][0] 33 | del dic['ga'][1] 34 | del dic['chuo'][0] 35 | del dic['hai'][1] 36 | del dic['le'][1] 37 | del dic['mo'][0] 38 | del dic['o'][1] 39 | #del dic['zha'][0] 40 | del dic['zhuai'][0] 41 | dic['di'] = "ディ" 42 | ######### 43 | for key in dic: 44 | pass#print(key,dic[key]) 45 | 46 | with open(r'D:\Github\cnfurikana\conv\table.json','w', encoding='utf-8') as of: 47 | json.dump(dic,of) 48 | 49 | with open(r'D:\Github\cnfurikana\conv\table.json', encoding='utf-8') as of: 50 | print(json.load(of)) -------------------------------------------------------------------------------- /localization.py: -------------------------------------------------------------------------------- 1 | import json 2 | import re 3 | 4 | defaultText = ' ' 5 | 6 | about_text = """ \ 7 | v1.2.0\n 8 | https://github.com/Gleiphir\n 9 | All rights reserved\n 10 | \n 11 | distributed under MIT license\n 12 | \n 13 | It's a free software, do NOT pay for this.\n 14 | 此为自由软件,请不要为此付费。\n 15 | これはフリーソフトであるので無料です。\n 16 | \n 17 | 辛苦了,字幕组的各位\n 18 | 时代变了,这也许能帮上忙 19 | """ 20 | 21 | 22 | class localePkg: 23 | def __init__(self,JSONfile): 24 | pass#self. -------------------------------------------------------------------------------- /preferences.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/preferences.py -------------------------------------------------------------------------------- /readFromFile-QT.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | 将舰长的名字每人一行写入txt,然后运行这个文件 4 | 5 | 6 | """ 7 | about_text = """ \ 8 | v1.1.0\n 9 | https://github.com/Gleiphir\n 10 | All rights reserved\n 11 | \nNov 11,2020\n 12 | \n\n 13 | 请不要为本软件付费\n 14 | \n\n 15 | 辛苦了,绯赤艾莉欧组\n 16 | 时代变了,这也许能帮上忙 17 | """ 18 | 19 | import time 20 | from PyQt5 import QtGui 21 | import conv.conventer 22 | import os 23 | 24 | root = Tk() 25 | 26 | root.title('中文假名注音程序') 27 | 28 | Label(root, text='将需要注音的内容逐行写入txt,在下面选择txt文件名\n将会在工作目录下output文件夹内生成文件名为原文件名+日期时间的注音txt文件\n请使用UTF-8编码\n').grid(row=0, column=0) 29 | 30 | v2 = StringVar() 31 | 32 | file_path = '[ ]' 33 | 34 | SV_file_path = StringVar() 35 | Lname = Label(root, text='将需要注音的内容逐行写入txt,在下面选择txt文件名\n将会在工作目录下output文件夹内生成文件名为原文件名+日期时间的注音txt文件\n请使用UTF-8编码\n',textvariable=SV_file_path) 36 | Lname.grid(row=2, column=0, padx=2, pady=5) 37 | 38 | 39 | 40 | 41 | 42 | def convert(): 43 | cvr = conv.conventer.conventer(10) 44 | if not os.path.exists(file_path): 45 | messagebox.showwarning("File Not found","找不到文档") 46 | return 47 | name,suf = os.path.splitext(os.path.basename(file_path)) 48 | 49 | tstamp = time.strftime("%y%m%d-%H%M", time.localtime()) 50 | of_path = os.path.join(os.getcwd(),"output/",name + tstamp + suf) 51 | print(of_path) 52 | res = [] 53 | with open(file_path,encoding="utf-8") as ifp: 54 | for iline in ifp.readlines(): 55 | for oline in cvr.feed(iline[:-1]): 56 | res.append(''.join(oline)) 57 | res.append(os.linesep) 58 | 59 | with open(of_path, "w", encoding="utf-8") as ofp: 60 | ofp.writelines(res) 61 | messagebox.showinfo('写入完成', '写入完成\n{}'.format(of_path)) 62 | 63 | def about(): 64 | messagebox.showinfo('关于',about_text) 65 | 66 | def browse(): 67 | global file_path 68 | file_path = filedialog.askopenfilename() 69 | SV_file_path.set("source: [ "+ file_path + " ]") 70 | 71 | Button(root, text='浏览', width=10, command=browse) \ 72 | \ 73 | .grid(row=2, column=1, sticky=E, padx=50, pady=5) 74 | 75 | Button(root, text='开始生成', width=10, command=convert) \ 76 | \ 77 | .grid(row=3, column=0, sticky=W, padx=10, pady=5) 78 | 79 | Button(root, text='关于', width=10, command=about) \ 80 | \ 81 | .grid(row=3, column=0, sticky=E, padx=30, pady=5) 82 | 83 | Button(root, text='点击退出', width=10, command=root.quit) \ 84 | \ 85 | .grid(row=3, column=1, sticky=E, padx=50, pady=5) 86 | 87 | # 退出按钮必须是双击打开.py文件才可以,而不是在IDLE下调试运行时 88 | 89 | 90 | mainloop() -------------------------------------------------------------------------------- /readFromFile.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | 将舰长的名字每人一行写入txt,然后运行这个文件 4 | 5 | 6 | """ 7 | about_text = """ \ 8 | v1.1.0\n 9 | https://github.com/Gleiphir\n 10 | All rights reserved\n 11 | \nNov 11,2020\n 12 | \n\n 13 | 请不要为本软件付费\n 14 | \n\n 15 | 辛苦了,绯赤艾莉欧组\n 16 | 时代变了,这也许能帮上忙 17 | """ 18 | 19 | import time 20 | from tkinter import * 21 | from tkinter import messagebox 22 | from tkinter import filedialog 23 | import conv.conventer 24 | import os 25 | 26 | root = Tk() 27 | 28 | root.title('中文假名注音程序') 29 | 30 | Label(root, text='将需要注音的内容逐行写入txt,在下面选择txt文件名\n将会在工作目录下output文件夹内生成文件名为原文件名+日期时间的注音txt文件\n请使用UTF-8编码\n').grid(row=0, column=0) 31 | 32 | v2 = StringVar() 33 | 34 | file_path = '[ ]' 35 | 36 | SV_file_path = StringVar() 37 | Lname = Label(root, text='将需要注音的内容逐行写入txt,在下面选择txt文件名\n将会在工作目录下output文件夹内生成文件名为原文件名+日期时间的注音txt文件\n请使用UTF-8编码\n',textvariable=SV_file_path) 38 | Lname.grid(row=2, column=0, padx=2, pady=5) 39 | 40 | 41 | 42 | 43 | 44 | def convert(): 45 | cvr = conv.conventer.conventer(10) 46 | if not os.path.exists(file_path): 47 | messagebox.showwarning("File Not found","找不到文档") 48 | return 49 | name,suf = os.path.splitext(os.path.basename(file_path)) 50 | 51 | tstamp = time.strftime("%y%m%d-%H%M", time.localtime()) 52 | of_path = os.path.join(os.getcwd(),"output/",name + tstamp + suf) 53 | print(of_path) 54 | res = [] 55 | with open(file_path,encoding="utf-8") as ifp: 56 | for iline in ifp.readlines(): 57 | for oline in cvr.feed(iline[:-1]): 58 | res.append(''.join(oline)) 59 | res.append(os.linesep) 60 | 61 | with open(of_path, "w", encoding="utf-8") as ofp: 62 | ofp.writelines(res) 63 | messagebox.showinfo('写入完成', '写入完成\n{}'.format(of_path)) 64 | 65 | def about(): 66 | messagebox.showinfo('关于',about_text) 67 | 68 | def browse(): 69 | global file_path 70 | file_path = filedialog.askopenfilename() 71 | SV_file_path.set("source: [ "+ file_path + " ]") 72 | 73 | Button(root, text='浏览', width=10, command=browse) \ 74 | \ 75 | .grid(row=2, column=1, sticky=E, padx=50, pady=5) 76 | 77 | Button(root, text='开始生成', width=10, command=convert) \ 78 | \ 79 | .grid(row=3, column=0, sticky=W, padx=10, pady=5) 80 | 81 | Button(root, text='关于', width=10, command=about) \ 82 | \ 83 | .grid(row=3, column=0, sticky=E, padx=30, pady=5) 84 | 85 | Button(root, text='点击退出', width=10, command=root.quit) \ 86 | \ 87 | .grid(row=3, column=1, sticky=E, padx=50, pady=5) 88 | 89 | # 退出按钮必须是双击打开.py文件才可以,而不是在IDLE下调试运行时 90 | 91 | 92 | mainloop() -------------------------------------------------------------------------------- /readFromFile.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | 3 | block_cipher = None 4 | 5 | 6 | a = Analysis(['readFromFile.py', 'realtimeConvert.py'], 7 | pathex=['D:\\Github\\cnfurikana'], 8 | binaries=[], 9 | datas=[], 10 | hiddenimports=[], 11 | hookspath=[], 12 | runtime_hooks=[], 13 | excludes=['pyqt5'], 14 | win_no_prefer_redirects=False, 15 | win_private_assemblies=False, 16 | cipher=block_cipher, 17 | noarchive=False) 18 | pyz = PYZ(a.pure, a.zipped_data, 19 | cipher=block_cipher) 20 | exe = EXE(pyz, 21 | a.scripts, 22 | [], 23 | exclude_binaries=True, 24 | name='readFromFile', 25 | debug=False, 26 | bootloader_ignore_signals=False, 27 | strip=False, 28 | upx=True, 29 | console=False ) 30 | coll = COLLECT(exe, 31 | a.binaries, 32 | a.zipfiles, 33 | a.datas, 34 | strip=False, 35 | upx=True, 36 | upx_exclude=[], 37 | name='readFromFile') 38 | -------------------------------------------------------------------------------- /realtimeConvert.py: -------------------------------------------------------------------------------- 1 | """ 2 | 3 | 将舰长的名字每人一行写入txt,然后运行这个文件 4 | 5 | 6 | """ 7 | about_text = """ \ 8 | v1.1.0\n 9 | https://github.com/Gleiphir\n 10 | All rights reserved\n 11 | \nNov 11,2020\n 12 | \n\n 13 | 请不要为本软件付费\n 14 | \n\n 15 | 辛苦了,绯赤艾莉欧组\n 16 | 时代变了,这也许能帮上忙 17 | """ 18 | 19 | import time 20 | from tkinter import * 21 | from tkinter import messagebox 22 | from tkinter import filedialog 23 | import conv.conventer 24 | import os 25 | 26 | root = Tk() 27 | 28 | root.title('中文假名注音程序') 29 | 30 | Label(root, text='将需要注音的内容复制贴入下方输入框\n请使用UTF-8编码\n').grid(row=0, column=0) 31 | 32 | v2 = StringVar() 33 | 34 | file_path = '[ ]' 35 | 36 | SV_file_path = StringVar() 37 | LIn = Entry() 38 | LIn.grid(row=2, column=0, padx=2, pady=5) 39 | 40 | LOut = Label(root, textvariable=v2) 41 | LOut.grid(row=3, column=0) 42 | 43 | 44 | 45 | 46 | def convert(): 47 | cvr = conv.conventer.conventer(10) 48 | res = cvr.feed(LIn.get()) 49 | text = '' 50 | for ln in res: 51 | text += ''.join(ln) +'\n' 52 | print(text) 53 | v2.set(text) 54 | 55 | 56 | 57 | def about(): 58 | messagebox.showinfo('关于',about_text) 59 | 60 | def browse(): 61 | global file_path 62 | file_path = filedialog.askopenfilename() 63 | SV_file_path.set("source: [ "+ file_path + " ]") 64 | 65 | Button(root, text='转换', width=10, command=convert) \ 66 | \ 67 | .grid(row=3, column=1, sticky=E, padx=50, pady=5) 68 | 69 | Button(root, text='关于', width=10, command=about) \ 70 | \ 71 | .grid(row=4, column=0, sticky=E, padx=30, pady=5) 72 | 73 | Button(root, text='点击退出', width=10, command=root.quit) \ 74 | \ 75 | .grid(row=4, column=1, sticky=E, padx=50, pady=5) 76 | 77 | # 退出按钮必须是双击打开.py文件才可以,而不是在IDLE下调试运行时 78 | 79 | 80 | mainloop() -------------------------------------------------------------------------------- /resources/bg-sample-full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/resources/bg-sample-full.png -------------------------------------------------------------------------------- /resources/bg-sample-scroll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/resources/bg-sample-scroll.png -------------------------------------------------------------------------------- /resources/bg-sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/resources/bg-sample.png -------------------------------------------------------------------------------- /settings/cinderella.qss: -------------------------------------------------------------------------------- 1 | QMainWindow > .QFrame{ 2 | background-color:#E6E6FA; 3 | /*background-color:#FFF5EE;*/ 4 | /*background-image: url("resources/bg-sample-scroll.png");*/ 5 | } 6 | 7 | QFrame > .QLabel{ 8 | background-color:#66CDAA; 9 | color:black; 10 | border-radius:5px; 11 | } 12 | 13 | #LHintRT{ 14 | /*background-color:#FFF5EE;*/ 15 | 16 | border-style: solid; 17 | } 18 | 19 | #LRTOut{ 20 | border-width: 0px 2px 0px 2px; 21 | border-style: solid; 22 | border-radius:5px; 23 | background-color:#FFC1C1; 24 | } 25 | 26 | #LFileName{ 27 | border-style: solid; 28 | border-radius:5px; 29 | background-color:#F0FFF0; 30 | } 31 | 32 | QMainWindow QLineEdit { 33 | border: 2px solid gray; 34 | border-width: 3px 3px 3px 3px; 35 | border-radius: 10px; 36 | padding: 0 8px; 37 | background: #FFE4E1; 38 | selection-background-color: darkgray; 39 | } 40 | 41 | QFrame > QPushButton{ 42 | background-color:#673ab7; 43 | color:#F5F5F5; 44 | border:none; 45 | border-width: 1px 1px 1px 1px; 46 | border-color: white; 47 | border-style: solid; 48 | border-radius:6px; 49 | } 50 | /*QPushButton#QuitBtn{ 51 | background-color:#673ab7; 52 | color:red; 53 | border:none; 54 | border-width: 0px 0px 0px 0px; 55 | border-style: solid; 56 | border-radius:6px; 57 | } 58 | */ -------------------------------------------------------------------------------- /settings/settings-cn.ini: -------------------------------------------------------------------------------- 1 | #settings.ini 2 | [Text] 3 | windowtitle=CN furikana 4 | hintRT=将需要注音的内容输入下方,点击右侧按钮注音 5 | hintFile=将需要注音的内容逐行写入txt,在下面选择txt文件名 6 | 将会在工作目录下output文件夹内生成文件名为原文件名+日期时间的注音txt文件 7 | 请使用UTF-8编码 8 | Bmark=注音 9 | Bbrowse=浏览 10 | Babout=关于 11 | Bgenerate=生成文档 12 | Bquit=退出 13 | btwLine=- 14 | 15 | [TextWarning] 16 | fileNotSpecified=请指定文件 17 | fileNotFound=找不到指定的文件 18 | 19 | [Intval] 20 | LineWidth=40 21 | fontsize=13 22 | 23 | [Floatval] 24 | none = 0.0 25 | 26 | [customFile] 27 | #stylish = cinderella.qss 28 | 29 | [reserved] 30 | 31 | empty string value here = '' 32 | -------------------------------------------------------------------------------- /settings/settings-jp.ini: -------------------------------------------------------------------------------- 1 | #settings.ini 2 | [Text] 3 | windowtitle=CN furikana 4 | hintRT=中国語をここで入力して右側のボタンを押したら、かなをつける。 5 | hintFile=中国語をtxtで書いた,下でファイルを選びなさい 6 | output/ でファイルを生成する。ファイル名は、元のうえで時間をつけるとなります。 7 | エンコーディングはUTF-8にしてください。 8 | Bmark=つける 9 | Bbrowse=ブラウズ 10 | Babout=About 11 | Bgenerate=ファイルを生成 12 | Bquit=終わり 13 | btwLine=- 14 | 15 | [TextWarning] 16 | fileNotSpecified=ファイルは必要です 17 | fileNotFound=ファイルを見つけられない 18 | 19 | [Intval] 20 | LineWidth=40 21 | fontsize=13 22 | 23 | [Floatval] 24 | none = 0.0 25 | 26 | 27 | 28 | [customFile] 29 | #stylish = cinderella.qss 30 | 31 | [reserved] 32 | 33 | empty string value here = '' 34 | -------------------------------------------------------------------------------- /settings/settings.ini: -------------------------------------------------------------------------------- 1 | #settings.ini 2 | [Text] 3 | windowtitle=CN furikana 4 | hintRT=中国語をここで入力して右側のボタンを押したら、かなをつける。 5 | hintFile=中国語をtxtで書いた,下でファイルを選びなさい 6 | output/ でファイルを生成する。ファイル名は、元のうえで時間をつけるとなります。 7 | エンコーディングはUTF-8にしてください。 8 | Bmark=つける 9 | Bbrowse=ブラウズ 10 | Babout=About 11 | Bgenerate=ファイルを生成 12 | Bquit=終わり 13 | btwLine=- 14 | 15 | [TextWarning] 16 | fileNotSpecified=ファイルは必要です 17 | fileNotFound=ファイルを見つけられない 18 | 19 | [Intval] 20 | LineWidth=40 21 | fontsize=13 22 | 23 | [Floatval] 24 | none = 0.0 25 | 26 | [customFile] 27 | stylish=settings/cinderella.qss 28 | 29 | [reserved] 30 | 31 | empty string value here = '' 32 | -------------------------------------------------------------------------------- /table.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Gleiphir/cnfurikana/df55b2b26e9c2c6089a80b558002f1310795550c/table.py --------------------------------------------------------------------------------