从阵列中取出单词

时间:2013-12-20 22:23:12

标签: java arrays artificial-intelligence

我非常不确定如何做到这一点。我理解(我相信)你使用

String[] user {"stuff","other stuff","more stuff"};

我正在开发一个聊天机器人,我需要它能够识别用户所说的内容以及它是否在数组内部(它是"数据库,&# 34;每说),然后它将作出相应的回应。

简单的事情让我可以说,"你好吗?"它会寻找"你好吗?"或者至少接近它的东西,并用随机的正面词做出相应的反应。我通过简单地使用大量的if-else语句来实现这个功能,但这太过于编码了。

4 个答案:

答案 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.