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 敏感词

相关推荐
还是鼠鼠23 分钟前
tlias智能学习辅助系统--Maven 高级-私服介绍与资源上传下载
java·spring boot·后端·spring·maven
Xiaokai丶1 小时前
Java 8 新特性深度剖析:核心要点与代码实战
java
灵魂猎手1 小时前
3. MyBatis Executor:SQL 执行的核心引擎
java·后端·源码
Galaxy在掘金1 小时前
从业8年,谈谈我认知的后端架构之路-1
java·架构
努力努力再努力wz1 小时前
【c++深入系列】:万字详解模版(下)
java·c++·redis
瓦特what?3 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
是乐谷3 小时前
阿里云杭州 AI 产品法务岗位信息分享(2025 年 8 月)
java·人工智能·阿里云·面试·职场和发展·机器人·云计算
Java水解4 小时前
Java中的四种引用类型详解:强引用、软引用、弱引用和虚引用
java·后端
lifallen4 小时前
JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
java·开发语言·数据结构·算法
一叶飘零_sweeeet4 小时前
IDEA 插件 Trae AI 全攻略
java·人工智能·intellij-idea