Exemple #1
0
def process_admission_general(entities):
    response = response_generator.query_job_student()
    print(response)
    job_or_student = input("")
    entity_list = helper.change_entity_list(get_entities(job_or_student))
    if "info_target" in entity_list:
        if contains("job", entity_list["info_target"]) or contains(
                "title", entity_list["info_target"]):
            print(response_generator.query_job())
            new_state = "end"
            return new_state, entities
        else:
            print(response_generator.query_student())
            program_choice = input("")
            entities_list_original = get_entities(program_choice)
            entity_list_new = helper.change_entity_list(entities_list_original)
            if "program" in entity_list_new:
                response = ""
                for i in range(len(entity_list_new["program"])):
                    if i != 0:
                        response += "\n"
                    program = entity_list_new["program"][i]["value"]
                    admission = helper.load_program_info()[program][2]
                    response += admission
                print(response)
                new_state = "end"
                return new_state, entities
        return "end", entities
    print(response_generator.sorry())
    return "end", entities
Exemple #2
0
def process_coordinator(entities):
    print("Which program do you want to know?")
    response_user = input("")
    entity_list = get_entities(response_user)["entities"]
    if "status" in entity_list:
        if contains("undergraduate", entity_list["status"]):
            response = "The coordinator for UG programs is Dr. Qiong Luo."
            print(response)
            new_state = "end"
            return new_state, entities
        if contains("postgraduate", entity_list["status"]):
            response = "The coordinator for PG programs is Dr. Kai Chen."
            print(response)
            new_state = "end"
            return new_state, entities
    if "program" in entity_list:
        program_info_matching = helper.load_program_info()
        response = ""
        for i in range(len(entity_list["program"])):
            if i != 0:
                response += "\n"
            program = entity_list["program"][i]["value"]
            coordinator = program_info_matching[program][4]
            response += response_generator.provide_coordinator_info(
                program, coordinator)
        print(response)
        new_state = "end"
        return new_state, entities
    response = response_generator.provide_general_coordinator_info()
    print(response)
    new_state = "end"
    return new_state, entities
Exemple #3
0
def classify_intent(entities):
    if contains("get_basic", entities["intent"]):
        new_state = "basic_query"
        return new_state, entities
    if contains("get_admission", entities["intent"]):
        new_state = "admission_query"
        return new_state, entities
    if contains("get_people", entities["intent"]):
        new_state = "people_query"
        return new_state, entities
    if contains("get_contact", entities["intent"]):
        new_state = "contact_query"
        return new_state, entities
    if contains("get_info", entities["intent"]):
        new_state = "info_query"
        return new_state, entities
    if contains("get_enrichment", entities["intent"]):
        new_state = "enrichment_query"
        return new_state, entities
    if contains("ensure_quality", entities["intent"]):
        new_state = "quality_query"
        return new_state, entities
    if contains("get_access", entities["intent"]):
        new_state = "access_query"
        return new_state, entities
    if contains("get_general", entities["intent"]):
        new_state = "general_query"
        return new_state, entities
    new_state = "error"
    return new_state, entities
Exemple #4
0
def process_admission_general(entities):
    response = response_generator.query_job_student()
    print(response)
    job_or_student = input("")
    entity_list = get_entities(job_or_student)["entities"]
    if "info_target" in entity_list:
        if contains("job", entity_list["info_target"]) or contains("title", entity_list["info_target"]):
            print(response_generator.query_job())
        # TODO: set up a navigation here
        else:
            print(response_generator.query_student())
Exemple #5
0
def process_info_query(entities):
    if "faculty_name" in entities:
        faculty_attributes, faculty_info = helper.load_faculty_information()
        if contains("research area", entities["info_target"]):
            response = ""
            for i in range(len(entities["faculty_name"])):
                if i != 0:
                    response += "\n"
                staff_name = entities["faculty_name"][i]["value"]
                research_area = str(faculty_info[staff_name][5])
                response += response_generator.provide_faculty_research_area(
                    staff_name, research_area)
            print(response)
        if contains("research interest", entities["info_target"]):
            response = ""
            for i in range(len(entities["faculty_name"])):
                if i != 0:
                    response += "\n"
                staff_name = entities["faculty_name"][i]["value"]
                research_interest = str(faculty_info[staff_name][10])
                response += response_generator.provide_faculty_research_interest(
                    staff_name, research_interest)
            print(response)
        if contains("title", entities["info_target"]) or contains(
                "job", entities["info_target"]):
            response = ""
            for i in range(len(entities["faculty_name"])):
                if i != 0:
                    response += "\n"
                staff_name = entities["faculty_name"][i]["value"]
                title = str(faculty_info[staff_name][1])
                response += response_generator.provide_faculty_title(
                    staff_name, title)
            print(response)
        new_state = "end"
        return new_state, entities
    if "staff_name" in entities:
        staff_attributes, staff_info = helper.load_staff_information()
        if helper.check_job(entities["info_target"]):
            response = ""
            for i in range(len(entities["staff_name"])):
                if i != 0:
                    response += "\n"
                staff_name = entities["staff_name"][i]["value"]
                position = str(staff_info[staff_name][4].replace("\n", ""))
                staff_type = str(staff_info[staff_name][5])
                response += response_generator.provide_staff_position(
                    staff_name, position, staff_type)
            print(response)
            new_state = "end"
            return new_state, entities
    new_state = "error"
    return new_state, entities
