java 中文转拼音之pinyin4j

一、简单介绍

有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。

比如要查询“曹孟德”,就可以输入“cmd”,即“曹孟德”三个汉字的拼音“caomengde”各字的首字母。但是怎样才能将“曹孟德”翻译成“caomengde”呢?

很简单的办法就是建立一个大的对照表(比如用关联容器Map),比如<”曹”,”cao”>,<” 孟”,”meng”>,<” 德”,”de”>…但这样的做法,

需要维护好一个比较大的对照表,同时一个汉字可能有多个发音,也就是说Map这样的容器时不行的,因为其<key,value>必须是一一对应的。

在C++中可以用STL里面的multimap来解决这个问题,但Java中没有类似multimap这样的东西,除非自己实现一个。

Pinyin4j就是为了解决类似这样的问题的。它是sourceforge.net上的一个开源项目,功能非常强大:

+ 支持同一汉字有多个发音

+ 还支持拼音的格式化输出,比如第几声之类的,

+ 同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。

pinyin4j的官方下载地址http://sourceforge.net/projects/pinyin4j/files/,目前最新的版本是2.5.0

下载解压后的目录结构及说明如下

(1)     doc : pinyin4j的api文档

(2)     lib : pinyin4j的jar包

(3)     src : pinyin4j的源代码

(4)     CHANGELOG.txt : pinyin4j的版本更新日志

(5)     COPYING.txt : LICENSE说明

(6)     README.txt : pinyin4j的概要介绍

二、局限性:

虽然pinyin4j很好用,但是还是有局限的。以下代码只能获取单个汉字的拼音,但是不能获取一个包含多音字的词的拼音。

例如“重庆”,无法判断到底是“chongqing”还是“zhongqing”,pinyin4j不能通过上下文来判断多音字的读音。

所以,在获取一个包含多音字的词语的读音,可以返回一个列表,正确的读音只能是人工判断选择。

三、格式控制:

HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();

// UPPERCASE:大写  (ZHONG)

// LOWERCASE:小写  (zhong)

format.setCaseType(HanyuPinyinCaseType.LOWERCASE);

// WITHOUT_TONE:无音标  (zhong)

// WITH_TONE_NUMBER:1-4数字表示英标  (zhong4)

// WITH_TONE_MARK:直接用音标符(必须WITH_U_UNICODE否则异常)  (zhòng)

format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);

// WITH_V:用v表示ü  (nv)

// WITH_U_AND_COLON:用"u:"表示ü  (nu:)

// WITH_U_UNICODE:直接用ü (nü)

format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

String[] pinyin = PinyinHelper.toHanyuPinyinStringArray(‘重‘, format);

四、代码

public class PinYin4JTest {

public static String getPinYin(String inputString) {

HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();

format.setCaseType(HanyuPinyinCaseType.LOWERCASE);

format.setToneType(HanyuPinyinToneType.WITH_TONE_NUMBER);

format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);

char[] input = inputString.trim().toCharArray();

StringBuffer output = new StringBuffer("");

try {

for (int i = 0; i < input.length; i++) {

if (Character.toString(input[i]).matches("[\\u4E00-\\u9FA5]+")) {

String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);

output.append(temp[0]);

output.append(" ");

} else

output.append(Character.toString(input[i]));

}

} catch (BadHanyuPinyinOutputFormatCombination e) {

e.printStackTrace();

}

return output.toString();

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

System.out.println(getPinYin("中华人民共和国"));

}

}

注:pinyin4j支持多种拼音方式

Hanyu Pinyin 汉语拼音

Tongyong Pinyin 通用拼音

Wade-Giles 威妥玛拼音

MPS2 (Mandarin Phonetic Symbols II) 国语注音符号第二式

Yale Romanization 耶鲁罗马化拼音

Gwoyeu Romatzyh国语国语罗马化拼音

各种拼音说明

Yale Pinyin是在第二次世界大战期间由美国军方发明的编码系统,主要为了让在中国地区作战的美军士兵能够快速地熟悉汉语发音,

