首次提交:上传本地文件夹

This commit is contained in:
ruxia
2025-03-31 17:28:23 +08:00
commit 0de349447c
439 changed files with 36643 additions and 0 deletions
+83
View File
@@ -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)