00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef LM_MIXTURE
00024 #define LM_MIXTURE
00025
00026 #define END_ENUM { (char*)0, 0 }
00027
00028 class mixture: public mdiadaptlm{
00029 double** l[MAX_NGRAM];
00030 int* pm;
00031 int pmax;
00032 int k1,k2;
00033 int numslm;
00034 int prunethresh;
00035 interplm** sublm;
00036 char *ipfname;
00037 char *opfname;
00038
00039 double reldist(double *l1,double *l2,int n);
00040 int genpmap();
00041 int pmap(ngram ng,int lev);
00042 public:
00043
00044 mixture(char *bigtable,char *sublminfo,int depth,int prunefreq=0,char* ipfile=NULL,char* opfile=NULL);
00045
00046 int train();
00047
00048 int savepar(char* opf);
00049 int loadpar(char* opf);
00050
00051 inline int dub(){return dict->dub();}
00052 inline int dub(int value){
00053 for (int i=0;i<numslm;i++){
00054
00055 sublm[i]->dub(value);
00056 }
00057 return (dict->dub(value));
00058 }
00059
00060 void settying(int a,int b){k1=a;k2=b;}
00061 int discount(ngram ng,int size,double& fstar,double& lambda,int cv=0);
00062 ~mixture(){}
00063 };
00064
00065
00066 #endif
00067
00068
00069
00070