アットウィキロゴ

マルコフ3

import java.io.*;

class ren{

String str,data;
String[] ph=new String[500];
String[] word=new String[500];
String[] dic=new String[10000];
int[] np=new int[500];
int[] nword=new int[500];  
int s,sx,sxs,phnumber,dicnumber,wordnumber;
double[] p=new double[10000];
double[] q=new double[10000];
double p1,point,maxpoint;
int[][] mk=new int[1000][500];
int[] mknumber=new int[1000];
int[] num=new int[10000];
int t1,t,tr;
int h,t3,database;

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

ren(){

readfile("ren.txt");

System.out.println(data);

String[] bun=data.split("。");

t3=bun.length;

dicnumber=0;
p[0]=1;

t=-1;
database=0;
for(tr=1;tr<1000;tr++){
t=t+1;
if(t>t3-1)t=0;
str=bun[t];

maxpoint=-999;
for(t1=1;t1<11;t1++){

makeph mkph=new makeph();
mkph.makedata(str);
ph=mkph.ph;
phnumber=mkph.phnumber;

for(s=1;s<phnumber+1;s++){
np[s]=0;
for(sx=1;sx<dicnumber+1;sx++){
if(ph[s].equals(dic[sx]))np[s]=sx;
}
}

sx=np[1];
point=p[sx];
sx=np[2];
point=p[sx]*point;
for(s=2;s<phnumber-1;s++){
p1=price(np[s],np[s+1],np[s+2]);  
point=p1*point;
}

if(point>maxpoint)word=ph;
if(point>maxpoint)wordnumber=phnumber;
if(point>maxpoint)maxpoint=point;
}


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(s=1;s<wordnumber+1;s++){
sxs=0;
for(sx=1;sx<dicnumber+1;sx++){
if(word[s].equals(dic[sx]))sxs=sx;
}
nword[s]=sxs;
}

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

for(s=1;s<wordnumber+1;s++){
sx=nword[s];
num[sx]=num[sx]+1;  
}

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

for(s=1;s<dicnumber+1;s++){
p[s]=0.1*q[s]+0.9*p[s];
}

database=database+1;
if(database>999)database=1;
mknumber[database]=wordnumber;
for(s=1;s<wordnumber+1;s++){
mk[database][s]=nword[s];
}

System.out.println(dicnumber);

}


}

double price(int m1,int m2,int m3){
double p1,p2,px;  
int tx;
int h;
px=0.01;
p1=0;
p2=0;
for(tx=1;tx<1000;tx++){
for(sx=1;sx<mknumber[tx];sx++){
h=0;
if(mk[tx][sx]==m1)h=h+1;
if(mk[tx][sx+1]==m2)h=h+1;
if(h==2)p1=p1+1;
}
}  
for(tx=1;tx<1000;tx++){
for(sx=1;sx<mknumber[tx];sx++){
h=0;
if(mk[tx][sx]==m1)h=h+1;
if(mk[tx][sx+1]==m2)h=h+1;
if(mk[tx][sx+2]==m3)h=h+1;
if(h==3)p2=p2+1;
}
}
if(p1>0)px=(double)p2/p1;
if(px<0.01)px=0.01;
return px;
}

void readfile(String file){

String st;
BufferedReader br;

data="";

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

}





}
最終更新:2011年05月24日 09:57