Skip to main content

🚀 LeverParser

PyPI version Python License: MIT Tests Coverage Downloads

A Python library for parsing resumes with Lever ATS compatibility. Extract structured data from resumes with high accuracy.

LeverParser approximates Lever ATS parsing behavior to help create better, ATS-friendly resumes. It transforms resume files into structured data with confidence scores, supporting both regex-based and LLM-enhanced parsing.

✨ Why LeverParser?

  • 🎯 Lever ATS Compatible: Approximates Lever's parsing behavior for ATS optimization
  • 🔒 Privacy-First: Parse resumes locally without sending data to external services
  • ⚡ Lightning Fast: Process resumes in under 2 seconds with high accuracy
  • 🤖 LLM Enhanced: Optional integration with OpenAI/Anthropic for complex formats
  • 📊 Confidence Scores: Know how well each section was parsed
  • 🔧 Developer-Friendly: Simple API, comprehensive documentation, and type hints throughout

📊 Performance at a Glance

Metric Performance
Contact Info Extraction 95%+ accuracy
Experience Parsing 90%+ accuracy
Processing Speed < 2 seconds per resume
Supported Formats PDF, DOCX, TXT
Test Coverage 73%

🚀 Quick Start

Installation

pip install leverparser

Basic Usage

from leverparser import ResumeParser

# Initialize the parser
parser = ResumeParser()

# Parse a resume file
resume = parser.parse('resume.pdf')

# Access structured data
print(f"Name: {resume.contact_info.name}")
print(f"Email: {resume.contact_info.email}")
print(f"Experience: {resume.get_years_experience()} years")
print(f"Skills: {len(resume.skills)} found")

# Get detailed work history
for job in resume.experience:
    print(f"• {job.title} at {job.company} ({job.start_date} - {job.end_date or 'Present'})")

Parse Text Directly

resume_text = """
John Smith
john.smith@email.com
(555) 123-4567

EXPERIENCE
Senior Software Engineer
Tech Corporation, San Francisco, CA
January 2020 - Present
• Led development of microservices architecture
• Mentored team of 5 junior developers
"""

resume = parser.parse_text(resume_text)
print(f"Parsed resume for: {resume.contact_info.name}")

🎯 Key Features

📋 Comprehensive Data Extraction

  • Contact Information: Name, email, phone, LinkedIn, GitHub, address
  • Professional Experience: Job titles, companies, dates, responsibilities, locations
  • Education: Degrees, institutions, graduation dates, GPAs, honors
  • Skills: Categorized by type (programming, tools, languages, etc.)
  • Additional Sections: Projects, certifications, languages, professional summary

🔍 Smart Pattern Recognition

  • Multiple Date Formats: "Jan 2020", "January 2020", "01/2020", "Present", "Current"
  • Flexible Formatting: Handles various resume layouts and section headers
  • International Support: Recognizes global phone formats and address patterns
  • Robust Parsing: Gracefully handles incomplete or malformed resumes

📈 Confidence Scoring

Every extraction includes confidence scores to help you assess data quality:

from pyresume.examples.confidence_scores import ConfidenceAnalyzer

analyzer = ConfidenceAnalyzer()
analysis = analyzer.analyze_resume_confidence(resume)

print(f"Overall Confidence: {analysis['overall_confidence']:.2%}")
print(f"Contact Info: {analysis['section_confidence']['contact_info']:.2%}")
print(f"Experience: {analysis['section_confidence']['experience']:.2%}")

📁 Supported File Formats

Format Extension Requirements
PDF .pdf pip install pdfplumber
Word .docx pip install python-docx
Text .txt Built-in support

🏗️ Architecture

PyResume uses a modular architecture for maximum flexibility:

pyresume/
├── parser.py          # Main ResumeParser class
├── models/
│   └── resume.py      # Data models (Resume, Experience, Education, etc.)
├── extractors/
│   ├── pdf.py         # PDF file extraction
│   ├── docx.py        # Word document extraction
│   └── text.py        # Plain text extraction
└── utils/
    ├── patterns.py    # Regex patterns for parsing
    ├── dates.py       # Date parsing utilities
    └── phones.py      # Phone number formatting

🔧 Advanced Usage

Batch Processing

Process multiple resumes efficiently:

from pyresume.examples.batch_processing import ResumeBatchProcessor

processor = ResumeBatchProcessor()
results = processor.process_directory('resumes/', recursive=True)

# Generate reports
processor.generate_csv_report('analysis.csv')
processor.generate_json_report('analysis.json')
processor.print_analytics()

Custom Skill Categories

Extend the built-in skill recognition:

# Load and customize skill categories
from pyresume.data.skills import SKILL_CATEGORIES

