Upload 4 files
Browse files- Courses.py +63 -0
- README.md +5 -5
- app.py +79 -0
- requirements.txt +3 -0
Courses.py
ADDED
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
ds_course = [['Machine Learning Crash Course by Google [Free]', 'https://developers.google.com/machine-learning/crash-course'],
|
2 |
+
['Machine Learning A-Z by Udemy','https://www.udemy.com/course/machinelearning/'],
|
3 |
+
['Machine Learning by Andrew NG','https://www.coursera.org/learn/machine-learning'],
|
4 |
+
['Data Scientist Master Program of Simplilearn (IBM)','https://www.simplilearn.com/big-data-and-analytics/senior-data-scientist-masters-program-training'],
|
5 |
+
['Data Science Foundations: Fundamentals by LinkedIn','https://www.linkedin.com/learning/data-science-foundations-fundamentals-5'],
|
6 |
+
['Data Scientist with Python','https://www.datacamp.com/tracks/data-scientist-with-python'],
|
7 |
+
['Programming for Data Science with Python','https://www.udacity.com/course/programming-for-data-science-nanodegree--nd104'],
|
8 |
+
['Programming for Data Science with R','https://www.udacity.com/course/programming-for-data-science-nanodegree-with-R--nd118'],
|
9 |
+
['Introduction to Data Science','https://www.udacity.com/course/introduction-to-data-science--cd0017'],
|
10 |
+
['Intro to Machine Learning with TensorFlow','https://www.udacity.com/course/intro-to-machine-learning-with-tensorflow-nanodegree--nd230']]
|
11 |
+
|
12 |
+
web_course = [['Django Crash course [Free]','https://youtu.be/e1IyzVyrLSU'],
|
13 |
+
['Python and Django Full Stack Web Developer Bootcamp','https://www.udemy.com/course/python-and-django-full-stack-web-developer-bootcamp'],
|
14 |
+
['React Crash Course [Free]','https://youtu.be/Dorf8i6lCuk'],
|
15 |
+
['ReactJS Project Development Training','https://www.dotnettricks.com/training/masters-program/reactjs-certification-training'],
|
16 |
+
['Full Stack Web Developer - MEAN Stack','https://www.simplilearn.com/full-stack-web-developer-mean-stack-certification-training'],
|
17 |
+
['Node.js and Express.js [Free]','https://youtu.be/Oe421EPjeBE'],
|
18 |
+
['Flask: Develop Web Applications in Python','https://www.educative.io/courses/flask-develop-web-applications-in-python'],
|
19 |
+
['Full Stack Web Developer by Udacity','https://www.udacity.com/course/full-stack-web-developer-nanodegree--nd0044'],
|
20 |
+
['Front End Web Developer by Udacity','https://www.udacity.com/course/front-end-web-developer-nanodegree--nd0011'],
|
21 |
+
['Become a React Developer by Udacity','https://www.udacity.com/course/react-nanodegree--nd019']]
|
22 |
+
|
23 |
+
android_course = [['Android Development for Beginners [Free]','https://youtu.be/fis26HvvDII'],
|
24 |
+
['Android App Development Specialization','https://www.coursera.org/specializations/android-app-development'],
|
25 |
+
['Associate Android Developer Certification','https://grow.google/androiddev/#?modal_active=none'],
|
26 |
+
['Become an Android Kotlin Developer by Udacity','https://www.udacity.com/course/android-kotlin-developer-nanodegree--nd940'],
|
27 |
+
['Android Basics by Google','https://www.udacity.com/course/android-basics-nanodegree-by-google--nd803'],
|
28 |
+
['The Complete Android Developer Course','https://www.udemy.com/course/complete-android-n-developer-course/'],
|
29 |
+
['Building an Android App with Architecture Components','https://www.linkedin.com/learning/building-an-android-app-with-architecture-components'],
|
30 |
+
['Android App Development Masterclass using Kotlin','https://www.udemy.com/course/android-oreo-kotlin-app-masterclass/'],
|
31 |
+
['Flutter & Dart - The Complete Flutter App Development Course','https://www.udemy.com/course/flutter-dart-the-complete-flutter-app-development-course/'],
|
32 |
+
['Flutter App Development Course [Free]','https://youtu.be/rZLR5olMR64']]
|
33 |
+
|
34 |
+
ios_course = [['IOS App Development by LinkedIn','https://www.linkedin.com/learning/subscription/topics/ios'],
|
35 |
+
['iOS & Swift - The Complete iOS App Development Bootcamp','https://www.udemy.com/course/ios-13-app-development-bootcamp/'],
|
36 |
+
['Become an iOS Developer','https://www.udacity.com/course/ios-developer-nanodegree--nd003'],
|
37 |
+
['iOS App Development with Swift Specialization','https://www.coursera.org/specializations/app-development'],
|
38 |
+
['Mobile App Development with Swift','https://www.edx.org/professional-certificate/curtinx-mobile-app-development-with-swift'],
|
39 |
+
['Swift Course by LinkedIn','https://www.linkedin.com/learning/subscription/topics/swift-2'],
|
40 |
+
['Objective-C Crash Course for Swift Developers','https://www.udemy.com/course/objectivec/'],
|
41 |
+
['Learn Swift by Codecademy','https://www.codecademy.com/learn/learn-swift'],
|
42 |
+
['Swift Tutorial - Full Course for Beginners [Free]','https://youtu.be/comQ1-x2a1Q'],
|
43 |
+
['Learn Swift Fast - [Free]','https://youtu.be/FcsY1YPBwzQ']]
|
44 |
+
uiux_course = [['Google UX Design Professional Certificate','https://www.coursera.org/professional-certificates/google-ux-design'],
|
45 |
+
['UI / UX Design Specialization','https://www.coursera.org/specializations/ui-ux-design'],
|
46 |
+
['The Complete App Design Course - UX, UI and Design Thinking','https://www.udemy.com/course/the-complete-app-design-course-ux-and-ui-design/'],
|
47 |
+
['UX & Web Design Master Course: Strategy, Design, Development','https://www.udemy.com/course/ux-web-design-master-course-strategy-design-development/'],
|
48 |
+
['The Complete App Design Course - UX, UI and Design Thinking','https://www.udemy.com/course/the-complete-app-design-course-ux-and-ui-design/'],
|
49 |
+
['DESIGN RULES: Principles + Practices for Great UI Design','https://www.udemy.com/course/design-rules/'],
|
50 |
+
['Become a UX Designer by Udacity','https://www.udacity.com/course/ux-designer-nanodegree--nd578'],
|
51 |
+
['Adobe XD Tutorial: User Experience Design Course [Free]','https://youtu.be/68w2VwalD5w'],
|
52 |
+
['Adobe XD for Beginners [Free]','https://youtu.be/WEljsc2jorI'],
|
53 |
+
['Adobe XD in Simple Way','https://learnux.io/course/adobe-xd']]
|
54 |
+
|
55 |
+
resume_videos = ['https://youtu.be/y8YH0Qbu5h4','https://youtu.be/J-4Fv8nq1iA',
|
56 |
+
'https://youtu.be/yp693O87GmM','https://youtu.be/UeMmCex9uTU',
|
57 |
+
'https://youtu.be/dQ7Q8ZdnuN0','https://youtu.be/HQqqQx5BCFY',
|
58 |
+
'https://youtu.be/CLUsplI4xMU','https://youtu.be/pbczsLkv7Cc']
|
59 |
+
|
60 |
+
interview_videos = ['https://youtu.be/Ji46s5BHdr0','https://youtu.be/seVxXHi2YMs',
|
61 |
+
'https://youtu.be/9FgfsLa_SmY','https://youtu.be/2HQmjLu-6RQ',
|
62 |
+
'https://youtu.be/DQd_AlIvHUw','https://youtu.be/oVVdezJ0e7w'
|
63 |
+
'https://youtu.be/JZK1MZwUyUU','https://youtu.be/CyXLhHQS3KY']
|
README.md
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
-
colorTo:
|
6 |
sdk: streamlit
|
7 |
-
sdk_version: 1.
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
---
|
|
|
1 |
---
|
2 |
+
title: Resume Analyser
|
3 |
+
emoji: 🐨
|
4 |
+
colorFrom: pink
|
5 |
+
colorTo: pink
|
6 |
sdk: streamlit
|
7 |
+
sdk_version: 1.28.1
|
8 |
app_file: app.py
|
9 |
pinned: false
|
10 |
---
|
app.py
ADDED
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
import os
|
3 |
+
import fitz # PyMuPDF
|
4 |
+
from sklearn.feature_extraction.text import TfidfVectorizer
|
5 |
+
from sklearn.metrics.pairwise import cosine_similarity
|
6 |
+
from spellchecker import SpellChecker # Import the SpellChecker class from pyspellchecker
|
7 |
+
import tempfile
|
8 |
+
import pandas as pd
|
9 |
+
|
10 |
+
st.title("RESUME RANKER")
|
11 |
+
|
12 |
+
# User input for skills
|
13 |
+
skills = st.text_input("Enter Skills (comma-separated):")
|
14 |
+
|
15 |
+
# User input for job description
|
16 |
+
job_description = st.text_area("Enter Job Description:")
|
17 |
+
|
18 |
+
# User input for uploading multiple PDF resumes
|
19 |
+
pdf_resumes = st.file_uploader("Upload Resumes/CVs", type=["pdf"], accept_multiple_files=True)
|
20 |
+
|
21 |
+
if st.button("Rank Resumes"):
|
22 |
+
if not pdf_resumes:
|
23 |
+
st.warning("Please upload PDF resumes.")
|
24 |
+
else:
|
25 |
+
skills = [skill.strip() for skill in skills.split(',')]
|
26 |
+
job_description = job_description.lower()
|
27 |
+
resume_data = []
|
28 |
+
|
29 |
+
# Function to extract text from a PDF file using PyMuPDF (fitz)
|
30 |
+
def extract_text_from_pdf(pdf_path):
|
31 |
+
text = ""
|
32 |
+
with fitz.open(pdf_path) as doc:
|
33 |
+
for page in doc:
|
34 |
+
text += page.get_text()
|
35 |
+
return text
|
36 |
+
|
37 |
+
# Loop through all uploaded PDF resumes and extract text
|
38 |
+
for pdf_resume in pdf_resumes:
|
39 |
+
if pdf_resume.type == "application/pdf":
|
40 |
+
with tempfile.NamedTemporaryFile(delete=False) as temp_pdf:
|
41 |
+
temp_pdf.write(pdf_resume.read())
|
42 |
+
temp_pdf_name = temp_pdf.name
|
43 |
+
pdf_text = extract_text_from_pdf(temp_pdf_name).lower()
|
44 |
+
resume_data.append((pdf_resume.name, pdf_text))
|
45 |
+
os.remove(temp_pdf_name)
|
46 |
+
|
47 |
+
if not resume_data:
|
48 |
+
st.warning("No PDF resumes found in the uploaded files.")
|
49 |
+
else:
|
50 |
+
resume_rankings = []
|
51 |
+
|
52 |
+
# Loop through resumes and check for the presence of input skills
|
53 |
+
for resume_name, resume_text in resume_data:
|
54 |
+
matching_skills = [skill for skill in skills if skill.lower() in resume_text]
|
55 |
+
similarity_score =( len(matching_skills) / len(skills) )# Calculate a simple similarity score
|
56 |
+
missing_skills = [skill for skill in skills if skill.lower() not in resume_text]
|
57 |
+
|
58 |
+
# Calculate the cosine similarity between job description and resume
|
59 |
+
tfidf_vectorizer = TfidfVectorizer()
|
60 |
+
job_description_matrix = tfidf_vectorizer.fit_transform([job_description])
|
61 |
+
resume_matrix = tfidf_vectorizer.transform([resume_text])
|
62 |
+
job_description_similarity = cosine_similarity(job_description_matrix, resume_matrix)
|
63 |
+
job_description_similarity = (job_description_similarity[0][0])
|
64 |
+
|
65 |
+
similarity_score = round(similarity_score * 100, 2)
|
66 |
+
job_description_similarity = round(job_description_similarity * 100, 2)
|
67 |
+
|
68 |
+
resume_rankings.append((resume_name, f"{similarity_score}%", f"{job_description_similarity}%", missing_skills))
|
69 |
+
|
70 |
+
# Sort the resumes by similarity score in descending order
|
71 |
+
resume_rankings.sort(key=lambda x: x[1], reverse=True)
|
72 |
+
|
73 |
+
# Create a DataFrame to display the results
|
74 |
+
df = pd.DataFrame(resume_rankings, columns=["File Name", "Skills Match ", "Job Description Match ", "Missing Skills"])
|
75 |
+
|
76 |
+
|
77 |
+
|
78 |
+
st.subheader("Ranked Resumes:")
|
79 |
+
st.dataframe(df)
|
requirements.txt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
PyMuPDF
|
2 |
+
pyspellchecker
|
3 |
+
scikit-learn
|