00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef MF_INTERPLM_H
00023 #define MF_INTERPLM_H
00024
00025 #define SHIFT_BETA 1
00026 #define SHIFT_ONE 2
00027 #define SHIFT_ZERO 3
00028 #define SHIFT_ONE_BETA 4
00029 #define LINEAR_WB 5
00030 #define LINEAR_GT 6
00031 #define MIXTURE 7
00032 #define MOD_SHIFT_BETA 8
00033
00034
00035 class interplm:public ngramtable
00036 {
00037
00038 int lms;
00039
00040 double epsilon;
00041
00042 int unismooth;
00043
00044 int prune_singletons;
00045
00046 int prune_top_singletons;
00047
00048 public:
00049
00050 int backoff;
00051
00052 interplm(char* ngtfile,int depth=0,TABLETYPE tt=FULL);
00053
00054 int prunesingletons(int flag=-1) {
00055 return (flag==-1?prune_singletons:prune_singletons=flag);
00056 }
00057
00058 int prunetopsingletons(int flag=-1) {
00059 return (flag==-1?prune_top_singletons:prune_top_singletons=flag);
00060 }
00061
00062 void gencorrcounts();
00063
00064 void gensuccstat();
00065
00066 virtual int dub() {
00067 return dict->dub();
00068 }
00069
00070 virtual int dub(int value) {
00071 return dict->dub(value);
00072 }
00073
00074 int setusmooth(int v=0) {
00075 return unismooth=v;
00076 }
00077
00078 double setepsilon(double v=1.0) {
00079 return epsilon=v;
00080 }
00081
00082 ngramtable *unitbl;
00083
00084 void trainunigr();
00085
00086 double unigr(ngram ng);
00087
00088 double zerofreq(int lev);
00089
00090 inline int lmsize() {
00091 return lms;
00092 }
00093
00094 inline int obswrd() {
00095 return dict->size();
00096 }
00097
00098 virtual int train() {
00099 return 0;
00100 }
00101
00102 virtual void adapt(char* , double ) {}
00103
00104 virtual double prob(ngram ,int ) {
00105 return 0.0;
00106 }
00107
00108 virtual double boprob(ngram ,int ) {
00109 return 0.0;
00110 }
00111
00112 void test_ngt(ngramtable& ngt,int sz=0,int backoff=0,int checkpr=0);
00113
00114 void test_txt(char *filename,int sz=0,int backoff=0,int checkpr=0,char* outpr=NULL);
00115
00116 void test(char* filename,int sz,int backoff=0,int checkpr=0,char* outpr=NULL);
00117
00118 virtual int discount(ngram ,int ,double& ,double& ,int =0) {
00119 return 0;
00120 }
00121
00122 virtual int savebin(char* ,int ) {
00123 return 0;
00124 }
00125
00126 virtual int netsize() {
00127 return 0;
00128 }
00129
00130 void lmstat(int level) {
00131 stat(level);
00132 }
00133
00134 virtual ~interplm() {}
00135
00136
00137 };
00138
00139 #endif
00140
00141
00142
00143
00144
00145