agentsclimarketplace

Pdf text extraction

Skill cxcscmu/SkillLearnBench/skills/b1-one-shot-claude-sonnet-4-6/organize-messy-files/pdf-text-extraction

[COLM'26] SkillLearnBench is the first benchmark for evaluating continual learning methods that automatically generate agent skills.

Install
npx -y skills add cxcscmu/SkillLearnBench --skill pdf-text-extraction

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

What its author says it does

Copied from the file, not written here

Extract text from PDF files using pdfminer or PyMuPDF to read titles and abstracts for classification.

SKILL.md

2.2 KB, as published. Nobody here has run it

PDF Text Extraction Skill

Overview

When paper filenames don't contain enough information, extract text from the first page of PDFs to get titles and abstracts for classification.

Installation

pip install pdfminer.six  # Pure Python, reliable
pip install pymupdf       # Faster, aka fitz
pip install pypdf2        # Lightweight alternative

Using pdfminer.six (Recommended for accuracy)

from pdfminer.high_level import extract_text

def get_first_page_text(pdf_path, max_chars=2000):
    """Extract text from first page only for fast classification."""
    try:
        text = extract_text(pdf_path, maxpages=1)
        return text[:max_chars]
    except Exception as e:
        return ""

Using PyMuPDF (Recommended for speed)

import fitz  # PyMuPDF

def get_first_page_text(pdf_path, max_chars=2000):
    try:
        doc = fitz.open(pdf_path)
        text = doc[0].get_text()
        doc.close()
        return text[:max_chars]
    except Exception as e:
        return ""

Extracting Title from PDF

def extract_title(pdf_path):
    """Try metadata first, then text extraction."""
    try:
        doc = fitz.open(pdf_path)
        # Try PDF metadata
        meta = doc.metadata
        if meta.get('title'):
            return meta['title']
        # Fallback: first non-empty line of text
        text = doc[0].get_text()
        lines = [l.strip() for l in text.split('\n') if l.strip()]
        return lines[0] if lines else ""
    except:
        return ""

Batch Processing Pattern

import os
from pathlib import Path

def classify_papers(folder, classifier_fn):
    results = {}
    for pdf_file in Path(folder).glob("*.pdf"):
        text = get_first_page_text(str(pdf_file))
        subject = classifier_fn(str(pdf_file), text)
        results[pdf_file.name] = subject
    return results

Notes

  • First page usually contains title + abstract - sufficient for classification
  • pdfminer is more reliable but slower; PyMuPDF is faster
  • Some PDFs may be scanned images (OCR needed) - rare for arxiv papers

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.