Production-ready resume parser with multi-threading support for PDF and DOCX files
Project description
Sereena Parser
Sereena Parser is a production-ready resume parser with multi-threading support that extracts structured information from PDF and DOCX files using advanced NLP techniques.
🚀 Features
- Multi-format Support: Parse PDF and DOCX files with high accuracy
- Advanced NLP: Uses spaCy for named entity recognition and text processing
- Multi-threading: Concurrent processing for batch operations
- Comprehensive Extraction:
- Personal information (name, email, phone, location)
- Skills and technologies
- Education details
- Work experience
- Certifications
- Production Ready: Robust error handling, logging, and performance optimization
- Easy Integration: Simple API for seamless integration into existing systems
📦 Installation
pip install sereena-parser
Dependencies
After installation, you'll need to download the spaCy language model:
python -m spacy download en_core_web_sm
🛠️ Usage
Basic Usage
from sereena_parser import ResumeParser
# Initialize the parser
parser = ResumeParser()
# Parse a single resume
file_path, resume_data = parser.parse_single_resume("resume.pdf")
if resume_data:
print(f"Name: {resume_data.personal_info.name}")
print(f"Email: {resume_data.personal_info.email}")
print(f"Skills: {resume_data.skills}")
print(f"Experience: {len(resume_data.experience)} positions")
Batch Processing
from sereena_parser import ResumeParser
# Initialize parser with custom thread count
parser = ResumeParser(max_workers=8)
# Parse multiple resumes
resume_files = ["resume1.pdf", "resume2.docx", "resume3.pdf"]
results = parser.parse_multiple_resumes(resume_files)
# Export results to JSON
parser.export_results(results, "parsed_resumes.json")
Command Line Interface
# Parse single file
sereena-parser resume.pdf
# Parse multiple files with custom output
sereena-parser *.pdf *.docx -o results.json -w 8
# Verbose output
sereena-parser resume.pdf --verbose
📊 Data Structure
The parser returns structured data in the following format:
@dataclass
class ResumeData:
personal_info: PersonalInfo # Name, email, phone, location
skills: List[str] # Technical skills
education: List[Education] # Education history
experience: List[Experience] # Work experience
certifications: List[str] # Certifications
languages: List[str] # Languages
summary: Optional[str] # Brief summary
raw_text: Optional[str] # Raw extracted text
🎯 Key Components
PersonalInfo
name: Extracted full nameemail: Validated email addressphone: Phone numberlocation: Geographic location
Education
degree: Degree type and fieldinstitution: Educational institutionyear: Graduation yeargpa: Grade point average (if available)
Experience
job_title: Position titlecompany: Company nameduration: Employment durationdescription: Job description
🔧 Configuration
Custom Thread Count
# For heavy workloads
parser = ResumeParser(max_workers=16)
Logging Configuration
import logging
logging.getLogger('sereena_parser').setLevel(logging.DEBUG)
📈 Performance
- Multi-threading: Process multiple resumes concurrently
- Optimized Extraction: Smart text extraction with fallback methods
- Memory Efficient: Processes files without loading entire datasets into memory
- Speed: ~2-5 seconds per resume depending on complexity
🧪 Testing
# Install development dependencies
pip install sereena-parser[dev]
# Run tests
pytest tests/
📋 Requirements
- Python 3.8+
- spaCy English model (
en_core_web_sm) - PyPDF2, pdfplumber (PDF processing)
- python-docx (DOCX processing)
- pandas (data manipulation)
- email-validator (email validation)
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🛠️ Troubleshooting
Common Issues
- spaCy model not found: Run
python -m spacy download en_core_web_sm - PDF extraction issues: Install
pdfplumberfor better PDF support - Memory issues: Reduce
max_workersfor large batch processing
Support
For issues and questions, please create an issue on GitHub.
🔮 Roadmap
- Support for more file formats (TXT, RTF)
- Enhanced skill categorization
- Resume scoring and ranking
- Integration with popular HR systems
- Docker container support
- Web API endpoint
Sereena Parser - Making resume parsing simple, fast, and reliable! 🎯
Replace YOUR_NEW_TOKEN_HERE with actual token
twine upload --repository-url https://test.pypi.org/legacy/
--username token
--password
pypi-AgEIcHlwaS5vcmcCJDZmMWQ5MWFjLTdkYTgtNDRiNi1iM2FhLWY2NThkMDUyODA0MwACKlszLCI3MzU3MTk3Mi0zOGZmLTRhMDUtYmNjZi1iMzhhMjA3YjVjYTAiXQAABiCouekgf6PHSlywlrWMoF0RZ0JuPZRRWq77SAEdbtkjfw
dist/*
--verbose
Project details
Release history Release notifications | RSS feed
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 sereena_parser-1.0.0.tar.gz.
File metadata
- Download URL: sereena_parser-1.0.0.tar.gz
- Upload date:
- Size: 23.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
de553b13faad45aedd3feaf2ff6aa032705298445d317af908180bc1e92dfa81
|
|
| MD5 |
f670fa3994e93994158730a24a4f6bde
|
|
| BLAKE2b-256 |
53691532a53abf14f82695120f36c97f2a031c906d07f4f72a602ccbc1ce85cd
|
File details
Details for the file sereena_parser-1.0.0-py3-none-any.whl.
File metadata
- Download URL: sereena_parser-1.0.0-py3-none-any.whl
- Upload date:
- Size: 17.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
45395d268728bbb649dbe6fb08d319562062d8ad60603dbd6ed9655302f7afa6
|
|
| MD5 |
440d53173bd44d4c7af96c6488d0a376
|
|
| BLAKE2b-256 |
1adbb4d74a224380f1006fe384df5d30aae9f3381d10c9234580e29af46acd82
|