Merge pull request #405 from Shikidwaja/community_contribution_day1

job recommendation based on the resume content.
This commit is contained in:
Ed Donner
2025-05-31 22:11:58 -04:00
committed by GitHub

View File

@@ -0,0 +1,104 @@
from openai import OpenAI
from dotenv import load_dotenv
import os
import pypdf
class ResumeBasedJobRecommendation:
def __init__(self, path: str):
self.resume_path = path
# method to read the content from the resume and use it for the user prompt
def read_resume(self):
"""method to read the content from the resume and use it for the user prompt.
Returns:
content (str): returns the content of the resume.
"""
try:
pdfreader = pypdf.PdfReader(self.resume_path)
data = ""
for page_number in range(pdfreader.get_num_pages()):
page = pdfreader.pages[page_number]
data += page.extract_text()
except FileNotFoundError as e:
print(f"Issue with the resume file path: {str(e)}")
return
except Exception as e:
print(f"Couldn't able to parse the pdf : {str(e)}")
return
return data
#
def message_prompt(self, data: str, job_sites: list, location: str):
"""method suggests the appropriate job roles and provides the search link from job sites based on users input of resume data, job boards and location.
Args:
data (str): resume content for user prompt
job_sites (list): job searching sites for user prompt
location (str): location of job search
Returns:
content (str): Provides summary of resume with suggested job roles and links using gpt 4.o model.
"""
self.message = [
{"role": "system",
"content": "You are an assistant that analysizes the resume data and summarize it. \
Based on the summarization, you suggest the appropriate job roles \
and provide the appropriate job search links for each suggested roles from the job sites based on filtering by the \
location provided. "
},
{
"role": "user",
"content": f"Below is my resume content, kindly look for the appropriate job openings in \
{job_sites} for location {location}:\n{data}"
}]
self.response = openai.chat.completions.create(model='gpt-4o-mini', messages=self.message)
return self.response.choices[0].message.content
if __name__ == '__main__':
# load the api key from .env and check if it is valid.
load_dotenv()
api_key = os.getenv('OPENAI_API_KEY')
if api_key is None:
print("No api key was found.")
exit()
elif not api_key.startswith('sk-proj-'):
print("api key is present but it is not matching with the openai api key pattern starting with sk-proj-. Please check it.")
exit()
elif api_key.strip() != api_key:
print("api key is good but it seems it has the spaces at starting or the end. Please check and remove it.")
exit()
else:
print("api key is found and it looks good.")
openai = OpenAI()
#Provide the valid resume path
file_path = input("Kindly enter the resume path:\n")
if not file_path:
print("Resume path is not provided. Kindly provide the valid path.")
exit()
obj = ResumeBasedJobRecommendation(file_path)
data = obj.read_resume()
if not data:
pass
else:
#provide the input for the job sites to search and valid job location
job_sites = input("Enter the job sites with space between each other: ")
if not job_sites:
print("Didn't provided the job sites to search for. Going with Linkedin, Indeed, Glassdoor and Naukri as defaults.")
job_sites = ['LinkedIn', 'Indeed', 'Naukri', 'Glassdoor']
else:
job_sites = job_sites.split(' ')
location = input("Enter the job location:")
if not location:
print("No location has been provided. Default will consider as United States.")
location = 'United States'
response = obj.message_prompt(data, job_sites, location)
print(response)