アットウィキロゴ

ああsds

import java.io.*;

class ren{

int datanumber;
String[] data=new String[50000];
String str,ph;
String[] dic=new String[5000];
int[] gototx=new int[500];
int[] num=new int[5000];
double[] p=new double[5000];  
double[] pr=new double[101];  
double[] q=new double[5000];  
double[] v=new double[500];  
int dicnumber,wordnumber,phnumber;
int strlong,s,sx,sxs;
String[] word=new String[500];
String[] phx=new String[500];
double p1,maxv,v1;
int t,tx,txs,tr;
int h;

public static void main(String args[]){
ren test=new ren();
}

ren(){

makepr();

readfile("ban.txt");

System.out.println(datanumber);

p[0]=1;
dicnumber=0;

for(tr=1;tr<1000+1;tr++){

str=data[tr];

strlong=str.length();

ph=str.substring(0,1);

p1=p[0];
for(sx=1;sx<dicnumber+1;sx++){
if(ph.equals(dic[sx]))p1=p[sx];
}
v[0]=pr[1]*p1;
for(t=1;t<strlong;t++){
ph=str.substring(0,t+1);
p1=p[0];
for(sx=1;sx<dicnumber+1;sx++){
if(ph.equals(dic[sx]))p1=p[sx];
}
phnumber=ph.length();
if(phnumber>99)phnumber=99;
maxv=pr[phnumber]*p1;
txs=-1;
for(tx=0;tx<t;tx++){
ph=str.substring(tx+1,t+1);
p1=p[0];
for(sx=1;sx<dicnumber+1;sx++){
if(ph.equals(dic[sx]))p1=p[sx];
}
phnumber=ph.length();
if(phnumber>99)phnumber=99;
p1=pr[phnumber]*p1;
v1=p1+v[tx];
if(v1>maxv)txs=tx;
if(v1>maxv)maxv=v1;
}
gototx[t]=txs;
v[t]=maxv;
}

sx=0;
t=strlong-1;
while(tx>0){
tx=gototx[t];
sx=sx+1;
phx[sx]=str.substring(tx+1,t+1);
t=tx;
}
sx=sx+1;
phx[sx]=str.substring(0,t+1);
wordnumber=sx;
for(sx=1;sx<wordnumber+1;sx++){
word[sx]=phx[wordnumber+1-sx];
}

for(s=1;s<wordnumber+1;s++){
h=0;
for(sx=1;sx<dicnumber+1;sx++){
if(word[s].equals(dic[sx]))h=100;
}
if(h<50)dicnumber=dicnumber+1;
if(h<50)dic[dicnumber]=word[s];
}

for(sx=1;sx<dicnumber+1;sx++){
num[sx]=0;
}  

for(s=1;s<wordnumber+1;s++){
sxs=0;
for(sx=1;sx<dicnumber+1;sx++){
if(word[s].equals(dic[sx]))sxs=sx;
}  
num[sxs]=num[sxs]+1;
}

for(sx=1;sx<dicnumber+1;sx++){
q[sx]=(double)num[sx]/wordnumber;
}  

for(sx=0;sx<dicnumber+1;sx++){
p[sx]=0.99*p[sx]+0.01*q[sx];
}  

System.out.println(dicnumber);    
      
if(dicnumber>1000)diet();

}

for(sx=1;sx<100;sx++){
System.out.println(dic[sx]);    
}  

}

void makepr(){
double p1,c1,c2;
int k;
p1=0.4;
c1=0;
for(k=1;k<101;k++){
c1=c1+Math.pow(1-p1,k)*p1;
}  
for(k=1;k<101;k++){
pr[k]=Math.pow(1-p1,k)*p1/c1;
}

}

void readfile(String file){

String st;
BufferedReader br;

s=0;

try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"SJIS"));  
while((st = br.readLine()) != null) {    
s=s+1;
data[s]=st;  
}
br.close();
} catch (IOException e) {System.out.println(e);}  

datanumber=s;

}

void diet(){
int[] ch=new int[5000];
String[] newdic=new String[5000];
double[] newp=new double[5000];
int newdicnumber;

sx=0;
for(s=1;s<dicnumber+1;s++){
ch[s]=0;
if(p[s]>0.0001)sx=sx+1;
if(p[s]>0.0001)ch[s]=sx;
}
newdicnumber=sx;

for(s=1;s<dicnumber+1;s++){
if(ch[s]>0)sx=ch[s];
if(ch[s]>0)newdic[sx]=dic[s];
if(ch[s]>0)newp[sx]=p[s];
}
dicnumber=newdicnumber;
for(s=1;s<dicnumber+1;s++){
dic[s]=newdic[s];
p[s]=newp[s];
}

}

}
最終更新:2011年05月27日 19:01