COOPY » Guide
version 0.6.5
|
00001 #include <string.h> 00002 00003 #include <coopy/DataColumn.h> 00004 00005 using namespace std; 00006 using namespace coopy::store; 00007 using namespace coopy::cmp; 00008 00009 #define FMAX(x,y) (((x)>(y))?(x):(y)) 00010 00011 void Nature::evaluate(const char *txt, bool forward) { 00012 string s = txt; 00013 size_t i; 00014 00015 if (s=="NULL") { 00016 nully.vote(1,1); 00017 s = ""; 00018 } else { 00019 nully.vote(-1,0.1); 00020 } 00021 00022 // How URL-like are we? 00023 00024 int webby = 0; 00025 00026 i=s.find("http://"); 00027 if (i!=string::npos) { 00028 if (i<=1) { 00029 webby += 100; 00030 } else { 00031 webby += 1; 00032 } 00033 } 00034 i=s.find("://"); 00035 if (i!=string::npos) { 00036 if (i<=10) { 00037 webby += 5; 00038 } else { 00039 webby += 1; 00040 } 00041 } 00042 i=s.find("www."); 00043 if (i==string::npos) { 00044 i=s.find(".com"); 00045 } 00046 if (i==string::npos) { 00047 i=s.find(".net"); 00048 } 00049 if (i==string::npos) { 00050 i=s.find(".org"); 00051 } 00052 if (i==string::npos) { 00053 i=s.find(".coop"); 00054 } 00055 if (i!=string::npos) { 00056 webby += 1; 00057 } 00058 if (webby>=1) { 00059 web.vote(1,webby/10.0); 00060 } else { 00061 web.vote(-1,0.1); 00062 } 00063 00064 // How email-like are we? 00065 int maily = 0; 00066 i=s.find("@"); 00067 if (i!=string::npos) { 00068 i=s.find("."); 00069 if (i!=string::npos) { 00070 maily = 1; 00071 } 00072 } 00073 if (maily>=1) { 00074 email.vote(1,1); 00075 } else { 00076 email.vote(-1,0.1); 00077 } 00078 00079 // How number-like are we? 00080 int numbery = 0; 00081 int nonnumbery = 0; 00082 int integral = 0; 00083 int nonintegral = 0; 00084 int caps = 0; 00085 int noncaps = 0; 00086 int spaces = 0; 00087 int total = 0; 00088 for (size_t j=0; j<s.length(); j++) { 00089 char ch = s[j]; 00090 if (ch>='0'&&ch<='9') { 00091 numbery++; 00092 if (j==1&&s[0]=='0') { 00093 nonintegral++; 00094 } 00095 integral++; 00096 } else { 00097 nonintegral++; 00098 if (ch!='.'&&ch!='-'&&ch!='e'&&ch!='E') { 00099 numbery--; 00100 nonnumbery++; 00101 } 00102 } 00103 if (ch>='A'&&ch<='Z') { 00104 caps++; 00105 } else if (ch>='a'&&ch<='z') { 00106 noncaps++; 00107 } 00108 if (ch==' ') { 00109 spaces++; 00110 } 00111 total++; 00112 } 00113 if (numbery>0) { 00114 if (nonnumbery==0) { 00115 number.vote(1,1); 00116 } else { 00117 number.vote(1,numbery/4.0); 00118 } 00119 } else { 00120 number.vote(-1,0.1); 00121 } 00122 if (integral&&!nonintegral) { 00123 type_integer.vote(1,1,forward); 00124 } else { 00125 type_integer.vote(-1,1,forward); 00126 } 00127 if (caps&&!noncaps) { 00128 if (caps>total/2) { 00129 cappy.vote(1,1); 00130 } else { 00131 cappy.vote(-1,1); 00132 } 00133 } else { 00134 cappy.vote(-1,1); 00135 } 00136 if (noncaps>=1 && noncaps>total*0.75 && !caps && !spaces) { 00137 lowy.vote(1,1); 00138 } else { 00139 lowy.vote(-1,1); 00140 } 00141 00142 text.vote(1,0.1); 00143 } 00144 00145 void Nature::show() { 00146 printf("web %g email %g text %g number %g nully %g cappy %g lowy %g\n", 00147 web.result(), 00148 email.result(), 00149 text.result(), 00150 number.result(), 00151 nully.result(), 00152 cappy.result(), 00153 lowy.result()); 00154 } 00155 00156 float Nature::compare(const std::string& txt, bool forward, int) { 00157 Nature n; 00158 n.evaluate(txt.c_str(),forward); 00159 float dot = n.web.result()*web.result() + 00160 n.email.result()*email.result() + 00161 n.text.result()*text.result() + 00162 n.number.result()*number.result() + 00163 n.nully.result()*nully.result() + 00164 n.cappy.result()*cappy.result() + 00165 n.lowy.result()*lowy.result(); 00166 return dot; 00167 } 00168 00169 00170 float Nature::confidence() { 00171 float c = FMAX(FMAX(FMAX(web.confidence,email.confidence), 00172 FMAX(text.confidence,number.confidence)), 00173 nully.confidence); 00174 return c; 00175 } 00176 00177 00178 void DataColumn::evaluate() { 00179 nmean.clear(); 00180 for (int i=0; i<height(); i++) { 00181 nmean.evaluate(sheet->cellString(index,i).c_str()); 00182 } 00183 } 00184 00185 void DataColumn::unevaluate(int top) { 00186 for (int i=0; i<=top; i++) { 00187 nmean.evaluate(sheet->cellString(index,i).c_str(),false); 00188 } 00189 } 00190 00191 00192 00193 void DataColumnPair::compare(DataColumn& a, DataColumn& b) { 00194 } 00195 00196