# 表格字段抽取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. 表格解析失败不影响规则抽取。

