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.
|
2 weeks ago | |
---|---|---|
.idea | 2 weeks ago | |
data | 2 weeks ago | |
logs | 2 weeks ago | |
output | 2 weeks ago | |
src | 2 weeks ago | |
temp | 2 weeks ago | |
test_data | 2 weeks ago | |
test_output | 2 weeks ago | |
tests | 2 weeks ago | |
.gitignore | 2 weeks ago | |
README.md | 2 weeks ago | |
build.py | 2 weeks ago | |
config.yaml | 2 weeks ago | |
main.py | 2 weeks ago | |
requirements.txt | 2 weeks ago | |
run_tests.py | 2 weeks ago | |
start.sh | 2 weeks ago | |
test.sh | 2 weeks ago | |
test_config.yaml | 2 weeks ago | |
test_data.py | 2 weeks ago | |
需求.md | 2 weeks ago | |
项目总结.md | 2 weeks ago |
README.md
新疆各政企单位机构名称匹配工具
项目简介
本项目用于匹配新疆各政企单位的机构名称,支持简称匹配和模糊匹配功能。主要解决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机构IDa_name
: A_TREE机构名称b_id
: B_TREE机构IDb_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进行高效数据处理
- 支持批量匹配操作
- 进度条显示处理进度
- 内存优化的相似度计算
- 层次结构缓存机制
故障排除
常见问题
-
数据库连接失败
- 检查数据库配置信息
- 确认网络连接正常
- 验证用户权限
-
匹配结果为空
- 降低相似度阈值
- 检查数据格式是否正确
- 确认机构名称不为空
-
内存不足
- 减少最大匹配数
- 分批处理数据
- 增加系统内存
开发指南
添加新的简称映射
在 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
- 发送邮件至项目维护者