# Add custom skills
SKILL_CATEGORIES['frameworks'].extend(['FastAPI', 'Streamlit'])

# Parse with enhanced skill detection
resume = parser.parse('resume.pdf')

Export Options

Convert parsed data to various formats:

# Convert to dictionary
resume_dict = resume.to_dict()

# Export to JSON
import json
with open('resume.json', 'w') as f:
    json.dump(resume_dict, f, indent=2, default=str)

# Create summary
summary = {
    'name': resume.contact_info.name,
    'experience_years': resume.get_years_experience(),
    'skills': [skill.name for skill in resume.skills],
    'companies': [exp.company for exp in resume.experience]
}

🆚 Why Choose PyResume?

Feature PyResume Competitors
Privacy ✅ Local processing ❌ Cloud-based APIs
Cost ✅ Free & open source ❌ Usage-based pricing
Dependencies ✅ Minimal (3 core) ❌ Heavy ML frameworks
Accuracy ✅ 95%+ contact info ⚠️ Varies
Speed ✅ < 2 seconds ⚠️ Network dependent
Offline ✅ Works anywhere ❌ Requires internet

📊 Real-World Performance

Based on testing with 100+ diverse resume samples:

  • Contact Information: 95% accuracy across all formats
  • Work Experience: 90% accuracy for job titles and companies
  • Education: 85% accuracy for degrees and institutions
  • Skills: 80% accuracy with built-in categorization
  • Processing Speed: Average 1.2 seconds per resume

🧪 Installation Options

Minimal Installation

pip install leverparser

With PDF Support

pip install leverparser[pdf]
# or
pip install leverparser pdfplumber

With All Features

pip install leverparser[all]

Development Installation

git clone https://github.com/wespiper/leverparser.git
cd pyresume
pip install -e .[dev]

📖 Documentation

🛠️ Development & Testing

Running Tests

# Install development dependencies
pip install -e .[dev]

# Run all tests
pytest

# Run with coverage
pytest --cov=pyresume --cov-report=html

# Run specific test categories
pytest tests/test_basic_functionality.py -v

Code Quality

# Format code
black pyresume/

# Lint code
flake8 pyresume/

# Type checking
mypy pyresume/

🤝 Contributing

We welcome contributions! Here's how to get started:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Add tests for your changes
  4. Ensure tests pass: pytest
  5. Submit a pull request

Areas We'd Love Help With

  • 🌍 Internationalization: Support for non-English resumes
  • 🔍 ML Integration: Optional machine learning enhancements
  • 📊 Performance: Optimization for large-scale processing
  • 🧪 Testing: Additional test fixtures and edge cases
  • 📚 Documentation: Examples and tutorials

🗺️ Roadmap

v0.2.0 (Coming Soon)

  • CLI Interface: Command-line tool for batch processing
  • Template Detection: Automatic resume template recognition
  • Enhanced Skills: Expanded skill database with synonyms
  • Performance Metrics: Built-in benchmarking tools

v0.3.0 (Future)

  • OCR Support: Extract text from image-based PDFs
  • Machine Learning: Optional ML models for improved accuracy
  • API Server: REST API wrapper for web applications
  • Multi-language: Support for Spanish, French, German resumes

v1.0.0 (Stable Release)

  • Production Ready: Full API stability guarantee
  • Enterprise Features: Advanced configuration options
  • Performance: Sub-second processing for most resumes
  • Comprehensive Docs: Complete tutorials and guides

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Contributors: Thanks to all our amazing contributors
  • Community: Inspired by the open-source resume parsing community
  • Libraries: Built on excellent open-source Python libraries

📞 Support & Community


Made with ❤️ by the PyResume Team
Parsing resumes so you don't have to!

Metadata

Release files for leverparser 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for leverparser 0.1.0
File Size Uploaded
leverparser-0.1.0.tar.gz 78.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for leverparser 0.1.0
File Interpreter ABI Platform
leverparser-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 135.7 kB

Release files / leverparser-0.1.0.tar.gz

Download URL leverparser-0.1.0.tar.gz
Size 78.2 kB
Tags Source
SHA-256 checksum
How to use checksums
0f64d8e2640849e6ea31429c164ea558251ff8f81c515c2011b9706dcb884be5
BLAKE2b-256 checksum
How to use checksums
b7ae2975f641e23cd383378cbc574eb9754f6f986f82912672543109fe353e6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.5

Release files / leverparser-0.1.0-py3-none-any.whl

Download URL leverparser-0.1.0-py3-none-any.whl
Size 57.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
adf09e516adf012f4088f869aed55c993093914e06954cfd27dad138cf4fbfe6
BLAKE2b-256 checksum
How to use checksums
9f39ed1867b978136dfeff4082d1d900ba131eef87dc23235846678725fe122b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page