ccstruct/ratngs.cpp

Go to the documentation of this file.
00001 
00020 #include          "mfcpch.h"
00021 //#include                                      "ipeerr.h"
00022 #include          "callcpp.h"
00023 #include          "ratngs.h"
00024 //#include "tordvars.h"
00025 extern FILE *matcher_fp;
00026 
00029 ELISTIZE (BLOB_CHOICE) CLISTIZE (BLOB_CHOICE_LIST) CLISTIZE (WERD_CHOICE)
00031 //extern FILE* matcher_fp;
00032 
00036 BLOB_CHOICE::BLOB_CHOICE(                   //constructor
00037                          char src_class,    //character
00038                          float src_rating,  //rating
00039                          float src_cert,    //certainty
00040                          INT8 src_config    //config (font)
00041                         ) {
00042   blob_class = src_class;
00043   blob_rating = src_rating;
00044   blob_certainty = src_cert;     //just copy them
00045   blob_config = src_config;
00046 }
00047 
00048 
00052 WERD_CHOICE::WERD_CHOICE (
00053 //constructor
00054 const char *src_string,          //word string
00055 float src_rating,                //rating
00056 float src_cert,                  //certainty
00057 UINT8 src_permuter               //permuter code
00058 ):
00059 word_string(src_string) { 
00060   word_rating = src_rating;
00061   word_certainty = src_cert;
00062   word_permuter = src_permuter;  //just copy them
00063 }
00064 
00065 
00072                                  //add one on
00073 WERD_CHOICE & WERD_CHOICE::operator+= (
00074 const WERD_CHOICE & second       //second word
00075 ) {
00076   if (word_string.length () == 0 || second.word_string.length () == 0) {
00077     word_string = NULL;          //make it empty
00078   }
00079   else {
00080                                  //add ratings
00081     word_rating += second.word_rating;
00082     if (second.word_certainty < word_certainty)
00083                                  //take min
00084       word_certainty = second.word_certainty;
00085                                  //cat strings
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(                           //print whole list
00099                         const char *msg,           //intro message
00100                         BLOB_CHOICE_LIST *ratings  //list of results
00101                        ) {
00102   BLOB_CHOICE_IT
00103     c_it = ratings;              //iterator
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(                           //print summary info
00187                         FILE *fp,                  //file to use
00188                         BLOB_CHOICE_LIST *ratings  //list of results
00189                        ) {
00190   INT32
00191     index;                       //to list
00192   INT32
00193     best_index;                  //to list
00194   FLOAT32
00195     best_rat;                    //rating
00196   FLOAT32
00197     best_cert;                   //certainty
00198   char
00199     first_char;                  //character
00200   FLOAT32
00201     first_rat;                   //rating
00202   FLOAT32
00203     first_cert;                  //certainty
00204   char
00205     sec_char = 0;                //character
00206   FLOAT32
00207     sec_rat = 0.0f;              //rating
00208   FLOAT32
00209     sec_cert = 0.0f;             //certainty
00210   BLOB_CHOICE_IT
00211     c_it = ratings;              //iterator
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 }

Generated on Wed Feb 28 19:49:08 2007 for Tesseract by  doxygen 1.5.1