File size: 3,708 Bytes
99bbd64
8683e61
99bbd64
89ac774
8683e61
99bbd64
 
f40468d
99bbd64
 
89509c4
 
99bbd64
7dbf682
9e0b38e
99bbd64
0f5f3bf
99bbd64
 
 
ba60b2c
9e0b38e
 
 
7dbf682
 
 
 
 
f40468d
 
7dbf682
6e78f7b
fa24c7d
4aba3cf
bcc36a0
4d13280
bcc36a0
24a440f
4696f89
 
 
a3cdaed
 
4696f89
 
 
 
 
 
9ce2997
f296b1d
 
9ce2997
 
4696f89
 
9ce2997
fa24c7d
9e0b38e
 
 
fa24c7d
24a440f
 
194b1f0
fa24c7d
6e78f7b
89ac774
 
 
 
07479a9
c7e63c1
9ce2997
b6d0d6c
c7e63c1
 
 
8d08b4d
0f5f3bf
 
 
 
 
8d08b4d
 
0f5f3bf
 
 
 
ca9140a
8d08b4d
ca9140a
 
d474c84
 
 
b6d0d6c
a587148
 
89509c4
 
 
fa24c7d
 
8d08b4d
 
 
 
 
 
 
 
 
 
 
9e0b38e
 
d21275b
 
 
 
 
ca9140a
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
#Fast APi Packages
from fastapi import FastAPI,File, UploadFile
from pydantic import BaseModel
import json
from typing_extensions import Annotated

#SkillExtraction Packages
import PyPDF2
from PyPDF2 import PdfReader
import psycopg2
from psycopg2 import sql
import pandas as pd
from datetime import date
import numpy as np
import spacy
import re
import docx2txt 
from sentence_transformers import SentenceTransformer, util
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import io  
from spacy.matcher import PhraseMatcher
from skillNer.general_params import SKILL_DB
from skillNer.skill_extractor_class import SkillExtractor
from psycopg2.extensions import register_adapter, AsIs
register_adapter(np.int64, AsIs)
import warnings
warnings.filterwarnings('ignore')

from io import BytesIO
import requests
#Custom Classes for endpoints
from DbConnection import DbConnection
from UploadFile import UploadOpenFile
from SkillExtract import SkillExtractorDetails
import os
os.environ['HF_HOME'] = '/hug/cache/'

app = FastAPI()
class FileDetails(BaseModel):
    filecontents: str
    filename: str
    fileid: str
    message: str


class SkillDetails(BaseModel):
    skillid: int 
    requiredSkills: str
    softSkills: str
    goodToHaveSkills: str  

class SkillData(BaseModel):
    filename: str 
         


   

nlp = spacy.load("en_core_web_lg")
    # init skill extractor
skill_extractor = SkillExtractor(nlp, SKILL_DB, PhraseMatcher)

@app.get("/")
async def root():
 return {"SkillAPI":"SkillAPi Version 0.05"}
#https://vaibhav84-resumeapi.hf.space/docs
db_params = DbConnection.GetDbConnection()
def parse_csv(df):
    res = df.to_json(orient="records")
    parsed = json.loads(res)
    return parsed


@app.post("/uploadJobDescription/")
def uploadJobDescription(file: bytes =  File(...), FileName: str = "sample.pdf"):
    # Save file locally for processing
    text =''
    print(text)
    if FileName.endswith("pdf"):
        reserve_pdf_on_memory = io.BytesIO(file)
        load_pdf = PyPDF2.PdfReader(reserve_pdf_on_memory)
        for page in load_pdf.pages:
            text += page.extract_text()
       
    elif FileName.endswith("doc") or FileName.endswith("docx"):
        text = docx2txt.process(file)
        text = text.read()
    
    else:
        text = file.decode('utf-8')

    returnID = UploadOpenFile.uploadFile(text,FileName,db_params)
    returnSkills = SkillExtractorDetails.SkillExtract(db_params,skill_extractor,returnID)     
    details = returnSkills.split('@')
    responseData = 'Required Skills : ' + details[0] +'<br><br>'
    responseData = responseData + 'Soft Skills : ' + details[1] +'<br><br>'
    responseData = responseData + 'Good to have Skills : ' + details[2]
    return {"SkillDetails": responseData}  
@app.get("/ProfileMatch") 
def ProfileMatchResults():
   dbQuery = "select * from profilematch"
   conn = psycopg2.connect(**db_params)   
   df = pd.read_sql_query(dbQuery, conn)
   return parse_csv(df) 

@app.post("/UploadFile/")
def UploadFileDetails(file_data: FileDetails):   
   
   returnID = UploadOpenFile.uploadFile(file_data.filecontents,file_data.filename,db_params)
   file_data.filecontents = ""
   file_data.fileid = str(returnID)
   file_data.message = "File Uploaded Successfully!"
   
   return file_data


@app.post("/ExtractSkills/")
def ExtractSkills(skill_data: SkillDetails):
   returnSkills = SkillExtractorDetails.SkillExtract(db_params,skill_extractor,skill_data.skillid)     
   details = returnSkills.split('@')
   skill_data.requiredSkills = details[0]
   skill_data.softSkills = details[1]
   skill_data.goodToHaveSkills = details[1]
   return skill_data