|
pinyin pinyin 是 java 实现的高性能中文拼音转换工具。
变更日志
创作目的 想为 java 设计一款便捷易用的拼音工具。
如何为 java 设计一款高性能的拼音转换工具 pinyin4j
特性 快速开始 准备 jdk 1.7+
maven 引入 <dependency>
<groupId>com.github.houbb</groupId>
<artifactId>pinyin</artifactId>
<version>0.0.4</version>
</dependency> |
快速开始 参考 PinyinBsTest
返回中文的拼音 使用
PinyinHelper.toPinyin(string) |
进行中文转换。
String pinyin = PinyinHelper.toPinyin("我爱中文");
Assert.assertEquals("wǒ ài zhōng wén", pinyin); |
返回多音字列表 使用
PinyinHelper.toPinyin(char) |
获取多音字的读音列表。
List<String> pinyinList = PinyinHelper.toPinyin('重');
Assert.assertEquals("[zhòng, chóng, tóng]", pinyinList.toString()); |
分词特性 默认支持中文分词,对用户透明。
String pinyin = PinyinHelper.toPinyin("重庆火锅");
Assert.assertEquals("chóng qìng huǒ guō", pinyin);
String pinyin2 = PinyinHelper.toPinyin("分词也很重要");
Assert.assertEquals("fēn cí yě hěn zhòng yào", pinyin2); |
指定拼音标注形式 api /**
* 转换为拼音
* @param string 原始信息
* @param styleEnum 样式枚举
* @return 结果
* @since 0.0.3
*/
public static String toPinyin(final String string, final PinyinStyleEnum styleEnum) |
PinyinStyleEnum 样式枚举 | 枚举 | 说明 | 例子 |
---|
| 默认模式,拼音声调在韵母第一个字母上。 | pīn yīn |
| 普通模式,即不带声调。 | pin yin |
| 数字标注模式,即拼音声调以数字形式在各个拼音之后,用数字 1-5 进行表示。 | pin1 yin1 |
| 首字母模式,只返回拼音的首字母部分。 | p y | 测试案例 DEFAULT String pinyin = PinyinHelper.toPinyin("我爱中文", PinyinStyleEnum.DEFAULT);
Assert.assertEquals("wǒ ài zhōng wén", pinyin); |
NORMAL String pinyin = PinyinHelper.toPinyin("我爱中文", PinyinStyleEnum.NORMAL);
Assert.assertEquals("wo ai zhong wen", pinyin); |
NUM_LAST String pinyin = PinyinHelper.toPinyin("我爱中文", PinyinStyleEnum.NUM_LAST);
Assert.assertEquals("wo3 ai4 zhong1 wen2", pinyin); |
FIRST_LETTER String pinyin = PinyinHelper.toPinyin("我爱中文", PinyinStyleEnum.FIRST_LETTER);
Assert.assertEquals("w a z w", pinyin); |
后期 Road-Map 默认关闭该功能
用户自定义相关 benchmark 测试代码见 BenchmarkTest.java
性能对比时使用相同的机器,相同测试文本,验证相同的次数。
均提前做好预热处理,可供参考。
单个分词 | 对比函数 | 对比次数 | 对比内容 | 耗时 |
---|
Pinyin4j toHanyuPinyinStringArray() |
| 100w 次 | 相同文本随机选择一个字符 | 621 ms |
| 100w 次 | 相同文本随机选择一个字符 | 317 ms | 字符串分词 | 对比函数 | 对比次数 | 对比内容 | 耗时 |
---|
Pinyin4j toHanyuPinyinString() |
| 1w 次 | 相同长文本 | 33002 ms |
| 1w 次 | 相同长文本 | 17975 ms |
而且 Pinyin4j 的汉语字符串转换是不支持分词的,本项目在支持分词的情况下速度基本依然是 pinyin4j 的两倍。
技术鸣谢 pinyin-data 与 phrase-pinyin-data 提供的拼音数据。
segment 提供的中文分词。
----------------------------
原文链接:https://blog.51cto.com/9250070/2467735
原作者:叶止水
程序猿的技术大观园:www.javathinker.net
[这个贴子最后由 flybird 在 2020-01-28 17:34:51 重新编辑]
|
|