00001 00031 #ifdef HAVE_CONFIG_H 00032 #include <config.h> 00033 #endif 00034 00035 #include <iostream> 00036 #include <fstream> 00037 #include "Apriori.hpp" 00038 using namespace std; 00039 00040 00042 00043 void usage() 00044 { 00045 cerr << "\nUsage: apriori basketfile outcomefile min_supp\n"; 00046 cerr << "\n basketfile\t file, that contains the baskets of itemcodes"; 00047 cerr << "\n outcomefile\t file to write the outcome"; 00048 cerr << "\n min_supp\t support threshold"; 00049 00050 cerr << "\n\nFile formats:"; 00051 cerr << "\n\nThe basket file is a plan text file. Each row represents"; 00052 cerr << " a basket. "<<endl; 00053 cerr << "A basket is a set of items seperated by a nonnumeric character."; 00054 cerr << "\nIt can be for example a white space, comma, colon, etc. \n"; 00055 cerr << "An item is represented by its code which is an integer number\n"; 00056 cerr << "greater than or equal to 0."; 00057 cerr << "\nFor more options please check the configuration"; 00058 cerr << " file: .apriori_config."; 00059 cerr << "\n\nHave a succesful mining ;-)"; 00060 cerr << "\n\n\n\t\t\t\t\tFerenc Bodon\n\n"; 00061 } 00062 00063 void process_config_file( bool& quiet, bool& store_input, 00064 unsigned int& size_threshold ) 00065 { 00066 ifstream config_file(".apriori_config"); 00067 quiet=false; 00068 store_input=true; 00069 00070 if( !config_file ) 00071 { 00072 cerr << "Warning: There is no configuration file (.apriori_config)!\n"; 00073 cerr << "Default values are used!\n"<<flush; 00074 } 00075 else 00076 { 00077 char temp_string[256]; 00078 config_file.getline(temp_string, 256); 00079 config_file.getline(temp_string, 256); 00080 config_file>>quiet; 00081 if( config_file.fail() ) 00082 { 00083 cerr<<"\nWarning: Failed to read in quiet value "; 00084 cerr<< "from the configuration file!"; 00085 cerr<<"\nDefault value (false) is used.\n"; 00086 } 00087 config_file.getline(temp_string, 256); 00088 config_file>>store_input; 00089 if( config_file.fail() ) 00090 { 00091 cerr<<"\nWarning: Failed to read in store_input value "; 00092 cerr<<"from the configuration file!"; 00093 cerr<<"\nDefault value (true) is used.\n"; 00094 } 00095 config_file.getline(temp_string, 256); 00096 config_file>>size_threshold; 00097 if( config_file.fail() ) 00098 { 00099 cerr<<"\nWarning: Failed to read in size_threshold value "; 00100 cerr<<"from the configuration file!"; 00101 cerr<<"\nDefault value (0) is used.\n"; 00102 } 00103 config_file.close(); 00104 } 00105 } 00106 00108 int process_arguments( int argc, char *argv[], ifstream& basket_file, 00109 double& min_supp ) 00110 { 00111 if ( argc < 4 ) 00112 { 00113 usage(); 00114 cerr<<"\nError! There are 3 mandatory arguments!\n"<<flush; 00115 return 1; 00116 } 00117 basket_file.open(argv[1]); 00118 if( !basket_file ) 00119 { 00120 usage(); 00121 cerr << "\nError! The basket file can not be read!"<< flush; 00122 return 1; 00123 } 00124 00125 min_supp = atof(argv[3]); 00126 if ( min_supp <= 0 || min_supp > 1 ) 00127 { 00128 usage(); 00129 cerr<<"\nError!\n min_supp should be in the interval (0,1].\n"<<flush; 00130 return 1; 00131 } 00132 00133 return 0; 00134 } 00135 00136 int main( int argc, char *argv[] ) 00137 { 00138 double min_supp; 00139 bool store_input = true, 00140 quiet = false; 00141 unsigned int size_threshold; 00142 ifstream basket_file; 00143 00144 process_config_file(quiet, store_input, size_threshold); 00145 if( process_arguments( argc, argv, basket_file, min_supp ) ) return 1; 00146 00147 if( !quiet ) 00148 { 00149 cout << "\n **********************************************************"; 00150 cout << "\n *** ***"; 00151 cout << "\n *** Trie based APRIORI algorithm ***"; 00152 cout << "\n *** version: 2.4.9 ***"; 00153 cout << "\n *** ***"; 00154 cout << "\n *** Implemented by: Ferenc Bodon (bodon@cs.bme.hu) ***"; 00155 cout << "\n *** ***"; 00156 cout << "\n **********************************************************"; 00157 cout<< endl<<endl; 00158 } 00159 00160 Apriori apriori( basket_file, argv[2], store_input ); 00161 apriori.APRIORI_alg( min_supp, quiet, size_threshold ); 00162 basket_file.close(); 00163 return 0; 00164 } 00165