def ie_food_state_flow(customer_utterance, state_tracker_obj, entities,
                           lac, db_obj, collection_name):
        give_up_state = give_up_nlu.whether_give_up(customer_utterance,
                                                    senta_gru,
                                                    confirm_interpreter)
        if give_up_state:
            state_tracker_obj.update_last_slot_state("stop")
            return give_up_nlg.response_give_up(), "stop"
        else:
            if state_tracker_obj.get_last_slot_state() is not "change":
                ie_slot_result = food_nlu.ie_all_consult_food(
                    customer_utterance, lac, entities)
            else:
                ie_slot_result = entities
            state_tracker_obj.update_all_state(ie_slot_result)

            slot_state_dict = state_tracker_obj.judge_each_slot_state(
                consult_food_slot.keys())
            if slot_state_dict["food"] is False and slot_state_dict[
                    "restaurant"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return food_nlg.ask_food_restaurant(), "ask"
            else:
                search_restaurants_results = search_consult_food(
                    state_tracker_obj.get_all_confident_slot_values(),
                    db_obj.get_db_conn()[collection_name])
                # print(state_tracker_obj.get_all_confident_slot_values())
                # search_restaurants_results = ''
                print(search_restaurants_results)
                state_tracker_obj.update_last_slot_state("confirm")
                return food_nlg.response_restaurant_list(
                    search_restaurants_results,
                    state_tracker_obj.get_all_confident_slot_values()
                ), "confirm"
    def ie_traffic_state_flow(customer_utterance, state_tracker_obj, entities,
                              lac, db_obj, collection_name):
        give_up_state = give_up_nlu.whether_give_up(customer_utterance,
                                                    senta_gru,
                                                    confirm_interpreter)
        if give_up_state:
            state_tracker_obj.update_last_slot_state("stop")
            return give_up_nlg.response_give_up(), "stop"
        else:
            if state_tracker_obj.get_last_slot_state() != "change":
                if state_tracker_obj.get_last_slot_state() == "ask_dept":
                    ie_slot_result = traffic_nlu.ie_all_consult_traffic(
                        customer_utterance, lac, entities, "ask_dept")
                elif state_tracker_obj.get_last_slot_state() == "ask_dest":
                    ie_slot_result = traffic_nlu.ie_all_consult_traffic(
                        customer_utterance, lac, entities, "ask_dest")
                else:
                    ie_slot_result = traffic_nlu.ie_all_consult_traffic(
                        customer_utterance, lac, entities)
            else:
                ie_slot_result = entities
            print("update all", ie_slot_result)
            state_tracker_obj.update_all_state(ie_slot_result)
            slot_state_dict = state_tracker_obj.judge_each_slot_state(
                consult_traffic_slot.keys())
            # if True not in slot_state_dict.values():
            if slot_state_dict["departure"] is False and slot_state_dict[
                    "destination"] is False and slot_state_dict[
                        "vehicle"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return traffic_nlg.ask_depart_dest_vehicle(), "ask"
            elif slot_state_dict["departure"] is False:
                state_tracker_obj.update_last_slot_state("ask_dept")
                return traffic_nlg.ask_depart(), "ask_dept"
            elif slot_state_dict["destination"] is False:
                state_tracker_obj.update_last_slot_state("ask_dest")
                return traffic_nlg.ask_dest(), "ask_dest"
            elif slot_state_dict["vehicle"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return traffic_nlg.ask_vehicle(), "ask"
            else:
                pass
                # ie_time_result = traffic_nlu.ie_departure_time(customer_utterance, lac)
                # if ie_time_result:
                #     if state_tracker_obj.get_confident_slot_value("departure_time"):
                #         state_tracker_obj.update_slot_value("departure_time", ie_slot_result)
                #         state_tracker_obj.update_confidence("departure_time", 1)
                #     else:
                #         if state_tracker_obj.get_slot_value("departure_time") == ie_time_result:
                #             state_tracker_obj.update_confidence("departure_time", 1)
                #         else:
                #             state_tracker_obj.add_one_state("departure_time", ie_slot_result, 1)

            # search_traffic_results = db_conn.search_db(collection_name, state_tracker_obj.get_all_confident_slot_values())
            search_traffic_results = get_traffic_route_interface(
                state_tracker_obj.get_all_confident_slot_values())
            state_tracker_obj.update_last_slot_state("confirm")
            return traffic_nlg.response_traffic_list(
                search_traffic_results,
                state_tracker_obj.get_all_confident_slot_values()), "confirm"
예제 #3
0
    def ie_scenic_spot_state_flow(customer_utterance, state_tracker_obj,
                                  entities, lac, db_obj, collection_name):
        give_up_state = give_up_nlu.whether_give_up(customer_utterance,
                                                    senta_gru,
                                                    confirm_interpreter)
        if give_up_state:
            state_tracker_obj.update_last_slot_state("stop")
            return give_up_nlg.response_give_up(), "stop"
        else:
            if state_tracker_obj.get_last_slot_state() != "change":
                ie_slot_result = scenic_spot_nlu.ie_all_plan_scenic_spot(
                    customer_utterance, lac, entities)
            else:
                ie_slot_result = entities
            print("ie_slot_result:", ie_slot_result)
            state_tracker_obj.update_all_state(ie_slot_result)

            slot_state_dict = state_tracker_obj.judge_each_slot_state(
                plan_scenic_spot_slot.keys())
            if slot_state_dict["city"] is False and slot_state_dict[
                    "days"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return scenic_spot_nlg.ask_city_days(), "ask"
            elif slot_state_dict["city"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return scenic_spot_nlg.ask_city(), "ask"
            elif slot_state_dict["days"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return scenic_spot_nlg.ask_days(), "ask"
            else:
                if state_tracker_obj.get_confidence("schemes") == 1:
                    state_tracker_obj.update_confidence("schemes", 0)
                search_scheme_dict_results = db_obj.search_db(
                    collection_name,
                    state_tracker_obj.get_all_confident_slot_values())
                if search_scheme_dict_results:
                    print("search_scheme_dict_results:",
                          search_scheme_dict_results[0]['schemes'])
                    state_tracker_obj.add_one_state(
                        "schemes", search_scheme_dict_results[0]["schemes"], 1)
                    print("start to select schemes")
                    state_tracker_obj.update_last_slot_state("confirm_select")
                    print("common last state",
                          state_tracker_obj.get_last_slot_state())
                    return scenic_spot_nlg.response_scheme_list(
                        search_scheme_dict_results[0]["schemes"],
                        state_tracker_obj.get_all_confident_slot_values()
                    ), "confirm_select"
                else:
                    state_tracker_obj.update_last_slot_state("confirm_select")
                    return scenic_spot_nlg.response_scheme_list(
                        '', state_tracker_obj.get_all_confident_slot_values()
                    ), "confirm_select"
 def ie_ticket_info_state_flow(customer_utterance, state_tracker_obj, entities, lac, db_obj, collection_name):
     give_up_state = give_up_nlu.whether_give_up(customer_utterance, senta_gru, confirm_interpreter)
     if give_up_state:
         state_tracker_obj.update_last_slot_state("stop")
         return give_up_nlg.response_give_up(), "stop"
     else:
         if state_tracker_obj.get_last_slot_state() != "change":
             if state_tracker_obj.get_last_slot_state() == "ask_dept":
                 ie_slot_result = ticket_nlu.ie_all_plan_ticket(customer_utterance, lac, entities, "ask_dept")
             elif state_tracker_obj.get_last_slot_state() == "ask_dest":
                 ie_slot_result = ticket_nlu.ie_all_plan_ticket(customer_utterance, lac, entities, "ask_dest")
             else:
                 ie_slot_result = ticket_nlu.ie_all_plan_ticket(customer_utterance, lac, entities)
         else:
             ie_slot_result = entities
         print("update all", ie_slot_result)
         state_tracker_obj.update_all_state(ie_slot_result)
         slot_state_dict = state_tracker_obj.judge_each_slot_state(plan_ticket_slot.keys())
         # if True not in slot_state_dict.values():
         if slot_state_dict["departure"] is False and slot_state_dict["destination"] is False and slot_state_dict["vehicle"] is False and slot_state_dict["departure_date"] is False:
             state_tracker_obj.update_last_slot_state("ask")
             return ticket_nlg.ask_depart_dest_vehicle_date(), "ask"
         elif slot_state_dict["departure"] is False:
             state_tracker_obj.update_last_slot_state("ask_dept")
             return ticket_nlg.ask_depart(), "ask_dept"
         elif slot_state_dict["destination"] is False:
             state_tracker_obj.update_last_slot_state("ask_dest")
             return ticket_nlg.ask_dest(), "ask_dest"
         elif slot_state_dict["vehicle"] is False:
             state_tracker_obj.update_last_slot_state("ask")
             return ticket_nlg.ask_vehicle(), "ask"
         elif slot_state_dict["departure_date"] is False:
             state_tracker_obj.update_last_slot_state("ask")
             return ticket_nlg.ask_departure_date(), "ask"
         else:
             # search_ticket_dict_results = db_conn.search_db(collection_name, state_tracker_obj.get_all_confident_slot_values())  # TODO: database
             # search_ticket_dict_results = {
             #     1: "线路1",
             #     2: "线路2",
             #     3: "线路3",
             #     4: "线路4"
             #  }    # TODO
             from make_data.ticket.make_ticket_data import search_ticket_interface
             search_ticket_dict_results = search_ticket_interface(state_tracker_obj.get_all_confident_slot_values(), 5)
             print(search_ticket_dict_results)
             state_tracker_obj.add_one_state("solutions", search_ticket_dict_results, 1)
             print("start to select solution")
         state_tracker_obj.update_last_slot_state("confirm_select")
         print("common last state", state_tracker_obj.get_last_slot_state())
         return ticket_nlg.response_solution_list(search_ticket_dict_results, state_tracker_obj.get_all_confident_slot_values()), "confirm_select"
 def ie_personal_info_state_flow(customer_utterance, state_tracker_obj, lac):
     give_up_state = give_up_nlu.whether_give_up(customer_utterance, senta_gru, confirm_interpreter)
     if give_up_state:
         state_tracker_obj.update_last_slot_state("stop")
         return give_up_nlg.response_give_up(), "stop"
     temp_ie_slot_result = ticket_nlu.ie_name_ID(customer_utterance, lac)
     state_tracker_obj.update_all_state(temp_ie_slot_result)
     slot_state_dict = state_tracker_obj.judge_each_slot_state(plan_ticket_slot.keys())
     if slot_state_dict["name"] is False and slot_state_dict["ID"] is False:
         state_tracker_obj.update_last_slot_state("perinfo_ask")
         return ticket_nlg.ask_name_ID(), "perinfo_ask"
     elif slot_state_dict["name"] is False:
         state_tracker_obj.update_last_slot_state("perinfo_ask")
         return ticket_nlg.ask_name(), "perinfo_ask"
     elif slot_state_dict["ID"] is False:
         state_tracker_obj.update_last_slot_state("perinfo_ask")
         return ticket_nlg.ask_ID(), "perinfo_ask"
     else:
         state_tracker_obj.update_last_slot_state("confirm_ticket")
         return ticket_nlg.confirm_ticket_info(state_tracker_obj.get_all_confident_slot_values()), "confirm_ticket"
    def ie_weather_state_flow(customer_utterance, state_tracker_obj, entities,
                              city_ls):
        give_up_state = give_up_nlu.whether_give_up(customer_utterance,
                                                    senta_gru,
                                                    confirm_interpreter)
        if give_up_state:
            state_tracker_obj.update_last_slot_state("stop")
            return give_up_nlg.response_give_up(), "stop"
        else:
            if state_tracker_obj.get_last_slot_state() is not "change":
                ie_slot_result = weather_nlu.ie_city_date(
                    customer_utterance, city_ls)
            else:
                ie_slot_result = entities
            state_tracker_obj.update_all_state(ie_slot_result)

            slot_state_dict = state_tracker_obj.judge_each_slot_state(
                consult_weather_slot.keys())
            if slot_state_dict["city"] is False and slot_state_dict[
                    "date"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return weather_nlg.ask_city_date(), "ask"
            elif slot_state_dict["city"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return weather_nlg.ask_city(), "ask"
            elif slot_state_dict["date"] is False:
                state_tracker_obj.update_last_slot_state("ask")
                return weather_nlg.ask_date(), "ask"
            else:
                print(state_tracker_obj.get_all_confident_slot_values())
                state_tracker_obj.update_last_slot_state("confirm")
                weather_result = request_weather_interface(
                    state_tracker_obj.get_confident_slot_value("city"),
                    state_tracker_obj.get_confident_slot_value("date"))
                return weather_nlg.response_weather_result(
                    weather_result,
                    state_tracker_obj.get_all_confident_slot_values()
                ), "confirm"