All Projects → houbb → Opencc4j

houbb / Opencc4j

Licence: apache-2.0
🇨🇳Open Chinese Convert is an opensource project for conversion between Traditional Chinese and Simplified Chinese.(java 中文繁简体转换)

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Opencc4j

Gse
Go efficient multilingual NLP and text segmentation; support english, chinese, japanese and other. Go 高性能多语言 NLP 和分词
Stars: ✭ 1,695 (+806.42%)
Mutual labels:  chinese, trie
Leetcode
High-quality LeetCode solutions
Stars: ✭ 178 (-4.81%)
Mutual labels:  trie
Go Ethereum Code Analysis
No description or website provided.
Stars: ✭ 2,032 (+986.63%)
Mutual labels:  chinese
Opends
Template Library of Data Structures in C++17
Stars: ✭ 151 (-19.25%)
Mutual labels:  trie
Icopy Site.github.io
icopy.site github mirror
Stars: ✭ 142 (-24.06%)
Mutual labels:  chinese
Mybatiscn
MyBatis中文详尽注释版。书籍《通用源码阅读指导书——MyBatis源码详解》配套注释版源码。
Stars: ✭ 153 (-18.18%)
Mutual labels:  chinese
Easyreader
基于React native 的开源小说阅读器
Stars: ✭ 139 (-25.67%)
Mutual labels:  chinese
Leetcode Python
LeetCode solutions in Python2. LeetCode题解 in Python2。
Stars: ✭ 182 (-2.67%)
Mutual labels:  chinese
Algo Tree
Algo-Tree is a collection of Algorithms and data structures which are fundamentals to efficient code and good software design. Creating and designing excellent algorithms is required for being an exemplary programmer. It contains solutions in various languages such as C++, Python and Java.
Stars: ✭ 166 (-11.23%)
Mutual labels:  trie
Chinese Lunar Calendar For Mac
Chinese Lunar Calendar for Mac
Stars: ✭ 150 (-19.79%)
Mutual labels:  chinese
Swiftui Tutorials
A code example and translation project of SwiftUI. / 一个 SwiftUI 的示例、翻译的教程项目。
Stars: ✭ 1,992 (+965.24%)
Mutual labels:  chinese
Clue
中文语言理解测评基准 Chinese Language Understanding Evaluation Benchmark: datasets, baselines, pre-trained models, corpus and leaderboard
Stars: ✭ 2,425 (+1196.79%)
Mutual labels:  chinese
Router
⚡️ A lightning fast HTTP router
Stars: ✭ 158 (-15.51%)
Mutual labels:  trie
Algorithms
A collection of common algorithms and data structures implemented in java, c++, and python.
Stars: ✭ 142 (-24.06%)
Mutual labels:  trie
Go Workwx
a sensible Work Weixin(企业微信, Wechat Work) SDK for Go
Stars: ✭ 181 (-3.21%)
Mutual labels:  chinese
Trie4j
PATRICIA, Double Array, LOUDS Trie implementations for Java
Stars: ✭ 139 (-25.67%)
Mutual labels:  trie
Leveldb Handbook
Analysis leveldb source code step by step
Stars: ✭ 146 (-21.93%)
Mutual labels:  chinese
Chineseblue
Chinese Biomedical Language Understanding Evaluation benchmark (ChineseBLUE)
Stars: ✭ 149 (-20.32%)
Mutual labels:  chinese
Jszhuyin
JS 注音:JavaScript 自動選字注音輸入法;"Smart" Chinese Zhuyin Input Method in JavaScript.
Stars: ✭ 184 (-1.6%)
Mutual labels:  chinese
Helpdesk Guide
📖《桌维网管实典》主机与程控终端信息安全运维,IT方向速成就业入职
Stars: ✭ 183 (-2.14%)
Mutual labels:  chinese

Opencc4j

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

Build Status Maven Central Coverage Status Open Source Love

繁體中文

Features 特点

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

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

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

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

  • 兼容 Windows、Linux、Mac 平台。

  • 支持自定义分词

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

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

v1.6.0 版本变更

  • 支持返回单个汉字的所有繁简体列表

变更日志

测试代码

见 test 文件夹。

可以用来学习相关方法的使用方式。

创作缘由

  • OpenCC

OpenCC 的思想非常优秀,做的也特别棒。但是没有特别为 java 提供的工具。

  • jopencc

jopencc 没有提供分词功能。

快速开始

maven 引入

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>opencc4j</artifactId>
    <version>1.6.0</version>
</dependency>

api 概览

工具类方法参见 ZhConverterUtil 工具类。

核心方法如下:

序号 api 方法 简介
1 toSimple(String) 转为简体
2 toTraditional(String) 转为繁体
3 simpleList(String) 返回包含的简体列表
4 traditionalList(String) 返回包含的繁体列表
5 isSimple(String) 是否为简体
6 isTraditional(String) 是否为繁体
7 toSimple(char) 返回单个汉字对应的所有简体字列表
8 toTraditional(char) 返回单个汉字对应的所有繁体字列表

以上 1-6 都有一个 Segment 参数,可以用于自定义中文分词策略

繁简体转换

转为简体

String original = "生命不息,奮鬥不止";
String result = ZhConverterUtil.toSimple(original);
Assert.assertEquals("生命不息,奋斗不止", result);

转为繁体

String original = "生命不息,奋斗不止";
String result = ZhConverterUtil.toTraditional(original);
Assert.assertEquals("生命不息,奮鬥不止", result);

繁简体判断

对单个字符或者词组进行繁简体判断。

是否为简体

final String simpleChar = "奋";
final String simplePhrase = "奋斗";
final String traditionalChar = "奮";
final String traditionalPhrase = "奮鬥";

Assert.assertTrue(ZhConverterUtil.isSimple(simpleChar));
Assert.assertTrue(ZhConverterUtil.isSimple(simplePhrase));
Assert.assertFalse(ZhConverterUtil.isSimple(traditionalChar));
Assert.assertFalse(ZhConverterUtil.isSimple(traditionalPhrase));

是否为繁体

final String simpleChar = "奋";
final String simplePhrase = "奋斗";
final String traditionalChar = "奮";
final String traditionalPhrase = "奮鬥";

Assert.assertTrue(ZhConverterUtil.isTraditional(traditionalChar));
Assert.assertTrue(ZhConverterUtil.isTraditional(traditionalPhrase));
Assert.assertFalse(ZhConverterUtil.isTraditional(simpleChar));
Assert.assertFalse(ZhConverterUtil.isTraditional(simplePhrase));

句子中包含的繁简体列表返回

返回字符串中繁简体对应的词、字列表,默认支持中文分词。

繁简体列表返回的词组和分词策略紧密相关。

简体列表

final String original = "生命不息奋斗不止";
final List<String> resultList = ZhConverterUtil.simpleList(original);

Assert.assertEquals("[生, 命, 不, 息, 奋斗, 不, 止]", resultList.toString());

繁体列表

final String original = "生命不息奮鬥不止";
final List<String> resultList = ZhConverterUtil.traditionalList(original);

Assert.assertEquals("[奮, 鬥]", resultList.toString());

单个汉字对应的繁简体列表

繁体字列表

Assert.assertEquals("[幹, 乾, 干]", ZhConverterUtil.toTraditional('干').toString());
Assert.assertEquals("[發, 髮]", ZhConverterUtil.toTraditional('发').toString());

简体字列表

Assert.assertEquals("[测]", ZhConverterUtil.toSimple('測').toString());

中文分词策略

系统内置分词方式

你可以通过 Segments 工具类获取系统内置的分词实现。

序号 方法 准确性 性能 备注
1 defaults() 默认分词形式,暂时为 fastForward 策略
2 fastForward() 较高 fast-forward 分词策略
3 chars() 将字符串转换为单个字符列表,一般不建议使用
4 huaBan() 一般 花瓣的结巴分词策略

花瓣结巴分词

花瓣结巴分词在使用时,需要自行引入结巴分词依赖。

<dependency>
    <groupId>com.huaban</groupId>
    <artifactId>jieba-analysis</artifactId>
    <version>1.0.2</version>
</dependency>

自定义

你有时候可能除了上述的两种分词方式,会有更加适合自己业务的分词实现。

Opencc4j 支持自定义分词实现,只需要实现分词接口 Segment

  • 接口内容
public interface Segment {

    /**
     * 分词
     * @param original 原始信息
     * @return 分词后的列表
     */
    List<String> seg(final String original);

}

测试代码

自定义分词实现类

/**
 * 一个最简单的分词实现。
 * 注意:仅仅做演示,不可实际使用。
 */
public class FooSegment implements Segment {
    @Override
    public List<String> seg(String original) {
        return Arrays.asList(original, "测试");
    }
}

分词测试

我们自定义的分词,直接在默认添加“测试”这样的信息。

final String original = "寥落古行宫,宫花寂寞红。白头宫女在,闲坐说玄宗。";
final Segment segment = new FooSegment();
final String result = ZhConverterUtil.toTraditional(original, segment);

Assert.assertEquals("寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。測試", result);

技术鸣谢

OpenCC

OpenCC 提供的原始数据信息。

花瓣

jieba-analysis 提供中文分词

Issues & Bugs

需求和 BUG 在这里,欢迎提供宝贵的建议。

如果对您有帮助,欢迎 Star 鼓励作者。

后期 Road-Map

  • [ ] 支持台湾等地区繁简体转换

  • [ ] 数据字典插件化

  • [ ] 考虑长文本分段,并行转换

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].