java 开源中文的繁简体转换 opencc4j-03-简体还是繁体,你说了算!

Opencc4j

Opencc4j 支持中文繁简体转换,考虑到词组级别。

开源中文的繁简体转换 opencc4j-01-使用入门概览

开源中文的繁简体转换 opencc4j-02-一个汉字竟然对应两个 char?

开源中文的繁简体转换 opencc4j-03-简体还是繁体,你说了算!

开源中文的繁简体转换 opencc4j-04-香港繁简体的支持

开源中文的繁简体转换 opencc4j-05-日文转换支持

Features 特点

  • 严格区分「一简对多繁」和「一简对多异」。

  • 完全兼容异体字,可以实现动态替换。

  • 严格审校一简对多繁词条,原则为「能分则不合」。

  • 词库和函数库完全分离,可以自由修改、导入、扩展。

  • 兼容 Windows、Linux、Mac 平台。

  • 支持自定义分词

  • 支持判断单个字(词)是否为简体/繁体

  • 支持返回字符串中简体/繁体的列表信息

  • 支持中国台湾、香港地区繁简体转换

  • 支持与日文字的转换

这么着,还是那么着

繁简体转换,最初的设计希望让用户简单的判断一个字符串时简体、还是繁体。

但是后来不断有小伙伴提需求说不准,误判率太高。

无可奈何,为了方便解释,就像判断方法改为全部匹配。

好景不长,还是有小伙伴说一个文本中,有一些其他字符,但是希望判断是繁体之类的。

总之,众口难调。

让用户可以选择

虽然我一直秉持着,让用户无需选择,是最好的选择。

但是世界是复杂的,业务也是如此,我们总要学会处理各种场景。

还是决定让用户可以自己指定策略:比如全匹配、任一匹配、过半等。

接下来,就是编码工作。

接口与内置策略

match 接口

接口保持最高的间接性:

java 复制代码
/**
 * 匹配策略
 *
 * @since 1.11.0
 */
public interface ZhMatch {

    /**
     * 匹配结果
     * @param text 文本
     * @param context 上下文
     * @return 结果
     */
    boolean match(final String text,
                  final ZhConvertCoreContext context);

}

用户只需要实现这个接口,就可以定义自己的匹配策略。

内置策略

当然,只有接口还是不够的。

还要为用户提供一些内置的能力,这里按照繁简体分类,共计内置了 6 种实现:

内置策略见 ZhMatches 工具方法。

策略 说明 备注
simpleAll() 满足全部简体 isSimple 判断时,默认策略
simpleAny() 满足任一简体 -
simpleOverHalf() 满足超过一半简体 -
traditionalAll() 满足全部繁体 isTraditional 判断时,默认策略
traditionalAny() 满足任一繁体 -
traditionalOverHalf() 满足超过一半繁体 -

当然,如果你觉得不够,可以实现属于自己的匹配策略。

测试验证

下面是一些如何使用的例子。

简体

java 复制代码
// 全部
ZhConvertBootstrap bs = ZhConvertBootstrap.newInstance()
        .isSimpleMatch(ZhMatches.simpleAll())
        .init();
String text = "123我456";
Assert.assertFalse(bs.isSimple(text));

// 任一
bs.isSimpleMatch(ZhMatches.simpleAny()).init();
Assert.assertTrue(bs.isSimple(text));

繁体

java 复制代码
// 全部
ZhConvertBootstrap bs = ZhConvertBootstrap.newInstance()
        .isTraditionalMatch(ZhMatches.traditionalAll())
        .init();
String text = "123俺們456";
Assert.assertFalse(bs.isTraditional(text));

// 任一
bs.isTraditionalMatch(ZhMatches.traditionalAny()).init();
Assert.assertTrue(bs.isTraditional(text));;

小结

用户的需求和使用场景总是复杂的,需要保持足够的灵活性。

我是老马,期待与你的下次重逢。

拓展阅读

pinyin 汉字转拼音

pinyin2hanzi 拼音转汉字

segment 高性能中文分词

opencc4j 中文繁简体转换

nlp-hanzi-similar 汉字相似度

word-checker 拼写检测

sensitive-word 敏感词

相关推荐
我命由我123451 小时前
35.Java线程池(线程池概述、线程池的架构、线程池的种类与创建、线程池的底层原理、线程池的工作流程、线程池的拒绝策略、自定义线程池)
java·服务器·开发语言·jvm·后端·架构·java-ee
CopyLower2 小时前
分布式ID生成方案的深度解析与Java实现
java·开发语言·分布式
m0_684598535 小时前
如何开发英语在线训练小程序:从0到1的详细步骤
java·微信小程序·小程序·小程序开发
ml130185288745 小时前
开发一个环保回收小程序需要哪些功能?环保回收小程序
java·大数据·微信小程序·小程序·开源软件
zybishe6 小时前
免费送源码:Java+ssm+MySQL 酒店预订管理系统的设计与实现 计算机毕业设计原创定制
java·大数据·python·mysql·微信小程序·php·课程设计
anlogic7 小时前
Java基础 4.12
java·开发语言
weisian1518 小时前
Java常用工具算法-7--秘钥托管云服务2(阿里云 KMS)
java·安全·阿里云
Alt.98 小时前
SpringMVC基础二(RestFul、接收数据、视图跳转)
java·开发语言·前端·mvc
寒页_8 小时前
2025年第十六届蓝桥杯省赛真题解析 Java B组(简单经验分享)
java·数据结构·经验分享·算法·蓝桥杯
Koma-forever8 小时前
java设计模式-适配器模式
java·设计模式·适配器模式