扫描PDF目录下所有PDF文件,基于PilotCoding编码手册逐篇提取研究元数据,生成结构化CSV文件。输出文件以时间戳命名。
分别扫描以下 4 个 PDF 目录下所有PDF文件,逐篇提取研究级别的元数据,基于编码手册为每个目录输出独立的结构化CSV文件:
Articles_Analyses/piloting/PDF_Hu/Articles_Analyses/piloting/PDF_Liu/Articles_Analyses/piloting/PDF_Shi/Articles_Analyses/piloting/PDF_Wei/在开始编码前,自动调用 /cache-pdfs 技能,确保所有 PDF/DOCX 文件的全文已缓存到 .cache/ 目录。
/pilot-coding 时均自动触发等价于用户手动执行:
/cache-pdfs
缓存完成后,所有文件的全文已存放在 Articles_Analyses/piloting/.cache/<目录名>/<文件stem>.txt,后续步骤直接读取缓存。
依次处理以下 4 个目录,每个目录独立生成一个 CSV 文件:
| 目录 | 输出文件名 |
|---|---|
Articles_Analyses/piloting/PDF_Hu/ | PilotCoding_Hu_<YYYYMMDD_HHmmss>.csv |
Articles_Analyses/piloting/PDF_Liu/ | PilotCoding_Liu_<YYYYMMDD_HHmmss>.csv |
Articles_Analyses/piloting/PDF_Shi/ | PilotCoding_Shi_<YYYYMMDD_HHmmss>.csv |
Articles_Analyses/piloting/PDF_Wei/ | PilotCoding_Wei_<YYYYMMDD_HHmmss>.csv |
对每个目录,列出其下所有文件(包括 .pdf、.PDF、.docx 等格式)。补充材料文件(如 170-suppl.docx、179-suplementary.pdf、200-Supplementary_*.pdf)需与主文件按编号配对。
对每个 PDF 文件:
用 Read 工具读取 .cache/<目录名>/<文件stem>.txt 缓存文件(由步骤 0 的 /cache-pdfs 预先生成)。
如果该论文有配套的补充材料文件,也必须同时读取其缓存(补充材料已由 /cache-pdfs 单独缓存为独立 .txt 文件)。
*-suppl.*、*-supplementary.*、*-Supplementary*、*Supplementary_*从文件名提取编号(如 151-...pdf → 编号 151),结合 PDF 中的作者、年份、期刊信息,构建 Article_ID。
编号 (第一作者姓_年份_期刊缩写),如 151 (Catapano_2021_JPSP)从论文文本识别所有 Study:
输出:在终端打印识别结果:
#180: 识别到 4 个 Study,共 7 个编码单元(Study 2 有 2 个独立样本,Study 3 有 2 个独立样本,Study 4 有 2 个独立样本)
按照识别出的 Study 结构,逐行提取每行的各列数据(字段定义详见第二部分)。
提取完成后进行核对:
#151: 识别Study数=6, 提取行数=6 ✓
使用 Agent 工具同时启动 4 个并行子代理(在一条消息中发出 4 个 Agent 工具调用),每个子代理负责一个目录的完整处理流程:
| 子代理 | 目录 | 输出 CSV |
|---|---|---|
| Agent 1 | PDF_Hu/ | PilotCoding_Hu_<timestamp>.csv |
| Agent 2 | PDF_Liu/ | PilotCoding_Liu_<timestamp>.csv |
| Agent 3 | PDF_Shi/ | PilotCoding_Shi_<timestamp>.csv |
| Agent 4 | PDF_Wei/ | PilotCoding_Wei_<timestamp>.csv |
每个子代理的职责(独立完成以下全部步骤):
子代理的 prompt 必须包含:完整的第二部分(编码规则参考)和第三部分(输出规范),确保编码标准一致。
PDF 读取方式:子代理用 Read 工具读取 .cache/<目录名>/<文件stem>.txt 缓存文件(由步骤 0 的 /cache-pdfs 预先生成)。
增量保存:每个子代理每处理完 10 篇文章后,写入一次部分 CSV 到 Articles_Analyses/piloting/outputs/PilotCoding_<coder>_<timestamp>_partial.csv。最终完成后生成完整版并删除部分版。
主进程职责:4 个子代理全部完成后,主进程执行步骤 5(频次统计)和步骤 6(Hu 差异比较)。
由各子代理在生成 CSV 后独立执行。 验证分为两阶段:自动化脚本验证 + 内容验证。
编号 (作者_年份_期刊) 格式non-empirical → Number_Subjects_Total 应为空Brain → Hardware 应有脑成像设备(EEG/MEG/MRI/Neuroscan/BrainAmp 等)Biol → Hardware 不应有脑成像设备(否则应为 Multimodal)Online → 应有 Platform 信息On Campus → 不应有 MTurk/Prolificcase-study → Number_Subjects_Total ≤ 3secondary-data → 通常不应有 On Campus 招募;N_Total 应为空Longitudinal → N_Total 和 N_Valid 应包含分号分隔的多时间点数据¬£、€、Â¥),若发现则替换为正确的货币符号总文章数: X | 总行数: Y
覆盖度: X/X PDF 已处理 ✓
每一行对应一篇文献中的一项研究(Study)或独立编码单元,涵盖研究的基本信息、被试特征、实验设计、设备使用及费用等维度。
101 (Nguyen_2020_EHB), 102 (Diane_2001_DP)1, 2, 3, 1a, 1b, 2-a follow-up assessmentUSA, Germany, UK, EuropeEurope,不要推断为具体国家(如 Switzerland)[UNCERTAIN: Country] inferred from platform[UNCERTAIN: Country]chicago, berlin, onlinechicago)onlineExp, Survey, case-study, non-empirical, secondary-dataExp/Survey 指报告了数据收集的实证研究;case-study 指研究对象为具体案例;non-empirical 指未进行实验的研究;secondary-data 指对已有数据的二次分析Exp 和 Survey 进行进一步分类,必须按下方决策树判断case-study、secondary-data 或 non-empirical 时,Study_SubType 必须填 NAIntervention-RCT1. 论文是否收集了新的实证数据?
├─ 否 → 是否对已有数据进行二次分析?
│ ├─ 是 → secondary-data(后续字段如 Country/Region、City、N_Total、N_Valid、Mean_Age 等若未填写,不算错误)
│ └─ 否 → non-empirical
└─ 是 → 继续 ↓
2. 研究对象是否为具体个案(N≤3)?
├─ 是 → case-study → SubType: NA(case-study 不进行 SubType 分类;后续字段如 Country/Region、City、N_Total、N_Valid、Mean_Age 等若未填写,不算错误)
└─ 否 → 继续 ↓
3. 是否有实验操纵或干预(manipulation/intervention)?
├─ 否 → Survey → 转到 Survey SubType
└─ 是 → Exp → 转到 Exp SubType
Exp SubType 决策树:
1. 是否有干预(intervention)?
├─ 是 → 有标准 RCT 注册方案,或明确提及 "random assignment" 且发表于 ~2005 年前?
│ ├─ 是 → Intervention-RCT
│ └─ 否 → 干预是否直接作用于人脑且无创(如TMS/tDCS等)?
│ ├─ 是 → Intervention-Brain
│ └─ 否 → Intervention-Behavioral
└─ 否(仅有实验操纵 manipulation)→ 继续 ↓
2. 有脑成像(EEG/MEG/fMRI/fNIRS)?
├─ 是 → 同时有生理信号(皮肤电/心电/眼动)?
│ ├─ 是 → Multimodal
│ └─ 否 → Brain
└─ 否 → 继续 ↓
3. 有生理信号但无脑信号?
├─ 是 → Biol
└─ 否 → 继续 ↓
4. 是社会/管理类实验(使用问卷/情境操纵)?
├─ 是 → Behavioral-Social
└─ 否 → Behavioral-Cog
Survey SubType 决策树:
是否密集短间隔重复采样(ESM/EMA/日记法,每日/每小时级别)?
├─ 是 → ESM
├─ 否 → 是否多时间点纵向追踪(间隔数周/数月/数年)?
│ ├─ 是 → Longitudinal
│ ├─ 否 → 是否基于访谈?
│ │ ├─ 是 → Interview
│ │ ├─ 否 → 是否在田野/真实场景中?
│ │ │ ├─ 是 → Field
│ │ │ └─ 否 → Cross-Sectional
On Campus, Online, OtherMTurk, Prolific, QualtricsControl Group, Experimental GroupControl Group: 50, Experimental Group: 45Bipolar disorder, Anxiety disorder, Depression401、200; 150; 139(多时间点纵向研究:T1; T2; T3 各时间点人数)、549 caregivers / 1098 children200,N_Valid = 185[DATA SOURCE] N_Total excludes N=XXX from existing dataset (数据集名称)。纯二次分析的研究(Study_Type = secondary-data)N_Total 留空200; 150; 139 表示 T1=200, T2=150, T3=139)。时间点标签在 Notes 中说明(如 N_Total: T1=baseline, T2=6-month, T3=12-month)43),除非各批次为独立样本需分行编码not specified185、318/184(如不同分析中有效人数不同)、86; 106; 99(干预研究各时间点完成人数)/ 分隔报告86; 106; 99 表示干预完成=86, 6-mo follow-up=106, 12-mo follow-up=99)。这些数据对 Total_Cost 逐时间点计算至关重要22.84、3.58、~30median = ,如 median = 32.5,在 Notes 中标注 Mean_Age: paper reports median, not meanMean_Age: weighted average from subgroupsapprox 或估算中位值(如 ~30),在 Notes 标注原始分布信息4.46、2.118、350、651、3、24-week session + 2 follow-ups、2 per day × 15 workdays24-week session + 2 follow-ups(共3个测量时间点),不能写成 16 或 39-week session + 4 follow-ups,不能写成 51 training + 4 weeks2 per day × 15 workdays3 (baseline; 6-month; 12-month)。这与 N_Total/N_Valid 的分号分隔格式对应,便于逐时间点计算费用a coffee voucher, 5 US dollars, 10 Euros per hour, course creditpaid (amount unspecified)no compensationcourse credit$10/hour; ~$15 total for 1.5hr session)¬£ → £(英镑)€ → €(欧元)Â¥ → ¥(日元/人民币)全称,缩写(条目数),多个问卷用 ; 分隔Patient Health Questionnaire-9,PHQ-9(9 items); State-Trait Anxiety Inventory,STAI(40 items)(missing)(如 PHQ-9(missing))。如论文未提供缩写,仅写全称30 minutes, 1 hourEyeLink 1000, Brain Product Amplifier, Siemens MRI 3TMatlab, E-Prime, SPSS, QualtricsapproxTotal_Cost 三列计算规则(按优先级从高到低):
论文原文优先:如论文直接给出了总费用,Total_Cost 填论文原文数据,Lower/Upper 留空,在 Notes 中标注 Total cost from paper
公式计算:当 Cost/Session、Number_Subjects_Total、Number_Sessions 均为可提取的数值时:
Total_Cost_Upper = Cost/Session × N_Total × Number_Sessions(按伦理要求,排除的被试也需支付费用)Total_Cost_Lower = Cost/Session × N_Valid × Number_Sessions(如 N_Valid 可用)Total_Cost:当 N_Total = N_Valid 或 N_Valid 不可用时,填计算值;当 N_Total ≠ N_Valid 时,填 approx特殊情况处理:
$0.10/item)→ 先计算每人报酬(如 20 items × $0.10 = $2.00),再乘以被试数和 session 数,Notes 中标注计算过程$5-$10)→ Total_Cost 填 approx,Lower 用最小单价 × N_Valid,Upper 用最大单价 × N_Total$0.50/trial)→ 需确认论文中的 trial 含义:如果 trial = 整个参与过程(per person),则 Cost/Session = $0.50/person;如果 trial = 单个试次,则需要查找总试次数来计算每人报酬course credit or $10)→ 以货币部分计算,Notes 标注 calculated using monetary portion onlycourse credit)→ 三列均填 N/A (non-monetary)no compensation → Total_Cost 填 0,Lower/Upper 留空Total_Cost: lottery/drawing compensation, lower bound assumes 50% receipt rate。后续在方法上需要说明此估算假设按 session 分别计算(干预研究/纵向随访/多时间点研究):
核心原则:不同 session/时间点的补偿情况可能不同,必须逐 session 识别并分别计算,再累加。
步骤:
Total_Cost = Σ(各有报酬 session 的报酬 × 该 session 实际完成人数)Cost/Session 字段格式:当各 session 补偿不同时,按 session 分别列出:
baseline: no compensation; 6-mo follow-up: $20; 12-mo follow-up: $25screening: course credit; follow-up: $10$50)示例:
当论文未提供分时间点完成人数时,才退回到 N_Total × sessions × cost 的粗略估算,并标注 Total_Cost = approx,在 Notes 中说明无法获取分时间点人数。
无法计算:如任一组成字段缺失或无法提取数值 → 三列均留空,在 Notes 中说明缺失字段
ILS(精确值),不填 USD(近似换算值)CAD 而非 USD(除非论文明确说 "US dollars")| 论文原文称呼 | 正确的 Study_ID | 错误的 Study_ID |
|---|---|---|
| Study 1 | 1 | |
| Experiment 1 | 1 | |
| Experiment 1a | 1a | |
| Study 2b | 2b | |
| Subject 1(案例研究) | 1 | |
| 仅有一个研究 | 1 |
当同一 Article_ID 下有相同的 Study_ID 需要出现多次(如两行都是 1),这意味着该 Study 包含需要分别编码的独立子单元。必须阅读论文识别这些子单元。
常见情况:
| 模式 | 含义 | 示例 |
|---|---|---|
| 同一 Study_ID 出现 2 行 | 该 Study 有 2 个独立子样本 | Study 2 有 European 和 MTurk 两个独立样本 |
| 同一 Study_ID 出现 2 行 | 该 Study 的两个 Phase 使用独立被试 | Study 1 有 Phase 1 (persuaders) 和 Phase 2 (targets) |
在 Notes 或其他字段中区分各行的具体内容。
当对任何字段值不确定时,在 Notes 列添加标记,格式为:
[UNCERTAIN: 字段名] 说明
示例:
[UNCERTAIN: Study_Type] Could be Exp or Survey - manipulation is minimal[UNCERTAIN: Number_Subjects_Valid] Paper mentions exclusions but does not give final N[UNCERTAIN: Study_SubType] Paper uses eye-tracking but unclear if it's the primary DV| 特征 | 说明 |
|---|---|
| 数据层级 | 以 Article_ID + Study_ID 作为联合主键 |
| 字段格式 | 所有字段均以文本形式存储,数值型数据未做标准化处理 |
| 缺失值 | 大量字段存在空值,反映原始文献中信息披露的差异 |
| 多值字段 | Hardware, Software 等字段可能包含多个值,使用分号或逗号分隔 |
Article_ID(No_Author_Year_JournalName),Study_ID,Country/Region,City,Study_Type,Study_SubType,Recruit_Method,Platform_Recruitment,Platform_Survey,Groups_Names,Groups_N,Diagnosis_Subjects,Number_Subjects_Total,Number_Subjects_Valid,Mean_Age_Subjects (yrs),Age_SD,Age_Min,Age_Max,Number_Sessions,Cost/Session,Quests_Survey,Duration/Sess,Hardware,Software,Duration-Equip,Total_Cost,Total_Cost_Lower,Total_Cost_Upper,Currency,Notes
以下字段在 codebook 和 CSV 表头中名称不同,CSV 表头为权威输出格式:
| Codebook 字段名 | CSV 表头(权威) |
|---|---|
| Platform_online | Platform_Recruitment + Platform_Survey |
| Compensation_Subjects_per_Session | Cost/Session |
| Duration_per_Session | Duration/Sess |
| Hardware_Duration | Duration-Equip |
| Mean_Age_Subjects (yrs) | Mean_Age_Subjects (yrs) + Age_SD + Age_Min + Age_Max |
| Total_Cost_Subject | Total_Cost + Total_Cost_Lower + Total_Cost_Upper |
PilotCoding_<Coder>_<YYYYMMDD_HHmmss>.csv,其中 <Coder> 为目录后缀名(Hu/Liu/Shi/Wei)
PilotCoding_Hu_20260317_143025.csv、PilotCoding_Liu_20260317_143025.csvArticles_Analyses/piloting/outputs/在所有编码 CSV 生成并验证后,必须生成一份汇总的研究类型频次统计表。
对每个编码者的 CSV(Hu/Liu/Shi/Wei)以及合并后的总体,分别统计以下频次:
生成一个 CSV 文件,包含以下列:
Study_Type,Study_SubType,Hu,Liu,Shi,Wei,Total
Study_Type × Study_SubType 组合Hu/Liu/Shi/Wei 列为该编码者的频次计数Total 列为四位编码者的合计Study_Type(Exp → Survey → case-study → secondary-data → non-empirical)、再按 Study_SubType 字母序排列_subtotal)_total)StudyType_Frequency_<YYYYMMDD_HHmmss>.csv(时间戳与编码 CSV 一致)Articles_Analyses/piloting/outputs/在终端打印简要摘要表:
=== 研究类型频次统计 ===
Hu Liu Shi Wei Total
Exp XX XX XX XX XXX
Behavioral-Social XX XX XX XX XXX
Behavioral-Cog XX XX XX XX XXX
Brain XX XX XX XX XXX
Biol XX XX XX XX XXX
Multimodal XX XX XX XX XXX
Intervention-RCT XX XX XX XX XXX
Intervention-Behavioral XX XX XX XX XXX
Intervention-Brain XX XX XX XX XXX
Survey XX XX XX XX XXX
Cross-Sectional XX XX XX XX XXX
Longitudinal XX XX XX XX XXX
ESM XX XX XX XX XXX
Interview XX XX XX XX XXX
Field XX XX XX XX XXX
case-study XX XX XX XX XXX
secondary-data XX XX XX XX XXX
non-empirical XX XX XX XX XXX
─────────────────────────────────────────────────
Total XX XX XX XX XXX
Hu 目录的 CSV 生成并通过验证后,自动调用 comparison-report 技能,将新生成的 PilotCoding_Hu_<timestamp>.csv 与基准文件 PilotingCoding_Hu.xlsx 进行差异比较。
PilotCoding_Hu_<timestamp>.csv 已生成且通过步骤 4 验证Articles_Analyses/piloting/PilotingCoding_Hu.xlsx 存在等价于用户手动执行:
/comparison-report Articles_Analyses/piloting/outputs/PilotCoding_Hu_<timestamp>.csv
比较报告将输出到 Articles_Analyses/piloting/outputs/Comparison/CompReport_<timestamp>.md,包含 2A/2B 差异分类。
当前仅 Hu 目录有对应的基准 xlsx 文件。其他编码者(Liu/Shi/Wei)的基准文件建立后,可扩展此步骤。
/pilot-coding
执行后将:
PDF_Hu/、PDF_Liu/、PDF_Shi/、PDF_Wei/ 下所有文件Articles_Analyses/piloting/outputs/StudyType_Frequency_<timestamp>.csv)CompReport_<timestamp>.md