def route_cost_check(phone_num: str, prefix_and_route_costs) -> str:
    '''cost variable updates as we iteratave over the dicitonary according too
    matching prefix if it is the lowest offset'''

    # This returns a dictionary of the prefixes and the cost as (key, value) pairs

    cost = None
    # arbitrary large value for beginning the loop
    old_offset = 2**1000
    # loop through prefix keys in dict
    for prefix in prefix_and_route_costs.keys():
        # ! Runtime = O(n), n being the number of keys in prefix dict
        found = contains(phone_num, prefix)
        if found:
            # the difference between the length of the phone number and the prefix
            offset = len(phone_num) - len(prefix)
            # the lowest difference is the 'correct' match
            if offset <= old_offset:
                # ! Runtime - O(1)
                cost = prefix_and_route_costs[prefix]

    # case: prefix not in dict
    if not cost:
        return None

    return cost
Exemple #7
0
def fetch(name):
    check = helper.contains([root_dir, name])
    
    # IF THE PIPELINE EXISTS
    if check != False:

        # LOAD & RETURN PIPELINE DETAILS
        details = storage.load_details(name)
        return details
        
    # OTHERWISE, RETURN FALSE
    return check
Exemple #8
0
def process_number(entities):
    if "info_target" in entities:
        if contains("rank", entities["info_target"]):
            response = response_generator.provide_ranking_information()
            print(response)
            new_state = "end"
            return new_state, entities
    if "job_title" in entities:
        response = response_generator.provide_faculty_number()
        print(response)
        new_state = "end"
        return new_state, entities
Exemple #9
0
def all():
    return helper.contains([root_dir])
Exemple #10
0
def main():
    url = input(
        "Ayyyyo whasss Gucci! It's cha boi, Sir Pickles Von Quackmeister III here to help you with your recipe! Enter a URL to parse!\n"
    )
    while "allrecipes" not in url:
        url = input("This URL doesn't work (must be AllRecipes). Try again:")

    run = True
    while run:
        # get a transform
        function = input('''What would you like to do? \n
        [a] Parse as-is
        [b] Transform to vegetarian
        [c] Parse with recipe doubled
        [d] Parse with recipe halved
        [e] Transform to Lithuanian
        [f] Transform to healthy
        ''')
        recipe = None
        if function == 'a' or function == 'A' or contains(
                function, "as-is") or contains(function, "as is"):
            recipe = url_to_recipe(url)
        elif function == 'b' or function == 'B' or contains(
                function, "vegetarian"):
            recipe = url_to_transform(url, veg_transform)
        elif function == 'c' or function == 'C' or contains(
                function, "double"):
            recipe = double(url_to_recipe(url))
        elif function == 'd' or function == 'D' or contains(
                function, "half") or contains(function, "halve"):
            recipe = halve(url_to_recipe(url))
        elif function == 'e' or function == 'E' or contains(
                function, "lithuanian"):
            recipe = url_to_transform_gen(url, Lithuanian_sub)
        elif function == 'f' or function == 'F' or contains(
                function, "health"):
            recipe = url_to_transform_gen(url, health_sub)
        elif function == 'q' or function == 'Q' or function == 'quit' or function == "Quit":
            print("Okay! Bye!")
            run = False
            break
        else:
            print(
                "Sorry, I didn\'t understand that. You can enter 'Q' at any time to quit."
            )
            run = True

        # print information (basic goal 1, to expand on this we could use regex to scan for keywords)
        step = 0
        prevStep = -1
        if recipe:
            print("Ok, let's do that with your recipe, \'%s\'. " %
                  recipe['name'])
        while recipe:
            function = input('''What would you like to see? \n
            [a] Ingredients
            [b] Steps
            [c] Tools
            [d] Methods
            [e] All of the above
            [f] I have a question.
            ''')
            if function == 'a' or function == 'A' or contains(
                    function, "ingredient"):
                ingPy.ing_print(recipe['ingredients'])
            elif function == 'b' or function == 'B' or contains(
                    function, "steps"):
                oneByOne = None
                while not oneByOne:
                    oneByOne = input(
                        'Would you like [1] one step at a time or [2] all steps now?\n'
                    )
                    if oneByOne == "2" or contains(oneByOne, "all"):
                        print_steps(recipe)
                    elif oneByOne == "1" or contains(oneByOne, "one"):
                        print(
                            "You can tell me to go forward, backward, start over, or go to a particular step at any time."
                        )
                        print("Your recipe has " + str(len(recipe['steps'])) +
                              ' steps.')
                        print_step(recipe, step)
                        prevStep = step
                        step += 1
                    else:
                        print('Hmm, I didn\'t catch that.')
                        oneByOne = None
            elif function == 'c' or function == 'C' or contains(
                    function, "tool"):
                print_tools(recipe)
            elif function == 'd' or function == 'D' or contains(
                    function, "method"):
                print_methods(recipe)
            elif function == 'e' or function == 'E' or contains(
                    function, "all"):
                print_all(recipe)
            elif function == 'f' or function == 'F' or contains(
                    function, "question"):
                handle_question(recipe, prevStep)

            elif function == 'q' or function == 'Q' or function == 'quit' or function == "Quit":
                print("Okay! Bye!")
                recipe = False
                run = False
                break

            # navigate forward and back a step at a time (goal 2, complete)
            elif 'forward' in function or 'next' in function:
                doStep = True
                if 'step' not in function:
                    check = input(
                        "To be clear, you'd like to see the next step? [1] Yes [2] No \n"
                    )
                    if check == '2': doStep = False
                if doStep:
                    if step < len(recipe['steps']) - 1:
                        #step += 1
                        print_step(recipe, step)
                        prevStep = step
                        step += 1
                    else:
                        print("There is no next step! Here is the last step: ")
                        prevStep = step
                        step = len(recipe['steps']) - 1
                        print_step(recipe, step)

            elif 'backward' in function or 'back' in function or 'previous' in function:
                doStep = True
                if 'step' not in function:
                    check = input(
                        "To be clear, you'd like to see the previous step? [1] Yes [2] No \n"
                    )
                    if check == '2': doStep = False
                if doStep:
                    if step > 0:
                        prevStep = step
                        step -= 1
                        print_step(recipe, step)
                    else:
                        print(
                            "There is no previous step! Here is the first step: "
                        )
                        print_step(recipe, 0)
                        prevStep = step
                        step = 0

            elif re.search(
                    r"\bstep\b", function
            ):  # the word "step" with word boundaries at either side
                found = False
                for word in function.lower().split():
                    nth = re.match(r"([0-9]+)", word)
                    if nth:
                        found = True
                        num = nth.group(0)
                        if int(num) > 0 and int(num) < len(
                                recipe['steps']) + 1:
                            print("Here is step " + nth.group(0) + ':')
                            step = int(num) - 1
                            print_step(recipe, step)
                        else:
                            print("Sorry, that step number is out of bounds.")
                            print("Your recipe has " +
                                  str(len(recipe['steps'])) + ' steps.')
                if not found:
                    print(
                        'Sorry, which step would you like to see? Please use numerals rather than spelled out words.'
                    )

            else:
                print(
                    "Sorry, I didn\'t understand that. You can enter 'Q' at any time to quit."
                )
