zoukankan      html  css  js  c++  java
  • 汉字转拼音开源工具包Jpinyin介绍

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

    8. public void findViews() {

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

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

    11.  
    12. InputLenLimit.lengthFilter( this, mWordsEditTxt );

    13. }

    14.  
    15. @Override

    16. public void getData() {

    17.  
    18. }

    19.  
    20. @Override

    21. public void showContent() {

    22. testJPinyin( );

    23. }

    24.  
    25. public void onClick( View v ){

    26. switch( v.getId( ) ){

    27. case R.id.toPinyinBtnId:{

    28. clickWordsToPinyin( );

    29. }

    30. break;

    31. default:{

    32.  
    33. }

    34. break;

    35. }

    36. }

    37.  
    38. private String wordsToPinyin( String words ){

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

    40. return null;

    41. }

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

    44.  
    45. return pinyin;

    46. }

    47.  
    48. private void clickWordsToPinyin( ){

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

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

    51. mResultTxt.setText( pinyin );

    52. }

    53. }

    54.  
    55. private void testJPinyin( ){

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

    57. boolean hasMultiPinyin = false;

    58. String pinyin = null;

    59. String[] pinyins = null;

    60. final String separator = " ";

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

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

    64. println( pinyin );

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

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

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

    69. println( pinyin );

    70.  
    71. // he2 qi4 sheng1 cai2

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

    73. println( pinyin );

    74.  
    75. // he qi sheng cai

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

    77. println( pinyin );

    78.  
    79. // hé hè huó huò hú

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

    81. println( pinyins );

    82.  
    83. // hé hè huó huò hú

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

    85. println( pinyins );

    86.  
    87. // hqsc

    88. pinyin = PinyinHelper.getShortPinyin( words );

    89. println( pinyin );

    90.  
    91. // true

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

    93. println( hasMultiPinyin );

    94. }

    95.  
    96. private void println( String result ){

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

    98. }

    99.  
    100. private void println( String[] results ){

    101. for( String result : results ){

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

    103. }

    104. }

    105.  
    106. private void println( boolean hasMultiPinyin ){

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

    108. }

    109.  
    110. private TextView mResultTxt = null;

    111. private EditText mWordsEditTxt = null;

  • 相关阅读:
    nginx
    git命令
    mysql的优化
    nginx下的负载均衡
    IO模式和IO多路复用
    回顾java基础—Java数据类型
    解决jdk1.8上编译dubbo失败
    KB,Kb单位换算,网络带宽中的Kbps和KB/s到底是什么意思? (注:B和b的区别)
    生成器函数_yield_yield from_send
    推导式_集合
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/9710214.html
Copyright © 2011-2022 走看看