最近要实现一个根据词语得到词语对应拼音的功能,找到了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. 单独编译某个pas文件

    默认的询问.提示.警告框都是英文,找到Vcl.consts.pas改了下,重新编译,放到安装目录下,替换原有的即可. 1. 使用dcc32.exe编译指定的pas文件,dcc32.exe所在目录见下图 ...

  2. >=< 在set和dict中的不同

    两个dict比较的算法是,长度>键>值,由于dict无序,所以比较的时候会自动将键对齐比较,我们不用担心这个. >>> d1 = dict(x=1, y=2) >& ...

  3. ExpressCache

    ExpressCache 非联想.等品牌电脑使用的ExpressCache(带破解文件). (原始安装文件+patch+说明).注意,执行eccmd命令时,需要管理员权限.否则报错. http://a ...

  4. Java并发--阻塞队列

    在前面几篇文章中,我们讨论了同步容器(Hashtable.Vector),也讨论了并发容器(ConcurrentHashMap.CopyOnWriteArrayList),这些工具都为我们编写多线程程 ...

  5. stm32寄存器版学习笔记07 ADC

    STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把A ...

  6. json对象和json字符串相互转换

    1.将JSON字符串转换为JSON对象 var data = JSON.parse(str); // JSON.parse();方法 console.log(data.name); 2.将JSON对象 ...

  7. LeetCode 773. Sliding Puzzle

    原题链接在这里:https://leetcode.com/problems/sliding-puzzle/description/ 题目: On a 2x3 board, there are 5 ti ...

  8. netstat 命令 与 ss 命令

    http://www.cnblogs.com/peida/archive/2013/03/11/2953420.html http://www.ttlsa.com/linux-command/ss-r ...

  9. Range(转)

    原文链接:http://www.cnblogs.com/peida/p/Guava_Range.html 在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构.从 ...

  10. 机器学习:项目流程及方法(以 kaggle 实例解释)

    一.项目目录 (一)数据加载 基础统计 特征分类 基本分布(scatter) (二)数据分析 正态性检验 偏离度分析 (hist | scatter) 峰度分析 (hist | scatter) 分散 ...