# 新疆各政企单位机构名称匹配工具 ## 项目简介 本项目用于匹配新疆各政企单位的机构名称,支持简称匹配和模糊匹配功能。主要解决A_TREE和B_TREE两张表中机构数据的名称匹配问题。 ## 功能特性 - ✅ 支持达蒙DM数据库连接 - ✅ 智能机构名称匹配算法 - ✅ 简称自动识别和匹配 - ✅ **关键词识别和匹配** - ✅ **层次结构分析和归属信息提取** - ✅ 多种输出格式(CSV、Excel、JSON) - ✅ 详细的匹配报告和统计 - ✅ 支持ARM架构部署 - ✅ 完整的日志记录和进度显示 - ✅ 单元测试覆盖 ## 项目结构 ``` make2tree/ ├── src/ # 源代码目录 │ ├── __init__.py │ ├── config.py # 配置管理 │ ├── database.py # 数据库操作 │ ├── matcher.py # 机构名称匹配 │ └── output.py # 输出管理 ├── tests/ # 测试目录 │ ├── __init__.py │ └── test_matcher.py # 匹配器测试 ├── main.py # 主程序 ├── build.py # 打包脚本 ├── test_data.py # 测试数据生成 ├── run_tests.py # 测试运行脚本 ├── requirements.txt # 依赖包 ├── config.yaml # 配置文件 └── README.md # 项目文档 ``` ## 安装要求 - Python 3.8+ - 达蒙DM数据库驱动 (dmPython) - 相关Python依赖包 ## 快速开始 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 配置数据库 编辑 `config.yaml` 文件,配置数据库连接信息: ```yaml database: host: "your_database_host" port: 5236 username: "your_username" password: "your_password" database: "your_database" ``` ### 3. 运行程序 ```bash # 基本运行 python main.py # 指定配置文件 python main.py --config config.yaml # 指定输出目录 python main.py --output-dir output # 保存结果到数据库 python main.py --save-to-db # 调整匹配参数 python main.py --threshold 0.8 --max-matches 5 ``` ### 4. 使用打包版本 ```bash # 构建可执行文件 python build.py # 运行可执行文件 ./dist/institution_matcher ``` ## 命令行参数 | 参数 | 简写 | 说明 | 默认值 | |------|------|------|--------| | `--config` | `-c` | 配置文件路径 | `config.yaml` | | `--output-dir` | `-o` | 输出目录 | `output` | | `--save-to-db` | - | 保存结果到数据库 | `False` | | `--threshold` | `-t` | 相似度阈值 | `0.8` | | `--max-matches` | `-m` | 最大匹配数 | `5` | ## 输出文件 程序运行后会生成以下文件: - `matching_results_YYYYMMDD_HHMMSS.csv`: 匹配结果CSV文件 - `matching_results_YYYYMMDD_HHMMSS.xlsx`: 匹配结果Excel文件(包含多个工作表) - `matching_report_YYYYMMDD_HHMMSS.json`: 匹配报告JSON文件 ## 匹配算法 ### 相似度计算 使用多种算法计算机构名称相似度: - 完全匹配:100%相似度 - 高度匹配:85%-99%相似度 - 中度匹配:75%-84%相似度 - 低度匹配:70%-74%相似度 ### 简称支持 支持常见机构简称,如: - 妇女联合会 → 妇联 - 政治协商会议 → 政协 - 人民代表大会常务委员会 → 人大常委会 - 人民政府 → 政府 - 发展和改革委员会 → 发改委 - 人力资源和社会保障局 → 人社局 - 卫生健康委员会 → 卫健委 - 应急管理局 → 应急局 - 市场监督管理局 → 市场监管局 - 生态环境局 → 环保局 - 住房和城乡建设局 → 住建局 - 交通运输局 → 交通局 - 农业农村局 → 农业局 - 文化和旅游局 → 文旅局 - 退役军人事务局 → 退役军人局 - 医疗保障局 → 医保局 ### 关键词识别 系统能够自动识别机构名称中的关键词,包括: #### 政府机构关键词 - 办公厅、办公室、委员会、局、厅、部、处、科、股 - 妇联、工会、团委、残联、科协、文联、侨联、台联 - 工商联、红十字会、慈善总会、志愿者协会 #### 事业单位关键词 - 中心、站、所、院、校、馆、园、场、队、组 - 医院、学校、图书馆、博物馆、文化馆、体育馆 #### 企业单位关键词 - 公司、集团、企业、厂、矿、农场、林场、牧场 #### 特殊机构关键词 - 党校、行政学院、社会主义学院、团校、妇干校 - 参事室、文史馆、地方志办、研究室 #### 统计相关关键词 - 统计局、调查队、普查中心、统计站 ### 层次结构分析 系统能够通过父节点和上级节点分析机构的归属信息: #### 行政区划层次 - **省级**: 自治区、省、直辖市 - **市级**: 市、自治州、地区、盟 - **县级**: 县、自治县、区、旗、市辖区 - **乡级**: 乡、镇、街道、民族乡 - **村级**: 村、社区、居委会、村委会 #### 层次结构示例 ``` 新疆维吾尔自治区 (省级) └── 乌鲁木齐市 (市级) └── 天山区 (县级) └── 新疆维吾尔自治区妇女联合会 (机构) ``` 系统会提取每个机构的完整归属路径,用于更精确的匹配。 ## 匹配结果字段 匹配结果包含以下字段: ### 基本信息 - `a_id`: A_TREE机构ID - `a_name`: A_TREE机构名称 - `b_id`: B_TREE机构ID - `b_name`: B_TREE机构名称 ### 相似度信息 - `similarity_score`: 综合相似度分数 - `name_similarity`: 名称相似度分数 - `keyword_similarity`: 关键词相似度分数 - `admin_similarity`: 行政区划相似度分数 - `match_type`: 匹配类型 ### 关键词信息 - `a_keywords`: A_TREE机构关键词 - `b_keywords`: B_TREE机构关键词 ### 行政区划信息 - `a_province`: A_TREE机构所属省份 - `a_city`: A_TREE机构所属城市 - `a_county`: A_TREE机构所属区县 - `b_province`: B_TREE机构所属省份 - `b_city`: B_TREE机构所属城市 - `b_county`: B_TREE机构所属区县 ## 测试 ### 运行测试 ```bash # 运行所有测试 python run_tests.py # 运行特定测试 python -m unittest tests.test_matcher ``` ### 生成测试数据 ```bash python test_data.py ``` ## 部署 ### ARM架构部署 ```bash # 构建ARM版本 python build.py # 安装到系统 sudo ./install.sh ``` ### Docker部署 ```bash # 构建Docker镜像 docker build -t institution-matcher . # 运行容器 docker run -v $(pwd)/output:/app/output institution-matcher ``` ## 配置说明 ### 数据库配置 ```yaml database: host: "localhost" # 数据库主机 port: 5236 # 数据库端口 username: "your_username" # 用户名 password: "your_password" # 密码 database: "your_database" # 数据库名 charset: "utf8" # 字符集 ``` ### 匹配配置 ```yaml matching: similarity_threshold: 0.8 # 相似度阈值 max_matches: 5 # 最大匹配数 enable_abbreviation: true # 启用简称匹配 ``` ### 日志配置 ```yaml logging: level: "INFO" # 日志级别 format: "{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}" file: "logs/matching.log" # 日志文件 rotation: "10 MB" # 日志轮转大小 retention: "30 days" # 日志保留时间 ``` ## 性能优化 - 使用pandas进行高效数据处理 - 支持批量匹配操作 - 进度条显示处理进度 - 内存优化的相似度计算 - 层次结构缓存机制 ## 故障排除 ### 常见问题 1. **数据库连接失败** - 检查数据库配置信息 - 确认网络连接正常 - 验证用户权限 2. **匹配结果为空** - 降低相似度阈值 - 检查数据格式是否正确 - 确认机构名称不为空 3. **内存不足** - 减少最大匹配数 - 分批处理数据 - 增加系统内存 ## 开发指南 ### 添加新的简称映射 在 `src/matcher.py` 中的 `_load_abbreviation_map` 方法中添加新的映射: ```python abbreviation_map = { "新机构全称": "新机构简称", # ... 其他映射 } ``` ### 添加新的关键词 在 `src/matcher.py` 中的 `_load_institution_keywords` 方法中添加新的关键词: ```python keywords = { "新关键词1", "新关键词2", # ... 其他关键词 } ``` ### 扩展匹配算法 在 `src/matcher.py` 中的 `calculate_similarity` 方法中添加新的相似度算法。 ## 许可证 MIT License ## 贡献 欢迎提交Issue和Pull Request来改进这个项目。 ## 联系方式 如有问题或建议,请通过以下方式联系: - 提交GitHub Issue - 发送邮件至项目维护者