最近要实现一个根据词语得到词语对应拼音的功能,找到了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. perspective透视设置

    目前只适用于webkit内核 一:当为元素定义 perspective 属性时,其子元素会获得透视效果,而不是元素本身. #div1{position: relative;height: 150px; ...

  2. 使用 MSBuild 响应文件 (rsp) 来指定 dotnet build 命令行编译时的大量参数

    在为开源项目 easiwin/MSTestEnhancer 进行持续集成编译时,需要在编译命令中传入较多的参数.这对于新接手此项目的人来说,成本还是高了一点儿.本文将介绍 MSBuild 响应文件 ( ...

  3. c# datetime 格式化大全与使用总结

    //C# datetime 格式化 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label ...

  4. REST服务开发实战【转】

    原文:http://kb.cnblogs.com/page/91827/ REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(htt ...

  5. [Reship] Mean Shift 算法介绍

    ==================================================================================== This article ca ...

  6. exec 和 exec_

    exec_ 是six里面针对py2 , py3 兼容,  而做的重新定义.  和 exec 功能一样. 关键一点是:   exec 是一个语法声明,不是一个函数.  也就是说和if,for一样. ex ...

  7. 几种分布式调用技术的比较 -- RPC VS REST

    我之前在传统IT公司干活,后来来了互联网,感受到了很多不同,其中有一点就是两者使用到的技术有一些差别.比如说分布式调用技术. 我在的这家公司内部的服务架构是基于Thrift的,服务基于Thrift进行 ...

  8. phoenix elixir 框架简单试用

    备注:   官方提供的脚手架工具,我们可以直接使用,生成代码,同时需要nodejs 环境配置(比较简单,参考 相关资料即可)  1. 安装脚手架 mix archive.install https:/ ...

  9. DiscuzX 3. 3搭建和学习

    Discuz!全局变量$_G详解 http://jingyan.baidu.com/article/cb5d610516048c005c2fe0c8.html UCenter uc_user_synl ...

  10. vim初探

    https://github.com/spf13/spf13-vim 安装了此博主的开源项目. :vsp   ——竖分屏 :sp   ——横分屏