Spaces:
Runtime error
Runtime error
import gradio as gr | |
import PyPDF2 | |
import os | |
import openai | |
def extract_text_from_file(file_path): | |
# Get the file extension | |
file_extension = os.path.splitext(file_path)[1] | |
if file_extension == '.pdf': | |
with open(file_path, 'rb') as file: | |
# Create a PDF file reader object | |
reader = PyPDF2.PdfFileReader(file) | |
# Create an empty string to hold the extracted text | |
extracted_text = "" | |
# Loop through each page in the PDF and extract the text | |
for page_number in range(reader.getNumPages()): | |
page = reader.getPage(page_number) | |
extracted_text += page.extractText() | |
return extracted_text | |
elif file_extension == '.txt': | |
with open(file_path, 'r') as file: | |
# Just read the entire contents of the text file | |
return file.read() | |
else: | |
return "Unsupported file type" | |
def responce_from_ai(textjd, textcv): | |
resume = extract_text_from_file(textjd) | |
job_description = extract_text_from_file(textcv) | |
response = openai.Completion.create( | |
engine="text-davinci-003", | |
prompt=f""" | |
Given the job description and the resume, assess the matching percentage and approximate percentage of the resume for the job.**Job Description:**{job_description}**Resume:**{resume}**Matching Assessment:**Based on an analysis of the resume and the job description, | |
the overall matching percentage is estimated to be approximately [insert approximate percentage here]. | |
**Detailed Analysis:** | |
the result should be in this format: | |
matched percentage: [matching percentage] | |
reason : [reason for this result] | |
keywords : [matched key words from job_description and resume] | |
""", | |
temperature=0, | |
max_tokens=100, | |
n=1, | |
stop=None, | |
) | |
generated_text = response.choices[0].text.strip() | |
return generated_text | |
def matching_percentage(job_description_path, resume_path): | |
job_description_path = job_description_path.name | |
resume_path = resume_path.name | |
generated_text = responce_from_ai(job_description_path, resume_path) | |
return generated_text | |
with gr.Blocks(css="style.css",theme=gr.themes.Soft()) as app: | |
gr.HTML("""<img class="leftimage" align="left" src="https://companieslogo.com/img/orig/RAND.AS_BIG-0f1935a4.png?t=1651813778" alt="Image" width="210" height="210"> | |
<img class="rightimage" align="right" src="https://workllama.com/wp-content/uploads/2022/05/WL_Logo.svg" alt="Image" width="210" height="210">""") | |
with gr.Row(): | |
with gr.Column(elem_id="col-container"): | |
gr.HTML( | |
"""<br style="color:white;">""" | |
) | |
gr.HTML( | |
"""<h2 style="text-align:center; color:"white">Workllama Resume Matcher</h2> """ | |
) | |
gr.HTML("<br>") | |
with gr.Row(): | |
with gr.Column(scale=0.45, min_width=150, ): | |
jobDescription = gr.inputs.File(label="Job Description") | |
with gr.Column(scale=0.45, min_width=150): | |
resume = gr.inputs.File(label="Resume") | |
with gr.Column(scale=0.10, min_width=150): | |
find = gr.Button("Analyze") | |
with gr.Row(): | |
with gr.Column(scale=1.0, min_width=150): | |
output = gr.outputs.Textbox(label="Matching Percentage") | |
find.click(matching_percentage, [jobDescription, resume], [output]) | |
app.launch() | |