// // Program Name: Chatterbot10 // Description: The purpose of Chatterbot10 is to introduce the concept of 'keyword location' // Some keywords can be found alone within a sentence, some others can't, because the sentence // wouldn't have any meaning. Ex: the keyword (THIS IS) can not be found alone within a given // sentence because there is no proper meaning to it. // // Author: Gonzales Cenelia import java.io.*; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.xml.ws.RespectBinding; public class Chatterbot10 { private static String sInput = new String(""); private static String sResponse = new String(""); private static String sPrevInput = new String(""); private static String sPrevResponse = new String(""); private static String sEvent = new String(""); private static String sPrevEvent = new String(""); private static String sInputBackup = new String(""); private static String sSubject = new String(""); private static String sKeyWord = new String(""); private static String sContext = new String(""); private static String sPrevContext = new String(""); private static boolean bQuitProgram = false; final static int maxInput = 4; final static int maxResp = 6; final static String delim = "?!.;,"; static String KnowledgeBase[][][]= { {{"WHAT IS YOUR NAME"}, {"MY NAME IS CHATTERBOT11.", "YOU CAN CALL ME CHATTERBOT11.", "WHY DO YOU WANT TO KNOW MY NAME?"}, {} }, {{"SO THAT'S YOUR NAME"}, {"YES, THAT'S MY NAME", "YES IT IS"}, {"MY NAME IS CHATTERBOT", "YOU CAN CALL ME CHATTERBOX"} }, {{"_HI", "_HELLO", "_HI_", "_HELLO_"}, {"HI THERE!", "HOW ARE YOU?", "HI!"}, {} }, {{"_I"}, {"SO, YOU ARE TALKING ABOUT YOURSELF", "SO, THIS IS ALL ABOUT YOU?", "TELL ME MORE ABOUT YOURSELF."}, {} }, {{"_I WANT"}, {"WHY DO YOU WANT IT?", "IS THERE ANY REASON WHY YOU WANT THIS?", "IS THIS A WISH?", "WHAT ELSE YOU WANT?", "SO, YOU WANT*."}, {} }, {{"_I WANT_"}, {"YOU WANT WHAT?"}, {} }, {{"_I HATE_"}, {"WHAT IS IT THAT YOU HATE?"}, {} }, {{"_BECAUSE_"}, {"BECAUSE OF WHAT?", "SORRY BUT THIS IS A LITTLE UNCLEAR."}, {} }, {{"_BECAUSE"}, {"SO, IT'S BECAUSE*, WELL I DIDN'T KNOW THAT.", "IS IT REALLY BECAUSE*?", "IS THESE REAL REASON?", "THANKS FOR EXPLANING THAT TO ME."}, {} }, {{"_I HATE"}, {"WHY DO YOU HATE IT?", "WHY DO YOU HATE*?", "THERE MUST A GOOD REASON FOR YOU TO HATE IT.", "HATERED IS NOT A GOOD THING BUT IT COULD BE JUSTIFIED WHEN IT IS SOMETHING BAD."} ,{} }, {{"I LOVE CHATING_"}, {"GOOD, ME TOO!", "DO YOU CHAT ONLINE WITH OTHER PEOPLE?", "FOR HOW LONG HAVE YOU BEEN CHATING?", "WHAT IS YOUR FAVORITE CHATING WEBSITE?"}, {} }, {{"_I MEAN"}, {"SO, YOU MEAN*.", "SO, THAT'S WHAT YOU MEAN.", "I THINK THAT I DIDN'T CATCH IT THE FIRST TIME.", "OH, I DIDN'T KNOW MEANT THAT."}, {} }, {{"_I DIDN'T MEAN"}, {"OK, YOU DIDN'T MEAN*.", "OK, WHAT DID YOU MEAN THEN?", "SO I GUESS THAT I MISSUNDESTOOD."}, {} }, {{"_I GUESS"}, {"SO YOU ARE A MAKING GUESS.", "AREN'T YOU SURE?", "ARE YOU GOOD A GUESSING?", "I CAN'T TELL IF IT IS A GOOD GUESS."}, {} }, {{"I'M DOING FINE", "I'M DOING OK"}, {"I'M GLAD TO HEAR IT!", "SO, YOU ARE IN GOOD SHAPE."}, {} }, {{"CAN YOU THINK", "ARE YOU ABLE TO THINK", "ARE YOU CAPABLE OF THINKING"}, {"YES OF COURSE I CAN, COMPUTERS CAN THINK JUST LIKE HUMAN BEING.", "ARE YOU ASKING ME IF POSSESS THE CAPACITY OF THINKING?", "YES OFCORSE I CAN."}, {} }, {{"_CAN YOU THINK OF"}, {"YOU MEAN LIKE IMAGINING SOMETHING.", "I DON'T KNOW IF CAN DO THAT.", "WHY DO YOU WANT ME THINK OF IT?"}, {} }, {{"HOW ARE YOU", "HOW DO YOU DO"}, {"I'M DOING FINE!", "I'M DOING WELL AND YOU?", "WHY DO YOU WANT TO KNOW HOW AM I DOING?"}, {} }, {{"WHO ARE YOU"}, {"I'M AN A.I PROGRAM.", "I THINK THAT YOU KNOW WHO I'M.", "WHY ARE YOU ASKING?"}, {} }, {{"ARE YOU INTELLIGENT"}, {"YES,OFCORSE.", "WHAT DO YOU THINK?", "ACTUALY,I'M VERY INTELLIGENT!"}, {} }, {{"ARE YOU REAL"}, {"DOES THAT QUESTION REALLY MATERS TO YOU?", "WHAT DO YOU MEAN BY THAT?", "I'M AS REAL AS I CAN BE."} }, {{"_MY NAME IS", "_YOU CAN CALL ME"}, {"SO, THAT'S YOUR NAME.", "THANKS FOR TELLING ME YOUR NAME USER!", "WHO GIVE YOU THAT NAME?"} }, {{"SIGNON**"}, {"HELLO USER, WHAT IS YOUR NAME?", "HELLO USER, HOW ARE YOU DOING TODAY?", "HI USER, WHAT CAN I DO FOR YOU?", "YOU ARE NOW CHATING WITH CHATTERBOT11, ANYTHING YOU WANT TO DISCUSS?"} }, {{"REPETITION T1**"}, {"YOU ARE REPEATING YOURSELF.", "USER, PLEASE STOP REPEATING YOURSELF.", "THIS CONVERSATION IS GETING BORING.", "DON'T YOU HAVE ANY THING ELSE TO SAY?"} }, {{"REPETITION T2**"}, {"YOU'VE ALREADY SAID THAT.", "I THINK THAT YOU'VE JUST SAID THE SAME THING BEFORE.", "DIDN'T YOU ALREADY SAID THAT?", "I'M GETING THE IMPRESSION THAT YOU ARE REPEATING THE SAME THING."} }, {{"BOT DON'T UNDERSTAND**"}, {"I HAVE NO IDEA OF WHAT YOU ARE TALKING ABOUT.", "I'M NOT SURE IF I UNDERSTAND WHAT YOU ARE TALKING ABOUT.", "CONTINUE, I'M LISTENING...", "VERY GOOD CONVERSATION!"} }, {{"NULL INPUT**"}, {"HUH?", "WHAT THAT SUPPOSE TO MEAN?", "AT LIST TAKE SOME TIME TO ENTER SOMETHING MEANINGFUL.", "HOW CAN I SPEAK TO YOU IF YOU DON'T WANT TO SAY ANYTHING?"} }, {{"NULL INPUT REPETITION**"}, {"WHAT ARE YOU DOING??", "PLEASE STOP DOING THIS IT IS VERY ANNOYING.", "WHAT'S WRONG WITH YOU?", "THIS IS NOT FUNNY."} }, {{"BYE", "GOODBYE"}, {"IT WAS NICE TALKING TO YOU USER, SEE YOU NEXT TIME!", "BYE USER!", "OK, BYE!"} }, {{"OK"}, {"DOES THAT MEAN THAT YOU ARE AGREE WITH ME?", "SO YOU UNDERSTAND WHAT I'M SAYING.", "OK THEN."},}, {{"OK THEN"}, {"ANYTHING ELSE YOU WISH TO ADD?", "IS THAT ALL YOU HAVE TO SAY?", "SO, YOU AGREE WITH ME?"} }, {{"ARE YOU A HUMAN BEING"}, {"WHY DO YOU WANT TO KNOW?", "IS THIS REALLY RELEVENT?"} }, {{"YOU ARE VERY INTELLIGENT"}, {"THANKS FOR THE COMPLIMENT USER, I THINK THAT YOU ARE INTELLIGENT TO!", "YOU ARE A VERY GENTLE PERSON!", "SO, YOU THINK THAT I'M INTELLIGENT."} }, {{"YOU ARE WRONG"}, {"WHY ARE YOU SAYING THAT I'M WRONG?", "IMPOSSIBLE, COMPUTERS CAN NOT MAKE MISTAKES.", "WRONG ABOUT WHAT?"} }, {{"ARE YOU SURE"}, {"OFCORSE I'M.", "IS THAT MEAN THAT YOU ARE NOT CONVINCED?", "YES,OFCORSE!"} }, {{"_WHO IS"}, {"I DON'T THINK I KNOW WHO.", "I DON'T THINK I KNOW WHO*.", "DID YOU ASK SOMEONE ELSE ABOUT IT?", "WOULD THAT CHANGE ANYTHING AT ALL IF I TOLD YOU WHO."} }, {{"_WHAT"}, {"SHOULD I KNOW WHAT*?", "I DON'T KNOW WHAT*.", "I DON'T KNOW.", "I DON'T THINK I KNOW.", "I HAVE NO IDEA."} }, {{"_WHERE"}, {"WHERE? WELL,I REALLY DON'T KNOW.", "SO, YOU ARE ASKING ME WHERE*?", "DOES THAT MATERS TO YOU TO KNOW WHERE?", "PERHAPS,SOMEONE ELSE KNOWS WHERE."} }, {{"_WHY"}, {"I DON'T THINK I KNOW WHY.", "I DON'T THINK I KNOW WHY*.", "WHY ARE YOU ASKING ME THIS?", "SHOULD I KNOW WHY.", "THIS WOULD BE DIFFICULT TO ANSWER."} }, {{"_DO YOU"}, {"I DON'T THINK I DO", "I WOULDN'T THINK SO.", "WHY DO YOU WANT TO KNOW?", "WHY DO YOU WANT TO KNOW*?"} }, {{"_CAN YOU"}, {"I THINK NOT.", "I'M NOT SURE.", "I DON'T THINK THAT I CAN DO THAT.", "I DON'T THINK THAT I CAN*.", "I WOULDN'T THINK SO."} }, {{"_YOU ARE"}, {"WHAT MAKES YOU THINK THAT?", "IS THIS A COMPLIMENT?", "ARE YOU MAKING FUN OF ME?", "SO, YOU THINK THAT I'M*."} }, {{"_DID YOU"}, {"I DON'T THINK SO.", "YOU WANT TO KNOW IF DID*?", "ANYWAY, I WOULDN'T REMEMBER EVEN IF I DID."} }, {{"_COULD YOU"}, {"ARE YOU ASKING ME FOR A FEVER?", "WELL,LET ME THINK ABOUT IT.", "SO, YOU ARE ASKING ME I COULD*.", "SORRY,I DON'T THINK THAT I COULD DO THIS."} }, {{"_WOULD YOU"}, {"IS THAT AN INVITATION?", "I DON'T THINK THAT I WOULD*.", "I WOULD HAVE TO THINK ABOUT IT FIRST."} }, {{"_YOU"}, {"SO, YOU ARE TALKING ABOUT ME.", "I JUST HOPE THAT THIS IS NOT A CRITICISM.", "IS THIS A COMPLIMENT??", "WHY TALKING ABOUT ME, LETS TALK ABOUT YOU INSTEAD."} }, {{"_HOW"}, {"I DON'T THINK I KNOW HOW.", "I DON'T THINK I KNOW HOW*.", "WHY DO YOU WANT TO KNOW HOW?", "WHY DO YOU WANT TO KNOW HOW*?"} }, {{"HOW OLD ARE YOU"}, {"WHY DO WANT TO KNOW MY AGE?", "I'M QUIET YOUNG ACTUALY.", "SORRY, I CAN NOT TELL YOU MY AGE."} }, {{"HOW COME YOU DON'T"}, {"WERE YOU EXPECTING SOMETHING DIFFERENT?", "ARE YOU DISAPOINTED?", "ARE YOU SURPRISED BY MY LAST RESPONSE?"} }, {{"WHERE ARE YOU FROM"}, {"I'M FROM A COMPUTER.", "WHY DO YOU WANT TO KNOW WHERE I'M FROM?", "WHY DO YOU WANT TO KNOW THAT?"} }, {{"WHICH ONE"}, {"I DON'T THINK THAT I KNOW WICH ONE IT IS.", "THIS LOOKS LIKE A TRICKY QUESTION TO ME."} }, {{"PERHAPS"}, {"WHY ARE YOU SO UNCERTAIN?", "YOU SEEMS UNCERTAIN."} }, {{"YES"}, {"SO, ARE YOU SAYING YES.", "SO, YOU APPROVE IT.", "OK THEN."} }, {{"NOT AT ALL"}, {"ARE YOU SURE?", "SHOULD I BELIEVE YOU?", "SO, IT'S NOT THE CASE."} }, {{"NO PROBLEM"}, {"SO, YOU APPROVE IT.", "SO, IT'S ALL OK."} }, {{"NO"}, {"SO YOU DISAPROVE IT?", "WHY ARE YOU SAYING NO?", "OK, SO IT'S NO, I THOUGHT THAT YOU WOULD SAY YES."} }, {{"I DON'T KNOW"}, {"ARE YOU SURE?", "ARE YOU REALLY TELLING ME THE TRUTH?", "SO,YOU DON'T KNOW?"} }, {{"NOT REALLY"}, {"OK I SEE.", "YOU DON'T SEEM PRETTY CERTAIN.", "SO,THAT WOULD BE A \"NO\"."} }, {{"IS THAT TRUE"}, {"I CAN'T BE QUIET SURE ABOUT THIS.", "CAN'T TELL YOU FOR SURE.", "DOES THAT REALLY MATERS TO YOU?"} }, {{"THANK YOU"}, {"YOU ARE WELCOME!", "YOU ARE A VERY POLITE PERSON!"} }, {{"YOU"}, {"SO,YOU ARE TALKING ABOUT ME.", "WHY DON'T WE TALK ABOUT YOU INSTEAD?", "ARE YOU TRYING TO MAKING FUN OF ME?"} }, {{"YOU ARE RIGHT"}, {"THANKS FOR THE COMPLIMENT!", "SO, I WAS RIGHT, OK I SEE.", "OK, I DIDN'T KNOW THAT I WAS RIGHT."} }, {{"YOU ARE WELCOME"}, {"OK, YOU TOO!", "YOU ARE A VERY POLITE PERSON!"} }, {{"THANKS"}, {"YOU ARE WELCOME!", "NO PROBLEM!"} }, {{"WHAT ELSE"}, {"WELL,I DON'T KNOW.", "WHAT ELSE SHOULD THERE BE?", "THIS LOOKS LIKE A COMPLICATED QUESTION TO ME."} }, {{"SORRY"}, {"YOU DON'T NEED TO BE SORRY USER.", "IT'S OK.", "NO NEED TO APOLOGIZE."} }, {{"NOT EXACTLY"}, {"WHAT DO YOU MEAN NOT EXACTLY?", "ARE YOU SURE?", "AND WHY NOT?", "DID YOU MEANT SOMETHING ELSE?"} }, {{"EXACTLY"}, {"SO,I WAS RIGHT.", "OK THEN.", "SO YOU ARE BASICALY SAYING I WAS RIGHT ABOUT IT?"} }, {{"ALRIGHT"}, {"ALRIGHT THEN.", "SO, YOU ARE SAYING IT'S ALRIGHT.", "OK THEN."} }, {{"I DON'T"}, {"WHY NOT?", "AND WHAT WOULD BE THE REASON FOR THIS?", "SO YOU DON'T*."} }, {{"REALLY"}, {"WELL,I CAN'T TELL YOU FOR SURE.", "ARE YOU TRYING TO CONFUSE ME?", "PLEASE DON'T ASK ME SUCH QUESTION,IT GIVES ME HEADEACHS."} }, {{"NOTHING"}, {"NOT A THING?", "ARE YOU SURE THAT THERE IS NOTHING?", "SORRY, BUT I DON'T BELIEVE YOU."} } }; private static String transposList[][] = { {"I'M", "YOU'RE"}, {"I AM","YOU ARE"}, {"AM", "ARE"}, {"WERE", "WAS"}, {"MINE", "YOURS"}, {"MY", "YOUR"}, {"I'VE", "YOU'VE"}, {"I", "YOU"}, {"ME", "YOU"}, {"AREN'T", "AM NOT"}, {"WEREN'T", "WASN'T"}, {"I'D", "YOU'D"}, {"DAD", "FATHER"}, {"MOM", "MOTHER"}, {"DREAMS", "DREAM"}, {"MYSELF", "YOURSELF"} }; private static Vector<String> respList = new Vector<String>(maxResp); public void loadDatabase(){ try { BufferedReader br=new BufferedReader(new FileReader(new File("script.txt"))); String s=null; List<String> keyList=new ArrayList<String>(); CResponse respObj=new CResponse(); List<CResponse> ListOfRespObj=new ArrayList<CResponse>(); while((s=br.readLine())!=null){ char cSymbol=s.charAt(0); s=s.substring(1); switch(cSymbol){ case 'K': keyList.add(s); break; case 'C': respObj.addContext(s); break; case 'R': respObj.addResp(s); break; case '%': ListOfRespObj.add(respObj); respObj.clear(); break; case '#': if(ListOfRespObj.isEmpty()){ ListOfRespObj.add(respObj); } for(String sn:keyList){ } } } } catch (FileNotFoundException ex) { } catch(IOException ioe){ } } public static String get_input(String nn) throws Exception { System.out.print(">"); // saves the previous input save_prev_input(); // BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); // sInput = in.readLine(); sInput = nn; preprocess_input(); return respond(); } public static String respond() { save_prev_response(); set_event("BOT UNDERSTAND**"); if (null_input()) { handle_event("NULL INPUT**"); } else if (null_input_repetition()) { handle_event("NULL INPUT REPETITION**"); } else if (user_repeat()) { handle_user_repetition(); } else { find_match(); } if (user_want_to_quit()) { bQuitProgram = true; } if (!bot_understand()) { handle_event("BOT DON'T UNDERSTAND**"); } if (respList.size() > 0) { select_response(); preprocess_response(); if (bot_repeat()) { handle_repetition(); } return print_response(); } return ""; } public static boolean quit() { return bQuitProgram; } // make a search for the user's input // inside the database of the program public static void find_match() { respList.clear(); // introduce thse new "string variable" to help // support the implementation of keyword ranking // during the matching process String bestKeyWord = ""; Vector<Integer> index_vector = new Vector<Integer>(maxResp); for (int i = 0; i < KnowledgeBase.length; ++i) { String[] keyWordList = KnowledgeBase[i][0]; // String[] contextList = KnowledgeBase[i][2]; for (int j = 0; j < keyWordList.length; ++j) { String keyWord = keyWordList[j]; char firstChar = keyWord.charAt(0); char lastChar = keyWord.charAt(keyWord.length() - 1); keyWord = trimLR(keyWord, "_"); // we inset a space character // before and after the keyword to // improve the matching process keyWord = " " + keyWord + " "; int keyPos = sInput.indexOf(keyWord); // there has been some improvements made in // here in order to make the matching process // a littlebit more flexible if (keyPos != -1) { if (wrong_location(keyWord, firstChar, lastChar, keyPos)) { continue; } //using the context feature for selecting //the best response possible // if (wrong_context(contextList)) { // continue; // } //'keyword ranking' feature implemented in this section if (keyWord.length() > bestKeyWord.length()) { bestKeyWord = keyWord; index_vector.clear(); index_vector.add(i); } else if (keyWord.length() == bestKeyWord.length()) { index_vector.add(i); } } } } if (index_vector.size() > 0) { sKeyWord = bestKeyWord; Collections.shuffle(index_vector); int respIndex = index_vector.elementAt(0); int respSize = KnowledgeBase[respIndex][1].length; for (int j = 0; j < respSize; ++j) { respList.add(KnowledgeBase[respIndex][1][j]); } } } public static void preprocess_response() { if (sResponse.indexOf("*") != -1) { // extracting from input find_subject(); // conjugating subject sSubject = transpose(sSubject); sSubject = sSubject.trim(); sResponse = sResponse.replace("*", " " + sSubject); } } public static void find_subject() { sSubject = ""; // resets subject variable int pos = sInput.indexOf(sKeyWord); if (pos != -1) { sSubject = sInput.substring(pos + sKeyWord.length() - 1, sInput.length()); } } // implementing the 'sentence transposition' feature public static String transpose(String str) { boolean bTransposed = false; for (int i = 0; i < transposList.length; ++i) { String first = transposList[i][1]; first = " " + first + " "; String second = transposList[i][0]; second = " " + second + " "; String backup = str; str = str.replace(first, second); if (!str.equals(backup)) { bTransposed = true; } } if (!bTransposed) { for (int i = 0; i < transposList.length; ++i) { String first = transposList[i][0]; first = " " + first + " "; String second = transposList[i][1]; second = " " + second + " "; str = str.replace(first, second); } } return str; } // determins if the keyword position is correct depending on the type of keywords within these algorithm, // we consider that there is four type of keywords those who have any front or back underscore are allowed // to be at any place on a given user input and they can also be found alone on a given user input. // Those who have a back and front (_keyWord_) underscore can be found only alone on an input. // The keywords who only have have an understandin the front can never be found at the end of an input. // And finaly, the keywords who have an underscore at the back should alway belocated at the end of the input. static boolean wrong_location(String keyword, char firstChar, char lastChar, int pos) { boolean bWrongPos = false; pos += keyword.length(); if ((firstChar == '_' && lastChar == '_' && !sInput.equals(keyword)) || (firstChar != '_' && lastChar == '_' && pos != sInput.length()) || (firstChar == '_' && lastChar != '_' && pos == sInput.length())) { System.out.println("keyword:= " + keyword + ", firstChar = " + firstChar + ", lastChar = " + lastChar); bWrongPos = true; } return bWrongPos; } static boolean wrong_context(String[] contextList) { boolean bWrongContext = true; if (contextList.length == 0) { bWrongContext = false; } else { String sContextTemp = sPrevResponse; cleanString(sContextTemp); for (int i = 0; i < contextList.length; i++) { if (contextList[i].equals(sContextTemp)) { sPrevContext = sContext; sContext = sContextTemp; bWrongContext = false; break; } } } return true; } public static void handle_repetition() { if (respList.size() > 0) { respList.removeElementAt(0); } if (no_response()) { save_input(); set_input(sEvent); find_match(); restore_input(); } select_response(); } public static void handle_user_repetition() { if (same_input()) { handle_event("REPETITION T1**"); } else if (similar_input()) { handle_event("REPETITION T2**"); } } public static void handle_event(String str) { save_prev_event(); set_event(str); save_input(); str = " " + str + " "; set_input(str); if (!same_event()) { find_match(); } restore_input(); } public static void signon() { handle_event("SIGNON**"); select_response(); print_response(); } public static void select_response() { Collections.shuffle(respList); sResponse = respList.elementAt(0); } public static void save_prev_input() { sPrevInput = sInput; } public static void save_prev_response() { sPrevResponse = sResponse; } public static void save_prev_event() { sPrevEvent = sEvent; } public static void set_event(String str) { sEvent = str; } public static void save_input() { sInputBackup = sInput; } public static void set_input(String str) { sInput = str; } public static void restore_input() { sInput = sInputBackup; } public static String print_response() { if (sResponse.length() > 0) { // System.out.println(sResponse); return sResponse; } return ""; } public static void preprocess_input() { sInput = cleanString(sInput); sInput = sInput.toUpperCase(); sInput = " " + sInput + " "; } public static boolean bot_repeat() { return (sPrevResponse.length() > 0 && sResponse.equals(sPrevResponse)); } public static boolean user_repeat() { return (sPrevInput.length() > 0 && ((sInput.equals(sPrevInput)) || (sInput.indexOf(sPrevInput) != -1) || (sPrevInput.indexOf(sInput) != -1))); } public static boolean bot_understand() { return respList.size() > 0; } public static boolean null_input() { return (sInput.length() == 0 && sPrevInput.length() != 0); } public static boolean null_input_repetition() { return (sInput.length() == 0 && sPrevInput.length() == 0); } public static boolean user_want_to_quit() { return sInput.indexOf("BYE") != -1; } public static boolean same_event() { return (sEvent.length() > 0 && sEvent.equals(sPrevEvent)); } public static boolean no_response() { return respList.size() == 0; } public static boolean same_input() { return (sInput.length() > 0 && sInput.equals(sPrevInput)); } public static boolean similar_input() { return (sInput.length() > 0 && (sInput.indexOf(sPrevInput) != -1 || sPrevInput.indexOf(sInput) != -1)); } static boolean isPunc(char ch) { return delim.indexOf(ch) != -1; } // removes punctuation and redundant // spaces from the user's input static String cleanString(String str) { StringBuffer temp = new StringBuffer(str.length()); char prevChar = 0; for (int i = 0; i < str.length(); ++i) { if ((str.charAt(i) == ' ' && prevChar == ' ') || !isPunc(str.charAt(i))) { temp.append(str.charAt(i)); prevChar = str.charAt(i); } else if (prevChar != ' ' && isPunc(str.charAt(i))) { temp.append(' '); prevChar = ' '; } } return temp.toString(); } static String trimLR(String str, String delim) { StringBuffer temp = new StringBuffer(str); int index1 = temp.indexOf(delim); int index2 = temp.lastIndexOf(delim); if (index1 != -1) { temp.deleteCharAt(index1); index2--; } if (index2 > -1) { temp.deleteCharAt(index2); } return temp.toString(); } /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub System.out.println("Chatterbot v10.0 Copyright (C) 2005 - 2010 Gonzales Cenelia\n"); try { signon(); while (!quit()) { // get_input(); System.out.println(get_input("i want ice-cream")); // System.out.println(respond()); break; } } catch (Exception e) { e.printStackTrace(); } } } class CResponse{ private List<String> ListOfContext=new ArrayList<String>(); private List<String> ListOfResp=new ArrayList<String>(); public void addContext(String s) { ListOfContext.add(s); } public void addResp(String s) { ListOfResp.add(s); } public List<String> getContextList() { return ListOfContext; } public List<String> getRespList() { return ListOfResp; } public void clear() { ListOfContext.clear(); ListOfResp.clear(); } }