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,欢迎来到长春"));
}
}
输出
Hello,huanyinglaidaozhangchun