首页Python【Python计算生态】O...

【Python计算生态】OpenCC——中文简繁转换

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

OpenCC(Open Chinese Convert)是一个开源的中文简繁转换工具库,用于在繁体中文、简体中文和日语汉字(新字体)之间进行转换。它支持字符级别的转换、词汇级别的转换、异体字转换以及中国大陆、台湾和香港地区的习惯用词转换。
  • 严格区分“一简对多繁”和“一简对多异”;
  • 完全兼容异体字,支持动态替换;
  • 严格审核“一简对多繁”的词条,原则是“能分则不分”;
  • 支持中国大陆、台湾、香港地区的异体字和习惯用词转换;
  • 词库和函数库完全分离,用户可以自由修改、导入和扩展。
直接使用pip安装:
pip install opencc
GitHub页面:
https://github.com/BYVoid/OpenCC
还提供了一个在线转换网站:
https://opencc.byvoid.com/


02
使用

OpenCC提供了多种预设的转换模式,以满足不同场景下的简繁转换需求:

  • s2t:简体中文到繁体中文;

  • t2s:繁体中文到简体中文;
  • s2tw:简体中文到台湾繁体;
  • tw2s:台湾繁体到简体中文;
  • s2hk:简体中文到香港繁体;
  • hk2s:香港繁体到简体中文;
  • s2twp:简体中文到繁体中文(台湾标准)并转换为台湾常用词汇;
  • tw2sp:繁体中文(台湾标准)到简体中文并转换为中国大陆常用词汇;
  • t2tw:繁体中文(OpenCC 标准)到台湾繁体;
  • hk2t:香港繁体到繁体中文;
  • t2hk:繁体中文(OpenCC 标准)到香港繁体;
  • t2jp:繁体中文(旧字体)到日语新字体;
  • jp2t:日语新字体到繁体中文(旧字体);
  • tw2t:台湾繁体到繁体中文。


  • 示例 1、简体转繁体:

import opencc

# 创建一个 OpenCC 对象,指定转换模式
converter = opencc.OpenCC('s2t')  # 简体到繁体

# 进行转换
result = converter.convert('汉字')
print(result)  # 输出:漢字


  • 示例 2、繁体转简体:

# 创建一个 OpenCC 对象,指定转换模式
converter = opencc.OpenCC('t2s')  # 繁体到简体

# 进行转换
result = converter.convert('漢字')
print(result)  # 输出:汉字


  • 示例 3、处理地区差异:

通过不同转换模式适配地区用词。

# 简体转台湾繁体(带地区词汇)
converter_tw = opencc.OpenCC('s2twp')
# 简体转香港繁体
converter_hk = opencc.OpenCC('s2hk')

# 进行转换
result_tw = converter_tw.convert('鼠标')
result_hk = converter_hk.convert('鼠标')


print(f"台湾繁体:{result_tw}")
# 输出:台湾繁体:滑鼠
print(f"香港繁体:{result_hk}")
# 输出:香港繁体:鼠標


  • 示例 4、严格区分“一简对多繁”和“一简对多异”:

在中文简繁转换中,“一简对多繁”和“一简对多异”是两种不同的情况:

  • 一简对多繁:指一个简体字对应多个繁体字,在进行简体转繁体时,需要根据上下文来准确选择对应的繁体字。例如,“发” 在不同语境下可对应 “發”(如 “发展”)和 “髮”(如 “头发”)。

  • 一简对多异:一个简体字对应多个意义有细微差异的异体繁体字。

OpenCC 库在转换时会严格区分这些情况,下面通过代码来详细解释。

# 创建转换器实例,将简体中文转换为繁体中文
converter = opencc.OpenCC('s2t.json')

# 示例文本
simplified_text = "皇后在后宫中"
traditional_text = converter.convert(simplified_text)

print("简体中文:", simplified_text)
# 输出:简体中文: 皇后在后宫中
print("繁体中文:", traditional_text)
# 输出:繁体中文: 皇后在後宮中


  • 示例 5、文本文件的转换:

OpenCC可以用于文本文件的转换,例如将一个简体文本文件转换为繁体:

import opencc

# 简体转繁体
mode = "s2t"

