Spaces:
Running
Running
File size: 5,962 Bytes
4fbe3cf |
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 : [Mention Reason and keys from job_description and resume get this matched percentage.].
Skills To Improve : [Mention the skills How to improve and get 100 percentage 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 matched_percentage_txt,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://templates.images.credential.net/1612472097627370951721412474196.png" alt="Image" width="210" height="210">
<img class="rightimage" align="right" src="https://companieslogo.com/img/orig/RAND.AS_BIG-0f1935a4.png?t=1651813778" 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">Randstad Resume Analyzer</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="Matching Reason",lines=8)
with gr.Column(scale=1.0, min_width=150):
skills = gr.Textbox(label="Skills To Improve",lines=8)
with gr.Column(scale=1.0, min_width=150):
keywords = gr.Textbox(label="Matched 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() |