如何在Python中获取MS LUIS完整响应以读取子实体?
在Python中获取LUIS自定义机器学习实体的子实体
当使用Bot Builder Python的LUIS Recognizer无法直接获取子实体时,可通过以下两种方式读取:
方法一:直接访问LUIS原始响应
LUIS的原始响应包含完整的实体层级结构,你可以从recognizer_result.raw属性中提取子实体,示例代码如下:
from botbuilder.ai.luis import LuisRecognizer, LuisApplication # 初始化LUIS应用与识别器 luis_app = LuisApplication("<你的LUIS应用ID>", "<你的订阅密钥>", "<你的LUIS端点>") recognizer = LuisRecognizer(luis_app) async def recognize_entities(turn_context): recognizer_result = await recognizer.recognize(turn_context) # 遍历原始响应中的实体 for entity in recognizer_result.raw.get("entities", []): # 检查是否存在子实体 if "children" in entity: for child_entity in entity["children"]: child_name = child_entity["type"] child_value = child_entity["entity"] print(f"子实体:{child_name},值:{child_value}")
方法二:递归解析实体结构
如果需要更规整的封装,可以自定义递归函数,遍历所有层级的实体(包括子实体):
def extract_all_entities(entities): all_entities = [] for entity in entities: # 添加当前实体 all_entities.append({ "type": entity["type"], "value": entity["entity"], "score": entity.get("score") }) # 递归处理子实体 if "children" in entity: all_entities.extend(extract_all_entities(entity["children"])) return all_entities # 使用示例 async def get_all_entities(turn_context): recognizer_result = await recognizer.recognize(turn_context) raw_entities = recognizer_result.raw.get("entities", []) all_entities = extract_all_entities(raw_entities) for item in all_entities: print(f"实体类型:{item['type']},值:{item['value']}")
注意:自定义机器学习实体的子实体在LUIS原始响应中以children字段嵌套,需通过递归遍历才能完整获取所有子实体数据。
内容的提问来源于stack exchange,提问作者vincetheprince
相关产品推荐
相关产品推荐

