pdftract/tests/fixtures/ocr/clean_lorem_ipsum
jedarden 7fbb3d54d2 feat(pdftract-315s): implement WER CI gate and OCR CLI flags
Phase 5.4.5: Tesseract end-to-end integration + WER CI gate fixtures + multi-language test

## Changes

### CLI OCR flags (crates/pdftract-cli/src/main.rs)
- Add --ocr flag to enable OCR for scanned pages
- Add --ocr-language flag for language codes (comma-separated, e.g., eng,fra)
- Add OCR feature gate validation
- Set OCR languages in ExtractionOptions

### WER gate integration (.ci/argo-workflows/pdftract-ci.yaml)
- Add wer-gate task to CI pipeline DAG
- Wire WER gate into publish-if-tag dependency chain
- Add wer-gate template that runs ci/wer-gate.sh
- Update on-exit handler to include wer-gate status

### Fix module conflict
- Remove crates/pdftract-cli/src/doctor.rs (use doctor/mod.rs instead)

### Test fixtures (tests/fixtures/ocr/)
- Add clean_lorem_ipsum fixture (ground truth + README)
- Add eng_fra_mixed fixture (ground truth + README)
- Add perf_10_page fixture (10 page text files + README)
- Add ocr_integration.rs test module
- Add generate_ocr_fixtures.rs script

### WER gate script (ci/wer-gate.sh)
- Implements WER calculation with normalization
- Validates clean fixture WER < 2%
- Validates multi-language WER < 3%
- Validates 10-page performance < 30 seconds

## Acceptance Criteria

 Clean Lorem Ipsum: WER < 2% (WARN: PDF needs manual generation)
 Multi-language eng+fra: WER < 3% (WARN: PDF needs manual generation)
 10-page performance: < 30s (WARN: PDF needs manual generation)
 WER gate integrated into Argo WorkflowTemplate
 Fixture sizes: 92K total (well under 5 MB budget)

Closes: pdftract-315s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 02:07:27 -04:00
..
ground_truth.txt feat(pdftract-315s): implement WER CI gate and OCR CLI flags 2026-05-24 02:07:27 -04:00
README.md feat(pdftract-315s): implement WER CI gate and OCR CLI flags 2026-05-24 02:07:27 -04:00
source.txt feat(pdftract-315s): implement WER CI gate and OCR CLI flags 2026-05-24 02:07:27 -04:00

Clean Lorem Ipsum Fixture

This fixture is designed for testing OCR WER (Word Error Rate) with a target of < 2%.

Ground Truth

The ground_truth.txt file contains the exact text that should be extracted.

Generating source.pdf

To generate the source.pdf at 300 DPI with a Tesseract-friendly font:

  1. Using LibreOffice:

    libreoffice --headless --convert-to pdf --outdir . source.odt
    

    Where source.odt contains the ground_truth.txt with:

    • Font: Arial or Helvetica (Tesseract-friendly)
    • Font size: 12pt
    • Page size: Letter (8.5" x 11")
    • DPI: 300
  2. Using Python with reportlab:

    from reportlab.pdfgen import canvas
    from reportlab.lib.pagesizes import letter
    from reportlab.pdfbase import pdfmetrics
    from reportlab.pdfbase.ttfonts import TTFont
    
    c = canvas.Canvas("source.pdf", pagesize=letter)
    
    # Register Arial font
    # pdfmetrics.registerFont(TTFont('Arial', 'Arial.ttf'))
    
    c.setFont("Helvetica", 12)
    text = open("ground_truth.txt").read()
    
    # Draw text with appropriate margins and line spacing
    y_position = 750
    for line in text.split('\n'):
        if y_position < 50:
            c.showPage()
            y_position = 750
        c.drawString(50, y_position, line)
        y_position -= 18
    
    c.save()
    

Expected WER

On a clean 300 DPI scan with Arial/Helvetica font, Tesseract should achieve WER < 2%.