pinyin4j提供了汉语转拼音的一个开源库, 支持多种拼音系统:汉语拼音、 通用拼音 、威氏拼音、注音二式、雅礼、
国语罗马字。但当前版本貌似不支持根据上下文来识别多音字的功能。
http://pinyin4j.sourceforge.net/
写个小例子试了一下,多音字简单的取第一个读音:
- package edu.jlu.fuliang;
-
- 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 Pinyin4jTest {
- public static String getPinYin(String src) {
- StringBuilder pinyinBuf = new StringBuilder();
- HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();
- outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
- outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
- outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
-
- try {
- for (int i = 0; i < src.length(); i++) {
- String[] pinYins = PinyinHelper.toHanyuPinyinStringArray(src.charAt(i),
- outputFormat);
- if (pinYins != null && pinYins.length > 0) {
- pinyinBuf.append(pinYins[0]);
- } else {
- pinyinBuf.append(src.charAt(i));
- }
- }
- } catch (BadHanyuPinyinOutputFormatCombination e) {
- e.printStackTrace();
- }
- return pinyinBuf.toString();
- }
-
- public static void main(String[] args) {
- System.out.println(getPinYin("Hello,欢迎来到长春"));
- }
- }
package edu.jlu.fuliang;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 Pinyin4jTest {public static String getPinYin(String src) {StringBuilder pinyinBuf = new StringBuilder();HanyuPinyinOutputFormat outputFormat = new HanyuPinyinOutputFormat();outputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);outputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);outputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);try {for (int i = 0; i < src.length(); i++) {String[] pinYins = PinyinHelper.toHanyuPinyinStringArray(src.charAt(i),outputFormat);if (pinYins != null && pinYins.length > 0) {// 汉语pinyinBuf.append(pinYins[0]);} else {// 非汉语pinyinBuf.append(src.charAt(i));}}} catch (BadHanyuPinyinOutputFormatCombination e) {e.printStackTrace();}return pinyinBuf.toString();}public static void main(String[] args) {System.out.println(getPinYin("Hello,欢迎来到长春"));}}
输出
Hello,huanyinglaidaozhangchun