Skip to main content

Production-ready resume parser with multi-threading support for PDF and DOCX files

Project description

Sereena Parser

PyPI version Python 3.8+ License: MIT

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 name
  • email: Validated email address
  • phone: Phone number
  • location: Geographic location

Education

  • degree: Degree type and field
  • institution: Educational institution
  • year: Graduation year
  • gpa: Grade point average (if available)

Experience

  • job_title: Position title
  • company: Company name
  • duration: Employment duration
  • description: 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.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📄 License

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

🛠️ Troubleshooting

Common Issues

  1. spaCy model not found: Run python -m spacy download en_core_web_sm
  2. PDF extraction issues: Install pdfplumber for better PDF support
  3. Memory issues: Reduce max_workers for 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sereena_parser-1.0.0.tar.gz (23.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sereena_parser-1.0.0-py3-none-any.whl (17.8 kB view details)

Uploaded Python 3

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

Hashes for sereena_parser-1.0.0.tar.gz
Algorithm Hash digest
SHA256 de553b13faad45aedd3feaf2ff6aa032705298445d317af908180bc1e92dfa81
MD5 f670fa3994e93994158730a24a4f6bde
BLAKE2b-256 53691532a53abf14f82695120f36c97f2a031c906d07f4f72a602ccbc1ce85cd

See more details on using hashes here.

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

Hashes for sereena_parser-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 45395d268728bbb649dbe6fb08d319562062d8ad60603dbd6ed9655302f7afa6
MD5 440d53173bd44d4c7af96c6488d0a376
BLAKE2b-256 1adbb4d74a224380f1006fe384df5d30aae9f3381d10c9234580e29af46acd82

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page