00001
00020 #include "mfcpch.h"
00021
00022 #include "callcpp.h"
00023 #include "ratngs.h"
00024
00025 extern FILE *matcher_fp;
00026
00029 ELISTIZE (BLOB_CHOICE) CLISTIZE (BLOB_CHOICE_LIST) CLISTIZE (WERD_CHOICE)
00031
00032
00036 BLOB_CHOICE::BLOB_CHOICE(
00037 char src_class,
00038 float src_rating,
00039 float src_cert,
00040 INT8 src_config
00041 ) {
00042 blob_class = src_class;
00043 blob_rating = src_rating;
00044 blob_certainty = src_cert;
00045 blob_config = src_config;
00046 }
00047
00048
00052 WERD_CHOICE::WERD_CHOICE (
00053
00054 const char *src_string,
00055 float src_rating,
00056 float src_cert,
00057 UINT8 src_permuter
00058 ):
00059 word_string(src_string) {
00060 word_rating = src_rating;
00061 word_certainty = src_cert;
00062 word_permuter = src_permuter;
00063 }
00064
00065
00072
00073 WERD_CHOICE & WERD_CHOICE::operator+= (
00074 const WERD_CHOICE & second
00075 ) {
00076 if (word_string.length () == 0 || second.word_string.length () == 0) {
00077 word_string = NULL;
00078 }
00079 else {
00080
00081 word_rating += second.word_rating;
00082 if (second.word_certainty < word_certainty)
00083
00084 word_certainty = second.word_certainty;
00085
00086 word_string += second.word_string;
00087 if (second.word_permuter != word_permuter)
00088 word_permuter = COMPOUND_PERM;
00089 }
00090
00091 return *this;
00092 }
00093
00094
00098 void print_ratings_list(
00099 const char *msg,
00100 BLOB_CHOICE_LIST *ratings
00101 ) {
00102 BLOB_CHOICE_IT
00103 c_it = ratings;
00104
00105 switch (ratings->length ()) {
00106 case 0:
00107 tprintf ("%s:<none>", msg);
00108 break;
00109 case 1:
00110 tprintf ("%s:%c/%g/%g", msg,
00111 c_it.data ()->char_class (),
00112 c_it.data ()->rating (), c_it.data ()->certainty ());
00113 break;
00114 case 2:
00115 tprintf ("%s:%c/%g/%g %c/%g/%g", msg,
00116 c_it.data ()->char_class (),
00117 c_it.data ()->rating (),
00118 c_it.data ()->certainty (),
00119 c_it.data_relative (1)->char_class (),
00120 c_it.data_relative (1)->rating (),
00121 c_it.data_relative (1)->certainty ());
00122 break;
00123 case 3:
00124 tprintf ("%s:%c/%g/%g %c/%g/%g %c/%g/%g", msg,
00125 c_it.data ()->char_class (),
00126 c_it.data ()->rating (),
00127 c_it.data ()->certainty (),
00128 c_it.data_relative (1)->char_class (),
00129 c_it.data_relative (1)->rating (),
00130 c_it.data_relative (1)->certainty (),
00131 c_it.data_relative (2)->char_class (),
00132 c_it.data_relative (2)->rating (),
00133 c_it.data_relative (2)->certainty ());
00134 break;
00135 case 4:
00136 tprintf ("%s:%c/%g/%g %c/%g/%g %c/%g/%g %c/%g/%g", msg,
00137 c_it.data ()->char_class (),
00138 c_it.data ()->rating (),
00139 c_it.data ()->certainty (),
00140 c_it.data_relative (1)->char_class (),
00141 c_it.data_relative (1)->rating (),
00142 c_it.data_relative (1)->certainty (),
00143 c_it.data_relative (2)->char_class (),
00144 c_it.data_relative (2)->rating (),
00145 c_it.data_relative (2)->certainty (),
00146 c_it.data_relative (3)->char_class (),
00147 c_it.data_relative (3)->rating (),
00148 c_it.data_relative (3)->certainty ());
00149 break;
00150 default:
00151 tprintf ("%s:%c/%g/%g %c/%g/%g %c/%g/%g %c/%g/%g %c/%g/%g", msg,
00152 c_it.data ()->char_class (),
00153 c_it.data ()->rating (),
00154 c_it.data ()->certainty (),
00155 c_it.data_relative (1)->char_class (),
00156 c_it.data_relative (1)->rating (),
00157 c_it.data_relative (1)->certainty (),
00158 c_it.data_relative (2)->char_class (),
00159 c_it.data_relative (2)->rating (),
00160 c_it.data_relative (2)->certainty (),
00161 c_it.data_relative (3)->char_class (),
00162 c_it.data_relative (3)->rating (),
00163 c_it.data_relative (3)->certainty (),
00164 c_it.data_relative (4)->char_class (),
00165 c_it.data_relative (4)->rating (),
00166 c_it.data_relative (4)->certainty ());
00167 c_it.forward ();
00168 c_it.forward ();
00169 c_it.forward ();
00170 c_it.forward ();
00171 while (!c_it.at_last ()) {
00172 c_it.forward ();
00173 tprintf ("%c/%g/%g",
00174 c_it.data ()->char_class (),
00175 c_it.data ()->rating (), c_it.data ()->certainty ());
00176 }
00177
00178 break;
00179 }
00180 }
00181
00182
00186 void print_ratings_info(
00187 FILE *fp,
00188 BLOB_CHOICE_LIST *ratings
00189 ) {
00190 INT32
00191 index;
00192 INT32
00193 best_index;
00194 FLOAT32
00195 best_rat;
00196 FLOAT32
00197 best_cert;
00198 char
00199 first_char;
00200 FLOAT32
00201 first_rat;
00202 FLOAT32
00203 first_cert;
00204 char
00205 sec_char = 0;
00206 FLOAT32
00207 sec_rat = 0.0f;
00208 FLOAT32
00209 sec_cert = 0.0f;
00210 BLOB_CHOICE_IT
00211 c_it = ratings;
00212
00213 index = ratings->length ();
00214 if (index > 0) {
00215 first_char = c_it.data ()->char_class ();
00216 first_rat = c_it.data ()->rating ();
00217 first_cert = -c_it.data ()->certainty ();
00218 if (index > 1) {
00219 sec_char = c_it.data_relative (1)->char_class ();
00220 sec_rat = c_it.data_relative (1)->rating ();
00221 sec_cert = -c_it.data_relative (1)->certainty ();
00222 }
00223 else {
00224 sec_char = '~';
00225 sec_rat = -1;
00226 sec_cert = -1;
00227 }
00228 }
00229 else {
00230 first_char = '~';
00231 first_rat = -1;
00232 first_cert = -1;
00233 }
00234 best_index = -1;
00235 best_rat = -1;
00236 best_cert = -1;
00237 for (index = 0, c_it.mark_cycle_pt (); !c_it.cycled_list ();
00238 c_it.forward (), index++) {
00239 if (c_it.data ()->char_class () == blob_answer) {
00240 best_index = index;
00241 best_rat = c_it.data ()->rating ();
00242 best_cert = -c_it.data ()->certainty ();
00243 }
00244 }
00245 if (first_char == '\0' || first_char == ' ')
00246 first_char = '~';
00247 if (sec_char == '\0' || sec_char == ' ')
00248 sec_char = '~';
00249 fprintf (matcher_fp,
00250 " " INT32FORMAT " " INT32FORMAT " %g %g %c %g %g %c %g %g\n",
00251 ratings->length (), best_index, best_rat, best_cert, first_char,
00252 first_rat, first_cert, sec_char, sec_rat, sec_cert);
00253 }