汉字转拼音开源工具包Jpinyin介绍

最近要实现一个根据词语得到词语对应拼音的功能,找到了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程序,实现对汉字转拼音各接口的调用,使用起来非常简单。

public class JPinyinDemoActivity extends BaseActivity {
	@Override
	public void setContentView() {
		setContentView(R.layout.activity_jpinyin_demo_layout);
	}

	@Override
	public void findViews() {
		mWordsEditTxt = ( EditText )findViewById(R.id.wordsEditTextId);
		mResultTxt = ( TextView )findViewById(R.id.resultTxtId);

		InputLenLimit.lengthFilter( this, mWordsEditTxt );
	}

	@Override
	public void getData() {

	}

	@Override
	public void showContent() {
		testJPinyin( );
	}

	public void onClick( View v ){
		switch( v.getId( ) ){
		case R.id.toPinyinBtnId:{
			clickWordsToPinyin( );
		}
		break;
		default:{

		}
		break;
		}
	}

	private String wordsToPinyin( String words ){
		if( TextUtils.isEmpty( words ) ){
			return null;
		}

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

		return pinyin;
	}

	private void clickWordsToPinyin( ){
		String pinyin = wordsToPinyin( mWordsEditTxt.getText( ).toString( ) );
		if( !TextUtils.isEmpty( pinyin ) ){
			mResultTxt.setText( pinyin );
		}
	}

	private void testJPinyin( ){
		String words = "和气生财";
		boolean hasMultiPinyin = false;
		String pinyin = null;
		String[] pinyins = null;
		final String separator = " ";

		// hé qì shēng cái
		pinyin = PinyinHelper.convertToPinyinString(words, separator);
		println( pinyin );

		// WITH_TONE_NUMBER--数字代表声调,WITHOUT_TONE--不带声调,WITH_TONE_MARK--带声调
		// hé qì shēng cái
		pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITH_TONE_MARK);
		println( pinyin );

		// he2 qi4 sheng1 cai2
		pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITH_TONE_NUMBER);
		println( pinyin );

		// he qi sheng cai
		pinyin = PinyinHelper.convertToPinyinString(words, separator, PinyinFormat.WITHOUT_TONE);
		println( pinyin );

		// hé hè huó huò hú
		pinyins = PinyinHelper.convertToPinyinArray( words.toCharArray()[ 0 ] );
		println( pinyins );

		// hé hè huó huò hú
		pinyins = PinyinHelper.convertToPinyinArray( words.toCharArray()[ 0 ], PinyinFormat.WITH_TONE_MARK );
		println( pinyins );

		// hqsc
		pinyin = PinyinHelper.getShortPinyin( words );
		println( pinyin );

		// true
		hasMultiPinyin = PinyinHelper.hasMultiPinyin( words.toCharArray( )[ 0 ] );
		println( hasMultiPinyin );
	}

	private void println( String result ){
		System.out.println( "result == " + result );
	}

	private void println( String[] results ){
		for( String result : results ){
			System.out.println( "result == " + result + " " );
		}
	}

	private void println( boolean hasMultiPinyin ){
		System.out.println( "result == " + hasMultiPinyin );
	}

	private TextView mResultTxt = null;
	private EditText mWordsEditTxt = null;
}

该例下载地址:汉字转拼音Jpinyin实例

时间: 2024-10-08 03:15:46

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

Android-- 汉字转拼音开源工具包Jpinyin介绍

最近要实现一个根据词语得到词语对应拼音的功能,找到了Jpinyin这个开源工具包,使用下来发现它非常强大,完全满足我的需求,下面对它做一个简单的介绍,希望能够帮助到有需要的朋友.  一.项目介绍: JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性]1.准确.完善的字库:        Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字(异体字不存在标准拼音)之外

用jpinyin实现汉字转拼音功能

一.简介 项目地址:https://github.com/stuxuhai/jpinyin JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字(异体字不存在标准拼音)之外的所有汉字:2.拼音转换速度快:经测试,转换Unicode编码从4E00-9FA5范围的20902个汉字,JPinyin耗

Java_开源框架_JPinyin汉字转拼音的Java开源库

本博文为子墨原创,转载请注明出处! http://blog.csdn.net/zimo2013/article/details/50039339 1.介绍 JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进.[JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字(异体字不存在标准拼音)之外的所有汉字:2.拼音转换速度快:经测试,转换Unicode编

汉字转拼音的Java类库:JPinyin

JPinyin是一个汉字转拼音的Java开源类库,在PinYin4j的功能基础上做了一些改进. [JPinyin主要特性]1.准确.完善的字库:Unicode编码从4E00-9FA5范围及3007(〇)的20903个汉字中,JPinyin能转换除46个异体字(异体字不存在标准拼音)之外的所有汉字:2.拼音转换速度快:经测试,转换Unicode编码从4E00-9FA5范围的20902个汉字,JPinyin耗时约100毫秒.3.多拼音格式输出支持:JPinyin支持多种拼音输出格式:带音标.不带音标

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

PinYin4Objc是一个在git汉字转拼音的开源库,支持简体和繁体中文.效率POAPinyin等其他库要高,转换库也完整下面简单介绍 实现原理 使用unicode_to_hanyu_pinyin.txt存储汉字编码相对应的拼音,以字典加载到内存中 NSString *resourceName =[[NSBundle mainBundle] pathForResource:@"unicode_to_hanyu_pinyin" ofType:@"txt"]; NSS

汉字转拼音与简繁转换的Java实现

最近HanLP希望支持拼音与繁体功能,所以学习了几个开源的Java实现,优化后集成进来.stuxuhai/jpinyin原理这是GitHub上星星最多一个,主要原理就是利用一张HashTable将字与拼音一一对应起来.同时,在扫描的时候也会将当前汉字依次与后面的3个.2个.1个汉字组合,判断下是否存在多音字词组.也就是说,它最多支持4字词的多音字校正.同时,顺序扫描并且组合的话,复杂度的常数项有点高(大约是O(4n)).再乘上哈希表的复杂度,感觉并不是一个很高效的实现.词典格式jpinyin中一

Java汉字转拼音库,Pinyin4j

pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min ([email protected]).以下是一些具体的介绍和使用方式.         1.pinyin4j的官方下载地址http://sourceforge.net/projects/pinyin4j/files/ 2.下载解压后的目录结构及说明如下 (1)    doc : pinyin4j的api文档 (2)    lib : pinyin4j的jar包 (3)    src : pinyin4

Microsoft Visual Studio International Pack 1.0 SR1--关于汉字转拼音

Microsoft Visual Studio International Pack 1.0 SR1————微软的一个类库 地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=15251 Visual Studio International Pack 包含一组类库,该类库扩展了.NET Framework对全球化软件开发的支持.使用该类库提供的类,.NET 开发人员可以更方便的创建支持多文化多语言的软件应用.SR1 包含对 Ja

java实现将汉字转为拼音

有时候为了方便操作程序的开发,需要将汉字转为拼音等操作.下面这个是自己结合网上的资料,加上自己在公司项目中的亲自实践.完整的实现了将汉字转为拼音的操作.这个Demo只是负责将其转换,在main方法中测试,在实际需要中,只需要调用这个类中的方法即可.本人也是在学习中总结,欢迎各位大神拍砖指教,本人邮箱:[email protected].转载本博客时请在文章明显位置标明文章出处(itRed的博客:http://www.cnblogs.com/itred). 首先贴出测试结果: 测试参数: 汉字转换