java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍
source link: http://www.cnblogs.com/houbbBlogs/p/12210592.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
pinyin
pinyin 是 java 实现的高性能中文拼音转换工具。
创作目的
想为 java 设计一款便捷易用的拼音工具。
如何为 java 设计一款高性能的拼音转换工具 pinyin4j
特性
-
性能是 pinyin4j 的两倍
-
极简的 api 设计
-
支持转换长文本
-
支持多音字
-
支持多种拼音标注方式
-
支持中文分词
快速开始
准备
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 样式枚举
枚举 说明 例子DEFAULT
默认模式,拼音声调在韵母第一个字母上。
pīn yīn
NORMAL
普通模式,即不带声调。
pin yin
NUM_LAST
数字标注模式,即拼音声调以数字形式在各个拼音之后,用数字 1-5 进行表示。
pin1 yin1
FIRST_LETTER
首字母模式,只返回拼音的首字母部分。
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
pinyin toPinyin()
100w 次
相同文本随机选择一个字符
317 ms
字符串分词
对比函数 对比次数 对比内容 耗时Pinyin4j toHanyuPinyinString()
1w 次
相同长文本
33002 ms
pinyin toPinyin()
1w 次
相同长文本
17975 ms
而且 Pinyin4j 的汉语字符串转换是不支持分词的,本项目在支持分词的情况下速度基本依然是 pinyin4j 的两倍。
技术鸣谢
pinyin-data 与 phrase-pinyin-data 提供的拼音数据。
segment 提供的中文分词。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK