// /*--------------------------------------------------------*\ // | Main Program: Tag_Cloud_Generator // |*--------------------------------------------------------*| // | Date: 2009 June 02 // | Author: Michael Kusold & Marko Skugor // | // | Brief User's Manual: // | Allows the user to create a html tag cloud with // | input done by redirection. // | // \*--------------------------------------------------------*/ ///------------------------------------------------------------- /// Global Context --------------------------------------------- ///------------------------------------------------------------- #include "RESOLVE_Foundation.h" #include "CT/Word_Occurrence/Kernel.h" #include "CT/Sorting_Machine/Kernel_3_C.h" #include "CI/Text/Are_In_Order_1.h" ///------------------------------------------------------------- /// Instantiations --------------------------------------------- ///------------------------------------------------------------- concrete_instance class Word_Occurrence_Map : instantiates Word_Occurrence_Kernel {}; //-------------------------------------------------------------- concrete_instance class Word_Occur_Rec : instantiates Record < Text, Integer > {}; field_name (Word_Occur_Rec, 0, Text, word); field_name (Word_Occur_Rec, 1, Integer, count); ///------------------------------------------------------------- /// Utility Classes - ------------------------------------------ ///------------------------------------------------------------- concrete_instance utility_class Word_Text_Are_In_Order_1 : implements abstract_instance General_Are_In_Order { public: /*! math definition ARE_IN_ORDER ( x: string of character, y: string of character ): boolean is x <= y !*/ utility_function_body Boolean Are_In_Order ( preserves Word_Occur_Rec& x, preserves Word_Occur_Rec& y ) { return (x[word] <= y[word]); }; }; //-------------------------------------------------------------- concrete_instance utility_class Word_Count_Are_In_Order_1 : implements abstract_instance General_Are_In_Order { public: /*! math definition ARE_IN_ORDER ( x: string of character, y: string of character ): boolean is x <= y !*/ utility_function_body Boolean Are_In_Order ( preserves Word_Occur_Rec& x, preserves Word_Occur_Rec& y ) { return (x[count] <= y[count]); }; }; //-------------------------------------------------------------- concrete_instance class Sorting_Machine_Text : instantiates Sorting_Machine_Kernel_3_C < Word_Occur_Rec, Word_Text_Are_In_Order_1 > {}; //-------------------------------------------------------------- concrete_instance class Sorting_Machine_Count : instantiates Sorting_Machine_Kernel_3_C < Word_Occur_Rec, Word_Count_Are_In_Order_1 > {}; ///------------------------------------------------------------- /// Global operations ------------------------------------------ ///------------------------------------------------------------- // global_procedure Get_Line ( // preserves Character_IStream& input, // produces Text line // ); // global_procedure Get_Word ( // alters Text& line, // produces Text word // ); global_procedure Get_Next_Word ( alters Character_IStream& ins, produces Text word ); global_procedure Remove_Non_White ( alters Text& line ); global_function Boolean Is_Common_Word ( preserves Text& word ); ///------------------------------------------------------------- /// Global operation bodies ------------------------------------ ///------------------------------------------------------------- // procedure_body Get_Line ( // preserves Character_IStream& input, // produces Text line // ) // { // object Boolean end = false; // while(end == false) // { // object Character ch; // input.Remove(0,ch); // if(ch=='\n') // { // end = true; // } // else // { // line.Add(line.Length(), ch); // } // } // } // procedure_body Get_Word ( // alters Text& line, // produces Text word // ) // { // object Boolean end = false; // while(end == false) // { // object Character ch; // line.Remove(0,ch); // if(ch=='\n' || ch=='\t' || ch == ' ') // { // end = true; // Remove_Non_White(line); // } // else // { // To_Lower(ch); // word.Add(word.Length(),ch); // } // } // } global_procedure_body Get_Next_Word ( alters Character_IStream& ins, produces Text& word ) { object Boolean done, in_word; word.Clear (); // make sure word starts empty while (not ins.At_EOS () and not done) { object Character ch; ins.Read (ch); // input one character at a time if (Is_Alpha (ch)) // ch is a letter { in_word = true; // we are now inside a word word.Add (word.Length (), ch); } else // ch is not a letter { if (in_word) // we were inside a word, so we must be done { done = true; } } } } // procedure_body Remove_Non_White ( // alters Text& line // ) // { // object Boolean end = false; // while(end==false) // { // object Character ch; // line.Remove(0,ch); // if(ch=='\n' && ch=='\t' && ch==' ') // { // } // else // { // line.Add(0,ch); // end = true; // } // } // } function_body Boolean Is_Common_Word ( preserves Text& word ) { object Boolean answer = false; object Text word_copy = word; if(word =="a") { answer = true; } else if(word =="and") { answer = true; } else if(word == "all") { answer = true; } else if(word == "am") { answer = true; } else if(word == "an") { answer = true; } else if(word == "and") { answer = true; } else if(word == "any") { answer = true; } else if(word == "are") { answer = true; } else if(word == "as") { answer = true; } else if(word == "at") { answer = true; } else if(word == "be") { answer = true; } else if(word == "been") { answer = true; } else if(word == "but") { answer = true; } else if(word == "by") { answer = true; } else if(word == "can") { answer = true; } else if(word == "do") { answer = true; } else if(word == "for") { answer = true; } else if(word == "from") { answer = true; } else if(word == "had") { answer = true; } else if(word == "has") { answer = true; } else if(word == "have") { answer = true; } else if(word == "he") { answer = true; } else if(word == "her") { answer = true; } else if(word == "him") { answer = true; } else if(word == "his") { answer = true; } else if(word == "i") { answer = true; } else if(word == "if") { answer = true; } else if(word == "in") { answer = true; } else if(word == "is") { answer = true; } else if(word == "it") { answer = true; } else if(word == "me") { answer = true; } else if(word == "my") { answer = true; } else if(word == "not") { answer = true; } else if(word == "now") { answer = true; } else if(word == "of") { answer = true; } else if(word == "on") { answer = true; } else if(word == "s") { answer = true; } else if(word == "say") { answer = true; } else if(word == "she") { answer = true; } else if(word == "should") { answer = true; } else if(word == "so") { answer = true; } else if(word == "some") { answer = true; } else if(word == "t") { answer = true; } else if(word == "that") { answer = true; } else if(word == "the") { answer = true; } else if(word == "there") { answer = true; } else if(word == "they") { answer = true; } else if(word == "this") { answer = true; } else if(word == "to") { answer = true; } else if(word == "very") { answer = true; } else if(word == "was") { answer = true; } else if(word == "we") { answer = true; } else if(word == "what") { answer = true; } else if(word == "who") { answer = true; } else if(word == "will") { answer = true; } else if(word == "with") { answer = true; } else if(word == "would") { answer = true; } else if(word == "you") { answer = true; } else if(word == "your") { answer = true; } return answer; } ///------------------------------------------------------------- /// Interface -------------------------------------------------- ///------------------------------------------------------------- program_body main () { object Word_Occurrence_Map word_occur, final; // object Sorting_Machine_Text sort_word_occur; // object Sorting_Machine_Integer sort_final; object Character_OStream outs; object Character_IStream ins; object Character ch; object Integer top_words, i; object Text tba, line; ins.Open_External (""); outs.Open_External (""); //Set the number of words you want outputted here top_words = 100; //Output Header information outs << "\n" << "\n" << "Tag Cloud\n" << "\n" << "\n" << "\n"; //Get Author ins >> line; //Output Top X Words in Author's outs << "

