agentleFS
jkitchinjkitchin/knowhow/skills/research/scientific-data-extraction/SKILL.md

scientific-data-extraction

Skill42 starsChanged 17 days agoMITView on GitHub

Extract structured data from scientific literature across multiple formats (PDF, HTML, images, plain text). Auto-detects scientific domain to recommend specialized tools for chemistry/materials when appropriate.

The file

Show its rules and text

We split this skill into the rules it gives an agent

13 rules. About 0 are common, 13 are distinctive, and 0 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈13

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 0

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use this skill when you need to:

    line 23
  2. Distinctive:

    Run alternative method on same source, compare results and flag discrepancies.

    line 190
  3. Distinctive:

    Ask targeted questions to verify extracted data:

    line 193
  4. Distinctive:

    Detect domain: Check for chemistry/materials indicators

    line 275
  5. Distinctive:

    Extract text/structure: Use appropriate tool from hierarchy

    line 276
  6. Distinctive:

    Extract tables separately: Use Camelot, Tabula, or pdfplumber

    line 277
  7. Distinctive:

    Apply domain tools: If chemistry detected, use ChemDataExtractor

    line 278
  8. Distinctive:

    Validate: Run secondary extraction or LLM verification

    line 279
  9. Distinctive:

    Validate: Check extracted points against visual inspection

    line 291
  10. Distinctive:

    Confirm domain: Verify chemistry/materials content

    line 309
  11. Distinctive:

    Use the simplest method that works: - Start at Level 1 and escalate only if needed

    line 325
  12. Distinctive:

    Cross-reference chemistry data: - Always compare against known databases for sanity checking

    line 335
  13. Distinctive:

    LLM extraction can hallucinate: - Always validate with source or alternative method

    line 370

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Scientific Data Extraction Skill

Overview

This skill provides comprehensive guidance for extracting structured data from scientific literature across multiple input formats (PDF, HTML, images, plain text). It auto-detects the scientific domain to recommend specialized tools when appropriate (particularly for chemistry and materials science) and employs a hierarchical extraction approach with multi-method validation for high-confidence results.

When to Use This Skill

Use this skill when you need to:

  • Extract numerical data from scientific papers, reports, or documents
  • Digitize graphs and plots to recover underlying data points
  • Parse tables from PDFs or images into structured formats (CSV, DataFrame, JSON)
  • Extract chemical/materials data including properties, reactions, compounds, and structures
  • Convert unstructured text to structured JSON or tabular formats
  • Validate extracted data through multi-method cross-checking
  • Process document batches with consistent extraction methodology

Input Format Detection

The first step is identifying the input format and routing to appropriate tools:

Plain Text (.txt, .md)

  • Domain detection via keyword analysis
  • NLP-based entity extraction (spaCy, Stanza)
  • Regex patterns for structured data (numbers with units, chemical formulas)
  • LLM-based structured extraction

HTML (.html, web pages)

  • HTML parsing with BeautifulSoup + lxml
  • Table detection and extraction
  • Text content extraction with structure preservation
  • Domain-specific processing after text extraction

PDF (.pdf)

PriorityToolSpeedUse Case
QuickPyMuPDF4LLM~0.12sInitial exploration, large batches
StandardGROBIDMediumResearch-grade, reference parsing
StandardDoclingMediumLayout-aware, complex documents
TablesCamelotFastBordered tables
TablesTabulaFastGeneral tables
TablespdfplumberMediumComplex table structures
DeepMarker-PDFSlowerScanned documents with OCR

Images (.png, .jpg, .tiff)

Content TypeRecommended Approach
Document scanOCR (Tesseract/Surya) then text pipeline
Graph/PlotWebPlotDigitizer workflow or LLM vision
Table imageTable Transformer or LLM vision
Chemical structureOSRA or DECIMER for SMILES conversion

Domain Detection

The skill automatically detects scientific domain to apply specialized tools:

Chemistry/Materials Indicators

  • Chemical formulas (H2O, NaCl, TiO2)
  • SMILES strings, InChI identifiers
  • Reaction arrows (→, ⟶, ⇌)
  • Property keywords: melting point, bandgap, conductivity, yield, purity
  • Material names and IUPAC nomenclature
  • Spectroscopic data patterns (NMR shifts, IR peaks)

When Chemistry/Materials Detected

Apply specialized tools:

  • ChemDataExtractor v2: Property extraction, entity recognition, table parsing
  • OpenChemIE: Reaction extraction from text, tables, and figures
  • Domain-specific NER: Chemical named entity recognition

General Scientific Domain

Use general-purpose extraction:

  • Standard NLP pipelines
  • LLM-based structured extraction
  • Template-based parsing

