In this code I want to print the values of psn, before, and after around line 100 in order to test a few different phrases for a chatbot. Any ideas on how to do so? I need to test some statements at the end replacing maggie.findKeyword("yesterday is today's day before.", "day", 0); with maggie.findKeyword("She's my sister", "sister", 0);
maggie.findKeyword("Brother Tom is helpful", "brother", 0);
maggie.findKeyword("I can't catch wild cats.", "cat", 0);
maggie.findKeyword("I know nothing about snow plows.", "no", 0);
and I am trying to see how the chatbot would respond to them and I am going to record them in a table in order to hopefully improve it's responses.
public class Magpie3
{
/**
* Get a default greeting
*
* @return a greeting
*/
public String getGreeting()
{
return "Hello, let's talk.";
}
/**
* Gives a response to a user statement
*
* @param statement
* the user statement
* @return a response based on the rules given
*/
public String getResponse(String statement)
{
String response = "";
if (statement.length() == 0)
{
response = "Say something, please.";
}
else if (findKeyword(statement, "no") >= 0)
{
response = "Why so negative?";
}
else if (findKeyword(statement, "mother") >= 0
|| findKeyword(statement, "father") >= 0
|| findKeyword(statement, "sister") >= 0
|| findKeyword(statement, "brother") >= 0)
{
response = "Tell me more about your family.";
}
else
{
response = getRandomResponse();
}
return response;
}
/**
* Search for one word in phrase. The search is not case
* sensitive. This method will check that the given goal
* is not a substring of a longer string (so, for
* example, "I know" does not contain "no").
*
* @param statement
* the string to search
* @param goal
* the string to search for
* @param startPos
* the character of the string to begin the
* search at
* @return the index of the first occurrence of goal in
* statement or -1 if it's not found
*/
private int findKeyword(String statement, String goal,
int startPos)
{
String phrase = statement.trim();
// The only change to incorporate the startPos is in
// the line below
int psn = phrase.toLowerCase().indexOf(
goal.toLowerCase(), startPos);
// Refinement--make sure the goal isn't part of a
// word
while (psn >= 0)
{
// Find the string of length 1 before and after
// the word
String before = " ", after = " ";
if (psn > 0)
{
before = phrase.substring(psn - 1, psn)
.toLowerCase();
}
if (psn + goal.length() < phrase.length())
{
after = phrase.substring(
psn + goal.length(),
psn + goal.length() + 1)
.toLowerCase();
}
/* determine the values of psn, before, and after at this point */
// If before and after aren't letters, we've
// found the word
if (((before.compareTo("a") < 0) || (before
.compareTo("z") > 0)) // before is not a
// letter
&& ((after.compareTo("a") < 0) || (after
.compareTo("z") > 0)))
{
return psn;
}
// The last position didn't work, so let's find
// the next, if there is one.
psn = phrase.indexOf(goal.toLowerCase(),
psn + 1);
}
return -1;
}
/**
* Search for one word in phrase. The search is not case
* sensitive. This method will check that the given goal
* is not a substring of a longer string (so, for
* example, "I know" does not contain "no"). The search
* begins at the beginning of the string.
*
* @param statement
* the string to search
* @param goal
* the string to search for
* @return the index of the first occurrence of goal in
* statement or -1 if it's not found
*/
private int findKeyword(String statement, String goal)
{
return findKeyword(statement, goal, 0);
}
/**
* Pick a default response to use if nothing else fits.
*
* @return a non-committal string
*/
private String getRandomResponse()
{
final int NUMBER_OF_RESPONSES = 4;
double r = Math.random();
int whichResponse = (int) (r * NUMBER_OF_RESPONSES);
String response = "";
if (whichResponse == 0)
{
response = "Interesting, tell me more.";
}
else if (whichResponse == 1)
{
response = "Hmmm.";
}
else if (whichResponse == 2)
{
response = "Do you really think so?";
}
else if (whichResponse == 3)
{
response = "You don't say.";
}
return response;
}
public static void main(String[] args)
{
Magpie3 maggie = new Magpie3();
maggie.findKeyword("yesterday is today's day before.", "day", 0);
}
}
Aucun commentaire:
Enregistrer un commentaire