Top " << top_words << " Words in " << line << "'s "; //Get Title ins >> line; //Output "Title" outs << "\"" << line << "\"

\n" << "
\n" << "
\n" << "

\n"; //Read all words in the Text into word_occur that !Is_Common_Word while (not ins.At_EOS ()) { Get_Next_Word(ins,tba); // ins >> line; // while(line.Length()>0) // { // Get_Word(line,tba); if(!Is_Common_Word(tba)) { word_occur.Add(tba); } // } } //Sort based on number of times that word appears //Remove the first "top_words" //Add them to Word_Occurrence called final i.Clear(); while(i=.95) { outs << "" << tba << ""; } else if( freq < .95 && freq >= .90) { outs << "" << tba << ""; } else if( freq < .90 && freq >= .85) { outs << "" << tba << ""; } else if( freq < .85 && freq >= .80) { outs << "" << tba << ""; } else if( freq < .80 && freq >= .75) { outs << "" << tba << ""; } else if( freq < .75 && freq >= .70) { outs << "" << tba << ""; } else if( freq < .70 && freq >= .65) { outs << "" << tba << ""; } else if( freq < .65 && freq >= .60) { outs << "" << tba << ""; } else if( freq < .60 && freq >= .55) { outs << "" << tba << ""; } else if( freq < .55 && freq >= .50) { outs << "" << tba << ""; } else if( freq < .50 && freq >= .45) { outs << "" << tba << ""; } else if( freq < .45 && freq >= .40) { outs << "" << tba << ""; } else if( freq < .40 && freq >= .35) { outs << "" << tba << ""; } else if( freq < .35 && freq >= .30) { outs << "" << tba << ""; } else if( freq < .30 && freq >= .25) { outs << "" << tba << ""; } else if( freq < .25 && freq >= .20) { outs << "" << tba << ""; } else if( freq < .20 && freq >= .15) { outs << "" << tba << ""; } else if( freq < .15 && freq >= .10) { outs << "" << tba << ""; } else if( freq < .10 && freq >= .05) { outs << "" << tba << ""; } else if( freq < .05 && freq >= .00) { outs << "" << tba << ""; } else { outs << "

Your code is FUBAR

"; } i++; } outs << "

\n" << "
\n" << "\n" << ""; ins.Close_External (); outs.Close_External (); }