我的应用中有一个文本框,用户可以输入任何内容。我正在创建一个控制器,它根据关键字解释一些命令。
用户可以选择是否设置密码。根据这一点,我的翻译将要么输入密码。
例如,如果设置了密码并且用户输入:“password1 show list”。 解释器在第一个单词中检查密码,然后在命令(show)中检查密码,然后检查参数(列表)。
如果未设置密码,用户输入“show list”并解释员理解。
我目前的代码是:
// 'words' is a String array which contains the user input.
if (passwordEnabled()==true) {
if (words[0].contentEquals(getPassword())
&& words[1].contentEquals("show")
&& words[2].contentEquals("list")) {
// Perform action
}
}
else {
if (words[0].contentEquals("show")
&& words[1].contentEquals("list")) {
// Perform action
}
}
我的问题是,是否有更有效/更好的方法来处理命令?我确信我的做法非常粗糙。
答案 0 :(得分:2)
如果用户能够记住命令的语法,那么你的方式(或任何基于语法的方法)都可以。
如果您想要了解用户使用不受限制的自然语言表达意图时,您需要执行一些Natural Language Understanding。
Wit(http://wit.ai)之类的东西可能会为你完成这项工作。它基于机器学习。它使用用户意图和规范化参数将自由文本句子转换为JSON。
答案 1 :(得分:1)
如果您正在尝试设计基于“语言”的系统,在那里提出命令,您应该根据系统复杂性考虑两种可能的方法:
当然这些不是交替的解决方案 - 为语言构建语法是一件非常广泛的事情,应该用于解析命令,而有限状态自动化则用作内部存储器和可能行为的定义。
答案 2 :(得分:1)
建立语法或有限自动化是正确的方法,同意。
如果您想要一种简单的方法,可以简化代码:
if (passwordEnabled()) {
if (! words.get(0).contentEquals(getPassword()))
{
// wrong password
return;
}
words.remove(0); // skip password
}
if (words.get(0).contentEquals("show")
&& words.get(1).contentEquals("list")) {
// Perform action
}
假设您对ArrayList
使用words
。