- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.Random;
- /**
- * The responder class represents a response generator object.
- * It is used to generate an automatic response, based on specified input.
- * Input is presented to the responder as a set of words, and based on those
- * words the responder will generate a String that represents the response.
- *
- * Internally, the reponder uses a HashMap to associate words with response
- * strings and a list of default responses. If any of the input words is found
- * in the HashMap, the corresponding response is returned. If none of the input
- * words is recognized, one of the default responses is randomly chosen.
- *
- * @version 1.0
- * @author Michael Kolling and David J. Barnes
- */
- public class Responder
- {
- // Used to map key words to responses.
- private HashMap<String, String> responseMap;
- // Default responses to use if we don't recognise a word.
- private ArrayList<String> defaultResponses;
- private Random randomGenerator;
- /**
- * Construct a Responder
- */
- public Responder()
- {
- responseMap = new HashMap<String, String>();
- defaultResponses = new ArrayList<String>();
- fillResponseMap();
- fillDefaultResponses();
- randomGenerator = new Random();
- }
- /**
- * Generate a response from a given set of input words.
- *
- * @param words A set of words entered by the user
- * @return A string that should be displayed as the response
- */
- /* public String generateResponse(HashSet<String> words)
- {
- Iterator<String> it = words.iterator();
- while(it.hasNext()) {
- String word = it.next();
- String response = responseMap.get(word);
- if(response != null) {
- return response;
- }
- }*/
- /* public String generateResponse(HashSet<String> words)
- {
- Iterator<String> it = words.iterator();
- String response = null;
- while(it.hasNext())
- {
- String word = it.next();
- ArrayList<String> keys = new ArrayList<String>();
- keys.addAll(responseMap.keySet());
- Iterator<String> keyIT = keys.iterator();
- while(keyIT.hasNext())
- {
- String key = keyIT.next();
- if (word.contains(key))
- {
- response = responseMap.get(word);
- }
- }
- if(response != null)
- {
- return response;
- }
- }
- // If we get here, none of the words from the input line was recognized.
- // In this case we pick one of our default responses (what we say when
- // we cannot think of anything else to say...)
- return pickDefaultResponse();
- }*/
- public String generateResponse(ArrayList<String> words)
- {
- String response = null;
- /*String personquery = trueInput;
- System.out.println(personquery);
- if (personquery.contains("Are you a person?"))
- {
- response = "Of course I am a person.";
- return response;
- }*/
- for(String word : words){
- }
- HashSet<String> keywords = new HashSet<String>(words);
- Iterator<String> it = keywords.iterator();
- while(it.hasNext()) {
- String word = it.next();
- ArrayList<String> keys = new ArrayList<String>();
- keys.addAll(responseMap.keySet());
- for(String s : keys){
- if(word.contains(s)){
- response = responseMap.get(s);
- }
- }
- if(response != null) {
- return response;
- }
- }
- // If we get here, none of the words from the input line was recognized.
- // In this case we pick one of our default responses (what we say when
- // we cannot think of anything else to say...)
- return pickDefaultResponse();
- }
- /**
- /**
- * Enter all the known keywords and their associated responses
- * into our response map.
- */
- private void fillResponseMap()
- {
- responseMap.put("crash",
- "Well, it never crashes on our system. It must have something\n" +
- "to do with your system. Tell me more about your configuration.");
- responseMap.put("crashes",
- "Well, it never crashes on our system. It must have something\n" +
- "to do with your system. Tell me more about your configuration.");
- responseMap.put("slow",
- "I think this has to do with your hardware. Upgrading your processor\n" +
- "should solve all performance problems. Have you got a problem with\n" +
- "our software?");
- responseMap.put("performance",
- "Performance was quite adequate in all our tests. Are you running\n" +
- "any other processes in the background?");
- responseMap.put("bug",
- "Well, you know, all software has some bugs. But our software engineers\n" +
- "are working very hard to fix them. Can you describe the problem a bit\n" +
- "further?");
- responseMap.put("buggy",
- "Well, you know, all software has some bugs. But our software engineers\n" +
- "are working very hard to fix them. Can you describe the problem a bit\n" +
- "further?");
- responseMap.put("windows",
- "This is a known bug to do with the Windows operating system. Please\n" +
- "report it to Microsoft. There is nothing we can do about this.");
- responseMap.put("macintosh",
- "This is a known bug to do with the Mac operating system. Please\n" +
- "report it to Apple. There is nothing we can do about this.");
- responseMap.put("expensive",
- "The cost of our product is quite competitive. Have you looked around\n" +
- "and really compared our features?");
- responseMap.put("installation",
- "The installation is really quite straight forward. We have tons of\n" +
- "wizards that do all the work for you. Have you read the installation\n" +
- "instructions?");
- responseMap.put("memory",
- "If you read the system requirements carefully, you will see that the\n" +
- "specified memory requirements are 1.5 giga byte. You really should\n" +
- "upgrade your memory. Anything else you want to know?");
- responseMap.put("linux",
- "We take Linux support very seriously. But there are some problems.\n" +
- "Most have to do with incompatible glibc versions. Can you be a bit\n" +
- "more precise?");
- responseMap.put("bluej",
- "Ahhh, BlueJ, yes. We tried to buy out those guys long ago, but\n" +
- "they simply won't sell... Stubborn people they are. Nothing we can\n" +
- "do about it, I'm afraid.");
- }
- /**
- * Build up a list of default responses from which we can pick one
- * if we don't know what else to say.
- */
- private void fillDefaultResponses()
- {
- defaultResponses.add("That sounds odd. Could you describe that problem in more detail?");
- defaultResponses.add("No other customer has ever complained about this before. \n" +
- "What is your system configuration?");
- defaultResponses.add("That sounds interesting. Tell me more...");
- defaultResponses.add("I need a bit more information on that.");
- defaultResponses.add("Have you checked that you do not have a dll conflict?");
- defaultResponses.add("That is explained in the manual. Have you read the manual?");
- defaultResponses.add("Your description is a bit wishy-washy. Have you got an expert\n" +
- "there with you who could describe this more precisely?");
- defaultResponses.add("That's not a bug, it's a feature!");
- defaultResponses.add("Could you elaborate on that?");
- }
- /**
- * Randomly select and return one of the default responses.
- * @return A random default response
- */
- private String pickDefaultResponse()
- {
- // Pick a random number for the index in the default response list.
- // The number will be between 0 (inclusive) and the size of the list (exclusive).
- int index = randomGenerator.nextInt(defaultResponses.size());
- return defaultResponses.get(index);
- }
- }