File size: 5,872 Bytes
c5002df a2fa1ae 6feed85 c5002df 3c8d95f a2fa1ae 3c8d95f a2fa1ae 3c8d95f 217ef30 a2fa1ae 3c8d95f c5002df 217ef30 c5002df 217ef30 c5002df 8b51410 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 138 139 140 141 142 143 144 145 |
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 : [list out Reason Why this Resume Matched Percentage].
Skills To Improve : [Mention the skills How to improve and get 100 percentage this job description 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
lines = result.split('\n')
matched_percentage = None
matched_percentage_txt = None
reason = None
skills_to_improve = None
keywords = None
for line in lines:
if line.startswith('Matched Percentage:'):
match = re.search(r"Matched Percentage: (\d+)%", line)
if match:
matched_percentage = int(match.group(1))
matched_percentage_txt = (f"Matched Percentage: {matched_percentage}%")
elif line.startswith('Reason'):
reason = line.split(':')[1].strip()
elif line.startswith('Skills To Improve'):
skills_to_improve = line.split(':')[1].strip()
elif line.startswith('Keywords'):
keywords = line.split(':')[1].strip()
# Extract the matched percentage using regular expression
# match1 = re.search(r"Matched Percentage: (\d+)%", matched_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 match,reason, skills_to_improve, 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() |