You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
 
 
 

8.4 KiB

新疆各政企单位机构名称匹配工具

项目简介

本项目用于匹配新疆各政企单位的机构名称,支持简称匹配和模糊匹配功能。主要解决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. 安装依赖

pip install -r requirements.txt

2. 配置数据库

编辑 config.yaml 文件,配置数据库连接信息:

database:
  host: "your_database_host"
  port: 5236
  username: "your_username"
  password: "your_password"
  database: "your_database"

3. 运行程序

# 基本运行
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. 使用打包版本

# 构建可执行文件
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机构所属区县

测试

运行测试

# 运行所有测试
python run_tests.py

# 运行特定测试
python -m unittest tests.test_matcher

生成测试数据

python test_data.py

部署

ARM架构部署

# 构建ARM版本
python build.py

# 安装到系统
sudo ./install.sh

Docker部署

# 构建Docker镜像
docker build -t institution-matcher .

# 运行容器
docker run -v $(pwd)/output:/app/output institution-matcher

配置说明

数据库配置

database:
  host: "localhost"        # 数据库主机
  port: 5236              # 数据库端口
  username: "your_username" # 用户名
  password: "your_password" # 密码
  database: "your_database" # 数据库名
  charset: "utf8"         # 字符集

匹配配置

matching:
  similarity_threshold: 0.8  # 相似度阈值
  max_matches: 5            # 最大匹配数
  enable_abbreviation: true # 启用简称匹配

日志配置

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 方法中添加新的映射:

abbreviation_map = {
    "新机构全称": "新机构简称",
    # ... 其他映射
}

添加新的关键词

src/matcher.py 中的 _load_institution_keywords 方法中添加新的关键词:

keywords = {
    "新关键词1", "新关键词2",
    # ... 其他关键词
}

扩展匹配算法

src/matcher.py 中的 calculate_similarity 方法中添加新的相似度算法。

许可证

MIT License

贡献

欢迎提交Issue和Pull Request来改进这个项目。

联系方式

如有问题或建议,请通过以下方式联系:

  • 提交GitHub Issue
  • 发送邮件至项目维护者