82 lines
1.6 KiB
Markdown
82 lines
1.6 KiB
Markdown
# 表格字段抽取Skill 设计
|
|
|
|
## 1. Skill 定位
|
|
|
|
`表格字段抽取Skill` 负责从申请表、产品列表、标准清单等表格结构中抽取字段候选值。
|
|
|
|
英文实现标识建议使用 `TableFieldExtractSkill`。
|
|
|
|
## 2. 输入
|
|
|
|
```python
|
|
@dataclass
|
|
class TableFieldExtractInput:
|
|
documents: list[DocumentContent]
|
|
field_definitions: list[FieldDefinition]
|
|
```
|
|
|
|
## 3. 输出
|
|
|
|
```python
|
|
@dataclass
|
|
class TableFieldExtractOutput:
|
|
candidates: list[FieldCandidate]
|
|
failed_tables: list[dict]
|
|
tool_calls: list[dict]
|
|
```
|
|
|
|
## 4. 适用字段
|
|
|
|
1. 产品名称。
|
|
2. 包装规格。
|
|
3. 申请人名称。
|
|
4. 分类编码。
|
|
5. 生产地址。
|
|
6. 标准清单。
|
|
|
|
## 5. 核心方法
|
|
|
|
### 5.1 `run(input) -> TableFieldExtractOutput`
|
|
|
|
主入口方法。
|
|
|
|
### 5.2 `normalize_table(table) -> NormalizedTable`
|
|
|
|
标准化表头、空单元格和合并单元格。
|
|
|
|
### 5.3 `match_table_header(table, field_definition) -> TableMatch | None`
|
|
|
|
匹配表头。
|
|
|
|
### 5.4 `extract_cell_value(table, match) -> FieldCandidate`
|
|
|
|
抽取单元格值。
|
|
|
|
### 5.5 `build_table_source_location(table_index, row_index, col_index) -> SourceLocation`
|
|
|
|
记录表格来源位置。
|
|
|
|
## 6. 技术实现
|
|
|
|
使用技术:
|
|
|
|
1. `python-docx`
|
|
2. `pdfplumber`
|
|
3. 表头关键词映射
|
|
4. 合并单元格兼容处理
|
|
|
|
## 7. 异常处理
|
|
|
|
1. 无表格:跳过。
|
|
2. 表头无法识别:记录待复核。
|
|
3. 合并单元格解析失败:记录表格失败。
|
|
4. 多行多值:保留所有候选。
|
|
|
|
## 8. 测试要点
|
|
|
|
1. 能从申请表抽取产品名称。
|
|
2. 能从产品列表抽取包装规格。
|
|
3. 能记录表格坐标。
|
|
4. 表格解析失败不影响规则抽取。
|
|
|