主题
简繁转换为什么不能逐字替换
把简体转成繁体,看起来像是查表替换——一个字对一个字。实际上这条路走不通,原因藏在汉字简化的历史里。
一简对多繁
简化字合并了一批原本不同的繁体字。最典型的例子:
| 简体 | 繁体 | 什么时候用 |
|---|---|---|
| 发 | 髮 | 头髮、理髮 |
| 发 | 發 | 發展、發現 |
| 干 | 乾 | 乾淨、乾燥 |
| 干 | 幹 | 幹活、幹部 |
| 干 | 干 | 干擾、干涉 |
| 面 | 麵 | 麵條、麵粉 |
| 面 | 面 | 面對、表面 |
一个「干」字对应三个繁体字,选哪个完全取决于它在哪个词里。逐字替换必然出错,而且错得很显眼——「头发」变成「頭發」,在繁体读者眼里就像把「头发」写成「头髮展」一样刺眼。
正确做法是先分词再转换:识别出「头发」是一个词,整词映射到「頭髮」。这也是为什么靠正则或查找替换做简繁转换总是会翻车。
还有词汇差异
字形之外还有一层:两岸三地对同一事物用不同的词。
| 大陆 | 台湾 | 香港 |
|---|---|---|
| 软件 | 軟體 | 軟件 |
| 网络 | 網路 | 網絡 |
| 打印机 | 印表機 | 打印機 |
| 鼠标 | 滑鼠 | 滑鼠 |
| 视频 | 影片 | 影片 |
只做字形转换的话,「软件」会变成「軟件」——字是繁体了,但台湾读者读起来仍然是个陌生词。所以「转成繁体」需要先明确是转给谁看:台湾用语和香港用语并不相同。
字幕文件更要小心
把字幕文件做简繁转换时,还多一层风险:字幕是带格式的文本。SRT 里有序号和时间轴,ASS 里还有样式标签(字体、颜色、位置)。
如果转换程序不区分正文和标记,会把时间轴里的数字、样式标签里的英文一并「转换」,结果是文件结构被破坏、播放器直接不认。
所以字幕转换必须先解析格式、只转正文字段,再按原格式写回——这和直接对整个文件做查找替换是两件事。
反方向同样有坑
繁转简看似简单(多对一,不会歧义),但会丢信息且不可逆。「頭髮」和「發展」都转成「发」之后,再想转回繁体就必须重新做一次分词判断——转换链路上每多一轮,出错机会就多一次。
结论是:保留原始文本,转换只在输出时做一次,不要拿转换结果当新的原始文本继续加工。
什么时候该转、什么时候不该转
有几类内容不该跟着一起转:
代码和命令。繁体的「發」在代码里没有意义,变量名、函数名、路径一旦被转换,程序直接跑不起来。
专有名词与商标。公司名、产品名的写法由持有者定,不该由转换程序改。「腾讯」在繁体语境里仍写作「騰訊」是对的,但有些品牌的官方繁体写法并不等于机械转换的结果。
引文。引用他人原文时改动字形,严格说已经不是原文了。学术写作里这一点尤其要注意。
实践上的做法是:转换前把这几类内容标记出来排除,或者转换后重点复查这几处。
顺带说说另外几类文本处理
同一类里还有几个高频需求,都有类似的「看起来简单、细节要命」的特点:
汉字转拼音——多音字是绕不开的坎。「重庆」的「重」读 chóng,「重量」的「重」读 zhòng,同样需要靠词来判断。此外声调标注有三种常见写法(符号 ā、数字 a1、无声调 a),用在不同场景。
正则查找替换——批量改文本最快的工具,也最容易误伤。写完表达式先在「测试匹配」模式下看看究竟命中了什么,再执行替换;捕获分组能让你看清每一段匹配到的具体内容。
网页正文提取——把网页存成 Markdown 的难点不在抓取,在于剥掉导航、广告、推荐位这些噪声,只留正文。