您的位置:首页 > 其它

拼音串最有可能表示的意思

2017-08-25 12:02 218 查看
       已知一些文字对应的拼音及其在数据库中对应的概率,在给定一段有序的拼音串时,求解其最有可能表示的意思,并给出对应的概率值!

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

public class Main {

static HashMap<String, Float> dict = new HashMap<String, Float>();
static {
dict.put("fu", 0.1242f);
dict.put("tao", 0.1212f);
dict.put("peng", 0.23f);
dict.put("ge", 0.143f);
dict.put("e",0.77f);
dict.put("ta",0.37f);
dict.put("o",0.47f);
}

private static float findMaxProbabilityString(char[] cdata, int start, int end, ArrayList<String> al) {

if(start <= end) {

ArrayList<String> l = new ArrayList<String>();
for(int i=1; i<=6 && start+i-1<cdata.length ; i++) {
String tmp = new String(cdata,start,i);
if(dict.containsKey(tmp))
l.add(tmp);
}

int numInDict = l.size();
float maxRate = 0.0f;
int position = 0;

if( numInDict != 0) {

float[] keyToFloat = new float[numInDict];

for(int j=0; j<numInDict; j++) {
keyToFloat[j] = dict.get(l.get(j)) * findMaxProbabilityString(cdata,start+l.get(j).length(),end,al);
if(keyToFloat[j] > maxRate) {
maxRate = keyToFloat[j];
position = j;
}
}
al.add(l.get(position));
}
return maxRate;
}
return 1;
}

public static void main(String[] args) {

/*
Set<Entry<String,Float>> es = dict.entrySet();
for(Entry<String,Float> e : es)
System.out.println(e.getKey()+":"+e.getValue());
*/

Scanner sc = new Scanner(System.in);

while(sc.hasNext()) {

String data = sc.nextLine();
char[] cdata = data.toCharArray();
ArrayList<String> al = new ArrayList<String>();

float result = findMaxProbabilityString(cdata,0,cdata.length-1,al);

//need to reverse
for(String l : al)
System.out.println(l);

System.out.println(result);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: