如何将多对象JSON聊天机器人意图文件转换为按tag分组的patterns二维列表
实现方案
以下用Python为例实现需求,全程保留tag序号对应关系:
- 首先加载JSON文件,遍历intents数组时通过枚举获取tag的序号索引
- 直接将每个intent下的patterns列表作为二维列表的一行元素存入,即可满足你要的下标对应规则
- 额外生成tag序号映射表,方便后续统计匹配次数时快速对应tag名称
示例代码
import json # 加载JSON文件 with open("你的意图文件路径.json", "r", encoding="utf-8") as f: intent_data = json.load(f) # 初始化结果变量 pattern_2d = [] # 你需要的二维列表 tag_index_map = {} # 存tag序号和tag名的对应关系:{0: "indoor", 1: "outdoor"} pattern_tag_mapping = [] # 可选:所有pattern对应的tag序号一维列表,匹配时直接取索引即可 for tag_idx, intent in enumerate(intent_data["intents"]): # 把当前tag的patterns加入二维列表 pattern_2d.append(intent["patterns"]) # 记录tag序号和名称的对应 tag_index_map[tag_idx] = intent["tag"] # 可选:生成每个pattern对应的tag序号列表 for _ in intent["patterns"]: pattern_tag_mapping.append(tag_idx)
输出示例
以你给出的样例JSON为例,运行后各变量结果如下:
pattern_2d结果:[["indoors", "windows", "inside", "shut", "door"], ["outdoors", "nature", "wind", "sun"]],完全符合你要的[0][0]对应第一个tag第一个pattern的规则tag_index_map结果:{0: "indoor", 1: "outdoor"},后续统计到某序号匹配次数时,直接查表就能拿到对应的tag名称- 可选的
pattern_tag_mapping结果:[0,0,0,0,0,1,1,1,1],后续做全局匹配时,匹配到第N个pattern,直接取pattern_tag_mapping[N]就能知道属于哪个tag
如果你用其他语言实现,逻辑完全一致:遍历intents数组时记录当前遍历的索引作为tag序号,把每个intent的patterns作为二维数组的子元素存入即可。
内容的提问来源于stack exchange,提问作者alphex
相关产品推荐
相关产品推荐