Extraction Method Hierarchy

Apply methods in order of increasing complexity based on requirements:

Level 1: Quick Extraction (Speed Priority)

When to use: Initial exploration, large document batches, simple structured data

# Quick PDF to text with PyMuPDF4LLM
import pymupdf4llm
text = pymupdf4llm.to_markdown("paper.pdf")

# Quick HTML parsing
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_content, 'lxml')
tables = soup.find_all('table')

Expected confidence: Lower, suitable for screening

Level 2: Standard Extraction (Balanced)

When to use: Research-grade extraction, structure preservation needed

# GROBID for structured PDF parsing
import scipdf_parser
article = scipdf_parser.parse_pdf_to_dict("paper.pdf")

# Docling for layout-aware extraction
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("paper.pdf")

# Camelot for bordered tables
import camelot
tables = camelot.read_pdf("paper.pdf", flavor='lattice')
df = tables[0].df

Expected confidence: Medium-high

Level 3: Deep Extraction (Accuracy Priority)

When to use: Publication-quality data, domain-specific extraction

# ChemDataExtractor for chemistry documents
from chemdataextractor import Document
doc = Document.from_file("paper.pdf")
records = doc.records

# OpenChemIE for reaction extraction
from openchemie import OpenChemIE
model = OpenChemIE()
reactions = model.extract_reactions_from_text(text)

# Marker-PDF with OCR for scanned documents
from marker.converters.pdf import PdfConverter
converter = PdfConverter()
result = converter("scanned_paper.pdf")

Expected confidence: High

Level 4: LLM-Enhanced Extraction

When to use: Complex figures, ambiguous data, validation needed

# LLM-based structured extraction
prompt = """
Extract all numerical data from this text as JSON:
- Property name
- Value (number only)
- Unit
- Context (what material/compound)

Text: {text}
"""

# LLM vision for graph interpretation
prompt = """
Analyze this graph image and extract:
1. X-axis label and range
2. Y-axis label and range
3. All data points as (x, y) pairs
4. Any error bars or uncertainty indicators
"""

Expected confidence: Highest when combined with validation

Multi-Method Validation Pipeline

For high-confidence results, use multiple extraction methods and validate:

Step 1: Primary Extraction

Select method based on input type and domain, extract structured data.

Step 2: Secondary Extraction

Run alternative method on same source, compare results and flag discrepancies.

Step 3: LLM Verification Queries

Ask targeted questions to verify extracted data:

  • "Is this value X consistent with the context Y?"
  • "Does unit Z make sense for property P?"
  • "Are there any missing data points in the expected range?"

Step 4: Confidence Scoring

confidence = {
    "score": 0.0,  # 0-1 scale
    "level": "HIGH|MEDIUM|LOW|REVIEW",
    "methods_agreed": [],  # List of methods that produced same result
    "discrepancies": [],   # Any disagreements between methods
    "verification_notes": ""  # LLM verification outcome
}

# Scoring rules:
# - Single method: max 0.7
# - Two methods agree: 0.8
# - Two methods + LLM verification: 0.9
# - Multiple methods + LLM + database cross-reference: 0.95+

Step 5: Database Cross-Reference (Optional)

For chemistry/materials, compare against known databases:

  • Materials Project
  • AFLOW
  • PubChem
  • NIST databases

Flag significant deviations from expected ranges.

Output Format

Structure extracted data consistently:

{
  "extraction_metadata": {
    "source": "path/to/document.pdf",
    "source_type": "pdf",
    "domain_detected": "chemistry",
    "methods_used": ["grobid", "chemdataextractor", "llm_verification"],
    "timestamp": "2025-01-18T..."
  },
  "extracted_data": [
    {
      "data_type": "material_property",
      "entity": "TiO2",
      "property": "bandgap",
      "value": 3.2,
      "unit": "eV",
      "source_location": {
        "page": 4,
        "section": "Results",
        "table_id": "Table 2",
        "row": 3
      },
      "confidence": {
        "score": 0.95,
        "level": "HIGH",
        "methods_agreed": ["chemdataextractor", "llm_extraction"],
        "verification_notes": "Value consistent with literature range 3.0-3.4 eV"
      }
    }
  ],
  "validation_summary": {
    "total_extracted": 47,
    "high_confidence": 38,
    "medium_confidence": 7,
    "needs_review": 2,
    "discrepancies": []
  }
}

Step-by-Step Instructions