def process_dialog(entities):
    if "intent" not in entities:
        response = response_generator.sorry()
        print(response)
        return

    # Respond the user's "plain statement"
    if contains("explain", entities["intent"]):
        if "info_target" not in entities:
            response = response_generator.sorry()
            print(response)
            return
        if contains("school", entities["info_target"]) or contains("degree", entities["info_target"]) or contains("student", entities["info_target"]):
            response = "DSCT: <DSCT>" + "\n" + "COMP: <COMP>" + "\n" + "COSC: <COSC>"
            print(response)
            return
        if contains("job", entities["info_target"]):
            print("Job info: <info>")
            return

    # Basically, if there is only one entity in the sentence,
    # we will answer the question directly
    if contains("get_basic", entities["intent"]):
        if "enrich_target" in entities:
            if contains("hackathon", entities["enrich_target"]):
                response = "Hackathon opportunities:"
                print(response)
                return
            if contains("contest", entities["enrich_target"]):
                response = "Contest opportunities:"
                print(response)
                return
            if contains("exchange", entities["enrich_target"]):
                response = "Exchange opportunities:"
                print(response)
                return
            if contains("independent work", entities["enrich_target"]):
                response = "Independent work:"
                print(response)
                return
            if contains("internship", entities["enrich_target"]):
                response = "Internship opportunities:"
                print(response)
                return
            if contains("honor courses", entities["enrich_target"]):
                response = "Honor courses:"
                print(response)
                return
            if contains("urop", entities["enrich_target"]):
                response = "Research opportunities:"
                print(response)
                return

        if "basic_target" not in entities and "program" not in entities:
            if contains("cse", entities["department_name"]):
                response = response_generator.give_basic_info("cse", "cse")
                print(response)
                return
        if "basic_target" not in entities:
            if contains("dsct", entities["program"]):
                response = "DSCT: <info>"
                print(response)
                return
            if contains("comp", entities["program"]):
                response = "COMP: <info>"
                print(response)
                return
            if contains("cosc", entities["program"]):
                response = "COSC: <info>"
                print(response)
                return
        if contains("vision", entities["basic_target"]) and contains("mission", entities["basic_target"]):
            response = response_generator.give_basic_info("vision statement", helper.vision_statement)
            response += "\n"
            response += response_generator.give_basic_info("mission statement", helper.mission_statement)
            print(response)
            return
        if contains("vision", entities["basic_target"]):
            response = response_generator.give_basic_info("vision statement", helper.vision_statement)
            print(response)
            return
        if contains("mission", entities["basic_target"]):
            response = response_generator.give_basic_info("mission statement", helper.mission_statement)
            print(response)
            return
        if contains("objective", entities["basic_target"]):
            response = response_generator.give_basic_info("objective", helper.objective)
            print(response)
            return
        if contains("news", entities["basic_target"]):
            response = response_generator.give_basic_info("news", "news")
            print(response)
            return

    # This part, we implement
    # how the chatbot will react if asked about admission
    if contains("get_admission", entities["intent"]):
        if "enrich_target" in entities:
            if contains("internship", entities["enrich_target"]):
                response = "Internship opportunities:"
                print(response)
                return
            if contains("honor courses", entities["enrich_target"]):
                response = "Honor courses:"
                print(response)
                return
            if contains("urop", entities["enrich_target"]):
                response = "Research opportunities:"
                print(response)
                return

        if "info_target" not in entities and "program" not in entities:
            response = "Are you a job seeker and a prospective student?"
            print(response)
            return
        if "info_target" in entities and "program" in entities:
            if contains("undergraduate", entities["program"]) or contains("postgraduate", entities["program"]):
                response = "Which program are you in?"
                print(response)
                return
            if contains("dsct", entities["program"]):
                response = "DSCT: <admission info>"
                print(response)
                return
            if contains("comp", entities["program"]):
                response = "COMP: <admission info>"
                print(response)
                return
            if contains("cosc", entities["program"]):
                response = "COSC: <admission info>"
                print(response)
                return

    # For the purpose of people information
    if contains("get_people", entities["intent"]):
        if "staff_name" in entities:
            response = "Information of " + entities["staff_name"][0]["value"] + " is ..."
            print(response)
            return
        if "research_area" in entities:
            response = "(Professor names) is doing " + entities["research_area"][0]["value"]
            print(response)
            return
        if "lab_name" in entities:
            response = "(Professor names) is doing " + entities["lab_name"][0]["value"]
            print(response)
            return
        if "faculty_name" in entities:
            response = "Information of " + entities["faculty_name"][0]["value"] + " is ..."
            print(response)
            return

    # For the purpose of getting contact
    if contains("get_contact", entities["intent"]):

        if "staff_name" in entities:
            if "info_target" in entities:
                if contains("tel", entities["info_target"]):
                    response = "Tel of " + entities["staff_name"][0]["value"] + " is ..."
                    print(response)
                    return
                if contains("email", entities["info_target"]):
                    response = "Email of " + entities["staff_name"][0]["value"] + " is ,,,"
                    print(response)
                    return
                if contains("title", entities["info_target"]):
                    response = "Title of " + entities["staff_name"][0]["value"] + " is ..."
                    print(response)
                    return
            response = "Contact of " + entities["staff_name"][0]["value"] + " is ..."
            print(response)
            return
        if "faculty_name" in entities:
            if "info_target" in entities:
                if contains("tel", entities["info_target"]):
                    response = "Tel of " + entities["faculty_name"][0]["value"] + " is ..."
                    print(response)
                    return
                if contains("email", entities["info_target"]):
                    response = "Email of " + entities["faculty_name"][0]["value"] + " is ,,,"
                    print(response)
                    return
                if contains("title", entities["info_target"]):
                    response = "Title of " + entities["faculty_name"][0]["value"] + " is ..."
                    print(response)
                    return
            response = "Contact of " + entities["faculty_name"][0]["value"] + " is ,,,"
            print(response)
            return
        if "department_name" in entities:
            response = "Contact of cse ..."
            print(response)
            return
    if contains("get_info", entities["intent"]):
        if "faculty_name" in entities:
            if contains("research interest", entities["info_target"]):
                response = "Research interest of " + entities["faculty_name"][0]["value"] + " is ..."
                print(response)
                return
            if contains("research area", entities["info_target"]):
                response = "Research area of " + entities["faculty_name"][0]["value"] + " is ..."
                print(response)
                return
            if contains("tel", entities["info_target"]):
                response = "Tel of " + entities["faculty_name"][0]["value"] + " is ..."
                print(response)
                return

    # Check out the possible enrichment in CSE, HKUST
    if contains("get_enrichment", entities["intent"]):
        if "enrich_target" in entities:
            if contains("hackathon", entities["enrich_target"]):
                response = "Hackathon opportunities:"
                print(response)
                return
            if contains("contest", entities["enrich_target"]):
                response = "Contest opportunities:"
                print(response)
                return
            if contains("exchange", entities["enrich_target"]):
                response = "Exchange opportunities:"
                print(response)
                return
            if contains("independent work", entities["enrich_target"]):
                response = "Independent work:"
                print(response)
                return
            if contains("internship", entities["enrich_target"]):
                response = "Internship opportunities:"
                print(response)
                return
            if contains("honor courses", entities["enrich_target"]):
                response = "Honor courses:"
                print(response)
                return
            if contains("urop", entities["enrich_target"]):
                response = "Research opportunities:"
                print(response)
                return
        print("Available enrichment:")
        return

    # Check the quality assurance
    if contains("ensure_quality", entities["intent"]):
        if "dependent_independent" in entities:
            if contains("independently", entities["dependent_independent"]):
                print("Self assurance network")
                return
            else:
                print("External assurance sources")
                return
        print("Assurance methods:")
        return

    # Find out the url link of different website
    if contains("get_access", entities["intent"]):
        if "site_name" in entities:
            if contains("fypms", entities["site_name"]):
                print("The URL of FYPMS is: ")
                return
        if "access_target" in entities:
            if contains("computing facilities", entities["access_target"]):
                print("There are several possible computation resources:")
                return

    # When the user attempts to know the general information about the chatbot
    if contains("get_general", entities["intent"]):
        response = response_generator.greeting()
        print(response)
        return
