pdf-text-extractor
Original:🇺🇸 English
Translated
1 scriptsChecked / no sensitive code detected
Download PDFs (when available) and extract plain text to support full-text evidence, writing `papers/fulltext_index.jsonl` and `papers/fulltext/*.txt`. **Trigger**: PDF download, fulltext, extract text, papers/pdfs, 全文抽取, 下载PDF. **Use when**: `queries.md` 设置 `evidence_mode: fulltext`(或你明确需要全文证据)并希望为 paper notes/claims 提供更强 evidence。 **Skip if**: `evidence_mode: abstract`(默认);或你不希望进行下载/抽取(成本/权限/时间)。 **Network**: fulltext 下载通常需要网络(除非你手工提供 PDF 缓存在 `papers/pdfs/`)。 **Guardrail**: 缓存下载到 `papers/pdfs/`;默认不覆盖已有抽取文本(除非显式要求重抽)。
1installs
Added on
NPX Install
npx skill4agent add willoscar/research-units-pipeline-skills pdf-text-extractorTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →PDF Text Extractor
Optionally collect full-text snippets to deepen evidence beyond abstracts.
This skill is intentionally conservative: in many survey runs, abstract/snippet mode is enough and avoids heavy downloads.
Inputs
- (expects
papers/core_set.csv,paper_id, and ideallytitle/pdf_url/arxiv_id)url - Optional: (to prioritize mapped papers)
outline/mapping.tsv
Outputs
- (one record per attempted paper)
papers/fulltext_index.jsonl - Side artifacts:
- (cached downloads)
papers/pdfs/<paper_id>.pdf - (extracted text)
papers/fulltext/<paper_id>.txt
Decision: evidence mode
- can set
queries.md.evidence_mode: "abstract" | "fulltext"- (default template): do not download; write an index that clearly records skipping.
abstract - : download PDFs (when possible) and extract text to
fulltext.papers/fulltext/
Local PDFs Mode
When you cannot/should not download PDFs (restricted network, rate limits, no permission), provide PDFs manually and run in “local PDFs only” mode.
- PDF naming convention: where
papers/pdfs/<paper_id>.pdfmatches<paper_id>.papers/core_set.csv - Set in
- evidence_mode: "fulltext".queries.md - Run:
python .codex/skills/pdf-text-extractor/scripts/run.py --workspace <ws> --local-pdfs-only
If PDFs are missing, the script writes a to-do list:
- (human-readable summary)
output/MISSING_PDFS.md - (machine-readable list)
papers/missing_pdfs.csv
Workflow (heuristic)
- Read .
papers/core_set.csv - If exists, prioritize mapped papers first.
outline/mapping.tsv - For each selected paper (fulltext mode):
- resolve (use
pdf_url, else derive frompdf_url/arxiv_idwhen possible)url - download to if missing
papers/pdfs/<paper_id>.pdf - extract a reasonable prefix of text to
papers/fulltext/<paper_id>.txt - append/update a JSONL record in with status + stats
papers/fulltext_index.jsonl
- resolve
- Never overwrite existing extracted text unless explicitly requested (delete the to re-extract).
.txt
Quality checklist
- exists and is non-empty.
papers/fulltext_index.jsonl - If : at least a small but non-trivial subset has extracted text (strict mode blocks if extraction coverage is near-zero).
evidence_mode: "fulltext" - If : the index records clearly reflect skip status (no downloads attempted).
evidence_mode: "abstract"
Script
Quick Start
python .codex/skills/pdf-text-extractor/scripts/run.py --helppython .codex/skills/pdf-text-extractor/scripts/run.py --workspace <workspace_dir>
All Options
- : cap number of papers processed (can be overridden by
--max-papers <n>)queries.md - : extract at most N pages per PDF
--max-pages <n> - : minimum extracted chars to count as OK
--min-chars <n> - : delay between downloads
--sleep <sec> - : do not download; only use
--local-pdfs-onlyif presentpapers/pdfs/<paper_id>.pdf - supports:
queries.md,evidence_mode,fulltext_max_papers,fulltext_max_pagesfulltext_min_chars
Examples
- Abstract mode (no downloads):
- Set in
- evidence_mode: "abstract", then run the script (it will emitqueries.mdwith skip statuses)papers/fulltext_index.jsonl
- Set
- Fulltext mode with local PDFs only:
- Set in
- evidence_mode: "fulltext", put PDFs underqueries.md, then run:papers/pdfs/python .codex/skills/pdf-text-extractor/scripts/run.py --workspace <ws> --local-pdfs-only
- Set
- Fulltext mode with smaller budget:
python .codex/skills/pdf-text-extractor/scripts/run.py --workspace <ws> --max-papers 20 --max-pages 4 --min-chars 1200
Notes
- Downloads are cached under ; extracted text is cached under
papers/pdfs/.papers/fulltext/ - The script does not overwrite existing extracted text unless you delete the file.
.txt
Troubleshooting
Issue: no PDFs are available to download
Fix:
- Use (default) or provide local PDFs under
evidence_mode: abstractand rerun withpapers/pdfs/.--local-pdfs-only
Issue: extracted text is empty/garbled
Fix:
- Try a different extraction backend if supported; otherwise mark the paper as evidence level and avoid strong fulltext claims.
abstract