Spaces:
Running
Running
File size: 1,756 Bytes
5dec17e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
from qdrant_client import QdrantClient
from ats_optimizer.data_models.resume import Resume
from ats_optimizer.data_models.job_description import JobDescription
# from utils.logger import logger
# from ..utils.logger import logger
from ats_optimizer.utils.logger import logger
class ResumeAnalyzer:
def __init__(self):
self.client = QdrantClient(":memory:")
self.client.set_model("BAAI/bge-base-en")
def parse_resume(self, file_path: str) -> Resume:
"""Step 1: Parse resume with formatting preservation"""
# Uses python-docx for Word docs, pdfminer for PDFs
raw_text, formatting = FileHandler.extract_with_formatting(file_path)
return Resume(raw_text, formatting)
def parse_jd(self, file_path: str) -> JobDescription:
"""Step 2: Analyze job description"""
raw_text = FileHandler.extract_text(file_path)
return JobDescription(raw_text)
def calculate_ats_score(self, resume: Resume, jd: JobDescription) -> dict:
"""Step 3: Comprehensive ATS scoring"""
# Enhanced scoring with 5 factors
scores = {
'keyword': self._keyword_match_score(resume, jd),
'section': self._section_completeness(resume, jd),
'vector': self._vector_similarity(resume, jd),
'experience': self._experience_match(resume, jd),
'education': self._education_match(resume, jd)
}
scores['overall'] = sum(w * s for w, s in [
(0.3, scores['keyword']),
(0.2, scores['section']),
(0.25, scores['vector']),
(0.15, scores['experience']),
(0.1, scores['education'])
])
return scores |