For PDF Data Extraction

  1. Identify document type: Scanned or text-based PDF
  2. Choose extraction level: Based on accuracy requirements
  3. Detect domain: Check for chemistry/materials indicators
  4. Extract text/structure: Use appropriate tool from hierarchy
  5. Extract tables separately: Use Camelot, Tabula, or pdfplumber
  6. Apply domain tools: If chemistry detected, use ChemDataExtractor
  7. Validate: Run secondary extraction or LLM verification
  8. Format output: Structure as JSON with confidence scores

For Graph/Plot Digitization

  1. Assess graph quality: Resolution, clarity, labeling
  2. Identify graph type: Line plot, scatter, bar chart, contour
  3. Choose method:
    • Simple, clear graphs: WebPlotDigitizer (manual calibration)
    • Complex or batch: LLM vision extraction
  4. Calibrate axes: Define coordinate system
  5. Extract data points: Manual selection or automatic detection
  6. Validate: Check extracted points against visual inspection
  7. Export: CSV or JSON format with uncertainty estimates

For Table Extraction

  1. Identify table type: Bordered (lattice) or borderless (stream)
  2. Choose tool:
    • Bordered: Camelot with flavor='lattice'
    • Borderless: Tabula or Camelot with flavor='stream'
    • Complex: pdfplumber for fine-grained control
  3. Extract to DataFrame: Review structure and headers
  4. Clean data: Fix merged cells, missing values, formatting
  5. Apply domain parsing: Convert units, parse chemical formulas
  6. Validate: Compare against source visually
  7. Export: CSV, JSON, or integrate into dataset

For Chemistry/Materials Extraction

  1. Confirm domain: Verify chemistry/materials content
  2. Choose specialized tool:
    • Properties: ChemDataExtractor v2
    • Reactions: OpenChemIE
    • Structures from images: OSRA or DECIMER
  3. Configure extraction: Set up parsers for target properties
  4. Run extraction: Process document with domain tools
  5. Post-process: Normalize units, standardize identifiers
  6. Cross-reference: Compare against databases (Materials Project, PubChem)
  7. Validate: LLM verification of unusual values
  8. Export: Structured JSON with confidence scores

Best Practices

  1. Always start with format detection - Correct tool selection depends on accurate format identification
  2. Use the simplest method that works - Start at Level 1 and escalate only if needed
  3. Preserve source location - Track page numbers, sections, table IDs for traceability
  4. Validate unusual values - Any value outside expected ranges should be flagged and verified
  5. Document extraction methodology - Record which tools and settings produced each data point
  6. Handle uncertainty explicitly - Include error bounds when available, note when values are approximate
  7. Cross-reference chemistry data - Always compare against known databases for sanity checking
  8. Use LLM verification judiciously - Most valuable for complex figures and ambiguous cases

Requirements

Core Python Packages

  • pymupdf4llm: Quick PDF extraction
  • pdfplumber: Detailed PDF analysis
  • camelot-py: Table extraction (requires ghostscript)
  • beautifulsoup4, lxml: HTML parsing
  • spacy: NLP processing
  • pandas: Data manipulation

Domain-Specific (Chemistry)

  • chemdataextractor: Chemistry NLP (v2 recommended)
  • openchemie: Reaction extraction

Optional

  • tabula-py: Table extraction (requires Java)
  • grobid (server): Academic PDF parsing
  • docling: IBM document converter
  • marker-pdf: OCR-capable PDF conversion
  • tesseract or surya: OCR engines

Limitations

  1. Scanned documents require OCR - Quality depends on scan resolution and OCR accuracy
  2. Complex table structures - Merged cells, nested headers may require manual correction
  3. Graph digitization is approximate - Precision limited by image resolution and calibration
  4. Domain tools are specialized - Chemistry tools won't work well on biology or physics texts
  5. LLM extraction can hallucinate - Always validate with source or alternative method
  6. Some PDFs are protected - May not be extractable due to DRM or image-only content

Related Skills

  • literature-review: For systematic literature searching and synthesis
  • scientific-reviewer: For evaluating extracted data quality
  • materials-databases: For cross-referencing extracted chemistry/materials data
  • python-plotting: For visualizing extracted data

References

See the references/ directory for detailed documentation on:

  • pdf-tools.md: Comprehensive PDF extraction tool comparison
  • table-extraction.md: Table extraction methods and code examples
  • graph-digitization.md: Graph data extraction techniques
  • chemistry-tools.md: ChemDataExtractor and OpenChemIE usage
  • llm-extraction.md: LLM-based extraction patterns and validation

See the examples/ directory for complete workflows:

  • extract-from-pdf.md: End-to-end PDF extraction example
  • extract-table-data.md: Table extraction comparison
  • digitize-graph.md: Graph digitization guide
  • chemistry-extraction.md: Chemistry-specific extraction workflow

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.