Exemple #12
0
def divide_basic_questions(entities):
    if "info_target" in entities:
        if contains("rank", entities["info_target"]):
            response = response_generator.provide_ranking_information()
            print(response)
            new_state = "end"
            return new_state, entities
    # Enrichment opportunities
    if "enrich_target" in entities:
        response = ""
        enrich_general = helper.load_enrichment_general_info()
        for i in range(len(entities["enrich_target"])):
            if i != 0:
                response += "\n\n"
            enrichment = entities["enrich_target"][i]["value"]
            if enrichment == "Exchange Programs":
                if "exchange_type" in entities:
                    if contains("inbound",
                                entities["exchange_type"]) and contains(
                                    "outbound", entities["exchange_type"]):
                        response += response_generator.provide_inbound_exchange(
                        )
                        response += "\n"
                        response += response_generator.provide_outbound_exchange(
                        )
                    elif contains("inbound", entities["exchange_type"]):
                        response += response_generator.provide_inbound_exchange(
                        )
                    elif contains("outbound", entities["exchange_type"]):
                        response += response_generator.provide_outbound_exchange(
                        )
            else:
                response += enrich_general[enrichment][1]
        print(response)
        new_state = "end"
        return new_state, entities
    # Program information
    if "program" in entities:
        program_info = helper.load_program_info()
        response = ""
        for i in range(len(entities["program"])):
            if i != 0:
                response += "\n\n"
            program = entities["program"][i]["value"]
            intro = program_info[program][1]
            response += intro
        print(response)
        new_state = "end"
        return new_state, entities
    # Course information
    if "course" in entities and "honor_course" not in entities:
        if "info_target" in entities:
            if contains("prerequisite", entities["info_target"]):
                response = ""
                if "course" not in entities:
                    total_course = entities["honor_course"]
                elif "honor_course" not in entities:
                    total_course = entities["course"]
                else:
                    total_course = entities["course"] + entities["honor_course"]
                attributes, course_info = helper.load_course_information()
                for i in range(len(total_course)):
                    if i != 0:
                        response += "\n"
                    course_code = total_course[i]["value"]
                    prerequisite = course_info[course_code][4]
                    response += response_generator.provide_course_prerequisite(
                        course_code, prerequisite)
                print(response)
                new_state = "end"
                return new_state, entities
            if contains("exclusion", entities["info_target"]):
                response = ""
                if "course" not in entities:
                    total_course = entities["honor_course"]
                elif "honor_course" not in entities:
                    total_course = entities["course"]
                else:
                    total_course = entities["course"] + entities["honor_course"]
                attributes, course_info = helper.load_course_information()
                for i in range(len(total_course)):
                    if i != 0:
                        response += "\n"
                    course_code = total_course[i]["value"]
                    exclusion = course_info[course_code][3]
                    response += response_generator.provide_course_exclusion(
                        course_code, exclusion)
                print(response)
                new_state = "end"
                return new_state, entities
        course_attributes, course_info = helper.load_course_information()
        response = ""
        for i in range(len(entities["course"])):
            if i != 0:
                response += "\n\n"
            code = entities["course"][i]["value"]
            response += response_generator.provide_course_info_by_table(
                code, course_info)
        print(response)
        new_state = "end"
        return new_state, entities
    # To deal with the problem of unhandled "honor course" problem.
    if "honor_course" in entities and "course" not in entities:
        course_attributes, course_info = helper.load_course_information()
        response = ""
        for i in range(len(entities["honor_course"])):
            if i != 0:
                response += "\n\n"
            code = entities["honor_course"][i]["value"]
            response += response_generator.provide_course_info_by_table(
                code, course_info)
        print(response)
        new_state = "end"
        return new_state, entities
    # Dealing with the problem of "mixed" type of information.
    if "honor_course" in entities and "course" in entities:
        course_attributes, course_info = helper.load_course_information()
        response = ""
        course_entities_augmented = entities["honor_course"] + entities[
            "course"]
        for i in range(len(course_entities_augmented)):
            if i != 0:
                response += "\n\n"
            code = course_entities_augmented[i]["value"]
            response += response_generator.provide_course_info_by_table(
                code, course_info)
        print(response)
        new_state = "end"
        return new_state, entities
    # Dealing with the problem of research area
    if "research_area" in entities:
        response = ""
        fullname, attributes = helper.load_research_area_full_name()
        for i in range(len(entities["research_area"])):
            if i != 0:
                response += "\n\n"
            research_area = entities["research_area"][i]["value"]
            response += attributes[research_area]
        print(response)
        new_state = "end"
        return new_state, entities
    # Basic information about the department
    response = response_generator.provide_basic_dept_info()
    print(response)
    new_state = "end"
    return new_state, entities
