File size: 5,723 Bytes
c5002df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ce41cd4
89dc20d
c5002df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c8d95f
a2fa1ae
3c8d95f
a2fa1ae
3c8d95f
 
 
 
 
 
217ef30
 
 
a2fa1ae
3c8d95f
 
 
 
 
 
c5002df
 
 
217ef30
 
c5002df
 
 
217ef30
c5002df
 
 
 
 
2a56924
c5002df
 
 
62d39bc
 
 
 
 
 
c5002df
 
 
 
 
 
 
 
 
 
 
89dc20d
c5002df
89dc20d
c5002df
89dc20d
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
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='karthikeyan-adople/hudsonhayes-gray') as app:
            gr.HTML("""<center class="darkblue" style='background-color:rgb(0,1,36); text-align:center;padding:30px;'><center>
            <img class="leftimage" align="left" src="https://companieslogo.com/img/orig/RAND.AS_BIG-0f1935a4.png?t=1651813778" alt="Image" width="210" height="210">
            <h1 class ="center" style="color:#fff">ADOPLE AI</h1></center>
            <br><center><h1 style="color:#fff">Resume Analyser</h1></center>""")
          
            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()