00001
00032 #ifdef HAVE_CONFIG_H
00033 #include <config.h>
00034 #endif
00035
00036 #include <iostream>
00037 #include <fstream>
00038 #include "MSApriori.hpp"
00039 using namespace std;
00040
00041
00043
00044 void usage()
00045 {
00046 cerr << "\nUsage: ./msapriori basketfile outcomefile mis_file [min_conf]\n";
00047 cerr << "\n basketfile\t file, that contains the baskets of itemcodes";
00048 cerr << "\n outcomefile\t file to write the outcome";
00049 cerr << "\n mis_file\t file, that contain mis values";
00050 cerr << "\n min_conf\t confidence threshold";
00051
00052 cerr << "\n\nFile formats:";
00053 cerr << "\n\nThe basket file is a plan text file. Each row represents a basket. ";
00054 cerr << "A basket is a set of items seperated by a nonnumeric character (for example white space, comma, colon, etc.). ";
00055 cerr << "An item is represented by its code which is an integer number greater than or equal with 0.";
00056 cerr << "\n\nThe mis file is a plan text file. Each row represents an item and its mis value (a real vaule between 0 and 1). ";
00057 cerr << "They have to be seperated by a non-whitespace cahacter (for example comma, colon, semi-colon, dot,etc.). ";
00058 cerr << "The white spaces are ignored automaically.\n";
00059 cerr << "\nFor more options please check the configuration file: .apriori_config.";
00060 cerr << "\n\nHave a succesful mining ;-)";
00061 cerr << "\n\n\n\t\t\t\t\tFerenc Bodon\n\n";
00062 }
00063
00064 void process_config_file(bool& quiet, bool& store_input, unsigned long& 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!"<<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 from the configuration file!";
00084 cerr<<"\nDefault value (false) is used.";
00085 }
00086 config_file.getline(temp_string, 256);
00087 config_file>>store_input;
00088 if( config_file.fail() )
00089 {
00090 cerr<<"\nWarning: Failed to read in store_input value from the configuration file!";
00091 cerr<<"\nDefault value (true) is used.";
00092 }
00093 config_file.getline(temp_string, 256);
00094 config_file>>size_threshold;
00095 if( config_file.fail() )
00096 {
00097 cerr<<"\nWarning: Failed to read in size_threshold value from the configuration file!";
00098 cerr<<"\nDefault value (0) is used.";
00099 }
00100 config_file.close();
00101 }
00102 }
00103
00105 int process_arguments( int argc, char *argv[], ifstream& basket_file, ifstream& mis_file, double& min_conf )
00106 {
00107 if ( argc < 4 )
00108 {
00109 usage();
00110 cerr<<"\nError! There are 3 mandatory arguments!"<<flush;
00111 return 1;
00112 }
00113 basket_file.open(argv[1]);
00114 if( !basket_file )
00115 {
00116 usage();
00117 cerr << "\nError! The basket file can not be read!"<< flush;
00118 return 1;
00119 }
00120
00121 mis_file.open(argv[3]);
00122 if( !mis_file )
00123 {
00124 usage();
00125 cerr << "\nError!The file that contain minimal threshold values can not be read!"<< flush;
00126 return 1;
00127 }
00128 if ( argc == 5 )
00129 {
00130 min_conf = atof(argv[4]);
00131 if ( min_conf <= 0 || min_conf > 1 )
00132 {
00133 usage();
00134 cerr << "\nError!\n min_conf should be in the interval (0,1].\n"<<flush;
00135 return 1;
00136 }
00137 }
00138 else min_conf = 0;
00139 return 0;
00140 }
00141
00142 int main( int argc, char *argv[] )
00143 {
00144 double min_conf;
00145 bool store_input = true,
00146 quiet = false;
00147 unsigned long size_threshold;
00148 ifstream basket_file, mis_file;
00149
00150 process_config_file(quiet, store_input, size_threshold);
00151 if( process_arguments( argc, argv, basket_file, mis_file, min_conf ) ) return 1;
00152
00153 if( !quiet )
00154 {
00155 cout << "\n********************************************************************";
00156 cout << "\n*** ***";
00157 cout << "\n*** Trie based MSApriori algorithm ***";
00158 cout << "\n*** version: 2.2.24 ***";
00159 cout << "\n*** ***";
00160 cout << "\n*** Implemented by: Ferenc Bodon (bodon@cs.bme.hu) ***";
00161 cout << "\n*** ***";
00162 cout << "\n********************************************************************\n\n";
00163 }
00164
00165 MSApriori msapriori( basket_file, argv[2] , store_input );
00166 msapriori.MSAPRIORI_alg( mis_file, min_conf, quiet, size_threshold );
00167 basket_file.close();
00168 return 0;
00169 }
00170