An intelligent, modern, and high-performance job board system that connects Job Seekers and Recruiters seamlessly. Unlike traditional job portals that require tedious manual data entry, this platform leverages Artificial Intelligence (NLP & Machine Learning) to automatically parse uploaded PDF resumes, extract technical skills, and generate real-time match scores for jobs.
- Custom Role-Based Authentication: Clean separation of privileges between Job Seekers and Recruiters.
- AI-Powered Resume Parsing: Automatic text extraction from PDF resumes using
PyPDF2. - Natural Language Processing (NLP): Auto-extraction of technical skills from resume text using
spaCy's Named Entity & Token parsing. - Machine Learning Matchmaker: Mathematically calculates the similarity percentage between a candidate's profile skills and job description requirements using
TF-IDF VectorizationandCosine Similarity. - Smart Recommendation Engine: Instantly recommends jobs with a match threshold greater than 5%, ordered from highest to lowest matching suitability.
- Automated Application System & Notifications: Triggers automatic email notification simulations to recruiters when candidates apply.
- Backend: Django (Python Web Framework)
- Database: SQLite (Relational Database)
- AI/ML Libraries:
- spaCy (Natural Language Processing)
- scikit-learn (Vectorization & Similarity algorithms)
- PyPDF2 (PDF Processing)
- Frontend: HTML5, CSS3, Django Templates
job_portal/
│
├── core/ # Project configuration settings
│ ├── settings.py # App registrations, auth configuration, mail settings
│ └── urls.py # Root URL routing configurations
│
├── jobs/ # Main application containing views, models, and AI engine
│ ├── models.py # Database Schemas (User, SeekerProfile, RecruiterProfile, Job)
│ ├── views.py # Controller logic (Signups, Job Posting, Recommendations)
│ ├── forms.py # Django Form definitions for clean UI inputs
│ ├── parser.py # Core AI Engine (Text Extraction, NLP Skill Extraction, ML Matching)
│ └── urls.py # Application level endpoints/routes
│
├── manage.py # Django management script
├── CODE_UNDERSTANDING.ipynb# Interactive Jupyter Notebook explaining code logic
└── README.md # Project documentation
Make sure you have Python 3.8+ installed on your system.
git clone <repository-url>
cd job_portal# Create virtual environment
python -m venv venv
# Activate virtual environment
# On Windows (PowerShell):
.\venv\Scripts\Activate.ps1
# On macOS/Linux:
source venv/bin/activatepip install -r requirements.txtNote: If
requirements.txtis not present, you can install the core packages manually:pip install django spacy scikit-learn PyPDF2 python -m spacy download en_core_web_sm
python manage.py makemigrations
python manage.py migratepython manage.py runserverVisit the web portal at http://127.0.0.1:8000/.
- Welcome Page: Users land on the portal and select whether they are a Job Seeker or a Recruiter.
- Recruiter Journey:
- Register/Login as a recruiter.
- Navigate to Post Job and input: Title, Description, Required Skills, and Location.
- Seeker Journey:
- Register as a Seeker and upload a PDF Resume.
- The backend's AI Engine runs instantly to read the PDF and parse the text to identify key skills (e.g.
python,django,sql).
- Matchmaking & Recommendation:
- Upon completion, the Seeker is redirected to Recommendations.
- The matching algorithm calculates the cosine similarity between the seeker's skills and all job requirements, ordering matches by the highest score.
- Job Application:
- Seekers review their recommendations or search manually, then click Apply.
- An email notification is automatically generated and output to the server console simulating recruiter alerting.
def extract_text_from_pdf(pdf_path):
text = ""
with open(pdf_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
for page in reader.pages:
text += page.extract_text()
return textnlp = spacy.load("en_core_web_sm")
def extract_skills(text):
doc = nlp(text)
skill_bank = ['python', 'django', 'sql']
tokens = [token.text.lower() for token in doc]
found_skills = [skill for skill in skill_bank if skill in tokens]
return ", ".join(found_skills)def calculate_match_score(resume_text, job_description):
text_list = [resume_text, job_description]
cv = TfidfVectorizer()
count_matrix = cv.fit_transform(text_list)
match_percentage = cosine_similarity(count_matrix)[0][1] * 100
return round(match_percentage, 2)- Dynamic Skill Bank: Extend the simple predefined skill list in
parser.pywith custom database storage or a pre-trained Named Entity Recognition (NER) pipeline. - Production Email Gateway: Connect Django's email configuration to SMTP engines like AWS SES or SendGrid.
- Advanced Recruiter Dashboard: Offer analytics graphs showing the distribution of candidates' match scores for posted jobs.
- Interactive UI: Implement dynamic frontend components or integrate styling systems (Tailwind CSS) for responsive dashboards.