AI Job Portal 90%+ extraction accuracy
An AI-powered job portal that reads resumes and job descriptions the way a person would, matching candidates to roles without regex or rule-based parsing.
The problem
Job portals live and die on how well they can turn a resume and a job description into structured facts — skills, education, experience — and then match the two. The standard approach is regex and rule-based parsing, which is brittle against the enormous variety of ways people actually write resumes: different section headers, inconsistent formatting, skills mentioned in prose instead of a bulleted list. Rules that work on one resume template fail quietly on the next.
What I did
I built a Flask-based job portal where candidates can upload a resume and receive job recommendations, while employers can get ranked candidates for a job posting. The extraction step uses prompt engineering with an LLM instead of pattern matching, allowing it to extract skills, education, and experience regardless of how the information is structured.
To make that extraction more reliable, I paired it with Retrieval-Augmented Generation (RAG): relevant context is retrieved from a structured skills database and fed to Mistral alongside the prompt, grounding the extraction instead of leaving the model to guess. I initially used Mistral through the Hugging Face API, but I also downloaded the open-source model and ran it locally through PyTorch for testing and to evaluate latency. This was a deliberate choice over the frontier, API-only models available at the time: using an open-source model that I could host myself meant no per-call cost or external dependency, while giving me full control over how it was prompted and integrated. It also helped me work toward a more standardized approach to extraction.
PostgreSQL stored candidate profiles, job postings, and applications, and the same database was used to run the matching queries.
What I gave up
I did not fine-tune Mistral. Fine-tuning would likely have pushed accuracy even higher, but it would also mean retraining every time the extraction schema changed and maintaining a training pipeline for what is, at its core, a data-extraction problem. Prompt engineering combined with RAG got the extraction accuracy above 90% without any of that, and I could iterate on prompts in minutes instead of waiting for training runs.
What happened
The approach held up well enough to write up formally: it became "Leveraging RAG for Effective Prompt Engineering in Job Portals," published in IEEE Xplore. The headline result is the accuracy figure — comfortably ahead of what regex or rule-based extraction manages on the same inputs, particularly on the resumes that don't follow a standard template.
What I'd do differently
My focus was the research: proving the approach worked and getting it written up. The code only had to be good enough to run the experiments and back up the paper's results, so it stayed a prototype and was never cleaned up for a public repo. That got the paper published, but it means the paper answers "does it work," not "can you see how." If I rebuilt this today I'd treat the code as part of the deliverable from the start and bring it up to a publishable standard alongside the write-up.