我目前正在开发一个项目,用户在文本框中输入“请求”,网络应用程序“翻译”请求并根据他们所做的操作执行操作。有点像 Siri 或 Google Now。
例如:
User: "give me a list of users in the engineering group"
[User hits submit]
[function runs and returns data]
App: Here is a list of the users in the 'engineering' group:
Mark Zuckerburg
Steve Jobs
Bill Gates
这个应用程序只有五种“类型”的用户可以与之交互的数据。在这五种“类型”中,三种具有添加、获取、设置和删除操作。另外两个有添加、获取和确认操作。
我正在尝试从头开始创建一个算法,它在输入中查找关键字并计算出 1. 正在处理的数据类型,2. 正在处理的特定数据,3. 它对这些数据执行的操作,和 4. 选项/参数(也就是在数据库中更新的新值)。
这是我如何编写代码的一个非常简单的愿景。
$message=split(" ",$rawmessage);
$action;
$words_add=array('add','create','make');
$words_get=array('get','tell','give');
for($i=0;$i<count($message)){
if(in_array($message,$words_add)){
$action='add';
break;
}elseif(in_array($message,$words_get)){
$action='get';
break;
}
}
if(is_set($action)){
//(message_check makes sure the action isn't an option/parameter and returns a boolean)
if(message_check($message)){
switch($action){
case "add":
Action::add(Action::sort_add($message));
break;
case "get":
Action::get(Action::sort_get($message));
break;
}
}else{
//[check to see if values match data in database]
}
}else{
//[figure something else out]
}
显然,这可能不是最有效的方法。是否有更有效的算法可以帮助我对消息进行分类并找出用户想要执行的操作?PHP中是否有任何数据结构可以帮助我解决这个问题?(我在考虑 LinkedList 或 Tree,但我不想在没有第二意见的情况下朝那个方向发展)。另一种语言最适合这个算法吗?