47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
import fitz # PyMuPDF
|
|
import spacy
|
|
import os
|
|
from recruitment import models
|
|
|
|
|
|
nlp = spacy.load("en_core_web_sm")
|
|
|
|
def extract_text_from_pdf(pdf_path):
|
|
text = ""
|
|
with fitz.open(pdf_path) as doc:
|
|
for page in doc:
|
|
text += page.get_text()
|
|
return text
|
|
|
|
def extract_summary_from_pdf(pdf_path):
|
|
if not os.path.exists(pdf_path):
|
|
return {'error': 'File not found'}
|
|
|
|
text = extract_text_from_pdf(pdf_path)
|
|
doc = nlp(text)
|
|
summary = {
|
|
'name': doc.ents[0].text if doc.ents else '',
|
|
'skills': [chunk.text for chunk in doc.noun_chunks if len(chunk.text.split()) > 1],
|
|
'summary': text[:500]
|
|
}
|
|
return summary
|
|
|
|
|
|
def dashboard_callback(request, context):
|
|
total_jobs = models.Job.objects.count()
|
|
total_candidates = models.Candidate.objects.count()
|
|
jobs = models.Job.objects.all()
|
|
job_titles = [job.title for job in jobs]
|
|
job_app_counts = [job.candidates.count() for job in jobs]
|
|
|
|
context.update({
|
|
"total_jobs": total_jobs,
|
|
"total_candidates": total_candidates,
|
|
"job_titles": job_titles,
|
|
"job_app_counts": job_app_counts,
|
|
})
|
|
return context
|
|
|
|
|
|
|