能够向当地人请求帮助,可以说这是一个速成教材,它的目的甚至不是用来互相交流而是使士兵在发音时不会被中国人听错就可以了。

Gwoyeu Romatzyh:即国语罗马字,它是由林语堂提议建立的,在1928年由国民政府大学堂颁布推行。在中国的台湾省这一编码体系得到了保留,

但是它就像 Yale一样现在几乎很少有人使用,在1986年,国语罗马字被国语注音符号第二式(MPSII)所取代,

在2002年,又被通用拼音(Tongyong Pinyin)取代,成为台湾今天正式的官方汉语音译编码体系。

威妥玛拼音,习惯称作威妥玛拼法或威玛式拼音、韦氏拼音、威翟式拼音,是一套用于拼写中文普通话的罗马拼音系统。

19世纪中叶由英国人威妥玛(Thomas Francis Wade)发明,后由翟理斯(Herbert Allen Giles)完成修订,并编入其所撰写的汉英字典。

java 中文转拼音之pinyin4j,布布扣,bubuko.com

时间: 2024-12-19 20:01:47

java 中文转拼音之pinyin4j的相关文章

java中文转拼音

package com.dsunsoft.cqhzz.config; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuP

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

利用Pinyin4j把中文转换为拼音

原文:利用Pinyin4j把中文转换为拼音 源代码下载地址:http://www.zuidaima.com/share/1550463764974592.htm 利用Pinyin4j把中文转换为拼音: package com.zuidaima; import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.source

Java 解析汉字拼音

需要java包 :pinyin4j-2.5.0.jar pinyin4j的使用很方便,一般转换只需要使用PinyinHelper类的静态工具方法即可: String[] pinyin = PinyinHelper.toHanyuPinyinStringArray('赵'); //该类还有其他的拼音转换形式,但是基本上用不到,就不介绍了 返回的数组即是该字符的拼音,如上例就是pinyin[0]=zhao,后面的数字代表声调,声调为5表示轻读,无声调.之所谓返回数组,是因为被判定的汉字有可能有多个读

java汉字转拼音以及得到首字母通用方法

1. [代码]PingYinUtil    package oa.common.utils; import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;import net.sourceforge.pinyin4j.form

Python中文转拼音代码(支持全拼和首字母缩写)

本文的代码,从https://github.com/cleverdeng/pinyin.py升级得来,针对原文的代码,做了以下升级: 1 2 3 4 1.可以传入参数firstcode:如果为true,只取汉子的第一个拼音字母:如果为false,则会输出全部拼音: 2.修复:如果为英文字母,则直接输出: 3.修复:如果分隔符为空字符串,仍然能正常输出: 4.升级:可以指定词典的文件路径 代码很简单,直接读取了一个词典(字符和英文的映射),然后挨个替换中文中的拼音即可: Python 1 2 3

java汉字转换为拼音

原文:java汉字转换为拼音 代码下载地址:http://www.zuidaima.com/share/1550463275240448.htm 输入的字符串是:"这是一个中文" 运行结果: 标签: java 汉字 拼音 转化话题: 语言基础 脚本和工具

Java 中文乱码问题总结

开发java应用出现乱码是很常见的,毕竟现在unicode的使用还不是很广泛,在使用gb2312(包含了gbk简体,big5繁体)的系统中要正确 实现中文的display和数据库的存储是最基本的要求. 1,首先developer要明确自己为什么会遇到乱码,遇到什么样的乱码(无意义的符号还是一串问号或者其它什么东西). 新手遇到一堆很乱的字符时通常不知所措,最直接的反映就是打开google搜索“java中文”(这个字符串在搜索引擎上的查询频率非常高), 然后一个一个的去看别人的解决方法.这样做没有

php中文转拼音的代码

<?php /** * php中文转拼音 * 整理:www.jbxue.com 脚本学堂 * 日期:2014/2/11 */ function Pinyin($_String, $_Code='gb2312') { $_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha". "|