词语搜索算法思想 - 第三步 词语拼音
2012-02-25 00:01
183 查看
第二步中,我们需要解决一个问题,就是把词语翻译成拼音。在osc中搜索:pinyin,http://pinyin4j.sourceforge.net/,download下来,直接使用:
输出:
发现“乐”是多音字,[le, yue],“八”也是多音字,[ba, ba],分别是第一声、第二声,可以把
这行注释掉,“八”输出的是[ba1, ba2]。
但是这个不符合我们要求,因为用户输入不会区分第一声还是第二声,于是我们要进行一个过滤:
输出:
到这里,一个棘手问题马上就上来了,多音字组合。大家一看,很容易就知道有两个组合:
yu,le,ba,gua 和 yu,yue,ba,gua
那怎样让机器自己组合呢?
public static void main(String[] args) { String item = "娱乐八卦"; // System.out.println(Arrays.toString(split(item))); // System.out.println(Arrays.toString(split("ylbg"))); // System.out.println(Arrays.toString(split("yu,le,ba,gua"))); ArrayList<String[]> list = pinyin(item); for (String[] arr : list) { System.out.println(Arrays.toString(arr)); } } /** * 词语拼音 */ public static ArrayList<String[]> pinyin(String s) { HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 小写 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不用声标 String[] pinyinArray = null; ArrayList<String[]> list = new ArrayList<String[]>(); for (char c : s.toCharArray()) { try { pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } if (pinyinArray == null) { list.add(new String[] {String.valueOf(c)}); } else { list.add(pinyinArray); } } return list; }
输出:
[yu] [le, yue] [ba, ba] [gua]
发现“乐”是多音字,[le, yue],“八”也是多音字,[ba, ba],分别是第一声、第二声,可以把
//defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不用声标
这行注释掉,“八”输出的是[ba1, ba2]。
但是这个不符合我们要求,因为用户输入不会区分第一声还是第二声,于是我们要进行一个过滤:
/** * 词语拼音 */ public static ArrayList<String[]> pinyin(String s) { HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 小写 defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); // 不用声标 String[] pinyinArray = null; ArrayList<String> temp; ArrayList<String[]> list = new ArrayList<String[]>(); for (char c : s.toCharArray()) { try { pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, defaultFormat); } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } if (pinyinArray == null) { list.add(new String[] {String.valueOf(c)}); } else { temp = new ArrayList<String>(); for (String p : pinyinArray) { if (!temp.contains(p)) { temp.add(p); } } list.add(temp.toArray(new String[temp.size()])); } } return list; }
输出:
[yu] [le, yue] [ba] [gua]
到这里,一个棘手问题马上就上来了,多音字组合。大家一看,很容易就知道有两个组合:
yu,le,ba,gua 和 yu,yue,ba,gua
那怎样让机器自己组合呢?
相关文章推荐
- 词语搜索算法思想 - 第四步 拼音组合
- php将汉字转换为拼音和得到词语首字母(二)
- php将汉字转换为拼音和得到词语首字母(三)
- php将汉字转换为拼音和得到词语首字母
- php将汉字转换为拼音和得到词语首字母(四)
- 词语搜索算法思想 - 第二步 算法思想
- php将汉字转换为拼音和得到词语首字母
- PHP实现将汉字转换为拼音及获取词语首字母的方法
- 词语搜索算法思想 - 第五步 结构实现
- Cocos2d-x制作跳棋第三步:棋子动作实现及AI算法思想
- php将汉字转换为拼音和得到词语首字母(一)
- 词语搜索算法思想 - 第一步 问题描述
- 啾啾拼音-小学“看拼音写词语”工具
- 小心把编程思想带到测试
- 简化DAO设计的思想
- 哈夫曼编码算法思想总结
- java面向对象思想
- C#实现将汉字转化为拼音的代码
- 跳棋与Fibonacci数列(守恒思想)
- java汉字转拼音