#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 测试数据生成脚本 """ import pandas as pd import numpy as np from datetime import datetime import os def generate_test_data(): """生成测试数据""" # A_TREE 测试数据(包含层次结构) a_tree_data = [ # 省级节点 {'Id': 1, 'Pid': 0, 'name': '新疆维吾尔自治区'}, # 市级节点 {'Id': 2, 'Pid': 1, 'name': '乌鲁木齐市'}, {'Id': 3, 'Pid': 1, 'name': '克拉玛依市'}, {'Id': 4, 'Pid': 1, 'name': '吐鲁番市'}, {'Id': 5, 'Pid': 1, 'name': '哈密市'}, # 县级节点 {'Id': 6, 'Pid': 2, 'name': '天山区'}, {'Id': 7, 'Pid': 2, 'name': '沙依巴克区'}, {'Id': 8, 'Pid': 2, 'name': '新市区'}, {'Id': 9, 'Pid': 3, 'name': '独山子区'}, {'Id': 10, 'Pid': 3, 'name': '克拉玛依区'}, # 机构节点(完整名称) {'Id': 11, 'Pid': 6, 'name': '新疆维吾尔自治区妇女联合会'}, {'Id': 12, 'Pid': 6, 'name': '新疆维吾尔自治区政治协商会议'}, {'Id': 13, 'Pid': 6, 'name': '新疆维吾尔自治区人民代表大会常务委员会'}, {'Id': 14, 'Pid': 6, 'name': '新疆维吾尔自治区人民政府'}, {'Id': 15, 'Pid': 6, 'name': '新疆维吾尔自治区发展和改革委员会'}, {'Id': 16, 'Pid': 7, 'name': '新疆维吾尔自治区人力资源和社会保障局'}, {'Id': 17, 'Pid': 7, 'name': '新疆维吾尔自治区卫生健康委员会'}, {'Id': 18, 'Pid': 7, 'name': '新疆维吾尔自治区应急管理局'}, {'Id': 19, 'Pid': 8, 'name': '新疆维吾尔自治区市场监督管理局'}, {'Id': 20, 'Pid': 8, 'name': '新疆维吾尔自治区自然资源局'}, {'Id': 21, 'Pid': 9, 'name': '新疆维吾尔自治区生态环境局'}, {'Id': 22, 'Pid': 9, 'name': '新疆维吾尔自治区住房和城乡建设局'}, {'Id': 23, 'Pid': 10, 'name': '新疆维吾尔自治区交通运输局'}, {'Id': 24, 'Pid': 10, 'name': '新疆维吾尔自治区农业农村局'}, {'Id': 25, 'Pid': 6, 'name': '新疆维吾尔自治区商务局'}, {'Id': 26, 'Pid': 7, 'name': '新疆维吾尔自治区文化和旅游局'}, {'Id': 27, 'Pid': 8, 'name': '新疆维吾尔自治区退役军人事务局'}, {'Id': 28, 'Pid': 9, 'name': '新疆维吾尔自治区审计局'}, {'Id': 29, 'Pid': 10, 'name': '新疆维吾尔自治区统计局'}, {'Id': 30, 'Pid': 6, 'name': '新疆维吾尔自治区医疗保障局'}, ] # B_TREE 测试数据(包含简称和变体) b_tree_data = [ # 省级节点 {'Id': 101, 'Pid': 0, 'name': '新疆维吾尔自治区'}, # 市级节点 {'Id': 102, 'Pid': 101, 'name': '乌鲁木齐市'}, {'Id': 103, 'Pid': 101, 'name': '克拉玛依市'}, {'Id': 104, 'Pid': 101, 'name': '吐鲁番市'}, {'Id': 105, 'Pid': 101, 'name': '哈密市'}, # 县级节点 {'Id': 106, 'Pid': 102, 'name': '天山区'}, {'Id': 107, 'Pid': 102, 'name': '沙依巴克区'}, {'Id': 108, 'Pid': 102, 'name': '新市区'}, {'Id': 109, 'Pid': 103, 'name': '独山子区'}, {'Id': 110, 'Pid': 103, 'name': '克拉玛依区'}, # 机构节点(简称) {'Id': 111, 'Pid': 106, 'name': '新疆维吾尔自治区妇联'}, {'Id': 112, 'Pid': 106, 'name': '新疆维吾尔自治区政协'}, {'Id': 113, 'Pid': 106, 'name': '新疆维吾尔自治区人大常委会'}, {'Id': 114, 'Pid': 106, 'name': '新疆维吾尔自治区政府'}, {'Id': 115, 'Pid': 106, 'name': '新疆维吾尔自治区发改委'}, {'Id': 116, 'Pid': 107, 'name': '新疆维吾尔自治区人社局'}, {'Id': 117, 'Pid': 107, 'name': '新疆维吾尔自治区卫健委'}, {'Id': 118, 'Pid': 107, 'name': '新疆维吾尔自治区应急局'}, {'Id': 119, 'Pid': 108, 'name': '新疆维吾尔自治区市场监管局'}, {'Id': 120, 'Pid': 108, 'name': '新疆维吾尔自治区自然资源局'}, {'Id': 121, 'Pid': 109, 'name': '新疆维吾尔自治区环保局'}, {'Id': 122, 'Pid': 109, 'name': '新疆维吾尔自治区住建局'}, {'Id': 123, 'Pid': 110, 'name': '新疆维吾尔自治区交通局'}, {'Id': 124, 'Pid': 110, 'name': '新疆维吾尔自治区农业局'}, {'Id': 125, 'Pid': 106, 'name': '新疆维吾尔自治区商务局'}, {'Id': 126, 'Pid': 107, 'name': '新疆维吾尔自治区文旅局'}, {'Id': 127, 'Pid': 108, 'name': '新疆维吾尔自治区退役军人局'}, {'Id': 128, 'Pid': 109, 'name': '新疆维吾尔自治区审计局'}, {'Id': 129, 'Pid': 110, 'name': '新疆维吾尔自治区统计局'}, {'Id': 130, 'Pid': 106, 'name': '新疆维吾尔自治区医保局'}, # 添加一些不匹配的数据 {'Id': 131, 'Pid': 106, 'name': '新疆维吾尔自治区教育局'}, {'Id': 132, 'Pid': 107, 'name': '新疆维吾尔自治区科技局'}, {'Id': 133, 'Pid': 108, 'name': '新疆维吾尔自治区民政局'}, {'Id': 134, 'Pid': 109, 'name': '新疆维吾尔自治区司法局'}, {'Id': 135, 'Pid': 110, 'name': '新疆维吾尔自治区财政局'}, ] # 创建DataFrame a_tree_df = pd.DataFrame(a_tree_data) b_tree_df = pd.DataFrame(b_tree_data) # 确保data目录存在 os.makedirs('data', exist_ok=True) # 保存到CSV文件 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") a_csv_path = f'data/a_{timestamp}.csv' b_csv_path = f'data/b_{timestamp}.csv' a_tree_df.to_csv(a_csv_path, index=False, encoding='utf-8-sig') b_tree_df.to_csv(b_csv_path, index=False, encoding='utf-8-sig') print(f"测试数据已生成:") print(f" A_TREE: {a_csv_path} ({len(a_tree_df)} 条记录)") print(f" B_TREE: {b_csv_path} ({len(b_tree_df)} 条记录)") return a_tree_df, b_tree_df, a_csv_path, b_csv_path def create_test_config(a_csv_path: str, b_csv_path: str): """创建测试配置文件""" test_config = f'''# CSV文件配置 csv: # A_TREE CSV文件路径 a_csv_path: "{a_csv_path}" # B_TREE CSV文件路径 b_csv_path: "{b_csv_path}" # 输出CSV文件路径 output_csv_path: "test_output/ab.csv" # 匹配配置 matching: # 相似度阈值 similarity_threshold: 0.7 # 最大匹配数 max_matches: 3 # 是否启用简称匹配 enable_abbreviation: true # 日志配置 logging: level: "DEBUG" format: "{{time:YYYY-MM-DD HH:mm:ss}} | {{level}} | {{message}}" file: "logs/test_matching.log" rotation: "10 MB" retention: "30 days" # 输出配置 output: # 匹配结果文件 result_file: "test_output/matching_results.csv" # 日志文件目录 log_dir: "logs" # 临时文件目录 temp_dir: "temp" ''' with open('test_config.yaml', 'w', encoding='utf-8') as f: f.write(test_config) print("测试配置文件已创建: test_config.yaml") def create_hierarchy_example(): """创建层次结构示例""" example_data = { 'A_TREE': [ {'Id': 1, 'Pid': 0, 'name': '新疆维吾尔自治区'}, {'Id': 2, 'Pid': 1, 'name': '乌鲁木齐市'}, {'Id': 3, 'Pid': 2, 'name': '天山区'}, {'Id': 4, 'Pid': 3, 'name': '新疆维吾尔自治区妇女联合会'}, ], 'B_TREE': [ {'Id': 101, 'Pid': 0, 'name': '新疆维吾尔自治区'}, {'Id': 102, 'Pid': 101, 'name': '乌鲁木齐市'}, {'Id': 103, 'Pid': 102, 'name': '天山区'}, {'Id': 104, 'Pid': 103, 'name': '新疆维吾尔自治区妇联'}, ] } # 保存层次结构示例 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") for tree_name, data in example_data.items(): df = pd.DataFrame(data) filename = f'test_data/{tree_name}_hierarchy_{timestamp}.csv' df.to_csv(filename, index=False, encoding='utf-8-sig') print(f" {tree_name}: {filename}") return example_data def main(): """主函数""" import os # 创建测试数据目录 os.makedirs('test_data', exist_ok=True) os.makedirs('test_output', exist_ok=True) os.makedirs('logs', exist_ok=True) os.makedirs('temp', exist_ok=True) print("="*60) print("测试数据生成脚本") print("="*60) # 生成测试数据 a_tree, b_tree, a_csv_path, b_csv_path = generate_test_data() # 创建层次结构示例 print("\n创建层次结构示例:") hierarchy_example = create_hierarchy_example() # 创建测试配置 create_test_config(a_csv_path, b_csv_path) print("\n测试数据说明:") print("- A_TREE 包含完整的机构名称和层次结构") print("- B_TREE 包含简称和变体,以及层次结构") print("- 预期匹配: 20个机构") print("- 预期不匹配: 5个机构") print("- 包含省级、市级、县级、机构级四个层次") print("\n层次结构示例:") print("新疆维吾尔自治区 -> 乌鲁木齐市 -> 天山区 -> 新疆维吾尔自治区妇女联合会") print("新疆维吾尔自治区 -> 乌鲁木齐市 -> 天山区 -> 新疆维吾尔自治区妇联") print("\n使用方法:") print("1. 使用生成的CSV文件运行程序") print(f"2. 运行: python3 main.py --a-csv {a_csv_path} --b-csv {b_csv_path}") print("3. 或使用配置文件: python3 main.py --config test_config.yaml") print("4. 查看结果: test_output/ 目录") print("="*60) if __name__ == "__main__": main()