有时候,需要将汉字编程对应的拼音,以方便数据的处理。比如在Android手机应用的开发上,要查询联系人的姓名,通常都是用拼音进行查询的。比如要查询“曹孟德”,就可以输入“cmd”,即“曹孟德”三个汉字的拼音“caomengde”各字的首字母。但是怎样才能将“曹孟德”翻译成“caomengde”呢?很简单的办法就是建立一个大的对照表(比如用关联容器Map),比如<”曹”,”cao”>,<” 孟”,”meng”>,<” 德”,”de”>…但这样的做法,需要维护好一个比较大的对照表,同时一个汉字可能有多个发音,也就是说Map这样的容器时不行的,因为其<key,value>必须是一一对应的。在C++中可以用STL里面的multimap来解决这个问题,但Java中没有类似multimap这样的东西,除非自己实现一个。

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

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

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

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

pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.com)。以下是一些具体的介绍和使用方式。

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

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

(1)     doc : pinyin4j的api文档

(2)     lib : pinyin4j的jar包

(3)     src : pinyin4j的源代码

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

(5)     COPYING.txt : LICENSE说明

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

3.       运行GUI demo

命令行执行cd ${pinyin-install-dir}/lib,进入到pinyin4j-2.5.0.jar所在的目录,敲入java -jar pinyin4j-2.5.0.jar执行,GUI界面如下:

上图是输入汉字“中”,执行Convert to Pinyin后的截图。Format后有三个下拉框,第一个下拉框有三个选项,用来控制生成的拼音声调的显示方式,三个方式及其效果如下(以汉字“中”,选中Formatted hanyu Pinyin选项卡测试):

WITH_TONE_NUMBER(以数字代替声调) :  zhong1  zhong4

WITHOUT_TONE (无声调) :                           zhong   zhong

WITH_TONE_MARK (有声调) :                      zhōng  zhòng

第二个下拉框是碰到unicode 的ü 、v 和 u时的显示方式,共有三个方式, 以下是以声调为WITH_TONE_NUMBER方式显示汉字“吕”示例:

WITH_U_AND_COLON : lu:3

WITH_V :            lv3

WITH_U_UNICODE :    lü3

第三个下拉框是控制生成的拼音是以大写方式显示还是以小写方式显示,以汉字“国”示例如下:

LOWERCASE :guó

UPPERCASE :GUÓ

上图的汉字转化成拼音后,有六种显示方式,这是因为pinyin4j支持将汉字转化成六种拼音表示法。其对应关系是:汉语拼音-Hanyu Pinyin,通用拼音-Tongyong Pinyin, 威妥玛拼音(威玛拼法)-Wade-Giles  Pinyin,注音符号第二式-MPSII Pinyin, 耶鲁拼法-Yale Pinyin和国语罗马字-Gwoyeu Romatzyh。

4.  字符串转化成拼音Java代码示例

代码:

package testcase;import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;public class PinYinUtil {public static String getPinYin(String inputString) {HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();format.setCaseType(HanyuPinyinCaseType.LOWERCASE);format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);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(" ");} elseoutput.append(Character.toString(input[i]));}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}return output.toString();}public static void main(String[] args) {String chs = "我是中国人! I'm Chinese!";System.out.println(chs);System.out.println(getPinYin(chs));}}

运行结果:我是中国人! I'm Chinese!
           wŏ shì zhōng guó rén ! I'm Chinese!

附件:

1.各种拼音说明

Yale Pinyin是在第二次世界大战期间由美国军方发明的编码系统,主要为了让在中国地区作战的美军士兵能够快速地熟悉汉语发音,能够向当地人请求帮助,可以说这是一个速成教材,它的目的甚至不是用来互相交流而是使士兵在发音时不会被中国人听错就可以了。

Gwoyeu Romatzyh:即国语罗马字,它是由林语堂提议建立的,在1928年由国民政府大学堂颁布推行。在中国的台湾省这一编码体系得到了保留,但是它就像 Yale一样现在几乎很少有人使用,在1986年,国语罗马字被国语注音符号第二式(MPSII)所取代,在2002年,又被通用拼音(Tongyong Pinyin)取代,成为台湾今天正式的官方汉语音译编码体系。

威妥玛拼音,习惯称作威妥玛拼法或威玛式拼音、韦氏拼音、威翟式拼音,是一套用于拼写中文普通话的罗马拼音系统。19世纪中叶由英国人威妥玛(Thomas Francis Wade)发明,后由翟理斯(Herbert Allen Giles)完成修订,并编入其所撰写的汉英字典。

参考资料:

1.       pinyin4j的官方资料

