Spaces:
Runtime error
Runtime error
File size: 5,357 Bytes
c5002df |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 |
import gradio as gr
import PyPDF2
import os
import openai
import re
import plotly.graph_objects as go
class ResumeAnalyser:
def __init__(self):
pass
def extract_text_from_file(self,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(self,textjd, textcv):
resume = self.extract_text_from_file(textjd)
job_description = self.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 to 100 and if 100 percentage not matched mention the remaining percentage with reason. **Job Description:**{job_description}**Resume:**{resume}
**Detailed Analysis:**
the result should be in this format:
Matched Percentage: [matching percentage].
Reason : [reason for Matched Percentage].
Skills To Improve : [Mention the skills to improve and get 100 percentage matching].
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()
print(generated_text)
return generated_text
def matching_percentage(self,job_description_path, resume_path):
job_description_path = job_description_path.name
resume_path = resume_path.name
generated_text = self.responce_from_ai(job_description_path, resume_path)
result = generated_text
match = re.search(r"(Matched Percentage: (.+))", result)
percentage = match.group(1)
match = re.search(r"(Reason: (.+))", result)
reason = match.group(1)
match = re.search(r"(Skills To Improve: (.+))", result)
skills = match.group(1)
match = re.search(r"(Keywords: (.+))", result)
keywords = match.group(1)
# Extract the matched percentage using regular expression
match1 = re.search(r"Matched Percentage: (\d+)%", percentage)
matched_percentage = int(match1.group(1))
# Creating a pie chart with plotly
labels = ['Matched', 'Remaining']
values = [matched_percentage, 100 - matched_percentage]
fig = go.Figure(data=[go.Pie(labels=labels, values=values)])
# fig.update_layout(title='Matched Percentage')
return percentage,reason, skills, keywords,fig
def gradio_interface(self):
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.File(label="Job Description")
with gr.Column(scale=0.45, min_width=150):
resume = gr.File(label="Resume")
with gr.Column(scale=0.10, min_width=150):
analyse = gr.Button("Analyse")
with gr.Row():
with gr.Column(scale=1.0, min_width=150):
perncentage = gr.Textbox(label="Matching Percentage",lines=8)
with gr.Column(scale=1.0, min_width=150):
reason = gr.Textbox(label="Reason",lines=8)
with gr.Column(scale=1.0, min_width=150):
skills = gr.Textbox(label="Skills",lines=8)
with gr.Column(scale=1.0, min_width=150):
keywords = gr.Textbox(label="Keywords",lines=8)
with gr.Row():
with gr.Column(scale=1.0, min_width=150):
pychart = gr.Plot(label="Matching Percentage Chart")
analyse.click(self.matching_percentage, [jobDescription, resume], [perncentage,reason,skills,keywords,pychart])
app.launch()
resume=ResumeAnalyser()
resume.gradio_interface() |