`

Pinyin4j解决用拼音对汉字的搜索

    博客分类:
  • java
阅读更多
1.     简单介绍

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

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

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

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

+ 同时支持简体中文、繁体中文转换为拼音…使用起来也非常简单。下面是其官方网址,其中提供了下载:

http://pinyin4j.sourceforge.net/

2.     基本用法:

通常情况下,只需要用到其中的PinyinHelper类中的静态方法toHanyuPinyinStringArray就可以了,比如:

String[] pinyinArray =PinyinHelper.toHanyuPinyinStringArray('单');
for(int i = 0; i < pinyinArray.length; ++i)
{
         System.out.println(pinyinArray[i]);
}

就会输出:


dan1

chan2

shan4


这三种发音,后面的数字代表第几声。可以看到静态方法 toHanyuPinyinStringArray返回的数据类型是一个String数组,它用来接收一个汉字的多个发音,如果 toHanyuPinyinStringArray中的参数不是汉字,那么它会返回null。

3.    格式支持

Pinyin4j支持拼音输出的格式化,比如,“黄”可以输出为“huang”、“huang2”、“huáng”等等,下面的代码就似是输出“huáng”的示例:


HanyuPinyinOutputFormat format= new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
String[] pinyinArray = null;
try
{
         pinyinArray = PinyinHelper.toHanyuPinyinStringArray('黄', format);
}
catch(BadHanyuPinyinOutputFormatCombination e)
{
         e.printStackTrace();
}
for(int i = 0; i < pinyinArray.length; ++i) 
{
         System.out.println(pinyinArray[i]);
}


此外,还支持大小写转换、ü等等。详细情况,可以查看Pinyin4j自带的文档。

4.    实际示例代码

如果我们要将一段文字中的汉字全部转换成不带音调的拼音输出,而这段文字中又可能包含 阿拉伯数字、英文、标点符号等等。如果完全靠自己写代码进行转换,那是非常麻烦的,其中一个首先就要区别,这段文字中那些是汉字,那些是非汉字。有了 Pinyin4j,这个问题就不再困难了,因为对于非汉字,Pinyin4j会自动输出null。参考下面的示例代码:

importnet.sourceforge.pinyin4j.*;

importnet.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
importnet.sourceforge.pinyin4j.format.HanyuPinyinToneType;
importnet.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
public class Chinese2PY

{
         public static void main(String[] args)
         {      
                   Hanyu hanyu = new Hanyu();
                   // 中英文混合的一段文字
                   String str = "荆溪白石出,Hello 天寒红叶稀。Android 山路元无雨,What's up?   空翠湿人衣。";
                   String strPinyin = hanyu.getStringPinYin(str);
                   System.out.println(strPinyin);
         }
}

class Hanyu
{
         private HanyuPinyinOutputFormat format = null;
         private String[] pinyin;
         public Hanyu()
         {
                   format = new HanyuPinyinOutputFormat();
                   format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
                   pinyin = null;
         }
         //转换单个字符
         public String getCharacterPinYin(char c)
         {
                   try
                   {
                            pinyin = PinyinHelper.toHanyuPinyinStringArray(c, format);
                   }
                   catch(BadHanyuPinyinOutputFormatCombination e)
                   {
                            e.printStackTrace();
                   }
                   // 如果c不是汉字,toHanyuPinyinStringArray会返回null
                   if(pinyin == null) return null;
                   // 只取一个发音,如果是多音字,仅取第一个发音
                   return pinyin[0];  
         }
         //转换一个字符串
         public String getStringPinYin(String str)
         {
                   StringBuilder sb = new StringBuilder();
                   String tempPinyin = null;
                   for(int i = 0; i < str.length(); ++i)
                   {
                            tempPinyin =getCharacterPinYin(str.charAt(i));
                            if(tempPinyin == null)
                            {
                                     // 如果str.charAt(i)非汉字,则保持原样
                                     sb.append(str.charAt(i));
                            }
                            else
                            {
                                     sb.append(tempPinyin);
                            }
                   }
                   return sb.toString();
         }


输出结果:

jingxibaishichu,Hellotianhanhongyexi。Android shanluyuanwuyu,What'sup?   kongcuishirenyi。

转载:http://www.open-open.com/home/space-2869-do-blog-id-5493.html
分享到:
评论

相关推荐

    pinyin4j.zip pinyin4j.jar

    通过使用Pinyin4j,开发者可以快速实现对中文数据的拼音化处理,提高应用的用户体验。 Pinyin4j的使用方法简单直观。首先,你需要将提供的`pinyin4j.jar`文件引入到你的项目类路径中。然后,你可以通过`...

    中文转拼音工具类,pinyin4j-2.5.0.jar 适用于地址人名

    《中文转拼音工具类——pinyin4j-2.5.0.jar 在处理地址与人名中的应用》 在处理中文数据时,有时我们需要将汉字转换为拼音,以便进行搜索、排序或者国际化处理。这时,一个高效且准确的中文转拼音工具显得尤为重要...

    pinyin4j-2.5.0.jar 中文转化拼音,获取首字母

    本文将深入探讨pinyin4j-2.5.0.jar这个Java库,了解其功能和使用方法,以及如何通过它来实现中文转化为拼音并获取首字母。 pinyin4j是一个开源的Java库,专为处理中文汉字到拼音的转换而设计。它支持多种拼音输出...

    汉语转换成拼音的jar包pinyin4j-2.5.0版本

    `pinyin4j`库的核心功能是将汉字转换为汉语拼音。这个过程涉及到多个方面,包括识别多音字、处理声调以及提供不同的拼音输出格式。例如,对于汉字"好",`pinyin4j`可以输出"haο"(无声调形式)或"hǎo"(带声调形式...

    pinyin4j(解决多音字问题源码)

    《pinyin4j:解决中文多音字问题的利器》 在中文处理中,多音字是一个常见的挑战。多音字是指一个汉字有多个读音,根据不同的语境和组合,其发音会有所不同。例如,“长”既可以读作“cháng”,也可以读作“zhǎng...

    pinyin4j最新jar包,汉字转pinyin必备

    《pinyin4j:汉字转拼音的利器》 在处理汉字到拼音转换的场景中,pinyin4j是一个不可或缺的工具。它是一个Java库,专为处理汉字转换为拼音而设计,尤其适用于需要进行中文信息处理、搜索引擎优化、或者任何需要汉字...

    pinyin4j-2.5.0-API文档-中文版.zip

    赠送jar包:pinyin4j-2.5.0.jar; 赠送原API文档:pinyin4j-2.5.0-javadoc.jar; 赠送源代码:pinyin4j-2.5.0-sources.jar; 赠送Maven依赖信息文件:pinyin4j-2.5.0.pom; 包含翻译后的API文档:pinyin4j-2.5.0-...

    pinyin4j-2.5.0.jar 下载 java汉字转拼音 jar包 附带超级简单小dome

    在Java编程语言中,pinyin4j是一个非常实用的库,它能将汉字转换为拼音,从而解决了在处理汉字排序、分类、搜索等需求时遇到的问题。本文将详细介绍pinyin4j-2.5.0.jar这个jar包以及如何使用它来实现汉字转拼音的...

    汉字转拼音大小写全拼首字母pinyin4j-jar

    《汉字转拼音:pinyin4j-jar工具详解》 在信息技术领域,处理中文字符时,经常需要将汉字转换为拼音,以便进行各种文本处理任务,如搜索、语音合成等。pinyin4j是一个广泛使用的Java库,专门用于实现这个功能。本文...

    pinyin4j jar包

    4. **拼音首字母处理**:在搜索引擎优化中,常用汉字的拼音首字母进行关键词索引,pinyin4j可以快速地获取一个字符串的所有汉字的拼音首字母,形成首字母串,如"北京"转化为"bj"。 5. **性能优化**:pinyin4j采用了...

    java拼音搜索pinyin4j

    总的来说,"java拼音搜索pinyin4j"这个项目结合了Java Web开发的基础知识和汉字拼音处理的专业工具,通过Servlet三层架构实现了一个高效的中文搜索功能。开发者可以在这个基础上进一步扩展,如增加拼音排序、语音...

    pinyin4j 拼音排序

    《使用pinyin4j进行汉字拼音排序的深度解析》 在中文信息处理中,有时候我们需要对汉字进行排序,而按照汉字本身的顺序排列可能并不符合我们的实际需求,这时,我们可以利用汉字的拼音首字母进行排序,使得排序结果...

    将简体中文和繁体中文转换拼音的jar包 pinyin4j-2.5.0.jar

    《使用pinyin4j库进行中文到拼音转换的详解》 在处理中文字符时,有时我们需要将汉字转换为对应的拼音,以便进行各种文本处理任务,如搜索引擎优化、文本分析或语音合成。在这种情况下,Java开发者可以利用开源库...

    汉字转拼音库pinyin4j

    《汉字转拼音库pinyin4j与Sparta库解析》 在Java开发中,有时候我们需要将汉字转换为对应的拼音,以便进行各种处理,比如文本分析、搜索索引或者语音合成等。这时,我们就需要借助特定的库来完成这项工作。"汉字转...

    pinyin4j.jar中文转拼音及多音字配置文件

    Java pinyin4j.jar中文转拼音 详细可查看我的博客https://me.csdn.net/Extraordinarylife 中《Java pinyin4j.jar中文转拼音 》

    pinyin4j 开发jar包

    pinyin4j,作为一个强大的Java库,专门用于解决这个问题,它使得开发者能够在Java应用程序中轻松实现汉字到拼音的转换。本文将详细介绍pinyin4j的核心功能、使用方法及其在实际开发中的应用。 一、pinyin4j简介 ...

    pinyin4j的简化版 汉字转成拼音

    为此,有人对pinyin4j 2.5版本进行了简化,旨在提高性能并降低使用门槛,让开发者能更轻松地实现汉字转拼音的功能。 简化版的pinyin4j在保留核心功能的同时,剔除了不必要的模块,优化了代码结构,使得整体运行效率...

    pinyin4j拼音码获取

    总的来说,“pinyin4j拼音码获取”这一主题是Java开发中处理汉字拼音转换的关键技术,学习并掌握它有助于开发者在处理中文字符时更加游刃有余。在实际开发中,结合pinyin4j的特性,可以有效地解决与汉字拼音相关的...

    pinyin4J java拼音转换工具

    pinyin4J java拼音转换工具 java汉字转换拼音工具

    Java 中文排序 使用pinyin4j组件

    这里我们将详细介绍如何使用`pinyin4j`这个Java库来实现中文字符串的拼音排序。 `pinyin4j`是一个强大的Java库,它提供了将汉字转换为拼音的功能,这使得我们可以基于每个汉字的拼音首字母来进行排序。以下是如何...

Global site tag (gtag.js) - Google Analytics