S
All projects
AI Resume Intelligence Engine logo
HR Technology2024·Architect & Engineer

AI Resume Intelligence Engine

Document AI for HR Data Extraction

A document-AI engine that parses resumes from PDF/DOCX, extracts employers, titles, skills and experience with confidence scores, matches resumes to jobs via semantic search, and generates standards-ready HR-XML.

PDF / DOCX parsing OCR-ready architecture Employer extraction Job title recognition Skill extraction Confidence scoring HR-XML generation Resume-to-job matching Semantic search Local LLM support

PDF · DOCX

Formats supported

Confidence

Per-field

Semantic

Matching

HR-XML

Output

Business challenge

HR systems need clean, structured employment history, but resumes arrive as messy PDFs, scans and DOCX files. Manual data entry is slow and error-prone, and downstream systems require a strict XML schema with traceable confidence.

What I built

I built a staged pipeline: normalize input, OCR-ready segmentation, extract entities (employers, titles, skills, dates), attach a confidence score to every field, match resumes to jobs via semantic search, and serialize to HR-XML. Low-confidence fields are flagged for human review, keeping humans in the loop where it matters.

Why it matters

Recruiting and HR platforms live and die by data quality. Bad extraction means bad matches and bad reporting. The engine had to turn arbitrary resume formats into trustworthy, structured data that both machines and human reviewers could rely on.

How it's designed

01Ingest
Upload APIFormat DetectionOCR-ready Normalizer
02Extract
Section SegmenterNER PipelineLocal LLM
03Score
Confidence ModelReview Flags
04Match
Embeddingspgvector Search
05Output
HR-XML SerializerValidation

Interface

Screenshot placeholder — drop product UI here

How the intelligence flows

  1. 01Normalize — detect format and convert PDF/DOCX (OCR-ready) to text.
  2. 02Segment — split into sections (experience, education, skills).
  3. 03Extract — NER + local LLM for employers, titles, skills and dates.
  4. 04Score — calibrated confidence per field, flagging low-confidence values.
  5. 05Embed & match — semantic resume-to-job matching via vector search.
  6. 06Serialize — emit standards-ready HR-XML.

How data is modeled

  • PostgreSQL tables for documents, extracted_records and confidence per field.
  • pgvector embeddings for resume-to-job semantic matching.
  • Job-state tracking for idempotent, resumable batch processing.
  • Object storage for source files with references back to extracted fields.

Key endpoints

POST/api/parseParse a resume file into structured, confidence-scored fields.
POST/api/matchMatch a parsed resume against a job description.
GET/api/searchSemantic search across parsed resumes.
GET/api/export/{id}.xmlExport a parsed resume as HR-XML.

Technologies

PythonFastAPIspaCyLocal LLMPostgreSQLpgvectorDocker

Key features

  • Multi-format ingestion — PDF, DOCX and OCR-ready scans.
  • Entity extraction — employers, titles, skills, dates.
  • Per-field confidence scoring with review flags.
  • Resume-to-job semantic matching.
  • HR-XML generation to a strict schema.
  • Local LLM support to keep PII in-house.

Challenges & trade-offs

Wildly inconsistent inputs

Resumes have no standard layout. A robust section segmenter plus fallback heuristics kept extraction accurate across formats.

Trustworthy confidence scoring

Every extracted field carries a calibrated confidence so downstream systems and reviewers know exactly what to trust.

OCR-ready without over-engineering

The pipeline was structured so image-only documents can flow through an OCR stage without reworking the extraction logic.

Code snippet

Confidence-scored extractionpython
def extract_employment(sections: list[Section]) -> list[EmploymentRecord]:
    records = []
    for block in find_experience(sections):
        employer, e_conf = ner.employer(block)
        title, t_conf = ner.title(block)
        start, end, d_conf = dates.parse(block)

        records.append(EmploymentRecord(
            employer=employer,
            title=title,
            start=start,
            end=end,
            confidence=min(e_conf, t_conf, d_conf),
            needs_review=min(e_conf, t_conf, d_conf) < 0.75,
        ))
    return records

How it ships

  • Containerized API + worker fleet with horizontal scaling for batch spikes.
  • PostgreSQL for job state and extracted records; object storage for source files.
  • Queue-backed processing with retries and dead-letter handling.

Security

  • PII-aware storage with encryption at rest.
  • Scoped access tokens for the ingestion API.
  • Audit trail linking every extracted field to its source document.

Scalability

  • Worker pool scales independently of the request API.
  • Idempotent jobs allow safe retries and reprocessing.
  • Streaming XML serialization avoids large in-memory documents.

Future roadmap

Layout-aware transformer models for harder scans.
Active-learning loop from reviewer corrections.
Multi-language resume support.

Lessons learned

Confidence scores turn an AI pipeline into a system people will actually adopt.
Designing for a human-in-the-loop from the start is the fastest path to accuracy.