<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Resume Analyzer with AWS]]></title><description><![CDATA[Resume Analyzer with AWS]]></description><link>https://resumeanalyzer.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 25 Oct 2026 14:21:52 GMT</lastBuildDate><atom:link href="https://resumeanalyzer.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Building "Resume Analyzer" – An AI-Powered Resume Matching Tool Using Stream lit & AWS]]></title><description><![CDATA[Hey everyone!I’m excited to share a project I’ve built recently called Resume Analyzer — an AI-powered tool that helps match resumes with job descriptions…]]></description><link>https://resumeanalyzer.hashnode.dev/building-resume-analyzer-an-ai-powered-resume-matching-tool-using-stream-lit-and-aws</link><guid isPermaLink="true">https://resumeanalyzer.hashnode.dev/building-resume-analyzer-an-ai-powered-resume-matching-tool-using-stream-lit-and-aws</guid><category><![CDATA[#fullstackproject]]></category><category><![CDATA[#resumetools]]></category><category><![CDATA[Python]]></category><category><![CDATA[Machine Learning]]></category><category><![CDATA[streamlit]]></category><category><![CDATA[AWS]]></category><category><![CDATA[job search]]></category><category><![CDATA[cloud deployment]]></category><dc:creator><![CDATA[Mokka Madan Mohan]]></dc:creator><pubDate>Fri, 11 Jul 2025 15:06:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752246076237/e259f9d8-0599-4c45-a143-88cc360a4264.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey everyone!<br />I’m excited to share a project I’ve built recently called <strong>Resume Analyzer</strong> — an AI-powered tool that helps match resumes with job descriptions using natural language processing. The idea was born out of the struggle many freshers face in getting noticed by recruiters, especially when their resumes don’t reflect job-relevant keywords.</p>
<p>This post outlines what it does, how I built it, and how it can help students and job seekers optimize their resumes for better chances of selection.</p>
<hr />
<h2 id="heading-the-idea">The Idea</h2>
<p>Most candidates submit a generic resume everywhere. But many companies use keyword-matching algorithms or applicant tracking systems (ATS) to filter resumes before a human even sees them. So, I decided to build a smart tool that:</p>
<ul>
<li><p>Uploads your resume as a PDF</p>
</li>
<li><p>Accepts a job description</p>
</li>
<li><p>Highlights which keywords are missing</p>
</li>
<li><p>Calculates a matching success score</p>
</li>
</ul>
<p>All of this — in seconds — via a simple browser app!</p>
<hr />
<h2 id="heading-tech-stack">Tech Stack</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Frontend UI</td><td>Backend Logic</td><td>Storage &amp; Deployment</td></tr>
</thead>
<tbody>
<tr>
<td>Streamlit</td><td>Python (Text Matching)</td><td>AWS S3 (Resume Storage)</td></tr>
<tr>
<td>HTML + CSS (via Streamlit)</td><td>Text Tokenization &amp; NLP</td><td>Deployed on Render</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-features">Features</h2>
<ul>
<li><p>Upload resume in PDF format</p>
</li>
<li><p>Paste any job description text</p>
</li>
<li><p>Compares resume against JD using token-based matching</p>
</li>
<li><p>Uploads resume securely to an AWS S3 bucket</p>
</li>
<li><p>Shows success rate based on keyword matching</p>
</li>
<li><p>Suggests missing keywords to improve the resume</p>
</li>
<li><p>Simple, clean, and fast user experience</p>
</li>
</ul>
<hr />
<h2 id="heading-how-it-works-end-to-end">How It Works (End-to-End)</h2>
<h3 id="heading-1-upload-amp-parse-resume">1. Upload &amp; Parse Resume</h3>
<p>Users upload their resume in PDF format. Instead of using OCR (which is often inaccurate for digital PDFs and needs system-level dependencies), we extract <strong>direct text</strong> using libraries like PyMuPDF (fitz) or PDFMiner. This ensures more reliable and faster extraction.</p>
<h3 id="heading-2-match-against-job-description">2. Match Against Job Description</h3>
<p>We take the pasted JD text, clean and tokenize both the JD and the resume, remove stopwords, and perform intersection matching to calculate:</p>
<ul>
<li><p><strong>Matched keywords</strong></p>
</li>
<li><p><strong>Success rate (percentage match)</strong></p>
</li>
<li><p><strong>Missing terms to improve resume</strong></p>
</li>
</ul>
<h3 id="heading-3-store-resume-in-aws-s3">3. Store Resume in AWS S3</h3>
<p>We also upload the file to an AWS S3 bucket to simulate real-world enterprise workflows where resumes are stored for future reference or ML training.</p>
<hr />
<h2 id="heading-file-structure">File Structure</h2>
<pre><code class="lang-plaintext">bashCopyEditresume-analyzer/
│
├── app.py               
├── jd_matcher.py        
├── resumeparser.py      
├── requirements.txt     
├── packages.txt    
├── setup.sh             
├── render.yaml
</code></pre>
<hr />
<h2 id="heading-key-concepts-used">Key Concepts Used</h2>
<ul>
<li><p><strong>Set-based keyword matching</strong></p>
</li>
<li><p><strong>Stopword removal</strong></p>
</li>
<li><p><strong>AWS S3 file upload with boto3</strong></p>
</li>
<li><p><strong>PDF text parsing with PyMuPDF</strong></p>
</li>
<li><p><strong>Dynamic UI with Streamlit</strong></p>
</li>
<li><p><strong>Render deployment pipeline</strong></p>
</li>
</ul>
<hr />
<h2 id="heading-challenges-faced">Challenges Faced</h2>
<ul>
<li><p>Avoiding system-level dependencies like Tesseract OCR for simplicity</p>
</li>
<li><p>Cleaning the text for better token matching</p>
</li>
<li><p>Securely integrating AWS S3 for file uploads</p>
</li>
<li><p>Ensuring the app works smoothly on cloud (Render)</p>
</li>
</ul>
<hr />
<h2 id="heading-what-i-learned">What I Learned</h2>
<ul>
<li><p>Building cloud-hosted tools with a simple UI using Streamlit</p>
</li>
<li><p>Working with AWS S3 via Python's <code>boto3</code></p>
</li>
<li><p>Designing resume matching logic without complex ML models</p>
</li>
<li><p>Deploying full apps with environment configs on Render</p>
</li>
</ul>
<hr />
<h2 id="heading-live-demo">Live Demo</h2>
<p><a target="_blank" href="https://resume-analyzer-ocr-aws.onrender.com">Visit the Live App</a></p>
<hr />
<h2 id="heading-github-repo">GitHub Repo</h2>
<p><a target="_blank" href="https://github.com/MadanMohan-M/resume-analyzer-ocr-aws">View Source Code on GitHub</a></p>
<hr />
<h2 id="heading-future-improvements">Future Improvements</h2>
<ul>
<li><p>Add basic ML-based semantic matching</p>
</li>
<li><p>Save and download improved resumes</p>
</li>
<li><p>User authentication</p>
</li>
<li><p>History tracking of uploaded resumes</p>
</li>
</ul>
<hr />
<h2 id="heading-final-thoughts">Final Thoughts</h2>
<p>This project is a great example of how simple technologies — used right — can create powerful tools. If you're a fresher or student looking to improve your resume, try it out! And if you're a developer, feel free to fork and build on top of it.</p>
<p>Thanks for reading!<br />— <em>Mokka Madan Mohan</em></p>
]]></content:encoded></item></channel></rss>