AI-powered resume parser with parallel processing for multiple file formats (PDF, DOCX, images, etc.)
Project description
ResumeParser Pro 🚀
Production-ready AI-powered resume parser with parallel processing capabilities. Extract structured data from resumes in PDF, DOCX, TXT, images (PNG, JPG), HTML, and ODT formats using state-of-the-art language models.
🌟 Features
- 🤖 AI-Powered: Uses advanced language models (GPT, Gemini, Claude, etc.) for high-accuracy extraction.
- ⚡ Parallel Processing: Process multiple resumes simultaneously, significantly speeding up bulk operations.
- 📊 Structured Output: Returns clean, Pydantic-validated JSON data for easy integration.
- 🎯 High Accuracy: Extracts over 20 distinct fields, including categorized skills and work duration in months.
- 📁 Multi-Format Support: Natively handles PDF, DOCX, and TXT, with optional support for images (OCR), HTML, and ODT files.
- 📈 Production Ready: Features robust error handling, logging, and clear, structured results.
- 🔌 Easy Integration: A simple and intuitive API gets you started in just a few lines of code.
🚀 Quick Start
Installation
For core functionality (PDF, DOCX, TXT), install the base package:
pip install ai-resume-parser
For full functionality, including support for images, HTML, and ODT files (recommended):
pip install ai-resume-parser[full]
See the "Supported File Formats" section for more specific installation options.
Basic Usage
It only takes a few lines to parse your first resume.
from resumeparser_pro import ResumeParserPro
# Initialize the parser with your chosen AI provider and API key
parser = ResumeParserPro(
provider="google_genai",
model_name="gemini-2.0-flash", # Or "gpt-4o-mini", "claude-3-5-sonnet", etc.
api_key="your-llm-provider-api-key"
)
# Parse a single resume file
# Supports .pdf, .docx, .txt, .png, .jpg, and more
result = parser.parse_resume("path/to/your/resume.pdf")
# Check if parsing was successful and access the data
if result.success:
print(f"✅ Resume parsed successfully!")
print(f"Name: {result.resume_data.contact_info.full_name}")
print(f"Total Experience: {result.resume_data.total_experience_months} months")
print(f"Industry: {result.resume_data.industry}")
# You can also get a quick summary
# print(result.get_summary()) # Assuming you add this convenience method
# Or export the full data to a dictionary
# resume_dict = result.model_dump()
else:
print(f"❌ Parsing failed: {result.error_message}")
Batch Processing
Process multiple resumes in parallel for maximum speed.
# Process multiple resumes at once
file_paths = ["resume1.pdf", "resume2.docx", "scanned_resume.png"]
results = parser.parse_batch(file_paths)
# Filter for only the successfully parsed resumes
successful_resumes = parser.get_successful_resumes(results)
print(f"Successfully parsed {len(successful_resumes)} out of {len(file_paths)} resumes.")
📁 Supported File Formats
ResumeParser Pro supports a wide range of file formats. For formats beyond PDF, DOCX, and TXT, you need to install optional dependencies.
| Format | Extensions | Required Installation Command |
|---|---|---|
| Core Formats | .pdf, .docx, .txt |
pip install ai-resume-parser |
| Images (OCR) | .png, .jpg, .jpeg |
pip install ai-resume-parser[ocr] |
| HTML | .html, .htm |
pip install ai-resume-parser[html] |
| OpenDocument | .odt |
pip install ai-resume-parser[odt] |
❗️ Important Note for Image Parsing:
To parse images (.png, .jpg), you must have the Google Tesseract OCR engine installed on your system. This is a separate step from the pip installation.
📊 Example Parsed Resume Data
The parser returns a structured ParsedResumeResult object. The core data is in result.resume_data, which follows a detailed Pydantic schema.
{
'file_path': 'resume.pdf',
'success': True,
'resume_data': {
'contact_info': {
'full_name': 'Jason Miller',
'email': 'email@email.com',
'phone': '+1386862',
'location': 'Los Angeles, CA 90291, United States',
'linkedin': 'https://www.linkedin.com/in/jason-miller'
},
'professional_summary': 'Experienced Amazon Associate with five years’ tenure...',
'skills': [
{'category': 'Technical Skills', 'skills': ['Picking', 'Packing', 'Inventory Management']}
],
'work_experience': [{
'job_title': 'Amazon Warehouse Associate',
'company': 'Amazon',
'start_date': '2021-01',
'end_date': '2022-07',
'duration_months': 19,
'description': 'Performed all warehouse laborer duties...',
'achievements': ['Consistently maintained picking/packing speeds in the 98th percentile.']
}],
'education': [{
'degree': 'Associates Degree in Logistics and Supply Chain Fundamentals',
'institution': 'Atlanta Technical College'
}],
'total_experience_months': 43,
'industry': 'Logistics & Supply Chain',
'seniority_level': 'Mid-level'
},
'parsing_time_seconds': 3.71,
'timestamp': '2025-07-25T15:19:50.614831'
}
🎯 Supported AI Providers
The library is built on LangChain, so it supports a vast ecosystem of LLM providers. Here are some of the most common ones:
| Provider | Example Models | Setup |
|---|---|---|
gemini-2.0-flash, gemini-1.5-pro |
provider="google_genai" |
|
| OpenAI | gpt-4o, gpt-4o-mini, gpt-4-turbo |
provider="openai" |
| Anthropic | claude-3-5-sonnet-20240620, claude-3-opus |
provider="anthropic" |
| Azure OpenAI | gpt-4, gpt-35-turbo |
provider="azure_openai" |
| AWS Bedrock | Claude, Llama, Titan models | provider="bedrock" |
| Ollama | Local models like llama3, codellama |
provider="ollama" |
Full list: See the LangChain Chat Model Integrations for a complete list of supported providers and model names.
Provider Usage Examples
# Using OpenAI's GPT-4o-mini
parser = ResumeParserPro(provider="openai", model_name="gpt-4o-mini", api_key="your-openai-key")
# Using a local model with Ollama (no API key needed)
parser = ResumeParserPro(provider="ollama", model_name="llama3:8b", api_key="NA")
# Using Anthropic's Claude 3.5 Sonnet
parser = ResumeParserPro(provider="anthropic", model_name="claude-3-5-sonnet-20240620", api_key="your-anthropic-key")
🛠️ Advanced Configuration
You can customize the parser's behavior during initialization.
parser = ResumeParserPro(
provider="openai",
model_name="gpt-4o-mini",
api_key="your-api-key",
max_workers=10, # Increase for faster batch processing
temperature=0.0, # Set to 0.0 for maximum consistency
)
🤝 Contributing
Contributions are highly welcome! Please feel free to submit a pull request or open an issue for bugs, feature requests, or suggestions.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🆘 Support
- 📖 Documentation: Check the code and examples in this repository.
- 🐛 Issue Tracker: Report bugs or issues here.
- 💬 Discussions: Ask questions or share ideas in our Discussions tab.
Built with ❤️ for the recruitment and HR community.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_resume_parser-1.0.6.tar.gz.
File metadata
- Download URL: ai_resume_parser-1.0.6.tar.gz
- Upload date:
- Size: 14.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
868467a4478567d28201bdf194f5acbf4f91a3d92d8c16c0be39489a05270965
|
|
| MD5 |
4e571fea9f02469544ff63ad70b78173
|
|
| BLAKE2b-256 |
3d8eab6760e1aebeeb14249b960b6d659264383d5e1978813dcf1c66141c873f
|
File details
Details for the file ai_resume_parser-1.0.6-py3-none-any.whl.
File metadata
- Download URL: ai_resume_parser-1.0.6-py3-none-any.whl
- Upload date:
- Size: 15.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d85f6e2787072664a1599dc1466ea45fcd96331bc253beb376170d4210c2b782
|
|
| MD5 |
1b832816284ec51b0c1e58491a8c63d8
|
|
| BLAKE2b-256 |
9ac7b00b86fcee84aa9471bdb4a7b49147fbe7583b0b40293e380f34249389d9
|