Vaibhav84's picture
Changes
eb32f81
raw
history blame
4.02 kB
#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
from sentence_transformers import SentenceTransformer, util
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from io import StringIO
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 FileResponse(BaseModel):
fileid: int
message: 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.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
@app.post("/uploadJobDescription/")
def create_upload_file(file: bytes = File(...)):
content = file.decode('utf-8')
lines = content.split('\n')
return {"content": lines}
@app.post("/uploadJobDescriptionPDF/")
def upload_PDF(file: UploadFile = File(...)):
try:
contents = file.file.read()
with open(file.filename, 'wb') as f:
f.write(contents)
except Exception:
return {"message": "There was an error uploading the file"}
finally:
file.file.close()
return {"message": f"Successfully uploaded {contents}"}
@app.post("/uploadJobDescriptionPDF2/")
def process_pdf_file(file: bytes = File(...)):
# Save file locally for processing
contents = file.read()
with open(file.filename, 'wb') as f:
f.write(contents)
# Process saved file
return process_pdf(file.filename, is_local_file=True)
def process_pdf(pdf_source, is_local_file=False):
# Process the PDF from URL or local file
file = BytesIO(requests.get(pdf_source).content) if not is_local_file else open(pdf_source, 'rb')
# Extract text from PDF
pdf_reader = PyPDF2.PdfFileReader(file)
text = ""
for page in range(pdf_reader.numPages):
text += pdf_reader.getPage(page).extractText()
if is_local_file:
file.close()
return {"content": text}