Exemple #13
0
def process_contact_query_questions(entities):
    if "staff_name" in entities:
        staff_attributes, staff_info = helper.load_staff_information()
        if "info_target" in entities:
            # Query about telephone number
            if contains("tel", entities["info_target"]):
                response = ""
                for i in range(len(entities["staff_name"])):
                    if i != 0:
                        response += "\n"
                    staff_name = entities["staff_name"][i]["value"]
                    try:
                        tel = str(int(staff_info[staff_name][2]))
                    except ValueError:
                        tel = "information not available"
                    response += response_generator.provide_staff_telephone_number(
                        staff_name, tel)
                print(response)
            # Query about email
            if contains("email", entities["info_target"]):
                response = ""
                for i in range(len(entities["staff_name"])):
                    if i != 0:
                        response += "\n"
                    staff_name = entities["staff_name"][i]["value"]
                    email = str(staff_info[staff_name][1])
                    if "\\N" in email:
                        email = "information not available"
                    response += response_generator.provide_staff_email(
                        staff_name, email)
                print(response)
            # Query about room number
            if contains("room number", entities["info_target"]):
                response = ""
                for i in range(len(entities["staff_name"])):
                    if i != 0:
                        response += "\n"
                    staff_name = entities["staff_name"][i]["value"]
                    try:
                        room_number = str(int(staff_info[staff_name][3]))
                    except ValueError:
                        room_number = "information not available"
                    response += response_generator.provide_staff_room(
                        staff_name, room_number)
                print(response)
            # Query about website
            if contains("links", entities["info_target"]):
                response = ""
                for i in range(len(entities["staff_name"])):
                    if i != 0:
                        response += "\n"
                    staff_name = entities["staff_name"][i]["value"]
                    link = str(staff_info[staff_name][6])
                    if "\\N" in link:
                        link = "information not available"
                    response += response_generator.provide_staff_link(
                        staff_name, link)
                print(response)
            new_state = "end"
            return new_state, entities
        else:
            response = ""
            for i in range(len(entities["staff_name"])):
                if i != 0:
                    response += "\n"
                staff_name = entities["staff_name"][i]["value"]
                # Get email
                email = str(staff_info[staff_name][1])
                if "\\N" in email:
                    email = "information not available"
                # Get telephone number
                try:
                    tel = str(int(staff_info[staff_name][2]))
                except ValueError:
                    tel = "information not available"
                # Get room number
                try:
                    room_number = str(int(staff_info[staff_name][3]))
                except ValueError:
                    room_number = "information not available"
                link = str(staff_info[staff_name][6])
                if "\\N" in link:
                    link = "information not available"
                response += response_generator.provide_staff_info(
                    staff_name, email, tel, room_number, link)
            print(response)
            new_state = "end"
            return new_state, entities
    if "faculty_name" in entities:
        faculty_attributes, faculty_info = helper.load_faculty_information()
        if "info_target" in entities:
            # Query about telephone number
            if contains("tel", entities["info_target"]):
                response = ""
                for i in range(len(entities["faculty_name"])):
                    if i != 0:
                        response += "\n"
                    staff_name = entities["faculty_name"][i]["value"]
                    tel = faculty_info[staff_name][2]
                    if "\\N" in tel:
                        tel = "information not available"
                    response += response_generator.provide_faculty_tel(
                        staff_name, tel)
                print(response)

            # Query about email
            if contains("email", entities["info_target"]):
                response = ""
                for i in range(len(entities["faculty_name"])):
                    if i != 0:
                        response += "\n"
                    staff_name = entities["faculty_name"][i]["value"]
                    email = str(faculty_info[staff_name][3])
                    if "\\N" in email:
                        email = "information not available"
                    response += response_generator.provide_faculty_email(
                        staff_name, email)
                print(response)

            # Query about room number
            # Query about website is given to "get_access" intent
            if contains("room number", entities["info_target"]):
                response = ""
                for i in range(len(entities["faculty_name"])):
                    if i != 0:
                        response += "\n"
                    staff_name = entities["faculty_name"][i]["value"]
                    room_number = str(faculty_info[staff_name][4])
                    if "\\N" in room_number:
                        room_number = "information not available"
                    response += response_generator.provide_staff_room(
                        staff_name, room_number)
                print(response)
            if contains("links", entities["info_target"]):
                response = ""
                for i in range(len(entities["faculty_name"])):
                    if i != 0:
                        response += "\n"
                    staff_name = entities["faculty_name"][i]["value"]
                    link = "http://www.cse.ust.hk/~"
                    link += faculty_info[staff_name][3].replace(
                        "@cse.ust.hk", "")
                    link += "/"
                    response += response_generator.provide_staff_link(
                        staff_name, link)
                print(response)
        else:
            response = ""
            for i in range(len(entities["faculty_name"])):
                if i != 0:
                    response += "\n"
                staff_name = entities["faculty_name"][i]["value"]
                # Get email
                email = str(faculty_info[staff_name][3])
                if "\\N" in email:
                    email = "information not available"
                # Get telephone number
                try:
                    tel = str(faculty_info[staff_name][2])
                except ValueError:
                    tel = "information not available"
                # Get room number
                try:
                    room_number = str(faculty_info[staff_name][4])
                except ValueError:
                    room_number = "information not available"
                link = str(faculty_info[staff_name][7])
                if "\\N" in link:
                    link = "information not available"
                profile_link = str(faculty_info[staff_name][8])
                if "\\N" in profile_link:
                    profile_link = "information not available"
                scholar_link = str(faculty_info[staff_name][9])
                if "\\N" in scholar_link:
                    scholar_link = "information not available"
                response += provide_faculty_info(staff_name, email, tel,
                                                 room_number, link,
                                                 profile_link, scholar_link)
            print(response)
            new_state = "end"
            return new_state, entities
    response = response_generator.provide_dept_contact_info()
    print(response)
    new_state = "end"
    return new_state, entities
Exemple #14
0
def process_people_query_questions(entities):
    if "staff_name" in entities:
        staff_attributes, staff_info = helper.load_staff_information()
        response = ""
        for i in range(len(entities["staff_name"])):
            if i != 0:
                response += "\n"
            staff_name = entities["staff_name"][i]["value"].replace("\n", "")
            position = staff_info[staff_name][4].replace("\n", "").lower()
            staff_type = staff_info[staff_name][5].replace("\n", "")
            response += response_generator.provide_staff_people_info(
                staff_name, position, staff_type)
        print(response)
        new_state = "end"
        return new_state, entities
    if "research_area" in entities:
        response = ""
        area_faculty, faculty_area = helper.load_faculty_research_info()
        for i in range(len(entities["research_area"])):
            if i != 0:
                response += "\n"
            research_area = entities["research_area"][i]["value"]
            faculty_list = area_faculty[research_area]
            response += response_generator.provide_faculty_in_research_area(
                research_area, faculty_list)
        print(response)
        new_state = "end"
        return new_state, entities
    if "faculty_name" in entities:
        faculty_attributes, faculty_info = helper.load_faculty_information()
        response = ""
        for i in range(len(entities["faculty_name"])):
            if i != 0:
                response += "\n"
            name = entities["faculty_name"][i]["value"]
            response += faculty_info[name][6]
        print(response)
        new_state = "end"
        return new_state, entities
    if "info_target" in entities:
        if contains("head", entities["info_target"]):
            response = "The head of the department is Prof. Dit-Yan Yeung."
            print(response)
            new_state = "end"
            return new_state, entities
        if contains("ug coordinator", entities["info_target"]):
            response = "The coordinator for UG programs is Dr. Qiong Luo."
            print(response)
            new_state = "end"
            return new_state, entities
        if contains("pg coordinator", entities["info_target"]):
            response = "The coordinator for PG programs is Dr. Kai Chen."
            print(response)
            new_state = "end"
            return new_state, entities
        if contains("coordinator", entities["info_target"]):
            if "program" in entities:
                response = ""
                for i in range(len(entities["program"])):
                    if i != 0:
                        response += "\n"
                    program = entities["program"][i]["value"]
                    coordinator = helper.load_program_info()[4]
                    response += response_generator.provide_coordinator_info(
                        program, coordinator)
                print(response)
                new_state = "end"
                return new_state, entities
            new_state = "query_coordinator"
            return new_state, entities
    new_state = "error"
    return new_state, entities
