首次提交:上传本地文件夹
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
import json
|
||||
|
||||
class ParserIntentJson:
|
||||
def __init__(self, json_path: str):
|
||||
self.json_path = json_path
|
||||
with open(json_path, 'r', encoding='utf-8') as f:
|
||||
self.jsons = json.load(f)
|
||||
self.lv1_intent_names_str = ""
|
||||
self.intent_lv2_str = ""
|
||||
|
||||
self.intent_struct = {item["一级意图"]["name"]: [sub["name"] for sub in item["二级意图"]] for item in self.jsons}
|
||||
|
||||
# 初始化时生成所有结构
|
||||
self.generate_intent_lv1_struction()
|
||||
self.generate_intent_lv2_struction()
|
||||
self.generate_pydantic_model()
|
||||
|
||||
def generate_intent_lv1_struction(self):
|
||||
lv1_intent_names = []
|
||||
for item in self.jsons:
|
||||
lv1_intent_names.append(item["一级意图"]["name"])
|
||||
self.lv1_intent_names_str = str(lv1_intent_names).replace("'", "")
|
||||
|
||||
def generate_intent_lv2_struction(self):
|
||||
intent_lv2_str = ""
|
||||
for item in self.jsons:
|
||||
str1 = f'## {item["一级意图"]["name"]}\n'
|
||||
str2 = ""
|
||||
for sub in item["二级意图"]:
|
||||
str2 += f'{sub["name"]}({sub["description"]})\n'
|
||||
intent_lv2_str += str1 + str2
|
||||
self.intent_lv2_str = intent_lv2_str
|
||||
|
||||
def generate_pydantic_model(self):
|
||||
|
||||
self.pydantic_dict_lv1 = {}
|
||||
self.pydantic_dict_lv2 = []
|
||||
for i in range(len(self.jsons)):
|
||||
lv1_name = self.jsons[i]["一级意图"]["name"]
|
||||
|
||||
intent_name_lv1 = f"slot_struct_lv1_{i}"
|
||||
slot_lv1 = self.jsons[i]['一级意图'].get('slot')
|
||||
class_def_lv1 = f"class {intent_name_lv1}(BaseModel):\n"
|
||||
for field_name, description in slot_lv1['required'].items():
|
||||
class_def_lv1 += f' {field_name}_required: str = Field(description="{description}")\n'
|
||||
for field_name, description in slot_lv1['optional'].items():
|
||||
class_def_lv1 += f' {field_name}_optional: str = Field(description="{description}")\n'
|
||||
self.pydantic_dict_lv1[lv1_name] = class_def_lv1
|
||||
# dict_temp_lv1 = {lv1_name: class_def_lv1}
|
||||
# self.pydantic_dict_lv1.append(dict_temp_lv1)
|
||||
|
||||
intent_name_lv2 = f"slot_struct_lv2_{i}"
|
||||
pydantic_dict_temp = []
|
||||
for j in range(len(self.jsons[i]["二级意图"])):
|
||||
lv2_name = self.jsons[i]["二级意图"][j].get("name")
|
||||
temp_list = [lv1_name, lv2_name]
|
||||
slot_lv2 = self.jsons[i]["二级意图"][j].get("solt")
|
||||
|
||||
class_def_lv2 = f"class {intent_name_lv2}_{j}(BaseModel):\n"
|
||||
for field_name, description in slot_lv2['required'].items():
|
||||
class_def_lv2 += f' {field_name}_required: str = Field(description="{description}")\n'
|
||||
for field_name, description in slot_lv2['optional'].items():
|
||||
class_def_lv2 += f' {field_name}_optional: str = Field(description="{description}")\n'
|
||||
# for field_name, description in slot['inferred'].items():
|
||||
# class_def += f' {field_name}: str = Field(description="{description}")\n'
|
||||
dict_temp = {tuple(temp_list): class_def_lv2}
|
||||
pydantic_dict_temp.append(dict_temp)
|
||||
self.pydantic_dict_lv2.append(pydantic_dict_temp)
|
||||
|
||||
|
||||
|
||||
|
||||
# 使用示例
|
||||
if __name__ == "__main__":
|
||||
parser = ParserIntentJson("../data/dynamic_structure/intent_json.json")
|
||||
|
||||
print(parser.lv1_intent_names_str)
|
||||
|
||||
print(parser.intent_lv2_str)
|
||||
|
||||
print(parser.pydantic_dict_lv1)
|
||||
|
||||
print(parser.pydantic_dict_lv2)
|
||||
Reference in New Issue
Block a user