pinyin

pinyin 是 java 实现的高性能中文拼音转换工具。

创作目的

想为 java 设计一款便捷易用的拼音工具。

特性

极简的 api 设计

支持转换长文本

支持多音字

支持多种拼音标注方式

支持中文分词

支持中文繁简体

支持自定义拼音词库

支持判断是否为同音字

支持单独获取声调信息

支持获取声母韵母信息

v0.1.2 新特性

支持指定拼音连接符号

快速开始

准备

jdk 1.7+

maven 引入

com.github.houbb

pinyin

0.1.2

快速开始

返回中文的拼音

使用 PinyinHelper.toPinyin(string) 进行中文转换。

String pinyin = PinyinHelper.toPinyin("我爱中文");

Assert.assertEquals("wǒ ài zhōng wén", pinyin);

返回多音字列表

使用 PinyinHelper.toPinyinList(char) 获取多音字的读音列表。

List pinyinList = PinyinHelper.toPinyinList('重');

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);

指定连接符号

有时候使用者希望指定特定的连接符号。

final String text = "我爱中文";

Assert.assertEquals("wazw", PinyinHelper.toPinyin(text, PinyinStyleEnum.FIRST_LETTER, StringUtil.EMPTY));

第三个参数用于指定一个非 null 的字符串作为拼音连接符号。 (默认是空格进行连接)

更多特性

是否为同音字

PinyinHelper.hasSamePinyin() 用来判断两个汉字是否为同音字,包括对多音字的处理。

char one = '花';

char two = '重';

char three = '中';

char four = '虫';

Assert.assertFalse(PinyinHelper.hasSamePinyin(one, three));

Assert.assertTrue(PinyinHelper.hasSamePinyin(two, three));

Assert.assertTrue(PinyinHelper.hasSamePinyin(two, four));

支持繁体中文

本框架支持繁体中文获取对应拼音。

当然你也可以使用 opencc4j 统一转换为简体再做拼音获取,从而提高准确率。

String pinyin = PinyinHelper.toPinyin("奮斗");

Assert.assertEquals("fèn dòu", pinyin);

自定义拼音词库

已有的词库很难满足各种各样的场景,本工具提供自定义拼音词库的功能。

自定义单个字的拼音

自定义字典

自定义 resources/pinyin_dict_char_define.txt 文件内容,格式如下:

莪:wǒ

噯:ài,āi,ǎi

汉字与拼音使用英文: 分割,多音字使用英文,做拼音的分割。

测试

String pinyin = PinyinHelper.toPinyin("莪");

Assert.assertEquals("wǒ", pinyin);

自定义词组的拼音

自定义字典

自定义 resources/pinyin_dict_phrase_define.txt 文件内容,格式如下:

褈慶炎鍋:chóng qìng huǒ guō

测试

以一串火星文为例。

String pinyin = PinyinHelper.toPinyin("莪噯褈慶炎鍋");

Assert.assertEquals("wǒ ài chóng qìng huǒ guō", pinyin);

注意点

仅支持汉语的自定义拼音。

为了保持功能的一致性,如果你自定义的是繁体字(词),对应的简体也会变成自定义注音。

后期 Road-Map

同音字列表返回

谐音字判断

谐音字列表返回

拼音转汉字

Benchmark

性能对比时使用相同的机器,相同测试文本,验证相同的次数。

均提前做好预热处理,可供参考。

单个分词

对比函数

对比次数

对比内容

耗时

Pinyin4j toHanyuPinyinStringArray()

100w 次

相同文本随机选择一个字符

621 ms

pinyin toPinyin()

100w 次

相同文本随机选择一个字符

317 ms

字符串分词

对比函数

对比次数

对比内容

耗时

Pinyin4j toHanyuPinyinString()

1w 次

相同长文本

33002 ms

pinyin toPinyin()

1w 次

相同长文本

17975 ms

而且 Pinyin4j 的汉语字符串转换是不支持分词的,本项目在支持分词的情况下速度基本依然是 pinyin4j 的两倍。

技术鸣谢

segment 提供的中文分词。

java 同音字_pinyin: The high performance pinyin tool for java.(java 高性能中文转拼音工具。支持同音字。)...相关推荐

  1. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,PHP汉字转拼音类(支持生僻字且自动识别utf-8编码)...

    这篇文章主要介绍了PHP汉字转拼音类(支持生僻字且自动识别utf-8编码),非常实用!需要的朋友可以参考下. 拼音类文件py_class.php源码如下: class py_class{ functi ...

  2. Java 中文转拼音工具类 (附带长度转换 2:1)

    Java 中文转拼音工具类 (附带长度转换 2:1) import com.google.common.collect.Lists; import com.google.common.collect. ...

  3. 一款好用的基于 Java 的中文转拼音工具

    目录 pinyin 主要的功能​​​​​​ 主要的方法 功能测试 工具源地址 pinyin pinyinhttps://github.com/houbb/pinyin pinyin 是 java 实现 ...

  4. java校验中文姓名合法性(需要支持生僻字与分隔符·)

    背景: 国家民委等单位关于在政府管理和社会公共服务信息系统中统一姓名采集应用规范的通知 对中文姓名合法性校验时,需要支持所有GB18030中涉及到的汉字(包括生僻字),并支持部分少数民族姓名中带有分隔 ...

  5. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_PHP教程...

    拼音类文件py_class.php源码如下: pinyin = array( "a" => array(59371, 41648, 50400, 33157, 41392, ...

  6. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_PHP...

    拼音类文件py_class.php源码如下: pinyin = array( "a" => array(59371, 41648, 50400, 33157, 41392, ...

  7. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类...

    拼音类文件py_class.php源码如下: class py_class{ function py_class(){ $this -> pinyin = array( "a" ...

  8. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_php技巧...

    拼音类文件py_class.php源码如下: class py_class{ function py_class(){ $this -> pinyin = array( "a" ...

  9. java汉字转拼音区别多音字_java中文转拼音,支持多音字词组,不支持音标

    官方的pinyin4j虽然强大,能够支持音标转换,但硬伤在于不支持词组.就此特地将pinyin4j的词库提取出来,研究了下,发现多音字有2000多,去掉音标就1000多,常用字也就500左右.然后估摸 ...

  10. PHP:overtrue/pinyin 中文转拼音工具

    packagist: https://packagist.org/packages/overtrue/pinyin github: https://github.com/overtrue/pinyin ...

最新文章

  1. [翻译]Python中yield的解释
  2. GitHub从入门到精通
  3. 怎么发送文件到服务器端,使用HttpClient发送文件流到服务器端
  4. VTK:可视化之Morph3D
  5. Android为TV端助力 转载:android自定义view实战(温度控制表)!
  6. 2016年度 JavaScript 展望(下)
  7. python调用钉钉接口_关于钉钉接口使用Python,Post 500报错
  8. 【设计模式】组合模式 Composite Pattern
  9. EnableQ在线问卷调查引擎(DataSheet/下载)
  10. 章节9 性能和资源使用 - Segger SystemView使用手册(译文)
  11. 不能随便给他人登录微信小程序
  12. linux环境下的jmeter测试
  13. 放弃75W年薪,回老家当公务员,提离职被领导教育,网友:leader嫉妒了
  14. 计算机设备管理器被禁用,win系统管理员被禁用在安全模式的解决方法
  15. ABP开发框架的总体介绍
  16. eclipse的主题背景设置(关爱你的眼睛,从这里做起)
  17. SpringBoot项目的云服务器部署
  18. something about mantis
  19. ora-600内部错误的类型
  20. 展现AI与自动化测试技术之间的神奇化学反应

热门文章

  1. web前端之CSS——web字体详解
  2. 教你一步步实现bibibi弹幕功能。
  3. python程序代码大全-Python编程代码示例 - 全文
  4. 自定义获取ip和地址的接口
  5. rgba 透明度转换十六进制
  6. mysql关联查询语句
  7. eplan2.7在win10安装教程
  8. Linux学习笔记之CentOS7的 wheel组
  9. 线性调频信号(chirp signal)
  10. Cgroup框架分析