关于Flask的Alexa实体决议问(不处理同义词)

时间:2018-05-15 11:29:53

标签: python alexa flask-ask

我正在使用Flask-Ask制作一个alexa技能,它有一个自定义插槽 - 性别。主要值是“男性”,“女性”,相应的同义词是“他”,“她”,“男孩”,“女孩”等

该技能仅响应该人的性别。例如。一个“他是24岁”的话应该给“男性”但是给予“他”作为回应

我可以在技能的Json输出中看到正确的值,但是有一个更简单的内置函数来处理flask-ask中的分辨率,而不是在intent处理程序中编码或解析json响应吗?

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,我用一个小函数解析了JSON:

def resolved_values(request):
    """
    Takes the request JSON and converts it into a dictionary of your intent
    slot names with the resolved value.

    Example usage:

    resolved_vals = resolved_values(request)
    txt = ""
    for key, val in resolved_vals.iteritems():
        txt += "\n{}:{}".format(key, val)


    :param request: request JSON
    :return: {intent_slot_name: resolved_value}
    """
    slots = request["intent"]["slots"]
    slot_names = slots.keys()

    resolved_vals = {}

    for slot_name in slot_names:
        slot = slots[slot_name]

        if "resolutions" in slot:
            slot = slot["resolutions"]["resolutionsPerAuthority"][0]
            slot_status = slot["status"]["code"]
            if slot_status == "ER_SUCCESS_MATCH":
                resolved_val = slot["values"][0]["value"]["name"]
                resolved_vals[slot_name] = resolved_val
            else:
                resolved_vals[slot_name] = None
        else:  # No value found for this slot value
            resolved_vals[slot_name] = None
    return resolved_vals