私は現在、ユーザーがテキストボックスに「リクエスト」を入力すると、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
このアプリには、ユーザーが操作できるデータの "タイプ" が 5 つしかありません。これら 5 つの「タイプ」のうち、3 つには、追加、取得、設定、および削除のアクションがあります。他の 2 つには、追加、取得、および確認アクションがあります。
入力内のキーワードを探して、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 を考えていますが、セカンドオピニオンなしでその方向に進みたくありませんでした)。このアルゴリズムには別の言語が最適でしょうか?