当前位置: 首页 > 搜索 > 正文

拼音转中文简易实现

1 星2 星3 星4 星5 星 (3 次投票, 评分: 5.00, 总分: 5)
Loading ... Loading ...
baidu_share

在搜索过程中,用户输入了拼音,我们需要把拼音转化为中文,去搜索。本来想用Trie树去实现,一个拼音对应多个汉字,多个拼音将会有多个组合。而在实际应用中,一个拼音组合对应的是一些常用短语。为了先简易实现,我们考虑用词典方法,用Map去存储。一个短语的拼音作为key,短语拼音对应的中文作为value,用set存储。

词典使用es-ik中的main2012.dic。当然也可以根据自己的需要添加新词。

中文转化为拼音,使用了Pinyin4j

程序代码实例如下:

package com.xq.spelling;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
 
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;
 
public class SpellingTest {
	private static Map<String,String> map=new HashMap<String,String>();
 
	private static Map<String,Set<String>> spellingMap=new HashMap<String,Set<String>>();
 
	public static void main(String[] args)throws Exception{
		readFile();
        Set<String> set=spellingMap.keySet();
        for(String str: set){
        	System.out.println(spellingMap.get(str));
        }
        System.out.println(spellingMap.get("xijinping"));
	}
 
 
 
	public static void readFile() throws Exception {
		loadMainDict();
	}
 
	private static void loadMainDict() throws Exception{
 
        InputStream is = new SpellingTest().getClass().getClassLoader().getResourceAsStream("main2012.dic");
        if(is == null){
        	throw new RuntimeException("Main Dictionary not found!!!");
        }
 
		try {
			BufferedReader br = new BufferedReader(new InputStreamReader(is , "UTF-8"), 512);
			String theWord = null;
			HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
	        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
	        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
	        format.setVCharType(HanyuPinyinVCharType.WITH_V);
			do {
				theWord = br.readLine();
				if (theWord != null && !"".equals(theWord.trim())) {
					char[] temps=theWord.trim().toLowerCase().toCharArray();
					StringBuffer sb=new StringBuffer();
					for(char ch : temps){
						if(CharacterUtil.identifyCharType(ch)==CharacterUtil.CHAR_CHINESE){
							String[] ss=PinyinHelper.toHanyuPinyinStringArray(ch,format);
							if(ss!=null && ss.length>0){
								sb.append(ss[0]);
							}
						}else{
							sb.append(ch);
						}
					}
					map.put(theWord, sb.toString());
					Set<String> set=spellingMap.get(sb.toString());
					if(set==null || set.size()==0){
						set=new HashSet<String>();
						set.add(theWord);
					}else{
						set.add(theWord);
					}
					spellingMap.put(sb.toString(), set);
				}
			} while (theWord != null);
 
		} catch (IOException ioe) {
			System.err.println("Main Dictionary loading exception.");
			ioe.printStackTrace();
 
		}finally{
			try {
				if(is != null){
                    is.close();
                    is = null;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}	
}

本文固定链接: http://www.chepoo.com/easy-implementation-transfer-chinese-pinyin.html | IT技术精华网

拼音转中文简易实现:等您坐沙发呢!

发表评论