我非常不确定如何做到这一点。我理解(我相信)你使用
String[] user {"stuff","other stuff","more stuff"};
我正在开发一个聊天机器人,我需要它能够识别用户所说的内容以及它是否在数组内部(它是"数据库,&# 34;每说),然后它将作出相应的回应。
简单的事情让我可以说,"你好吗?"它会寻找"你好吗?"或者至少接近它的东西,并用随机的正面词做出相应的反应。我通过简单地使用大量的if-else语句来实现这个功能,但这太过于编码了。
答案 0 :(得分:1)
如果我理解正确,您希望机器人响应用户的某些提示。在这种情况下,您可以使用Map<String, String>
来存储查询 - 答案对。
Map<String, String> answers = new HashMap<String, String>();
answers.put("How are you?", "Great!");
answers.put("Where is the cake?", "The cake is a lie");
然后只检查查询字符串是否在答案中:
public String answerUser(String query) {
if (answers.containsKey(query)) {
return answers.get(query);
} else {
return "I don't understand.";
}
}
如果您想要多个可能的答案,请使用Map<String, List<String>>
并从列表中随机选择:
public String answerUser(String query) {
Random rand = new Random();
if (answers.containsKey(query)) {
List<String> ans = answers.get(query);
int id = rand.nextInt(ans.size());
return ans.get(id);
} else {
return "I don't understand.";
}
}
答案 1 :(得分:0)
这是一个非常庞大而复杂的主题,你还没有足够的篇幅发表。
要将字符串拆分为单词,请使用String#split()
,这将为您提供所需的数组。 (您可能希望拆分所有非alpha或所有空格)。
然后,您需要定义AI响应的关键字,并扫描数组中的任何关键字。
使用某种评分系统来确定适当的响应。
例如,你可以将一个HashMap of String赋予一个既有权重又有意义的类。翻阅句子,总结您找到的每个动作的分数。根据合并后的价值做出适当的决定。
这是一个非常简单的算法,可能会有更好的算法,但它们会更加困难,这会让你开始。
答案 2 :(得分:0)
您可以使用列表而不是数组,它将为您提供contains()方法。例如:
List<String> words = new ArrayList<String>();
words.add("Hello");
words.add("bye");
if(words.contains("hello")) {
//do something
}
另一个选择是将短语映射到响应:
Map<String, String> wordMap = new HashMap<String, String>();
wordMap.put("How are you?", "Great");
wordMap.put("Where are you?", "Work");
wordMap.get("How are you?");
将这些组合起来并根据需要将短语映射到回复列表。
答案 3 :(得分:0)
智能聊天机器人需要更多的设计,但是如果你只是想要一个解决方案“我说这个,那么你说”比你可以做的几个方面。
使用两个阵列
既然你知道如何使用一个数组,那么为了简单起见,我将从这里开始。
String[] userInput {"how are you", "how are you?", "how you doing?"};
String[] response {"good", "terrible", "is that a joke?"};
//Go through each userInput string and see if it matches what you typed in.
//If it matches, print the corresponding position in the response array.
使用地图
同样的想法,但是更适合这种情况的集合。
Map<String, String> response = new HashMap<String, String>();
response.add("how are you", "good");
//When you receive input, check the response map using the input as the key.
//Return the value as the response.
//Better documented in sebii's answer.