package bus;
import tool.*;
public class pro {
String[] data=new String[600];
int s,datanumber;
String[] code_b=new String[50];
String[] code_s=new String[500];
String[] name_b=new String[50];
String[] name_s=new String[500];
String[] code_c=new String[500];
int number_b,number_s;
public static void main(String[] args) {
pro test=new pro();
}
pro(){
readfile sub=new readfile();
sub.makedata("bus.csv","UTF-8");
data=sub.data;
datanumber=sub.datanumber;
int sx;
sx=0;
for(s=1;s<datanumber+1;s++){
String[] x=data[s].split(",");
if(x[1]==null)x[1]="";
if(x[1].length()<1)sx=sx+1;
if(x[1].length()<1)code_b[sx]=x[0];
if(x[1].length()<1)name_b[sx]=x[2];
}
number_b=sx;
sx=0;
for(s=1;s<datanumber+1;s++){
String[] x=data[s].split(",");
if(x[1]==null)x[1]="";
if(x[1].length()>0)sx=sx+1;
if(x[1].length()>0)code_s[sx]=x[1];
if(x[1].length()>0)code_c[sx]=x[0];
if(x[1].length()>0)name_s[sx]=x[2];
}
number_s=sx;
String str;
str="輸送機械";
double p1,maxp;
String name,code;
name="";
code="";
maxp=-9999;
for(s=1;s<number_s+1;s++){
hmm sub2=new hmm();
p1=sub2.makedata(str,name_s[s]);
if(p1>maxp)code=code_s[s];
if(p1>maxp)name=name_s[s];
if(p1>maxp)maxp=p1;
}
System.out.println(name+","+code);
}
}
package bus;
public class hmm{
String[] dic=new String[500];
String[] word=new String[500];
double[][] x=new double[500][500];
double[][] v=new double[500][500];
int dicnumber,wordnumber;
int s,sx,tx;
double p;
double makedata(String w1,String d1){
p=0.9;
makedic(d1);
makeword(w1);
for(s=1;s<wordnumber+1;s++){
for(sx=1;sx<dicnumber+1;sx++){
x[s][sx]=Math.log(1-p);
if(word[s].equals(dic[sx]))x[s][sx]=Math.log(p);
}
}
for(sx=1;sx<dicnumber+1;sx++){
v[1][sx]=x[1][sx];
}
double u1,v1,maxv;
for(s=1;s<wordnumber+1;s++){
for(sx=1;sx<dicnumber+1;sx++){
u1=x[s][sx];
maxv=-999;
for(tx=1;tx<dicnumber+1;tx++){
v1=u1+v[s-1][tx];
if(tx>sx)v1=-999;
if(v1>maxv)maxv=v1;
}
v[s][sx]=maxv;
}
}
maxv=-999;
for(sx=1;sx<dicnumber+1;sx++){
if(v[wordnumber][sx]>maxv)maxv=v[wordnumber][sx];
}
return maxv;
}
void makeword(String str){
wordnumber=str.length();
int s;
for(s=1;s<wordnumber+1;s++){
word[s]=str.substring(s-1,s);
}
}
void makedic(String str){
dicnumber=str.length();
int s;
for(s=1;s<dicnumber+1;s++){
dic[s]=str.substring(s-1,s);
}
}
}
最終更新:2014年05月01日 06:16