Skip to content

The .NET version of OpenCC(Open Chinese Convert), for the conversion between Simplified Chinese and Traditional Chinese.

License

Notifications You must be signed in to change notification settings

CosineG/OpenCC.NET

Repository files navigation

OpenCC.NET

GitHub license Nuget Nuget GitHub Workflow Status

简体中文 | English

介绍

OpenCC.NET 是 OpenCC (Open Chinese Convert, 开放中文转换) 的 C# 非官方版本,支持中文简繁体之间词汇级别的转换,同时还支持地域间异体字以及词汇的转换。

特点

  • 严格区分「一简对多繁」和「一简对多异」
  • 完全兼容异体字
  • 严格审校一简对多繁词条,原则为「能分则不合」
  • 支持港/台异体字转换,以及大陆/台湾常用词汇转换
  • 完全兼容OpenCC原生词库,可以自由修改、导入、扩展
  • 支持自定义分词逻辑
  • 基于 .NET Standard 2.0,同时支持 .NET Framework 4.6.1 和 .NET Core 2.0 及以上版本

开始

获取

Nuget 搜索 OpenCCNET 并安装,在项目代码中引入命名空间 OpenCCNET。Nuget 包中自带 Dictionary(字典文件)和 JiebaResource(Jieba.NET运行所需的词典及其它数据文件),默认会复制到程序输出目录。

使用

在使用前请调用ZhConverter.Initialize(),含四个默认参数:

  • dictionaryDirectory: 字典文件路径(默认为"Dictionary")
  • jiebaResourceDirectory: Jieba.NET资源路径(默认为"JiebaResource")
  • isParallelEnabled: 是否启用并行处理(默认为false)
  • segmentMode: 分词模式(默认为结巴分词)
// 默认初始化(使用结巴分词)
ZhConverter.Initialize();

// 或者指定分词模式(例如:OpenCC 的原版最大匹配分词算法)
ZhConverter.Initialize(segmentMode: SegmentMode.MaxMatch);

OpenCC.NET 提供了两种风格的API:

ZhConverter静态类

方法 简介 备注
HansToHant(string) 简体中文=>繁体中文(OpenCC标准)
HansToTW(string, bool=false) 简体中文=>繁体中文(台湾) bool参数决定是否转换为台湾地区常用词汇
HansToHK(string) 简体中文=>繁体中文(香港)
HantToHans(string) 繁体中文=>简体中文
HantToTW(string, bool=false) 繁体中文=>繁体中文(台湾) bool参数决定是否转换为台湾地区常用词汇
HantToHK(string) 繁体中文=>繁体中文(香港)
TWToHans(string, bool=false) 繁体中文(台湾)=>简体中文 bool参数决定是否转换为大陆地区常用词汇
TWToHant(string, bool=false) 繁体中文(台湾)=>繁体中文(OpenCC标准) bool参数决定是否转换为大陆地区常用词汇
HKToHans(string) 繁体中文(香港)=>简体中文
HKToHant(string) 繁体中文(香港)=>繁体中文(OpenCC标准)
KyuuToShin(string) 日语(旧字体)=>日语(新字体)
ShinToKyuu(string) 日语(新字体)=>日语(旧字体)
var input = "为我的电脑换了新的内存,开启电脑后感觉看网络视频更加流畅了";

// 爲我的電腦換了新的內存,開啓電腦後感覺看網絡視頻更加流暢了
Console.WriteLine(ZhConverter.HansToHant(input));

// 為我的電腦換了新的內存,開啟電腦後感覺看網絡視頻更加流暢了
Console.WriteLine(ZhConverter.HansToTW(input));

// 為我的電腦換了新的記憶體,開啟電腦後感覺看網路影片更加流暢了
Console.WriteLine(ZhConverter.HansToTW(input, true));

// 為我的電腦換了新的內存,開啓電腦後感覺看網絡視頻更加流暢了
Console.WriteLine(ZhConverter.HansToHK(input));

// 沖繩縣內の學校
Console.WriteLine(ZhConverter.ShinToKyuu("沖縄県内の学校"));

string类扩展方法

方法 简介 备注
ToHantFromHans() 简体中文=>繁体中文(OpenCC标准)
ToTWFromHans(bool=false) 简体中文=>繁体中文(台湾) bool参数决定是否转换为台湾地区常用词汇
ToHKFromHans() 简体中文=>繁体中文(香港)
ToHansFromHant() 繁体中文=>简体中文
ToTWFromHant(bool=false) 繁体中文=>繁体中文(台湾) bool参数决定是否转换为台湾地区常用词汇
ToHKFromHant() 繁体中文=>繁体中文(香港)
ToHansFromTW(bool=false) 繁体中文(台湾)=>简体中文 bool参数决定是否转换为大陆地区常用词汇
ToHantFromTW(bool=false) 繁体中文(台湾)=>繁体中文(OpenCC标准) bool参数决定是否转换为大陆地区常用词汇
ToHansFromHK() 繁体中文(香港)=>简体中文
ToHantFromHK() 繁体中文(香港)=>繁体中文(OpenCC标准)
ToShinFromKyuu() 日语(旧字体)=>日语(新字体)
ToKyuuFromShin() 日语(新字体)=>日语(旧字体)
var input = "為我的電腦換了新的記憶體,開啟電腦後感覺看網路影片更加流暢了";

// 爲我的電腦換了新的記憶體,開啓電腦後感覺看網路影片更加流暢了
Console.WriteLine(input.ToHantFromTW());

// 为我的电脑换了新的记忆体,开启电脑后感觉看网路影片更加流畅了
Console.WriteLine(input.ToHansFromTW());

// 为我的电脑换了新的内存,打开电脑后感觉看网络视频更加流畅了
Console.WriteLine(input.ToHansFromTW(true));

// 独逸連邦共和国
Console.WriteLine("獨逸聯邦共和國".ToShinFromKyuu());

自定义

分词模式

OpenCC.NET 支持三种分词模式,可以根据需求灵活切换:

1. 结巴分词模式(Jieba)- 默认

使用 jieba.NET 进行中文分词。默认设置 Jieba.NET 资源路径为 "JiebaResource",可以自行指定。

// 初始化时指定
ZhConverter.Initialize(segmentMode: SegmentMode.Jieba);

// 或运行时切换
ZhConverter.ZhSegment.SetMode(SegmentMode.Jieba);
2. 最大匹配算法模式(MaxMatch)

使用 OpenCC 原版的最大匹配分词算法。

// 初始化时指定
ZhConverter.Initialize(segmentMode: SegmentMode.MaxMatch);

// 或运行时切换
ZhConverter.ZhSegment.SetMode(SegmentMode.MaxMatch);
3. 自定义分词模式(Custom)

使用用户自定义的分词算法,先分词一次,然后在转换链中重复使用分词结果。

// 方式1:直接设置分词委托(自动切换到 Custom 模式)(兼容老版本)
ZhConverter.ZhSegment.Segment = input =>
{
    // 自定义分词逻辑,例如按空格分词
    return input.Split(' ', StringSplitOptions.RemoveEmptyEntries);
};

// 方式2:使用 SetCustomSegment 方法
ZhConverter.ZhSegment.SetCustomSegment(input =>
{
    // 自定义分词逻辑,例如按字符分词
    return input.Select(c => c.ToString());
});

Jieba 分词自定义

OpenCC.NET默认使用jieba.NET实现分词,项目中使用了静态的JiebaSegmenter

public static JiebaSegmenter Jieba = new JiebaSegmenter();

因此可以通过ZhConverter.ZhSegment.Jieba进行自定义设置,详情请见jieba.NET

调用ResetSegment()可重新指定使用Jieba分词并且重置Jieba参数。

并行处理

对于大量文本的转换,可以启用并行处理来提高性能:

// 初始化时启用
ZhConverter.Initialize(isParallelEnabled: true);

// 或运行时设置
ZhConverter.IsParallelEnabled = true;

引用

OpenCC

BYVoid/OpenCC 提供词库。

jieba.NET

anderscui/jieba.NET 提供分词功能。

About

The .NET version of OpenCC(Open Chinese Convert), for the conversion between Simplified Chinese and Traditional Chinese.

Topics

Resources

License

Stars

Watchers

Forks

Languages