# 定义一个函数 convert_txt,用于将输入文件中的文本进行简繁转换,并将结果保存到输出文件中
# input_file:输入文件的路径,包含需要进行转换的文本
# output_file:输出文件的路径,用于保存转换后的文本
# mode:转换模式,默认为上面指定的 "s2t"
def convert_txt(input_file, output_file, mode=mode):
    # 打开输入文件
    with open(input_file, "r", encoding="utf-8") as file:
        # 读取文件中的所有文本内容
        text = file.read()
    
    # 创建一个 OpenCC 转换器对象,使用指定的转换模式
    converter = opencc.OpenCC(mode)
    
    # 调用转换器的 convert 方法,对读取到的文本进行简繁转换
    converted_text = converter.convert(text)
    
    # 以写入模式打开输出文件,并使用 UTF-8 编码写入转换后的文本
    with open(output_file, "w", encoding="utf-8") as file:
        # 将转换后的文本写入输出文件
        file.write(converted_text)

# 调用 convert_txt 函数
convert_txt("test.txt""converted_test.txt")


  • 示例 6、创建自定义词库:

OpenCC支持词库和函数库的分离,用户可以通过修改或创建新的配置文件来实现自定义词库。

假设我们想创建一个自定义的简繁转换词库,将“鼠标”转换为“滑鼠”(默认转换为鼠標),“软件”转换为“軟碟”(默认转换为軟件)。

创建自定义转换词库的核心思路是创建或修改词库配置文件,然后使用新的配置文件创建OpenCC转换器。具体步骤如下:

  • ①、创建自定义配置文件(JSON 格式):
基于OpenCC的默认配置文件(如s2t.json),创建一个新的JSON格式的配置文件,并在其中引入自定义词典文件。
本次创建一个名为custom_config.jsonJSON文件,在其中引用默认配置和自定义规则文件。完整的OpenCC配置文件通常包括以下两个部分:
segmentation部分:定义分词策略。OpenCC可以使用指定的词典文件(STPhrases.txt)和分词算法(mmseg)对输入文本进行分词。分词的结果将用于后续的转换步骤,确保转换的准确性。其中,STPhrases.txt是简体中文到繁体中文的短语映射,每行一个短语对,格式为:简体短语    繁体短语;
conversion_chain部分:定义具体的转换规则链,包括字符级和词汇级的转换。其中,custom_phrases.txt是自定义词典文件;STCharacters.txtOpenCC默认的字符映射文件。
内容如下:
{
  "name""Simplified Chinese to Traditional Chinese",
"segmentation": {
    "type""mmseg",
    "dict": {
      "type""text",
      "file""STPhrases.txt"
    }
  },
"conversion_chain": [{
    "dict": {
      "type""group",
      "dicts": [{
        "type""text",
        "file""custom_phrases.txt"
      },{
        "type""text",
      "file""STPhrases.txt"
      }, {
        "type""text",
        "file""STCharacters.txt"
      }]
    }
  }]
}
  • ②、创建字符映射文件:
本次使用OpenCC默认的字符映射文件STCharacters.txt
  • ③、创建自定义词典文件:
如果需要自定义转换规则(使用自定义词典),可以直接编辑修改OpenCC默认的词库文件STCharacters.txt,也可以通过自定义词典覆盖默认规则。
自定义词典可以是一个.txt文件,每行包含一个简体词和对应的繁体词,用制表符(Tab)分隔。
本次采用自定义词典覆盖默认规则的方式,根据需要创建一个自定义词典文本文件custom_phrases.txt,内容如下:
鼠标 滑鼠
软件 軟碟
  •  ④、使用自定义配置文件进行转换:
在代码中加载自定义的JSON配置文件,并使用OpenCC转换。
import opencc

# 待转换文本
text = '鼠标和软件'

# 默认词库
cc_o = opencc.OpenCC('s2t')
# 加载自定义词库
cc_c = opencc.OpenCC('./custom_config/custom_config.json')


converted_o = cc_o.convert(text)
converted_c = cc_c.convert(text)

print(f"默认转换结果:{converted_o}")
# 输出:默认转换结果:鼠標和軟件
print(f"自定义转换结果:{converted_c}")
# 输出:自定义转换结果:滑鼠和軟碟


更多内容可以前往GitHub页面查看:

https://github.com/BYVoid/OpenCC

本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments