最近要实现一个根据词语得到词语对应拼音的功能,找到了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. Android 百度地图2.4.2版本标注动画效果

    ImageView latestMapEventImageView = null; // 更新震中位置 private void updateMapEventOverlay() { mMapEvent ...

  2. VMWare安装Ubuntu及配置开发环境遇到的问题集

    安装完Ubuntu改为中文,发现是中英文混搭的界面 sudo apt-get install $(check-language-support --language=zh_CN)更新语言包. Ecli ...

  3. PRML-Chapter3 Linear Models for Regression

    Example: Polynomial Curve Fitting The goal of regression is to predict the value of one or more cont ...

  4. Jmeter查看结果树

    取样结果: Thread Name: test 1-2                                                     线程名称:测试1 - 2Sample S ...

  5. GCD 深入理解(二)

    转自@nixzhu的GitHub主页(译者:Riven.@nixzhu),原文<Grand Central Dispatch In-Depth: Part 2/2> 欢迎来到GCD深入理解 ...

  6. MYSQL在当前日期的基础上加上N(年月日分秒)

    //把id为1的那条数据的开始时间改为现在  结束时间改为开始时间的1个月后 update 表明 set  begintime=now(),endtime=date_add(NOW(), interv ...

  7. MSDN中回调函数的讲解及其C#例子:用委托实现回调函数

    转自:http://blog.csdn.net/sizheng0320/article/details/1615777 ms-help://MS.MSDNQTR.2003FEB.2052/cpguid ...

  8. 静态和全局变量的作用域zz

    全局变量和静态变量的存储方式是一样的,只是作用域不同.如果它们未初始化或初始化为0则会存储在BSS段,如果初始化为非0值则会存储在DATA段,见进程的地址空间分配一文. 静态变量的作用域是当前源文件, ...

  9. spring深入内容

    https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/index.html

  10. CRC 自动判断大端 小端

    /* aos_crc64.c -- compute CRC-64 * Copyright (C) 2013 Mark Adler * Version 1.4 16 Dec 2013 Mark Adle ...