我目前正在开展一个项目,用户在文本框中键入“请求”,Web应用程序“翻译”请求并根据他们的操作执行操作。有点像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,但我不想在没有第二意见的情况下朝这个方向前进)。另一种语言最适合这种算法吗?