コード例 #1
0
 def show_slot_debug(self):
     '''
     logger debug to show the slots collected
     :return:
     '''
     dbot_online_logger.debug("----slots----")
     for slot in self.slotset:
         dbot_online_logger.debug("slots:{}".format(slot.__str__()))
コード例 #2
0
 def predict(self, edge_condition):
     if not edge_condition:
         dbot_online_logger.debug("there are not any edges")
         s = self.buy_tv_task.state
         return self.state_action_map.get(s)
     self.buy_tv_task.trigger(edge_condition)
     s = self.buy_tv_task.state
     dbot_online_logger.debug("current state is {}".format(s))
     return self.state_action_map.get(s)
コード例 #3
0
 def is_slots_filled(self, taskname, tracker):
     required_slot_names = get_required_slot_names_by_task(taskname)
     #required_slot_names = ["inform_"+u for u in required_slot_names]
     dbot_online_logger.debug("check task state:")
     have_filled_slots = set(tracker.get_filled_slot_names())
     dbot_online_logger.debug("|".join(list(have_filled_slots)))
     if set(required_slot_names).intersection(have_filled_slots) == set(
             required_slot_names):
         return True
     return False
コード例 #4
0
ファイル: task_action.py プロジェクト: uclhenry/state_tracker
 def date_string(self,date_value):
     date = date_value
     if date_value in ['today', 'tomorrow', 'the day after tomorrow']:
         if date_value == 'today':
             date = HelperNER.get_current_date(True)
         elif date_value == 'tomorrow':
             date = HelperNER.tomorrow()
         elif date_value == 'the day after tomorrow':
             date = HelperNER.day_after_tomorrow()
         dbot_online_logger.debug("the date is converted into " + date)
     elif date_value in weekdays:
         date = HelperNER.weekday2date(date_value)
         dbot_online_logger.debug("the date is converted into (weekday) " + date)
     return date
コード例 #5
0
ファイル: task_action.py プロジェクト: uclhenry/state_tracker
 def get_many_days_weather(self,date_str,weathers_d):
     target_dates = []
     n = 2
     maps = {"two": 2, "three": 3, "four": 4, "five": 5}
     for time, nums in maps.items():
         if time in date_str:
             n = nums
     for day in range(n):
         target_dates.append(HelperNER.next_date(n))
     true_weathers = {}
     for w in weathers_d:
         for i, full_date in enumerate(target_dates):
             dbot_online_logger.debug(full_date)
             year,month,day = full_date.split('-')
             if w.get("day") == day and w.get("month") == month:
                 true_weather = w.get("description")
                 true_weathers[full_date] = true_weather
     return target_dates,true_weathers
コード例 #6
0
def unit_rule_reader(unit_rule_text):
    '''
    read a text form of unit rule and convert it into a normal rule object
    :param unit_rule_text:
    :return: rule object / rule dict
    '''
    #print(unit_rule_text)
    res = unit_rule_text.split(" ")
    if len(res) == 3:
        slotname, state, content = res
    elif len(res) == 2:
        slotname, state = res
        content = "_"
    else:
        dbot_online_logger.debug(
            "the rule is not valid : {}".format(unit_rule_text))
        slotname, state, content = None, None, None
    return slotname, state, content
コード例 #7
0
 def add_user_confirm(self, q, intent, slots):
     """
     add one user type confirm  event into the tracker events
     :param q: user query/input
     :param slots:the list of slot[entity]
     :param intent:str
     :return:the event
     """
     print("add_user_confirm ,intent", intent)
     dbot_online_logger.debug("the user say %s" % q)
     dbot_online_logger.debug(
         "add add_user_confirm ,intent {}".format(intent))
     event = Event('user', q, is_message=False)
     self.latest_message = q
     if slots:
         event.set_slotset(slots)
     # replace by other format-converter
     if intent:
         event.set_intent(intent)
     self.add_event(event)
     return event
コード例 #8
0
 def add_user_event(self, q, parsing_result=None, slots=None, intent=None):
     """
     add one user type normal query event into the tracker events
     :param q: user query/input
     :param parsing_result: the rasa nlu parsing result or other equivalent format
     :param slots:the list of slot[entity]
     :param intent:str
     :return:the event
     """
     print("add user event ,intent", intent)
     dbot_online_logger.debug("the user say %s" % q)
     dbot_online_logger.debug("add user event ,intent {}".format(intent))
     event = Event('user', q)
     self.latest_message = q
     if parsing_result:
         event.set_parse_data(parsing_result)
         event.set_slotset(self.rasa_to_slots(parsing_result))
     if slots:
         event.set_slotset(slots)
     # replace by other format-converter
     if intent:
         event.set_intent(intent)
     self.add_event(event)
     return event