Exemple #15
0
def divide_admission_questions(entities):
    if "enrich_target" in entities:
        if contains("Exchange Programs", entities["enrich_target"]):
            if "exchange_type" in entities:
                if contains("inbound", entities["exchange_type"]):
                    response = response_generator.provide_inbound_exchange()
                    print(response)
                    new_state = "end"
                    return new_state, entities
                else:
                    response = response_generator.provide_outbound_exchange()
                    print(response)
                    new_state = "end"
                    return new_state, entities
            else:
                response = response_generator.query_in_out()
                print(response)
                in_or_out = input("")
                entity_list = get_entities(in_or_out)["entities"]
                if "exchange_type" in entity_list:
                    if contains("outbound", entity_list["exchange_type"]):
                        response = response_generator.provide_outbound_exchange(
                        )
                        print(response)
                        new_state = "end"
                        return new_state, entities
                    else:
                        response = response_generator.provide_inbound_exchange(
                        )
                        print(response)
                        new_state = "end"
                        return new_state, entities
                else:
                    response = response_generator.provide_inbound_outbound_exchange(
                    )
                    print(response)
                    new_state = "end"
                    return new_state, entities
        else:
            enrichment_info = helper.load_enrichment_general_info()
            response = ""
            for i in range(len(entities["enrich_target"])):
                if i != 0:
                    response += "\n\n"
                name = entities["enrich_target"][i]["value"]
                response += enrichment_info[name][4]
            print(response)
            new_state = "end"
            return new_state, entities

    # Process the queries related to specific information
    if "info_target" in entities:
        if contains("faculty", entities["info_target"]):
            response = response_generator.provide_faculty_recruitment()
            print(response)
            new_state = "end"
            return new_state, entities
        if contains("job", entities["info_target"]):
            new_state = "admission_job"
            return new_state, entities

    # Process the query of enrolling some course
    if "course" in entities or "honor_course" in entities:
        attributes, course_info = helper.load_course_information()
        if "course" not in entities:
            total_course = entities["honor_course"]
        elif "honor_course" not in entities:
            total_course = entities["course"]
        else:
            total_course = entities["course"] + entities["honor_course"]
        response = ""
        for i in range(len(total_course)):
            if i != 0:
                response += "\n"
            course_code = total_course[i]["value"]
            prerequisite = course_info[course_code][4]
            response += response_generator.provide_course_prerequisite(
                course_code, prerequisite)
        print(response)
        new_state = "end"
        return new_state, entities

    # Process the admission to specific program
    if "program" in entities:
        response = ""
        for i in range(len(entities["program"])):
            if i != 0:
                response += "\n"
            program = entities["program"][i]["value"]
            admission = helper.load_program_info()[program][2]
            response += admission
        print(response)
        new_state = "end"
        return new_state, entities
    new_state = "admission_general"
    return new_state, entities
