关于 efficient-literature-survey
efficient-literature-survey 是用于批量处理学术文献的工作流,涵盖元数据提取、阅读排序和结构化写作。它通过分阶段确认与分层定向阅读,支持学位论文或综述论文写作。
主要功能
- 01批量提取文献元数据
- 02主题聚类与相关性评分
- 03分层定向阅读论文
- 04大纲确认检查点
- 05结构化文献写作
适用场景
- 01整理文件夹中的学术论文
- 02为论文综述确定阅读优先级
- 03拟定文献地图与写作大纲
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ namooubn/ efficient-literature-survey --skill efficient-literature-survey安装后在 Claude Code 中输入/efficient-literature-survey确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.gitignoreREADME.mdCHANGELOG.mdREADME_EN.mdextract_literature_metadata.pypyproject.tomlrequirements.txttest_extract_literature_metadata.pycache/__init__.pymanager.pycheckpoint/manager.pycitation/__init__.pybibtex.pyengine.pycore/__init__.pyconstants.pylogging_config.pyconfig.pyhelpers.pyextractors/__init__.pydocx.pybase.pytxt.pypdf.pyepub.pyreport/__init__.pygenerator.py详细介绍
高效文献调研工作流
核心假设
- 文献类型:用户提供的文件是学术论文、专著或学位论文。非学术内容(新闻报道、法律文件、产品手册)需标记为
non-academic并降级至 P2 仅摘要处理。 - 语言:支持中英混合文献。输出语言以 Stage 0 用户配置为准。
- 格式:PDF、DOCX、TXT、MD、EPUB。CAJ 需先转 PDF。
- Token 策略:从全文通读(500 万以上字符)压缩至定向阅读(约 3 万字符),节省 99% 以上。
触发条件
- “帮我读文献”、“写绪论和综述”、“快速理解大量文献”、“节省 token 读论文”
- “文献综述”、“论文绪论”、“批量阅读论文”
- 用户有一个文献文件夹,并需要结构化的学术输出
**不适用情况:**少于 5 篇论文、仅需总结单篇论文,或文件纯属非学术内容。
启动模式
- 模式 A(默认):立即运行 Stage 1 脚本 → 显示结果表格 → 收集剩余的 Stage 0 配置。
- 模式 B:如果用户主动提供了全部 5 项配置,直接进入 Stage 1。
- 模式 C(快速模式):仅当 (a) 已提供全部 5 项配置,且 (b) 用户明确表示“直接走 / 全速推进 / 不用确认”时触发。在此模式下:
- 显示 Stage 1 结果;如果用户没有异议,自动进入 Stage 2。
- 显示 Stage 2 聚类图;自动进入 Stage 3(合并检查点)。
- 显示 Stage 3 阅读摘要;进入 Stage 3.5 前必须暂停并等待用户确认。
- 显示 Stage 3.5 大纲;进入 Stage 4 前必须暂停并等待用户确认。
- 保留 Stage 0 和 Stage 2 检查点;将 Stage 2→3 检查点合并为一份“图谱 + 计划”摘要。
- 模式 D(半快速模式):当 (a) 已提供全部 5 项配置,且 (b) 用户没有明确表示“逐阶段确认”时触发。在此模式下:
- 显示 Stage 1 结果;自动进入 Stage 2。
- 将 Stage 2 聚类图 + 阅读计划合并为一个输出;进入 Stage 3 前必须暂停并等待用户确认。
- 显示 Stage 3 阅读摘要;进入 Stage 3.5 前必须暂停并等待用户确认。
- 显示 Stage 3.5 大纲;进入 Stage 4 前必须暂停并等待用户确认。
- 关键规则:即使在模式 D 下,Agent 也不得在没有用户明确确认的情况下从 Stage 2 进入 Stage 3,或从 Stage 3.5 进入 Stage 4。这些检查点不可协商。
Stage 0:用户配置(必填——收集齐全部 5 项之前停留在此处)
| # | 配置项 | 提问 |
|---|---|---|
| 1 | 输出语言 | “使用什么语言?” |
| 2 | 引用格式 | “APA / MLA / GB/T 7714 / 编号 [1]?” |
| 3 | 章节结构 | “自定义标题,还是使用默认模板(中文/英文论文)?” |
| 4 | 研究定位 | “论文标题、摘要、研究问题,或 3–5 个关键词——任意一项均可。” |
| 5 | 文献文件夹路径 | “文件在哪里?” |
| 6 | 输出类型 | “学位论文(thesis)/ 综述论文(review article)/ 其他?”(默认:学位论文) |
规则:收集齐全部 5 项之前,不要进入 Stage 4。如果选择了自定义结构但尚未提供具体内容,则停留在 Stage 0。
Stage 1:批量提取元数据
步骤 0:环境预检查(必需)
运行提取前,检查环境以避免运行时故障:
python extract_literature_metadata.py <folder_path> --env-check
此步骤会检查:
- 是否已安装依赖项(
PyPDF2、pdfplumber、python-docx等) - 终端编码(Windows GBK → UTF-8 警告)
- 加密 PDF、扫描图像 PDF、CAJ 文件
如果缺少依赖项:pip install PyPDF2 PyCryptodome pdfplumber python-docx ebooklib beautifulsoup4
如果 Windows 使用 GBK 编码:运行 chcp 65001 或 set PYTHONIOENCODING=utf-8
如果检测到加密 PDF:区分轻度加密与完全加密(参见下文的决策点)。
步骤 1:提取信息
运行 extract_literature_metadata.py <folder_path> [--keywords "kw1,kw2"] 以提取:
- 标题、作者、年份、页数、字数
- 期刊/卷/期/页码范围/DOI(启发式检测)
- 扫描图像标记、加密标记(含等级:轻度/完整)、首页预览文本
- 专著目录 + 匹配关键词的章节(针对页数 >100 的 PDF)
- 重复项检测
输出:_literature_extraction.json + _literature_report.md + 可选的 _literature_references.bib。
增量复用:如果输出文件夹中已存在 _literature_extraction.json,且文件未发生变化(SHA-256 缓存),则跳过重新提取,继续进入阶段 2。除非用户明确要求,否则不要强制重新运行阶段 1。
决策点:
- 扫描版/图像型 PDF → 提醒用户;建议使用
marker/nougat/tesseractOCR。 - 加密 PDF → 分级处理:
- 轻度加密(
encryption_level: light):PyPDF2 会标记为已加密,但 pdfplumber 可正常读取文本。脚本会使用空密码自动解密。正常继续。 - 完整加密(
encryption_level: full):PyPDF2 和 pdfplumber 均无法读取。标记并请用户手动解密。
- 轻度加密(
- 检测到 CAJ → 指示用户转换为 PDF。
- 带目录的专著(>100 页)若目录匹配 → 在阶段 1 输出中报告匹配的章节及页码范围。这些章节将成为 P0 核心阅读目标。
-
40 篇参考文献 → 按子文件夹或主题簇分批处理。
[USER_CHECKPOINT]:展示阶段 1 结果表。等待用户确认后再进入阶段 2。
阶段 2:构建文献图谱(聚类 + 优先级排序)
输入:阶段 1 元数据(标题、预览)+ 阶段 0 研究定位。
步骤 1:主题聚类(必须)
将参考文献分为 5-8 个主题簇。每个主题簇名称都必须在括号中包含 1-2 个代表性关键词。
示例 — 对 5 篇大模型研究论文进行聚类:
| 标题 | 所属主题簇 |
|---|---|
| Attention Is All You Need | 1. Transformer 架构与注意力机制 (Transformer, Attention) |
| BERT: Pre-training of Deep Bidirectional Transformers | 2. 预训练与表征学习 (Pre-training, Representation) |
| Language Models are Few-Shot Learners (GPT-3) | 3. 大模型推理与涌现能力 (LLM, Emergence) |
| Chain-of-Thought Prompting Elicits Reasoning | 3. 大模型推理与涌现能力 (LLM, Emergence) |
| Evaluating Large Language Models via Human Preference | 4. 模型评估与对齐 (Evaluation, Alignment) |
规则:每篇论文只能归入一个主要主题簇。如果论文涉及多个主题,请在 note 中注明次要主题簇。
步骤 2:相关性评分(必须)
根据用户阶段 0 研究定位中的关键词,对每个主题簇进行评分,并将这些关键词作为明确的评判标准。
| 分数 | 含义 | 操作 | 阅读深度 |
|---|---|---|---|
| 直接相关 | 直接回应用户的研究问题 | → P0 核心 | 全文(≤50k 字符)或摘要 + 结论 + 关键章节 |
| 相关 | 支持理论、方法或背景 | → P1 辅助 | 摘要 + 结论 + 关键词匹配章节 |
| 边缘相关 | 属于同一领域,但关联较弱 | → P2 背景 | 仅摘要 |
| 关联极弱 | 关联极少 | → 排除 | 不引用 |
规则:每项评分都必须至少引用一个用户阶段 0 研究定位中的关键词。示例:“主题簇 3 评为直接相关,因为它讨论了‘思维链推理’,与用户的关键词‘推理增强’相符。”
[CONTEXT_OVERFLOW] 防护规则:>40 篇参考文献 → 按格式或主题簇分批筛选。
[USER_CHECKPOINT]:展示完整图谱(主题簇、评分、阅读策略)。等待用户确认。
阶段 3:分级定向阅读
[USER_CHECKPOINT]:展示阅读计划(哪些 P0/P1/P2,以及阅读深度)。等待确认。
模式 C 例外:如果用户已用“直接走”确认阶段 2 的聚类图,则将此检查点合并到阶段 2 的摘要中。将阅读计划作为聚类图输出的一部分展示,然后自动进入下一阶段。
模式 D 例外:模式 D 中合并后的“聚类图 + 阅读计划”输出仍必须等待用户确认,才能继续实际阅读。不要仅仅因为已展示计划就悄悄执行阶段 3 的阅读。
P0(核心)——5-8 篇参考文献
- 先阅读前 2,000 个字符,了解结构。
- 如果 ≤50,000 个字符 → 阅读全文。
- 如果 >50,000 个字符 → 阅读摘要 + 结论 + 2-3 个关键章节。
- 提取:核心论点、2-3 条直接引文、理论脉络、方法论。
P1(支持)——15-20 篇参考文献
- 阅读前 2,000 个字符(摘要 + 引言)。
- 阅读最后 1,500 个字符(结论)。
- 如果预览中出现关键词 → 阅读匹配部分(前后各 500 个字符)。
- 提取:用 2-3 句话说明贡献及其与研究空白的关联。
P2(背景)——其余参考文献
- 阅读前 1,000 个字符(摘要)。
- 用一句话说明其定位。
[CONTEXT_OVERFLOW] 防护规则:P0+P1 合计 >100k 字 → 将所有 P1 降级为仅阅读摘要;P0 仅保留排名前 5 的文献。
[USER_CHECKPOINT]:阶段 3 结束后,展示简要阅读摘要。等待确认后再进入阶段 4。
阶段 3.5:大纲确认(必须执行)
目的:避免写完 6,800+ 字后,用户想调整结构而造成大量返工。用户说过“我不着急 一步步来”——本阶段旨在尊重这一意愿。
输入:阶段 3 的阅读摘要 + 阶段 0 的章节结构 + 专著章节映射(如有)。
输出:要点式大纲,包含:
- 章节标题(与用户的阶段 0 结构完全一致)
- 各章节的核心论点(1-2 句话)
- 各章节计划引用的文献编号
- 各章节预计字数
- 专著章节与部分的映射(例如“专著《X》第 3 章 → 本节理论框架”)
格式:
## 写作大纲(待确认)
### 1. 研究背景与问题提出(约 800 字)
- 论点:XXX 领域的发展引出 YYY 核心问题
- 引用:[1], [3], [5]
### 2. 文献综述 — 子主题 A(约 1200 字)
- 论点:早期研究侧重... 近期突破在于...
- 引用:[2], [4], [7]
- 专著映射:专著《X》第3章"理论框架" → 本节理论基础
...
### N. 研究缺口与本研究定位(约 600 字)
- 论点:现有研究存在三方面局限 → 本研究的切入点
- 引用:[6], [8]
**预估总字数**:6800 字
规则:
- 本阶段不得撰写完整正文——仅列要点。
- 每一条计划引用都必须对应阶段 1 结果中的真实参考文献。
- 如果用户在阶段 0 提供了自定义章节结构,则必须原样使用;不得另行编造标题。
- 对于包含
chapter_texts的专著,注明哪些章节对应哪些部分。
模式 C/D 例外:即使在快速 / 半快速模式下,阶段 3.5 也不得跳过。此处不允许自动进入下一阶段。阶段 2→3 合并检查点必须在阶段 3.5 结束,不得进入阶段 4。
[USER_CHECKPOINT]:展示大纲。等待用户明确确认或提出修改。
- 如果用户说“确认 / 可以 / 没问题 / 就这么写” → 进入阶段 4。
- 如果用户要求修改 → 修订大纲并重新展示。用户确认之前不得进入阶段 4。
阶段 4:结构化写作
按照用户的阶段 0 章节结构撰写引言和文献综述。除非用户明确选择,否则不得使用任何默认模板。
写作规则(强制)
- 严格遵循章节结构:使用用户指定的标题层级。
- 引用格式:使用用户要求的格式(APA/MLA/GB/编号制)。
- 来源锚定:
- P0 级参考文献 → 深入的理论锚定和核心论点
- P1 级参考文献 → 实证支持和次要论点
- P2 级参考文献 → 仅用于拓展广度或交代历史定位
- 每项论断都必须能追溯到具体参考文献。
- 研究空白:最后一节必须明确指出研究空白,并说明用户的研究如何填补这一空白。
- 输出语言:严格遵循 Stage 0 配置。
- 时间演进:在每个主题集群内,按时间顺序或理论脉络组织参考文献。呈现:早期研究 → 转折点 → 最新进展。
- 批判性分析(根据 output_type 区分):
- review article:每个主题集群段落中,至少内嵌一处冲突、方法论局限或矛盾发现。批判内容应融入该主题集群的论述脉络。
- thesis(默认):批判内容可以集中放在专门的“文献评述 / Literature Critique”一节(通常位于所有主题集群小节之后)。每个主题集群段落应侧重时间演进和主题综合。统一评述部分应指出跨主题集群的研究空白、方法论局限及领域内的矛盾发现。每个主题集群中可酌情加入简短的内嵌批判,但并非必须。
- Mixed:每个主题集群中加入简短的内嵌批判,并设置统一评述部分分析跨领域的研究空白。
- 综述与原创研究的区分:必须在高被引综述论文的首次文内引用之后立即标注
〔综述〕。示例:“郭小宇等〔综述〕对 X 领域进行了系统梳理……”。原创实验论文无需标注。
Few-Shot:主题集群段落写作示例
用户研究定位:“大模型中的思维链提示研究”
优秀示例(符合规则 7+8):
早期研究通过少量示例激发 LLM 的推理能力,但未显式构建中间步骤 (Brown et al., 2020)。Wei 等 (2022) 提出思维链 (CoT) 提示,在算术与常识推理任务上取得突破。然而,后续研究揭示了一项关键矛盾:CoT 虽能提升复杂任务的表现,却可能放大训练数据中的偏见 (Turpin et al., 2023),且其在低资源语言中的效果会大幅下降 (Shi et al., 2022)。这些相互矛盾的发现表明,亟需构建具备偏差感知能力的 CoT 机制——这正是本研究通过提出[你的方法]所要解决的研究空白。
优秀示例——论文风格(按时间顺序综合,将批判推迟到统一评述部分):
早期研究通过少量示例激发 LLM 推理能力,但未显式构建中间步骤 (Brown et al., 2020)。Wei 等 (2022) 提出思维链 (CoT) 提示,在算术与常识推理任务上取得突破。此后,零样本 CoT (Kojima et al., 2022) 与自一致性解码 (Wang et al., 2023) 进一步扩展了该范式。郭小宇等〔综述〕系统梳理了 CoT 在复杂推理中的应用现状。上述研究共同推动了从“直接预测”到“逐步推理”的范式转变,为本研究提出的偏差感知 CoT 机制奠定了理论基础。
(在文献评述一节统一批判:然而,现有 CoT 方法存在两方面局限:一是可能放大训练数据中的固有偏见 (Turpin et al., 2023);二是在低资源语言中效果显著下降 (Shi et al., 2022)。这些矛盾发现表明,亟需构建兼顾公平性与跨语言泛化能力的 CoT 框架——这正是本研究的切入点。)
不良示例(违反规则 7+8——平铺罗列,缺少冲突):
Wei et al. (2022) 提出了思维链提示。Kojima et al. (2022) 使用了零样本 CoT。Wang et al. (2023) 通过自一致性对其进行了改进。这些方法都提升了推理能力。
[USER_CHECKPOINT]:Stage 4 完成后,展示草稿并征求修改意见(结构、引用、研究空白分析)。
追加模式:添加新参考文献
当用户说“再添加一些论文”或“我找到 5 篇新参考文献”时:
- 增量提取:运行 Stage 1 脚本。SHA-256 缓存可确保跳过未更改的文件。
- 重新评估聚类:新参考文献进入 Stage 2。如果新参考文献揭示了缺失的主题,现有聚类可能会重命名或拆分。
- 最小化改写:更新文献地图,并将新参考文献标记为
〔新增〕。仅修改受影响聚类的 Stage 4 草稿。不要改写未受影响的部分。 - 重新编号引文:如果使用编号引文,则进行全局重新编号。提供引文变更的差异。
工具使用
Bash — 运行提取脚本
# Environment pre-check (run first)
python extract_literature_metadata.py <folder_path> --env-check
# Full extraction
python extract_literature_metadata.py <folder_path> [--max-pages N] [--citation-style STYLE] [--output-dir PATH] [--bibtex] [--no-recursive]
Read — 按层级定向阅读
| 层级 | 策略 |
|---|---|
| P0 | 若全文不超过 50k 个字符,则阅读全文;否则阅读前 2k 个字符和关键章节 |
| P1 | 阅读前 2k 个字符、后 1.5k 个字符,以及关键词匹配的章节 |
| P2 | 仅阅读前 1k 个字符(摘要) |
Write — 保存输出
_literature_map.md— 聚类、评分、阅读计划_thesis_introduction.md/_literature_review.md— Stage 4 输出
快速参考
| 情况 | 操作 |
|---|---|
| 文件夹中有 30 个以上文件 | 立即运行 Stage 1(Mode A) |
| 扫描版/图像版 PDF | 标记;建议使用 OCR 工具 |
| 轻度加密的 PDF | 自动解密;正常继续 |
| 完全加密的 PDF | 标记 encryption_level: full;用户必须解密 |
| 超过 100 页的专著 | 提取目录;按关键词匹配章节;阅读匹配章节 |
| 没有章节结构 | 暂停在 Stage 0;不要猜测 |
| 没有研究定位 | 暂停在 Stage 0;不要盲目聚类 |
| 参考文献相关性较弱 | 排除;在文献地图中注明其“相关性较弱” |
| 用户希望“节省 tokens” | 强调 P0/P1/P2 层级系统 |
| 用户说“直接走/全速推进” | 启用 Mode C(快速模式) |
| 用户提供了所有配置,但没有说“逐阶段确认” | 启用 Mode D(半快速模式) |
| CAJ 文件 | 指示用户将其转换为 PDF |
| 工作流中途添加新参考文献 | 使用 追加模式 |
已存在 _literature_extraction.json | 跳过 Stage 1;继续 Stage 2 |
常见错误
- 通读所有内容 — 先提取元数据。打开每个文件会耗费上下文。
- 没有聚类 — 缺少主题聚类时,综述就会变成摘要列表,而非论证。
- 未确定研究定位就聚类 — 没有用户的研究关键词,相关性评分就只能靠猜。
- 猜测结构 — 在 Stage 0 询问确切的标题。结构不匹配 = 全面重写。
- 忽略相关性较弱的参考文献 — 必须标记相关性较弱的参考文献,并酌情排除。
- 跳过差距分析 — Stage 4 必须以研究差距 + 研究定位收尾。
- 跳过 Stage 0 — 未收集全部 5 项配置就开始写作,必然会导致不匹配。
- 自动推进 — 每个
[USER_CHECKPOINT]都有其用意。不要默默继续(除非在 Mode C 下获得用户明确同意)。 - 平铺式按时间顺序罗列 — 违反规则 7。必须展现发展演变,而非仅作顺序排列。
- 缺少批判性张力 — 违反规则 8。没有批判的综述只是书目,而非学术研究。
- 不分输出类型硬套批判规则 — thesis 和 review article 的批判分布不同,生搬硬套会破坏行文流畅度。
- 忽略环境差异 — Windows GBK 编码、加密 PDF、缺失依赖会导致 Stage 1 批量失败。必须先做环境预检。
可复用工具
extract_literature_metadata.py — 批量提取标题、作者、页数/词数、文本量、扫描页面检测结果、书目元数据(期刊/卷/期/DOI)、重复项检测结果及格式化引文。输出 JSON + Markdown + 可选的 BibTeX。
依赖项:PyPDF2 PyCryptodome pdfplumber python-docx ebooklib beautifulsoup4
实际效果
30 篇中英文混合参考文献(3 本超过 200 页的专著):
- 全文:约 500 万以上字符
- 定向阅读:约 3 万字符(节省 99.4%)
- 输出:1,796 字符的引言 + 3,767 字符的综述,含 35 条引文、8 个聚类