| name | list_table_extraction |
| description | 从权威页面批量提取结构化列表数据(作品列表、成员名单、事件列表等) |
| trigger | 需要从单页或少量页面提取多行结构化数据 |
| success_rate | 0 |
| status | seed |
| trigger_conditions | {"domain":["general"],"entity_types":["entity"],"attribute_types":["list","table","enumeration"]} |
| cost_hint | mid |
| effectiveness_score | 0 |
Skill: List & Table Extraction(结构化列表批量提取)
目标
解决从权威页面(如 Wikipedia、IMDb、官方数据库)提取结构化列表或表格数据时,
因逐行搜索或迭代提取导致的搜索死循环和效率低下问题。
核心策略:定位聚合页 -> 批量提取 -> 本地过滤,一次完成。
扩展策略:对于跨实体的宽泛查询,采用实体分解 -> 并行提取 -> 结果聚合的策略。
适用场景
- 作品列表提取:某人/团体的完整作品表(电影、游戏、专辑、书籍)
- 成员名单提取:某组织/机构的成员列表、历任领导人
- 事件边界列表:时间范围由历史事件定义的列表(如"东印度公司统治期间的总督")
- 属性聚合表:多个同类实体的同一属性(如各共和国的领导人、各球场容量)
- 时间/条件过滤列表:需要对完整列表按年份、类型等条件过滤的子集
- 学术成果列表:某机构/个人在特定会议/期刊发表的论文标题列表(如"清华大学NLP组在ACL 2026发表的论文")
- 预发布学术统计:会议官方程序尚未发布时,从实验室主页、arXiv 预印本或官方公告中批量提取已确认的录用/投稿统计(如"ACL 2026 国内各 NLP 组录用情况")
- 多赛事奖项列表:同一机构在同一年份参加多项赛事并获奖的清单(如"2019年中南大学在A赛与B赛分别获得的奖项")
- 跨实体聚合列表:目标列表覆盖多个独立实体(如品牌、国家、机构),且不存在单一权威汇总页(如"国内所有电车品牌2022-2025年发布车型"),需按实体分解后并行提取。
- 历史时间窗口产品列表:需要提取特定历史时间段内发布的产品或模型(如"2022-2025年发布的电车"),而非当前在售列表。
不适用场景
- 单一事实查询(如"谁导演了这部电影?")
- 需要从每个实体的独立详情页获取深层属性(应使用分布式属性检索)
- 非结构化文本摘要
核心原则
原则1:聚合源优先
第一步必须尝试寻找包含完整数据的"聚合页面"(如 Wikipedia 的"List of..."页面)。
严禁直接遍历实体列表进行单独搜索。
原则2:实体页优先于列表搜索
永远不要直接搜索"完整列表"。搜索引擎很难返回完美的列表页面,但很容易返回实体主页。
搜索目标应是"人/团体名 + 权威来源",到达页面后再定位列表章节。
原则3:批量优于迭代
绝对禁止逐个点击链接或逐行提取证据。必须将整个数据源视为一个整体对象。
一旦定位到包含列表的页面,使用代码(Python/Pandas)批量解析。
原则4:事件边界先解析
如果时间范围由历史事件隐式定义,必须先将事件解析为具体年份,
再进行列表提取和过滤。未解析边界前,禁止大规模列表提取。
原则5:预发布数据识别
当目标会议/事件尚未正式发布完整列表时,优先搜索:
- 实验室官网的"News"或"Publications"栏目
- 官方 Twitter/Weibo 公告合集页
- arXiv 预印本列表(按机构+会议关键词过滤)
- 会议官方 Blog 的"Accepted Papers"预发布页
原则6:多赛事并行分解
当查询包含"同一年份 + 多项赛事/活动"时,按(赛事, 年份)原子对拆分为并行子任务;
每个子任务独立搜索对应赛事的获奖公告或新闻页,再统一由 auto_extraction 收割奖项段落。
原则7:宽泛范围实体分解
当查询范围过宽(如"国内所有电车"),导致单一权威页面不存在时,必须先识别关键子实体(如主要品牌),将任务分解为多个并行的子查询。严禁试图寻找一个包含所有数据的"超级列表页",应采用"分而治之"策略,按品牌/类别分发并行任务。
原则8:历史回溯优先于当前列表
当查询涉及特定历史时间窗口内的产品发布(如"2022-2025年发布的车型")时,严禁仅依赖当前的"产品列表"或"在售车型"页面。当前列表通常只展示在售款,缺失已停产或迭代款。
必须优先搜索"Timeline"(时间线)、"History"(历史)或"Model Year"(年款)页面,或按年份拆分查询(如"Models released in 2023"),以确保覆盖该时间窗口内的所有历史条目。
执行流程
Step 1:识别数据类型与范围策略
- 分析查询,确定目标实体类型和所需属性
- 范围评估:判断是否存在单一聚合页。如果范围涵盖多个大类实体(如多个品牌、多个国家),优先执行实体分解策略(见原则7)。
- 时间窗口评估:如果查询特定过去时间段的产品列表,确认是否需要历史时间线页面而非当前产品目录(见原则8)。
- 如果涉及事件边界,先执行子查询获取具体年份
- 构造聚合查询词定位数据源
查询模板:
- 作品列表:
{Entity Name} filmography/discography site:wikipedia.org
- 成员名单:
List of {Entity} members site:wikipedia.org
- 属性聚合:
List of {attribute} of {entity_type}
- 对比表:
{entity_type} comparison table {attribute}
- 学术列表:
{Institution} {Conference} {Year} papers site:aclanthology.org
- 预发布学术统计:
{Conference} {Year} accepted papers site:{lab_homepage_domain} OR site:arxiv.org
- 多赛事奖项:
{Institution} {Year} {Competition Name} award site:edu.cn
- 跨实体分解:
{Brand/Category} {Product Type} list {Year} (用于并行子任务)
- 历史时间线:
{Brand} {Product} history timeline site:wikipedia.org
- 年份发布列表:
{Brand} models released in {Year}
Step 2:验证页面结构
打开搜索结果中最权威的页面后:
- 确认页面包含结构化的表格或列表
- 检查表格表头是否包含目标属性(特别是时间属性,如"Release Date"或"Year")
- 如果属性缺失,判断是否需要转向详情页遍历
Step 3:批量数据提取
- 打开目标页面后用
find() 定位表格行,或用 Python 解析原 HTML
- 提取所有行数据到内存,而非逐行手动提取
- 保留实体名称和详情页链接(为后续可能的深层属性查询做准备)
Step 4:数据清洗与过滤
在本地环境中处理数据:
- 应用过滤条件(年份范围、类型限制等)
- 清洗格式(去除引用标记、统一日期格式)
- 对事件边界列表,用解析出的年份进行严格数字比较
- 当需要计数时,先按日期列过滤再计数,避免手动逐条核对
Step 5:输出与验证
- 确保所有列名符合问题要求
- 检查边界年份附近的条目(开区间/闭区间)
- 如聚合页缺少部分数据,仅对缺失项进行单独检索(兜底策略)