アットウィキロゴ

hg2

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