最近要实现一个根据词语得到词语对应拼音的功能,找到了Jpinyin这个开源工具包,使用下来发现它非常强大,完全满足我的需求,下面对它做一个简单的介绍,希望能够帮助到有需要的朋友。

https://github.com/stuxuhai/jpinyin

一、项目介绍:

JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进。

        【JPinyin主要特性】

1、准确、完善的字库;

        Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字(异体字不存在标准拼音)之外的所有汉字;

2、拼音转换速度快;

        经测试,转换Unicode编码从4E00-9FA5范围的20902个汉字,JPinyin耗时约100毫秒。

3、多拼音格式输出支持;

        JPinyin支持多种拼音输出格式:带音标、不带音标、数字表示音标以及拼音首字母输出格式;

4、常见多音字识别;

        JPinyin支持常见多音字的识别,其中包括词组、成语、地名等;

5、简繁体中文转换

项目地址:JPinyin是一个汉字转拼音的Java开源类库

二、实现原理:

通过阅读源代码发现,JPinyin的实现原理是通过将生字、词组和对应的拼音以及简繁汉字存放在数据库,然后通过代码操作数据库来实现汉字/词组转拼音和汉字简繁互转的,数据库都是加密的,不能扩充,但这个工具已经比较完善了,没有必要自己去扩充数据库,经本人测试,未发现有转换错误的问题。

三、核心方法说明:

Jpinyin里面一共有四个类:

ChineseHelper.java     汉字简繁体转换类

PinyinFormat.java         拼音格式类

PinyinHelper.java          汉字转拼音类

PinyinResource.java    资源文件加载类

本文只介绍汉字转拼音PinyinHelper,简繁转换ChineseHelper不作介绍,其中PinyinHelper的公用接口如下:

/**

* 将单个汉字转换为相应格式的拼音

 * @param c 需要转换成拼音的汉字

 * @param pinyinFormat 拼音格式:WITH_TONE_NUMBER--数字代表声调,WITHOUT_TONE--不带声调,WITH_TONE_MARK--带声调

 * @return 汉字的拼音

 */
public static String[] convertToPinyinArray(char c, PinyinFormat pinyinFormat)

/**

 * 将单个汉字转换成带声调格式的拼音

 * @param c 需要转换成拼音的汉字

 * @return 字符串的拼音

 */
public static String[] convertToPinyinArray(char c)

/**

 * 将字符串转换成相应格式的拼音

 * @param str 需要转换的字符串

 * @param separator 拼音分隔符

 * @param pinyinFormat 拼音格式:WITH_TONE_NUMBER--数字代表声调,WITHOUT_TONE--不带声调,WITH_TONE_MARK--带声调

 * @return 字符串的拼音

 */
public static String convertToPinyinString(String str, String separator, PinyinFormat pinyinFormat)

/**

 * 将字符串转换成带声调格式的拼音

 * @param str 需要转换的字符串

 * @param separator 拼音分隔符

 * @return 转换后带声调的拼音

 */
public static String convertToPinyinString(String str, String separator)

/**

 * 判断一个汉字是否为多音字

 * @param c 汉字

 * @return 判断结果,是汉字返回true,否则返回false

 */
public static boolean hasMultiPinyin(char c)

/**

 * 获取字符串对应拼音的首字母

 * @param str 需要转换的字符串

 * @return 对应拼音的首字母

 */
public static String getShortPinyin(String str)

四、Demo

下面是我写的一个demo程序,实现对汉字转拼音各接口的调用,使用起来非常简单。


 
  1. public class JPinyinDemoActivity extends BaseActivity {

  2. @Override

  3. public void setContentView() {

  4. setContentView(R.layout.activity_jpinyin_demo_layout);

  5. }

  6. @Override

  7. public void findViews() {

  8. mWordsEditTxt = ( EditText )findViewById(R.id.wordsEditTextId);

  9. mResultTxt = ( TextView )findViewById(R.id.resultTxtId);

  10. InputLenLimit.lengthFilter( this, mWordsEditTxt );

  11. }

  12. @Override

  13. public void getData() {

  14. }

  15. @Override

  16. public void showContent() {

  17. testJPinyin( );

  18. }

  19. public void onClick( View v ){

  20. switch( v.getId( ) ){

  21. case R.id.toPinyinBtnId:{

  22. clickWordsToPinyin( );

  23. }

  24. break;

  25. default:{

  26. }

  27. break;

  28. }

  29. }

  30. private String wordsToPinyin( String words ){

  31. if( TextUtils.isEmpty( words ) ){

  32. return null;

  33. }

  34. String pinyin = PinyinHelper.convertToPinyinString( words, " ");

  35. return pinyin;

  36. }

  37. private void clickWordsToPinyin( ){

  38. String pinyin = wordsToPinyin( mWordsEditTxt.getText( ).toString( ) );

  39. if( !TextUtils.isEmpty( pinyin ) ){

  40. mResultTxt.setText( pinyin );

  41. }

  42. }

  43. private void testJPinyin( ){

  44. String words = "和气生财";

  45. boolean hasMultiPinyin = false;

  46. String pinyin = null;

  47. String[] pinyins = null;

  48. final String separator = " ";

  49. // hé qì shēng cái

  50. pinyin = PinyinHelper.convertToPinyinString(words, separator);

  51. println( pinyin );

  52. // WITH_TONE_NUMBER--数字代表声调,WITHOUT_TONE--不带声调,WITH_TONE_MARK--带声调

  53. // hé qì shēng cái

  54. pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITH_TONE_MARK);

  55. println( pinyin );

  56. // he2 qi4 sheng1 cai2

  57. pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITH_TONE_NUMBER);

  58. println( pinyin );

  59. // he qi sheng cai

  60. pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITHOUT_TONE);

  61. println( pinyin );

  62. // hé hè huó huò hú

  63. pinyins = PinyinHelper.convertToPinyinArray( words.toCharArray()[ 0 ] );

  64. println( pinyins );

  65. // hé hè huó huò hú

  66. pinyins = PinyinHelper.convertToPinyinArray( words.toCharArray()[ 0 ], PinyinFormat.WITH_TONE_MARK );

  67. println( pinyins );

  68. // hqsc

  69. pinyin = PinyinHelper.getShortPinyin( words );

  70. println( pinyin );

  71. // true

  72. hasMultiPinyin = PinyinHelper.hasMultiPinyin( words.toCharArray( )[ 0 ] );

  73. println( hasMultiPinyin );

  74. }

  75. private void println( String result ){

  76. System.out.println( "result == " + result );

  77. }

  78. private void println( String[] results ){

  79. for( String result : results ){

  80. System.out.println( "result == " + result + " " );

  81. }

  82. }

  83. private void println( boolean hasMultiPinyin ){

  84. System.out.println( "result == " + hasMultiPinyin );

  85. }

  86. private TextView mResultTxt = null;

  87. private EditText mWordsEditTxt = null;

汉字转拼音开源工具包Jpinyin介绍的更多相关文章

  1. Android环境下hanlp汉字转拼音功能的使用介绍

    由于项目需要在Android手机设备上实现汉字转拼音功能(支持多音字),于是首先想到了Pinyin4j+多音字映射对照表的实现方案,并在项目中试用了一段时间,发现数据量大时,其耗时非常严重.后来寻找其 ...

  2. 汉字转拼音,TinyPinyin、Pinyin4j与JPinyin哪个库更快

    1. 介绍 本文对TinyPinyin.Pinyin4j与JPinyin三个汉字转拼音库的用法.测试代码及转换的结果做一个简单的总结. TinyPinyin 适用于Java和Android的快速.低内 ...

  3. 用jpinyin实现汉字转拼音功能

    一.简介 项目地址:https://github.com/stuxuhai/jpinyin JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPiny ...

  4. 汉字转拼音,TinyPinyin、Pinyin4j与JPinyin哪个库更快

    1. 介绍 本文对TinyPinyin.Pinyin4j与JPinyin三个汉字转拼音库的用法.测试代码及转换的结果做一个简单的总结. TinyPinyin 适用于Java和Android的快速.低内 ...

  5. 汉字转拼音的Java类库:JPinyin

    JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5范围及3007(〇 ...

  6. JAVA实现汉字转换为拼音 pinyin4j/JPinyin

    在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个很好大的工程,还好网上有公开的第三方jar支持转换,结合网上很多前辈的代 ...

  7. JAVA实现汉字转拼音

    两个工具包都可以实现:pinyin4j/JPinyin pinyin4j 第一个是使用pinyin4j的jar,此jar对多音字语句的处理不太理想 package edu.ws; import net ...

  8. 【推荐】iOS汉字转拼音第三方库

    PinYin4Objc是一个在git汉字转拼音的开源库,支持简体和繁体中文.效率POAPinyin等其他库要高,转换库也完整下面简单介绍 实现原理 使用unicode_to_hanyu_pinyin. ...

  9. Hanlp汉字转拼音使用python调用详解

    1.hanlp简介 HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用.HanLP具备功能完善.性能高效.架构清晰.语料时新.可自定义的 ...

随机推荐

  1. WebForm、MVC图片加载失败处理

    还是那个该死的WebFrom项目,部分功能替换为MVC后感觉好多了,但是WebForm.MVC都有图片加载失败时显示提示图片的需求,并且统一在js中处理.问题来了,js中图片路径怎么处理呢?现场有可能 ...

  2. BZOJ2002 Hnoi2010 Bounce 弹飞绵羊 【LCT】【分块】

    BZOJ2002 Hnoi2010 Bounce 弹飞绵羊 Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始, ...

  3. FirstTry_HelloWorld

    #include <qapplication.h> #include <qpushbutton.h> int main( int argc, char **argv ) { Q ...

  4. BZOJ4547 Hdu5171 小奇的集合

    题意 有一个大小为n的可重集S,小奇每次操作可以加入一个数a+b(a,b均属于S),求k次操作后它可获得的S的和的最大值.(数据保证这个值为非负数) 对于100%的数据,有 n<=10^5,k& ...

  5. Liquibase 了解

    Liquibase 是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在 XML 文件中,便于版本控制. Liquibase 具备如下特性: 不依 ...

  6. Prometheus 简介

    Prometheus 是一个开源的服务监控系统和时间序列数据库. 特性: 高维度数据模型 自定义查询语言 可视化数据展示 高效的存储策略 易于运维 提供各种客户端开发库 警告和报警 数据导出   gi ...

  7. vue数据已渲染成 但还是报错 变量 undefined

    问题:页面上的数据已渲染出来,但是控制台还是报错变量未undefined,主要是当页面加载完成后,数据并未加载完,所以会报次错误. 解决办法:在数据渲染的主节点(最外层的div)添加 v-if=“da ...

  8. JavaFX 之窗口大小自由拉伸(四)

    一.问题场景 同样的,隐藏掉窗体的默认标题栏也会导致窗体大小自由拉伸功能的失效. 二.解决思路 判断鼠标在窗体的位置,改变鼠标样式,给窗体组件添加拖拽事件监听器,根据鼠标移动位置改变窗体大小. 三.代 ...

  9. linux中控操作相关

    1.首先生成无密码登陆密钥 一般使用rsa 2.编写shell脚本 work_dir=$(pwd) 3.远程拷贝 work_dir=$(pwd) ..} do ¥{host_prefix}$i:$ e ...

  10. NumPy-快速处理数据--ndarray对象--多维数组的存取、结构体数组存取、内存对齐、Numpy内存结构

    本文摘自<用Python做科学计算>,版权归原作者所有. 上一篇讲到:NumPy-快速处理数据--ndarray对象--数组的创建和存取 接下来接着介绍多维数组的存取.结构体数组存取.内存 ...