Code source de NaoQuest.objectives.keyword_objective
# coding: utf-8
"""
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Script a utiliser quand on allume Nao la première fois
"""
try:
from NaoQuest.objective import *
from NaoCreator.SpeechToText.nao_listen import nao_listen
from NaoCreator.setting import Setting
from Interceptor.interceptor import typemsg
import NaoCreator.Tool.speech_move as sm
import NaoCreator.SpeechToText.nao_key_reco as nkr
except Exception as e:
print e
[docs]class KeyWordObjective(Objective):
"""
Objectif de type "kw", réussit si l'utilisateur dit un mot-clef contenu dans la liste "keywords".
Permet d'ajouter un attribut "kw2id", permettant de gérer les alias/les pluriels.
"""
def __init__(self, scenario_name="", quest_name="", inner_name=""):
super(KeyWordObjective, self).__init__(scenario_name, quest_name, inner_name)
def _exec(self):
if not hasattr(self, "question"):
Setting.error("No \"question\" in KeyWordObjective \"{}\"".format(self.inner_name))
return
if not hasattr(self, "keywords"):
Setting.error("No \"keywords\" in KeyWordObjective \"{}\"".format(self.inner_name))
return
sm.speech_and_move(self.question)
def _interact(self):
self.failed_interact = False
self.raw_answer = nao_listen().lower()
if typemsg(self.raw_answer):
self.answer = list()
self.failed_interact = True
return
# On fait dire à Nao les différents mots-clefs
if nkr.sentence_keywords(self.raw_answer, ["aide", "ed"]):
if hasattr(self, "help_kw"):
sm.speech_and_move(self.help_kw)
else:
sm.speech_and_move("Les mots clefs disponibles sont. {}".format(
". ".join([self.kw2id[i] for i in self.kw2id])
))
self.completed = False
self.answer = list()
# On extrait la réponse selon keywords puis kw2id
self.answer = nkr.sentence_keywords(self.raw_answer, self.keywords)
if len(self.answer) == 1:
if self.answer[0] in self.kw2id:
self.kw_answer = self.kw2id[self.answer[0]]
else:
self.kw_answer = self.answer[0]
# On échoue si on repère plus d'un mot-clef
elif len(self.answer) > 1:
sm.speech_and_move("Vous avez dit plus d'un mot-clef !")
self.answer = []
self.completed = False
def _verif(self):
if self.failed_interact:
return False
return len(self.answer) > 0