fix: update keywords_match

This commit is contained in:
2026-01-18 18:25:36 +08:00
parent 29f6e25f70
commit 4ed90734df
7 changed files with 1406 additions and 269 deletions

204
README.md
View File

@@ -18,6 +18,8 @@ python3 keyword_matcher.py
python3 image_batch_recognizer.py --mock --limit 5
```
---
## 功能 1关键词匹配
从文本中识别 CAS 号和关键词。
@@ -45,6 +47,9 @@ python3 keyword_matcher.py \
-k ../data/input/keyword_all.xlsx \
-t ../data/input/clickin_text_img.xlsx \
-o ../data/output/results.xlsx
# 指定多个文本列
python3 keyword_matcher.py -c detected_text 文本
```
### 参数说明
@@ -54,19 +59,15 @@ python3 keyword_matcher.py \
| `-k, --keywords` | 关键词文件 | `../data/input/keywords.xlsx` |
| `-t, --text` | 文本文件 | `../data/input/clickin_text_img.xlsx` |
| `-o, --output` | 输出文件 | `../data/output/keyword_matched_results.xlsx` |
| `-c, --text-column` | 文本列名 | `文本` |
| `-c, --text-columns` | 文本列名(支持多列) | 自动检测 `detected_text` `文本` |
| `-m, --modes` | 匹配模式 | `cas exact` |
| `--separator` | 关键词分隔符 | `\|\|\|` |
### 输出说明
每种模式生成独立文件
- `keyword_matched_results_cas.xlsx` - CAS 号匹配结果
- `keyword_matched_results_exact.xlsx` - 精确匹配结果
输出列:
- `匹配到的关键词` - 匹配的关键词列表
- `匹配模式` - 使用的匹配模式
输出合并后的匹配结果文件,包含以下列
- `匹配到的关键词` - 匹配的关键词列表(` | ` 分隔)
- `匹配模式` - 使用的匹配模式(如 "CAS号识别 + 精确匹配"
---
@@ -82,6 +83,9 @@ cd scripts/
# 模拟模式(无需 API用于测试
python3 image_batch_recognizer.py --mock --limit 5
# 使用 Dify API
python3 image_batch_recognizer.py --api-type dify --limit 10
# 使用 OpenAI API
python3 image_batch_recognizer.py --api-type openai --limit 10
@@ -89,7 +93,7 @@ python3 image_batch_recognizer.py --api-type openai --limit 10
python3 image_batch_recognizer.py --api-type dmx --limit 10
# 并行处理
python3 image_batch_recognizer.py --api-type openai --max-workers 3
python3 image_batch_recognizer.py --api-type dify --max-workers 3
```
### 参数说明
@@ -98,7 +102,7 @@ python3 image_batch_recognizer.py --api-type openai --max-workers 3
|------|------|--------|
| `--image-dir` | 图片目录 | `../data/images` |
| `--output` | 输出文件 | `../data/output/image_recognition_results.xlsx` |
| `--api-type` | API 类型 | 从 `.env` 读取 |
| `--api-type` | API 类型 (openai/dmx/dify/anthropic/mock) | 从 `.env` 读取 |
| `--model` | 模型名称 | 从 `.env` 读取 |
| `--limit` | 最大处理数 | 无限制 |
| `--offset` | 跳过前 N 张 | 0 |
@@ -106,26 +110,6 @@ python3 image_batch_recognizer.py --api-type openai --max-workers 3
| `--mock` | 模拟模式 | 否 |
| `--recursive` | 递归子目录 | 否 |
### API 配置
复制 `.env` 配置文件并填写:
```bash
cp config.env.example .env
```
`.env` 示例:
```
OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-4o-mini
DMX_API_KEY=sk-dmx-...
DMX_BASE_URL=https://www.dmxapi.cn
DMX_MODEL=gpt-5-mini
LLM_API_TYPE=openai
```
### 输出说明
输出 Excel 包含以下列:
@@ -133,27 +117,163 @@ LLM_API_TYPE=openai
- `detected_objects` - 物品描述
- `sensitive_items` - 敏感要素
- `summary` - 风险摘要
- `confidence` - 置信度
- `confidence` - 置信度 (High/Medium/Low)
- `raw_response` - 原始 LLM 响应
---
## 功能 3数据收集与合并
收集批处理结果并与原始数据合并。
```bash
cd scripts/
# 默认合并 batch_output 和 data_all 中的数据
python3 collect_xlsx.py
# 指定输出目录
python3 collect_xlsx.py -o ../data/merged
# 预览模式(不执行)
python3 collect_xlsx.py -n
# 仅复制,不合并原始数据
python3 collect_xlsx.py --no-merge
```
合并逻辑:
-`data/batch_output/{name}/results.xlsx` 读取识别结果
-`data/data_all/{name}_text_img.xlsx` 按图片名匹配合并
- 输出到 `data/collected_xlsx/{name}.xlsx`
---
## 功能 4高置信度记录验证
对关键词未匹配但置信度为 High/Medium 的记录进行 LLM 二次验证。
```bash
cd scripts/
# 完整示例
python3 verify_high_confidence.py \
-o ../data/pho_analysis_merged/clickin.xlsx \
-m ../data/output/clickin_matched.xlsx \
-r ../data/output/clickin_verify.xlsx
# Mock 模式测试(不调用 API
python3 verify_high_confidence.py \
-o ../data/pho_analysis_merged/clickin.xlsx \
-m ../data/output/clickin_matched.xlsx \
--mock --limit 5
# 使用 DMX API
python3 verify_high_confidence.py -o original.xlsx -m matched.xlsx --api dmx
```
### 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `-o, --original` | 原始 Excel 文件 | 必填 |
| `-m, --matched` | keyword_matcher 匹配结果 | 必填 |
| `-r, --result` | 输出文件 | `{原始文件名}_llm_verified.xlsx` |
| `--api` | API 类型 (openai/dmx/dify/ollama) | 从 `.env` 读取 |
| `--mock` | 模拟模式 | 否 |
| `--confidence` | 验证的置信度级别 | `High Medium` |
| `--limit` | 限制验证条数 | 全部 |
### 输出说明
输出 Excel 在原始列基础上添加以下验证结果列:
- `llm_is_risky` - 是否涉及风险(布尔值)
- `llm_substances` - 涉及的物质名称或 CAS 号(` | ` 分隔)
- `llm_risk_level` - 风险等级(高/中/低)
- `llm_reason` - 判定理由
- `llm_raw_response` - LLM 原始响应
---
## API 配置
复制 `.env.example` 并填写:
```bash
cp .env.example .env
```
`.env` 示例:
```bash
# 默认 API 类型
LLM_API_TYPE="dify"
# DMX APIOpenAI 兼容)
DMX_API_KEY="sk-xxx"
DMX_BASE_URL="https://www.dmxapi.cn"
DMX_MODEL="gpt-4o-mini"
# Dify API图片识别使用
DIFY_API_KEY="app-xxx"
DIFY_BASE_URL="https://your-dify-server:4433"
DIFY_USER_ID="default-user"
# OpenAI API
OPENAI_API_KEY="sk-xxx"
OPENAI_MODEL="gpt-4o-mini"
# verify_high_confidence.py 独立配置VERIFY_ 前缀)
VERIFY_API_TYPE="dmx"
VERIFY_API_KEY="sk-xxx"
VERIFY_BASE_URL="https://www.dmxapi.cn"
VERIFY_MODEL="gpt-4o-mini"
```
---
## 目录结构
```
20251126_s2/
chem-risk-detect/
├── scripts/
│ ├── keyword_matcher.py # 关键词匹配
│ ├── image_batch_recognizer.py # 图片识别
│ ├── collect_xlsx.py # 数据收集合并
│ ├── verify_high_confidence.py # LLM 二次验证
│ ├── run.sh # 批处理管理
│ └── run_batch_background.sh # 后台运行
├── data/
│ ├── input/ # 输入数据
│ │ ├── clickin_text_img.xlsx # 文本数据
│ │ └── keywords.xlsx # 关键词库
│ ├── output/ # 输出结果
── images/ # 图片文件
│ ├── images/ # 图片文件
── batch_output/ # 批处理输出
│ │ └── {name}/results.xlsx
│ ├── data_all/ # 原始数据
│ │ └── {name}_text_img.xlsx
│ ├── collected_xlsx/ # 合并后数据
│ └── output/ # 最终输出结果
├── .env # API 配置
└── config.env.example # 配置模板
└── .env.example # 配置模板
```
---
## 处理流程
```
1. 图片识别
image_batch_recognizer.py → batch_output/{name}/results.xlsx
2. 数据合并
collect_xlsx.py → 合并 results.xlsx + {name}_text_img.xlsx → collected_xlsx/
3. 关键词匹配
keyword_matcher.py → output/keyword_matched_results.xlsx
4. 二次验证
verify_high_confidence.py → 验证未匹配的高置信度记录 → *_llm_verified.xlsx
```
---
@@ -173,7 +293,7 @@ cd scripts/
设置参数:
```bash
API_TYPE=openai MAX_WORKERS=3 ./run.sh start
API_TYPE=dify MAX_WORKERS=3 ./run.sh start
```
---
@@ -184,10 +304,11 @@ API_TYPE=openai MAX_WORKERS=3 ./run.sh start
# 必需
pip install pandas openpyxl
# 可选(提升性能)
pip install pyahocorasick # 关键词匹配加速
# 可选(提升性能和功能
pip install pyahocorasick # 关键词匹配加速5x
pip install requests # Dify API 必需
pip install tqdm # 进度条
pip install requests # HTTP 请求
pip install openai # verify 脚本的 OpenAI 兼容 API
```
---
@@ -203,9 +324,12 @@ pip install requests # HTTP 请求
**Q: 输出的分隔符能改吗?**
使用 `--separator` 参数,默认 `|||` 不与化学名称冲突。
**Q: verify 脚本和 image_batch_recognizer 能用不同的 API 吗?**
可以。verify 脚本使用 `VERIFY_` 前缀的环境变量,与其他脚本独立配置。
---
## 技术支持
## 技术要求
- Python 3.7+
- 查看帮助:`python3 script.py -h`