繁体字看不懂?教你如何制作简繁转换!

768 阅读6分钟

繁体字看不懂

问题

最近在小说网站看到了很多用繁体字写的小说,这让我感到了很苦恼,因为,看不懂。当然,也不是真的看不懂,如果慢慢看的话,还是可以看懂的。但是呢,一般看小说的速度都比较快,由于繁体字比较不太熟悉,在这种速度下阅读,就会感觉有点吃力,因此不想继续看了。

这个时候,我还发现,很多网站提供了一键简/繁切换的功能,这个用起来非常不错,只要将语言设置为“简体中文”,所有的文字就都变成“简体中文”了,这真是非常的神奇啊,他们到底是怎么做到的呢?难道是存储了两套不同的文字吗?那么,我们如何能实现一个这样的简繁切换功能呢?

文字背景

中文的“简体中文”和“繁体中文”的区别主要是汉字的书写形式不同,主要差别在于字形的复杂程度,繁体中文保留了更多的传统笔画和结构,而简体中文则通过减少笔画和简化结构来降低书写的复杂性。

繁体中文:繁体中文的历史已经有上千年了,汉字的发展历程中形成了包含多种笔画和复杂结构的字体。而繁体字是非常传统的原始书写方式(英文也称为Traditional Chinese),而繁体字现如今也仍在台湾,香港等地区广泛使用。

简体中文:简体中文诞生于20世纪50年代,设计初衷是为了提高全民的文盲率,通过简化汉字结构,使更多的人能够快速学习和掌握基础的读写能力(英文也称为Simplified Chinese)。这是一项非常伟大的发明,具有深远的社会意义,事实证明,它不仅提升了国民的文化素质,还促进了信息的传播和交流效率,而简体字现如今也在中国大陆,新加坡等地区广泛使用。

如何进行简繁转换

简繁切换原理

简体字和繁体字的互相转换,当然需要通过字符的映射表。不过,这并不是一个一对一的映射表。因为,每个繁体字有一个或多个对应的简体字。这是因为,在繁体字改为简体字的这个过程中,多个繁体字可能会被合并归为一个简体字。

举一个简单的例子,对于简体字“发”来说,一般对应的繁体字是“發“,这个在麻将非常常见,而且我们经常可以听到”恭喜發財“,但是呢,如果说到“头发”的话,那么对应的繁体字就变成了“頭髮“,从这里我们可以看出,发在不同的时候,是有不同的对应的。

简繁切换的困难

这种多字符的映射关系会为我们创建一个简繁切换程序带来一些困难,在实现这样的程序的时候,要尤其注意到这样的多字符映射关系。假如说,我们做这样一个切换程序:

def traditional_convert(text, conversion_table):
    converted_text = ""
    for char in text:
        if char in conversion_table:
            converted_text += conversion_table[char]
        else:
            converted_text += char
    return converted_text


conversion_table = {
    '发': '發',
    '财': '財',
    '头': '頭'
}


print(traditional_convert("发财", conversion_table))  # 正确的被转换为“發財”
print(traditional_convert("头发", conversion_table))  # 错误的被转换为“頭發”

使用专业的简繁切换映射表

从上面的分析,我们可以看出,如果想要靠自己记录下所有的简体字和繁体字的对应,并且独立制作出一个这样的简繁切换程序,是极其困难的,因此,我们必须要依靠更专业的简繁切换项目。

一个最常使用的简繁切换项目是OpenCC,它的github地址是:github.com/BYVoid/Open…

这个项目已经包含了非常详尽的简繁切换对应表,我们可以简单的一窥究竟:

jf1.png

当然,随便翻阅一下,就会发现,像这样的对应,还有更多,从简单字词,复杂成语,日常用语,历史名言,甚至是电影名,明星名,偶像团体名等等,所有常用的词语,都需要有专门的对应。

jf2.png

有了这样的专业项目以后,我们就可以轻松的实现简繁切换了。

PYTHON简繁切换

简繁切换

就如同我们上边介绍的那样,简繁切换功能,实际上opencc已经做好了,我们只需要下载使用就可以了,首先还是通过python安装opencc:pip install opencc

from opencc import OpenCC


cc = OpenCC("s2t")  # 简体切换到繁体,也即英文Simplified to Traditional的缩写


text = "恭喜发财,红包拿来,新年不掉头发"


# 可以看到,结果是:“恭喜發財,紅包拿來,新年不掉頭髮”
# 这说明,opencc已经非常好的,正确的处理了“一简多繁”的问题
print(cc.convert(text))

更多方法

  • s2t:标准简体转换为繁体。
  • s2tw:简体转换为繁体(台湾)。
  • s2hk:简体转换为繁体(香港)。
  • t2s:标准繁体转换为简体。
  • tw2s:繁体转换为简体(台湾)。
  • hk2s:繁体转换为简体(香港)。

使用方法同上,只需要在OpenCC中,指定不同的内容即可,当然最常用的只需要使用s2tt2s就可以了。

简体转换为繁体

from opencc import OpenCC


cc_s2t = OpenCC("s2t")


text = "我是瞎老弟,给我的文章点个赞吧,谢谢,爱你~"


print(cc_s2t.convert(text))

繁体转换为简体

from opencc import OpenCC


cc_t2s = OpenCC("t2s")


text = "我是瞎老弟,給我的文章按個贊吧,謝謝,愛你~"


print(cc_t2s.convert(text))

总结

虽然前面介绍了这么多,但是最后由于OpenCC都做好了,因此,最终实现上是非常简单的。这对于常遇到需要阅读或使用繁体中文,并且是像我们这些习惯于简体中文的朋友们,会非常有用。利用这些工具可以极大地简化阅读和理解过程,节约时间,提高效率。并且这对于很多开发者也会很有帮助,例如说,提供这样一个“简繁切换”的功能,可以很好的帮助到我们的台湾兄弟,阅读简体中文的文章。

当然,“吃水不忘挖井人”,这一切还要感谢OpenCC提供了的强大功能,如果你也觉得非常不错的话,别忘了去支持一下该项目,为他们增加一个star:github.com/BYVoid/Open…

好了,我要继续去看小说了,我是瞎老弟,我们下次再见!