2.       汉语言的罗马化

http://icookies.spaces.live.com/blog/cns!2CC37E2F87FB3864!170.entry

3.       Wiki: 威妥瑪拼音(维基百科)

http://wapedia.mobi/zh/%E5%A8%81%E5%A6%A5%E7%8E%9B%E6%8B%BC%E9%9F%B3

Pinyin4j入门教程---识别中文相关推荐

  1. 转:Pinyin4j入门教程

    Pinyin4j入门教程 pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.com).以下是一些具体的介绍和使用方式. ...

  2. pinyin4j入门教程

    Pinyin4j入门教程 pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min (xmlerlimin@gmail.com).以下是一些具体的介绍和使用方式. ...

  3. oak深度相机入门教程-识别车道线

      系列文章目录: oak深度相机入门教程-识别眼睛的凝视方向 oak深度相机入门教程-检测是否佩戴口罩 oak深度相机入门教程-文本检测+光学字符识别(OCR)管道 oak深度相机入门教程-识别人的 ...

  4. oak深度相机入门教程-识别头部的姿势

     系列文章目录: oak深度相机入门教程-识别眼睛的凝视方向 oak深度相机入门教程-检测是否佩戴口罩 oak深度相机入门教程-文本检测+光学字符识别(OCR)管道 oak深度相机入门教程-识别人的年 ...

  5. oak深度相机入门教程-识别车辆车牌

      系列文章目录: oak深度相机入门教程-识别眼睛的凝视方向 oak深度相机入门教程-检测是否佩戴口罩 oak深度相机入门教程-文本检测+光学字符识别(OCR)管道 oak深度相机入门教程-识别人的 ...

  6. Camunda 官方快速入门教程(中文完整版)

    本文为Camunda官网快速入门部分的中文版本 原文地址: https://docs.camunda.org/get-started/quick-start/ 0.介绍 本教程将指导您使用Camund ...

  7. [转]Pinyin4j入门教程

    原文地址:[url]http://blog.csdn.net/hfhwfw/article/details/6030816[/url] pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java ...

  8. 将汉字转换成汉语拼音方法,Pinyin4j入门教程

    pinyin4j是一个支持将简体和繁体中文转换到成拼音的Java开源类库,作者是Li Min ().以下是一些具体的介绍和使用方式. 1. pinyin4j的官方下载地址http://sourcefo ...

  9. oak深度相机入门教程-行人重识别

     系列文章目录: oak深度相机入门教程-识别眼睛的凝视方向 oak深度相机入门教程-检测是否佩戴口罩 oak深度相机入门教程-文本检测+光学字符识别(OCR)管道 oak深度相机入门教程-识别人的年 ...

最新文章

  1. 形态学滤波:腐蚀与膨胀(浅谈)
  2. Docke的WEB管理工具
  3. mysql主主复制+keepalived 打造高可用mysql集群
  4. VBS编程基础教程 (第2篇)
  5. 应用系统怎么开启审计功能_vivo开启Android新版本系统公测,功能丰富令人惊喜...
  6. boost::mp11::mp_sort_q相关用法的测试程序
  7. stanford corenlp的TokensRegex
  8. 【LeetCode笔记】剑指 Offer 65. 不用加减乘除做加法(Java、位运算、二刷)
  9. Redis详解(三)
  10. 小米8护眼模式无效_雷军没有交代的小米9的N个细节,这篇文章全告诉你了
  11. 详解API Gateway流控实现,揭开ROMA平台高性能秒级流控的技术细节
  12. 加一度分享:如何降低推广预算,增加KPI
  13. 暴力枚举 --- 8.1 Subsets --- 图解
  14. 深入学习 Intellij IDEA 调试技巧
  15. mongodb oplog java_MongoDB oplog 深入剖析
  16. 第一个十年,我从教师转行为web程序员,下一个十年呢?
  17. PHP 调用金山词霸API获取音标和音频
  18. Alpha、Beta、RC、GA版本的区别
  19. Spanning Tree协议安全攻防
  20. 在中国怎么使用tiktok

热门文章

  1. 1031 查验身份证 (15 分)
  2. Window事件日志分析
  3. 视频网站服务器接入cdn后是如何做到给视频网站加速的
  4. func,func(),new func()的区别
  5. linux之cal命令详解,Linux cal命令详解
  6. floyd 佛洛依德算法
  7. 破坏计算机系统什么罪,破坏计算机信息系统罪是什么
  8. html鼠标跟随特效代码简短,JS实现的简单鼠标跟随DiV层效果完整实例
  9. 【音视频开发笔记】音视频基础
  10. Shell echo命令