import java.io.*;
class pro{
int s,sx,snumber,znumber,dicnumber;
String[] str=new String[1000];
String[] ph=new String[1000];
String[] phs=new String[1000];
String[][] word=new String[1000][1000];
int[] wordnumber=new int[1000];
String[] dic=new String[10000];
double[] p=new double[10000];
String data;
String bun;
int n,t2;
public static void main(String args[]){
pro test=new pro();
}
pro(){
readfile("aa.txt");
String[] x=data.split("。");
for (s=0;s<x.length;s++){
str[s+1]=x[s];
}
snumber=x.length;
dicnumber=0;
p[0]=1;
t2=0;
while(t2<100){
makeword();
makedic();
makep();
t2=t2+1;
}
}
void makep(){
int[] num=new int[10000];
int ss,sxs;
for(sx=0;sx<dicnumber+1;sx++){
num[sx]=1;
}
ss=dicnumber+1;
for(n=1;n<snumber+1;n++){
for(s=1;s<wordnumber[n]+1;s++){
sxs=0;
ss=ss+1;
for(sx=1;sx<dicnumber+1;sx++){
if(word[n][s].equals(dic[sx]))sxs=sx;
}
num[sxs]=num[sxs]+1;
}
}
for(sx=0;sx<dicnumber+1;sx++){
p[sx]=(double)num[sx]/ss;
}
}
void makedic(){
int hh;
for(n=1;n<snumber+1;n++){
for(s=1;s<wordnumber[n]+1;s++){
hh=0;
for(sx=1;sx<dicnumber+1;sx++){
if(word[n][s].equals(dic[sx]))hh=100;
}
if(hh<50)dicnumber=dicnumber+1;
if(hh<50)dic[dicnumber]=word[n][s];
}
}
}
void makeword(){
int t1,pnumber;
double maxp,pt;
for(n=1;n<snumber+1;n++){
bun=str[n];
t1=0;
maxp=-999;
pnumber=0;
while(t1<100){
makeph(bun);
pt=point();
if(pt>maxp)phs=ph;
if(pt>maxp)pnumber=znumber;
if(pt>maxp)maxp=pt;
t1=t1+1;
}
for(s=1;s<pnumber+1;s++){
word[n][s]=phs[s];
}
wordnumber[n]=pnumber;
}
}
double point(){
int[] np=new int[1000];
double pt;
for(s=1;s<znumber+1;s++){
np[s]=0;
for(sx=1;sx<dicnumber+1;sx++){
if(ph[s].equals(dic[sx]))np[s]=sx;
}
}
sx=np[1];
pt=p[sx];
for(s=2;s<znumber+1;s++){
sx=np[s];
pt=p[sx]*pt;
}
return pt;
}
void makeph(String bun){
int[] z=new int[1000];
int[] zz=new int[1000];
int blong;
blong=bun.length();
z[0]=1;
for(s=1;s<blong;s++){
z[s]=0;
if(Math.random()>0.5)z[s]=1;
}
sx=0;
for(s=0;s<blong;s++){
if(z[s]==1)sx=sx+1;
if(z[s]==1)zz[sx]=s;
}
znumber=sx;
for(s=1;s<znumber;s++){
ph[s]=bun.substring(zz[s],zz[s+1]);
}
ph[znumber]=bun.substring(zz[znumber],blong);
}
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月23日 00:27