1
1
# opencc4j
2
2
3
- Opencc4j 支持中文繁简体转换,考虑到词组级别。
3
+ [ Opencc4j] ( https://github.com/houbb/opencc4j ) 支持中文繁简体转换,考虑到词组级别。
4
4
5
+ [ ![ Build Status] ( https://travis-ci.com/houbb/opencc4j.svg?branch=master )] ( https://travis-ci.com/houbb/opencc4j )
5
6
[ ![ Maven Central] ( https://maven-badges.herokuapp.com/maven-central/com.github.houbb/opencc4j/badge.svg )] ( http://mvnrepository.com/artifact/com.github.houbb/opencc4j )
6
7
[ ![ Coverage Status] ( https://coveralls.io/repos/github/houbb/opencc4j/badge.svg )] ( https://coveralls.io/github/houbb/opencc4j )
7
8
[ ![ ] ( https://img.shields.io/badge/license-Apache2-FF0080.svg )] ( https://github.com/houbb/opencc4j/blob/master/LICENSE.txt )
8
-
9
+ [ ![ Open Source Love ] ( https://badges.frapsoft.com/os/v2/open-source.svg?v=103 )] ( https://github.com/houbb/opencc4j )
9
10
10
11
> [ 变更日志] ( CHANGELOG.md )
11
12
@@ -29,6 +30,10 @@ Opencc4j 支持中文繁简体转换,考虑到词组级别。
29
30
30
31
- 支持返回字符串中简体/繁体的列表信息
31
32
33
+ ### 最新版本特性
34
+
35
+ - 新增工具类常用方法
36
+
32
37
## 测试代码
33
38
34
39
见 test 文件夹。
@@ -53,11 +58,17 @@ Opencc4j 支持中文繁简体转换,考虑到词组级别。
53
58
<dependency >
54
59
<groupId >com.github.houbb</groupId >
55
60
<artifactId >opencc4j</artifactId >
56
- <version >1.3 .0</version >
61
+ <version >1.4 .0</version >
57
62
</dependency >
58
63
```
59
64
60
- ## 转为简体
65
+ ## 使用示例
66
+
67
+ ## 繁简体转换
68
+
69
+ 对字符串进行繁简体转换,默认支持中文分词。
70
+
71
+ ### 转为简体
61
72
62
73
``` java
63
74
String original = " 生命不息,奮鬥不止" ;
@@ -70,7 +81,7 @@ String result = ZhConverterUtil.toSimple(original);
70
81
生命不息,奋斗不止
71
82
```
72
83
73
- ## 转为繁体
84
+ ### 转为繁体
74
85
75
86
``` java
76
87
String original = " 生命不息,奋斗不止" ;
@@ -83,6 +94,60 @@ String result = ZhConverterUtil.toTraditional(original);
83
94
生命不息,奮鬥不止
84
95
```
85
96
97
+ ## 繁简体判断
98
+
99
+ 对单个字符或者词组进行繁简体判断。
100
+
101
+ ### 是否为简体
102
+
103
+ ``` java
104
+ final String simpleChar = " 奋" ;
105
+ final String simplePhrase = " 奋斗" ;
106
+ final String traditionalChar = " 奮" ;
107
+ final String traditionalPhrase = " 奮鬥" ;
108
+
109
+ Assert . assertTrue(ZhConverterUtil . isSimple(simpleChar));
110
+ Assert . assertTrue(ZhConverterUtil . isSimple(simplePhrase));
111
+ Assert . assertFalse(ZhConverterUtil . isSimple(traditionalChar));
112
+ Assert . assertFalse(ZhConverterUtil . isSimple(traditionalPhrase));
113
+ ```
114
+
115
+ ### 是否为繁体
116
+
117
+ ``` java
118
+ final String simpleChar = " 奋" ;
119
+ final String simplePhrase = " 奋斗" ;
120
+ final String traditionalChar = " 奮" ;
121
+ final String traditionalPhrase = " 奮鬥" ;
122
+
123
+ Assert . assertTrue(ZhConverterUtil . isTraditional(traditionalChar));
124
+ Assert . assertTrue(ZhConverterUtil . isTraditional(traditionalPhrase));
125
+ Assert . assertFalse(ZhConverterUtil . isTraditional(simpleChar));
126
+ Assert . assertFalse(ZhConverterUtil . isTraditional(simplePhrase));
127
+ ```
128
+
129
+ ## 繁简体列表返回
130
+
131
+ 返回字符串中繁简体对应的词、字列表,默认支持中文分词。
132
+
133
+ ### 简体列表
134
+
135
+ ``` java
136
+ final String original = " 生命不息奋斗不止" ;
137
+ final List<String > resultList = ZhConverterUtil . simpleList(original);
138
+
139
+ Assert . assertEquals(" [生命不息, 奋斗, 不止]" , resultList. toString());
140
+ ```
141
+
142
+ ### 繁体列表
143
+
144
+ ``` java
145
+ final String original = " 生命不息奮鬥不止" ;
146
+ final List<String > resultList = ZhConverterUtil . traditionalList(original);
147
+
148
+ Assert . assertEquals(" [奮鬥]" , resultList. toString());
149
+ ```
150
+
86
151
# 引导类方式
87
152
88
153
## 为什么需要引导类
@@ -101,7 +166,9 @@ v1.1.0 之后引入了类 [ZhConvertBootstrap](https://github.com/houbb/opencc4j
101
166
102
167
## 引导类使用案例
103
168
104
- 和工具类类似。
169
+ 和工具类保持相同的 api,降低学习成本。
170
+
171
+ 此处演示其中一个功能。
105
172
106
173
- 转为简体
107
174
@@ -110,18 +177,18 @@ final String original = "生命不息,奮鬥不止";
110
177
final String result = ZhConvertBootstrap . newInstance(). toSimple(original);
111
178
Assert . assertEquals(" 生命不息,奋斗不止" , result);
112
179
```
180
+ # 自定义分词方式
113
181
114
- - 转为繁体
182
+ ## 系统内置分词方式
115
183
116
- ``` java
117
- final String original = " 生命不息,奋斗不止" ;
118
- final String result = ZhConvertBootstrap . newInstance(). toTraditional(original);
119
- Assert . assertEquals(" 生命不息,奮鬥不止" , result);
120
- ```
184
+ 你可以通过 ` Segments ` 工具类获取系统内置的分词实现。
121
185
122
- # 自定义分词方式
186
+ | 序号 | 方法 | 准确性 | 性能 | 备注 |
187
+ | :---| :---| :---| :---| :---|
188
+ | 1 | defaults() | 高 | 一般 | 默认分词形式,暂时为结巴分词。 |
189
+ | 2 | chars() | 低 | 高 | 将字符串转换为单个字符列表,一般不建议使用。 |
123
190
124
- ## 用途
191
+ ## 应用场景
125
192
126
193
你有时候可能除了上述的两种分词方式,会有更加适合自己业务的分词实现。
127
194
@@ -146,7 +213,7 @@ public interface Segment {
146
213
}
147
214
```
148
215
149
- 备注: 默认使用的是 [ 花瓣分词] ( https://github.com/houbb/opencc4j/blob/master/src/main/java/com/github/houbb/opencc4j/support/segment/impl/HuaBanSegment.java )
216
+ 备注: 暂时默认使用的是 [ 花瓣分词] ( https://github.com/houbb/opencc4j/blob/master/src/main/java/com/github/houbb/opencc4j/support/segment/impl/HuaBanSegment.java )
150
217
151
218
## 测试代码
152
219
@@ -176,161 +243,6 @@ final String result2 = ZhConvertBootstrap.newInstance().segment(new FooSegment()
176
243
Assert . assertEquals(" 寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。測試" , result2);
177
244
```
178
245
179
- - 创建时指定分词器
180
-
181
- 你可以在创建引导类的时候,直接指定分词器实现。
182
-
183
- ``` java
184
- final String original = " 寥落古行宫,宫花寂寞红。白头宫女在,闲坐说玄宗。" ;
185
- final String result = ZhConvertBootstrap . newInstance(new FooSegment ()). toTraditional(original);
186
- Assert . assertEquals(" 寥落古行宮,宮花寂寞紅。白頭宮女在,閒坐說玄宗。測試" , result);
187
- ```
188
-
189
- # V1.2.0 新特性使用说明
190
-
191
- ## 获取分词列表
192
-
193
- - 方法
194
-
195
- ``` java
196
- /**
197
- * 获取分词后的字符串列表
198
- * (1)如果原始字符串为空,则返回空列表
199
- * @param original 原始字符串
200
- * @return 字符串列表
201
- * @since 1.2.0
202
- */
203
- List<String > doSeg(final String original);
204
- ```
205
-
206
- - 测试
207
-
208
- ``` java
209
- final String original = " 生命不息奋斗不止" ;
210
- final List<String > resultList = ZhConvertBootstrap . newInstance(). doSeg(original);
211
-
212
- String expectToString = " [生命不息, 奋斗, 不止]" ;
213
- Assert . assertEquals(expectToString, resultList. toString());
214
- ```
215
-
216
- ## 判断是否为繁体
217
-
218
- - 方法
219
-
220
- ``` java
221
- /**
222
- * 是否为繁体
223
- * 1. 原始字符串为空,直接返回 false
224
- * 2. 如果长度为1,则根据繁体字列表中是否存在,直接返回结果
225
- * 3. 如果长度大于1,则判断繁体词组类表中是否存在,如果为 true,则直接返回。
226
- * 4. 如果 3 为 false,则继续判断分成单个字进行判断,如果每一个字都是繁体,则认为是繁体。
227
- * @param charOrPhrase 单个字或者词组
228
- * @return true: 是; false: 否
229
- * @since 1.2.0
230
- */
231
- boolean isTraditional(final String charOrPhrase);
232
- ```
233
-
234
- - 测试
235
-
236
- ``` java
237
- final String simpleChar = " 奋" ;
238
- final String simplePhrase = " 奋斗" ;
239
- final String traditionalChar = " 奮" ;
240
- final String traditionalPhrase = " 奮鬥" ;
241
-
242
- ZhConvertBootstrap convertBootstrap = ZhConvertBootstrap . newInstance();
243
-
244
- Assert . assertTrue(convertBootstrap. isTraditional(traditionalChar));
245
- Assert . assertTrue(convertBootstrap. isTraditional(traditionalPhrase));
246
- Assert . assertFalse(convertBootstrap. isTraditional(simpleChar));
247
- Assert . assertFalse(convertBootstrap. isTraditional(simplePhrase));
248
- ```
249
-
250
- ## 判断是否为简体
251
-
252
- - 方法
253
-
254
- ``` java
255
- /**
256
- * 是否为简体
257
- * (1)原始字符串为空,直接返回 false
258
- * (2)其他情况,则和 {@link #isTraditional(String)} 取反
259
- * @param charOrPhrase 单个字或者词组
260
- * @return true: 是; false: 否
261
- * @since 1.2.0
262
- */
263
- boolean isSimple(final String charOrPhrase);
264
- ```
265
-
266
- - 测试
267
-
268
- ``` java
269
- final String simpleChar = " 奋" ;
270
- final String simplePhrase = " 奋斗" ;
271
- final String traditionalChar = " 奮" ;
272
- final String traditionalPhrase = " 奮鬥" ;
273
-
274
- ZhConvertBootstrap convertBootstrap = ZhConvertBootstrap . newInstance();
275
-
276
- Assert . assertTrue(convertBootstrap. isSimple(simpleChar));
277
- Assert . assertTrue(convertBootstrap. isSimple(simplePhrase));
278
- Assert . assertFalse(convertBootstrap. isSimple(traditionalChar));
279
- Assert . assertFalse(convertBootstrap. isSimple(traditionalPhrase));
280
- ```
281
-
282
- ## 返回简体字符串列表
283
-
284
- - 方法
285
-
286
- ``` java
287
- /**
288
- * 返回简体字列表
289
- * 说明:返回 {@link #doSeg(String)} 列表中符合 {@link #isSimple(String)} 的字符串列表
290
- * @param original 原始字符串列表
291
- * @return 包含的简体字符串列表
292
- * @since 1.2.0
293
- */
294
- List<String > simpleList(final String original);
295
- ```
296
-
297
- - 测试
298
-
299
- ``` java
300
- final String original = " 生命不息奋斗不止" ;
301
- ZhConvertBootstrap zhConvertBootstrap = ZhConvertBootstrap . newInstance();
302
- final List<String > resultList = zhConvertBootstrap. simpleList(original);
303
-
304
- String expectToString = " [生命不息, 奋斗, 不止]" ;
305
- Assert . assertEquals(expectToString, resultList. toString());
306
- ```
307
-
308
- ## 返回繁体字符串列表
309
-
310
- - 方法
311
-
312
- ``` java
313
- /**
314
- * 返回繁体字列表
315
- * 说明:返回 {@link #doSeg(String)} 列表中符合 {@link #isTraditional(String)} 的字符串列表
316
- * @param original 原始字符串列表
317
- * @return 包含的繁体字符的列表
318
- * @since 1.2.0
319
- */
320
- List<String > traditionalList(final String original);
321
- ```
322
-
323
- - 测试
324
-
325
- ``` java
326
- final String original = " 生命不息奮鬥不止" ;
327
- ZhConvertBootstrap zhConvertBootstrap = ZhConvertBootstrap . newInstance();
328
- final List<String > resultList = zhConvertBootstrap. traditionalList(original);
329
-
330
- String expectToString = " [奮鬥]" ;
331
- Assert . assertEquals(expectToString, resultList. toString());
332
- ```
333
-
334
246
# 技术鸣谢
335
247
336
248
## OpenCC
0 commit comments