|
|
@ -2,47 +2,21 @@ |
|
|
|
|
|
|
|
## 项目简介 |
|
|
|
|
|
|
|
本项目用于匹配新疆各政企单位的机构名称,支持简称匹配和模糊匹配功能。主要解决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 # 项目文档 |
|
|
|
``` |
|
|
|
- 支持达蒙DM数据库连接 |
|
|
|
- 智能机构名称匹配算法 |
|
|
|
- 简称自动识别和匹配 |
|
|
|
- 多种输出格式(CSV、Excel、JSON) |
|
|
|
- 详细的匹配报告和统计 |
|
|
|
- 支持ARM架构部署 |
|
|
|
|
|
|
|
## 安装要求 |
|
|
|
|
|
|
|
- Python 3.8+ |
|
|
|
- 达蒙DM数据库驱动 (dmPython) |
|
|
|
- 达蒙DM数据库驱动 |
|
|
|
- 相关Python依赖包 |
|
|
|
|
|
|
|
## 快速开始 |
|
|
@ -69,20 +43,7 @@ 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. 使用打包版本 |
|
|
@ -97,264 +58,32 @@ python build.py |
|
|
|
|
|
|
|
## 命令行参数 |
|
|
|
|
|
|
|
| 参数 | 简写 | 说明 | 默认值 | |
|
|
|
|------|------|------|--------| |
|
|
|
| `--config` | `-c` | 配置文件路径 | `config.yaml` | |
|
|
|
| `--output-dir` | `-o` | 输出目录 | `output` | |
|
|
|
| `--save-to-db` | - | 保存结果到数据库 | `False` | |
|
|
|
| `--threshold` | `-t` | 相似度阈值 | `0.8` | |
|
|
|
| `--max-matches` | `-m` | 最大匹配数 | `5` | |
|
|
|
- `--config, -c`: 配置文件路径 |
|
|
|
- `--output-dir, -o`: 输出目录 |
|
|
|
- `--save-to-db`: 保存结果到数据库 |
|
|
|
- `--threshold, -t`: 相似度阈值 |
|
|
|
- `--max-matches, -m`: 最大匹配数 |
|
|
|
|
|
|
|
## 输出文件 |
|
|
|
|
|
|
|
程序运行后会生成以下文件: |
|
|
|
|
|
|
|
- `matching_results_YYYYMMDD_HHMMSS.csv`: 匹配结果CSV文件 |
|
|
|
- `matching_results_YYYYMMDD_HHMMSS.xlsx`: 匹配结果Excel文件(包含多个工作表) |
|
|
|
- `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 |
|
|
|
- 发送邮件至项目维护者 |
|
|
|