コード例 #9
0
 def is_match_story_path(self, intents, path):
     if len(intents) < len(path):
         return False
     for intent_experience, intent_expected in zip(intents, path):
         if intent_experience not in intent_expected:
             return False
     dbot_online_logger.debug("intents and path")
     dbot_online_logger.debug("|".join(intents))
     dbot_online_logger.debug("path--- " + "|".join(path))
     return True
コード例 #10
0
 def is_finish_a_story_path(self, task, intents=None):
     if not intents:
         intents = self.intents
     paths = read_intent_paths_from_file(any_story.format(task))
     finish = False
     for path in paths:
         if self.is_match_story_path(intents, path):
             finish = True
     if not finish:
         dbot_online_logger.debug("intents and path")
         dbot_online_logger.debug("|".join(intents))
         for path in paths:
             dbot_online_logger.debug("path---" + "|".join(path))
     return finish
コード例 #11
0
ファイル: task_action.py プロジェクト: uclhenry/state_tracker
    def how_weather_q(self):
        '''
        handle the query like :what is the weather like today
        :return:
        '''

        dbot_online_logger.debug("how weather q ")
        for s in self.slots:
            if s.get_entity_type() == 'weekly_time':
                print(s.get_entity_value)
            if s.get_entity_type() == 'inform_question_word':
                if s.get_entity_value().lower() in ["is","will","are","whether","if","if weather"]:
                    print("convert to clearify")
                    return self.is_weather_q()
        location = self.find_slot_by_type('location')
        date = self.find_slot_by_type('date')
        weather_attribute = self.find_slot_by_type('weather_attribute')
        lacks = []
        if not location:
            lacks.append('location')
        if not date:
            lacks.append('date')
        if not weather_attribute:
            lacks.append('weather')
        if (not location) or (not date) :
            rsp = ""
            if not location:
                dbot_online_logger.debug(" (not location) ")
                rsp += 'Which city are you interested in?'
            if not date:
                dbot_online_logger.debug("(not date) ")
                rsp += 'what is the date that  you  are interested in?'
            dbot_online_logger.debug('[!lack info {}]'.format(','.join(lacks)))

        else:
            true_weather = None
            #weathers = self.get_weather_data()
            date_string = date.get_entity_value()
            ask_many_days =("next" in date_string)  and ("day" in date_string)
            if date_string in ["today","tomorrow"]or ask_many_days or date_string in weekdays:
                if not location:
                    raise ValueError("not location found")
                forecast = self.get_city_weather_forecast(location.get_entity_value())
                dbot_online_logger.debug("forecast")
                dbot_online_logger.debug(forecast)
                weathers_d = self.get_weathers_from_json(forecast)
                dbot_online_logger.debug("weathers_d")
                dbot_online_logger.debug(weathers_d)
                import time
                today_date = time.strftime("%d", time.localtime())
                today_date = int(today_date)
                target_date = today_date
                if date.get_entity_value() in ["today","tomorrow"]:
                    dbot_online_logger.debug("ask today  | tomorrow")
                    if date.get_entity_value() == 'tomorrow':
                        dbot_online_logger.debug("tomorrow")
                        target_date = HelperNER.date2day(HelperNER.tomorrow())
                        target_month = HelperNER.date2month(HelperNER.tomorrow())
                    elif date.get_entity_value() == 'today':
                        dbot_online_logger.debug("today")
                        target_date = HelperNER.date2day(HelperNER.get_current_date(True))
                        target_month = HelperNER.date2month(HelperNER.get_current_date(True))
                    weather = self.get_weather_by_month_day(weathers_d, target_month, target_date)
                    if weather:
                        true_weather = weather.get("description")
                elif date.get_entity_value()  in weekdays:
                    dbot_online_logger.debug("how weather q, ask about weekdays")
                    target_month,target_date = HelperNER().weekday2date(date.get_entity_value())
                    weather = self.get_weather_by_month_day(weathers_d,target_month,target_date)
                    dbot_online_logger.debug(weather)
                    if weather:
                        true_weather = weather.get("description")
                elif ask_many_days:
                    dbot_online_logger.debug("how weather q, ask_many_days")
                    date_str = date.get_entity_value()
                    target_dates,true_weathers = self.get_many_days_weather(self, date_str,  weathers_d)
                    rsp = "It will be "
                    for i, target_date in enumerate(target_dates):
                        true_weather = true_weathers[target_date]
                        rsp += "{} on {}th".format(true_weather, target_date)
                        if i == len(target_dates) - 1:
                            rsp += "."
                        else:
                            rsp += ","
                    return rsp

            if true_weather:
                dbot_online_logger.debug("---------true weather is found")
                rsp = 'The forecast show that it will be {} in {} on {}'.format(true_weather,location.get_entity_value(),date_string)
            else:
                dbot_online_logger.debug("----------no true weather is found")
                rsp = 'sry,cannot find a weather forecast'
        return rsp