Exemple #16
0
def divide_basic_questions(entities):
    # TODO: implement the "inbound"/"outbound" differentiation for exchange
    # Enrichment opportunities
    if "enrich_target" in entities:
        response = ""
        enrich_general = helper.load_enrichment_general_info()
        for i in range(len(entities["enrich_target"])):
            if i != 0:
                response += "\n\n"
            enrichment = entities["enrich_target"][i]["value"]
            # TODO
            if enrichment == "Exchange Programs":
                if contains("inbound", entities["enrich_target"]) and contains("outbound", entities["enrich_target"]):
                    response += ""
            response += enrich_general[enrichment][1]
        print(response)
        new_state = "end"
        return new_state, entities
    # Program information
    if "program" in entities:
        program_info = helper.load_program_info()
        response = ""
        for i in range(len(entities["program"])):
            if i != 0:
                response += "\n\n"
            program = entities["program"][i]["value"]
            intro = program_info[program][1]
            response += intro
        print(response)
        new_state = "end"
        return new_state, entities
    # Course information
    if "course" in entities and "honor_course" not in entities:
        course_attributes, course_info = helper.load_course_information()
        response = ""
        for i in range(len(entities["course"])):
            if i != 0:
                response += "\n\n"
            code = entities["course"][i]["value"]
            response += response_generator.provide_course_info_by_table(code, course_info)
        print(response)
        new_state = "end"
        return new_state, entities
    # To deal with the problem of unhandled "honor course" problem.
    if "honor_course" in entities and "course" not in entities:
        course_attributes, course_info = helper.load_course_information()
        response = ""
        for i in range(len(entities["honor_course"])):
            if i != 0:
                response += "\n\n"
            code = entities["honor_course"][i]["value"]
            response += response_generator.provide_course_info_by_table(code, course_info)
        print(response)
        new_state = "end"
        return new_state, entities
    # Dealing with the problem of "mixed" type of information.
    if "honor_course" in entities and "course" in entities:
        course_attributes, course_info = helper.load_course_information()
        response = ""
        course_entities_augmented = entities["honor_course"] + entities["course"]
        for i in range(len(course_entities_augmented)):
            if i != 0:
                response += "\n\n"
            code = course_entities_augmented[i]["value"]
            response += response_generator.provide_course_info_by_table(code, course_info)
        print(response)
        new_state = "end"
        return new_state, entities
    # Dealing with the problem of research area
    if "research_area" in entities:
        response = ""
        fullname, attributes = helper.load_research_area_full_name()
        for i in range(len(entities["research_area"])):
            if i != 0:
                response += "\n\n"
            research_area = entities["research_area"][i]["value"]
            response += attributes[research_area]
        print(response)
        new_state = "end"
        return new_state, entities
    # Basic information about the department
    if "basic_target" not in entities and "program" not in entities and "course" not in entities:
        if "department_name" in entities:
            response = response_generator.provide_basic_dept_info()
            print(response)
            new_state = "end"
            return new_state, entities
    new_state = "error"
    return new_state, entities