pinyin4j提供了漢語轉(zhuǎn)拼音的一個開源庫, 支持多種拼音系統(tǒng):漢語拼音、 通用拼音 、威氏拼音、注音二式、雅禮、
國語羅馬字。但當(dāng)前版本貌似不支持根據(jù)上下文來識別多音字的功能。
http://pinyin4j./
寫個小例子試了一下,多音字簡單的取第一個讀音:
- 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