agentsclimarketplace

Run2 document text extraction

Skill cxcscmu/SkillLearnBench/skills/b2-self-feedback-claude-opus-4-6/organize-messy-files/run2_document-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 run2_document-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, PPTX, and DOCX files for content classification, with error handling and fallback strategies.

SKILL.md

2.2 KB, as published. Nobody here has run it

Document Text Extraction (Improved)

Libraries

  • PyPDF2 for PDF text extraction
  • python-pptx for PowerPoint text extraction
  • python-docx for Word document text extraction

Installation

pip3 install PyPDF2 python-pptx python-docx --break-system-packages

Key Lessons from Round 1

  1. Read enough pages: 3 pages is usually sufficient for classification, but some papers have long introductions. Consider reading more pages for borderline cases.
  2. Error handling: Always wrap extraction in try/except - some files may be corrupted.
  3. Empty text handling: PyPDF2 may return empty strings for scanned PDFs. Have a fallback plan.

PDF Extraction

import PyPDF2

def extract_pdf_text(filepath, max_pages=3):
    """Extract text from first few pages of a PDF."""
    try:
        with open(filepath, 'rb') as f:
            reader = PyPDF2.PdfReader(f)
            text = ""
            for page in reader.pages[:max_pages]:
                text += page.extract_text() or ""
        return text
    except Exception:
        return ""

PPTX Extraction

from pptx import Presentation

def extract_pptx_text(filepath):
    """Extract all text from slides including shapes and tables."""
    try:
        prs = Presentation(filepath)
        text = ""
        for slide in prs.slides:
            for shape in slide.shapes:
                if hasattr(shape, "text"):
                    text += shape.text + "\n"
                # Also check tables
                if shape.has_table:
                    for row in shape.table.rows:
                        for cell in row.cells:
                            text += cell.text + " "
        return text
    except Exception:
        return ""

DOCX Extraction

from docx import Document

def extract_docx_text(filepath):
    """Extract text from all paragraphs in a Word document."""
    try:
        doc = Document(filepath)
        return "\n".join([p.text for p in doc.paragraphs])
    except Exception:
        return ""

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.