Resume-IQ / train_model.py
heavenEyes's picture
Upload 11 files
8564de9 verified
Raw
History Blame
2.18 kB
import pandas as pd
import pickle
import re
from datasets import load_dataset
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.multiclass import OneVsRestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import LabelEncoder
def train_classifier():
print("Loading AzharAli05/Resume-Screening-Dataset...")
try:
ds = load_dataset("AzharAli05/Resume-Screening-Dataset")
df = pd.DataFrame(ds['train'])
print(f"Loaded {len(df)} resumes.")
except Exception as e:
print(f"Error loading dataset: {e}")
exit()
text_col = 'Resume'
label_col = 'Role'
def clean_resume(txt):
cleanText = re.sub(r'http\S+\s', ' ', str(txt))
cleanText = re.sub(r'RT|cc', ' ', cleanText)
cleanText = re.sub(r'#\S+\s', ' ', cleanText)
cleanText = re.sub(r'@\S+', ' ', cleanText)
cleanText = re.sub(r'[!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~]', ' ', cleanText)
cleanText = re.sub(r'[^\x00-\x7f]', ' ', cleanText)
cleanText = re.sub(r'\s+', ' ', cleanText)
return cleanText
print("Cleaning data...")
df['cleaned_resume'] = df[text_col].apply(clean_resume)
print("Generating Master Profiles (Prototypes)...")
prototypes = df.groupby(label_col)['cleaned_resume'].apply(lambda x: ' '.join(x)).to_dict()
pickle.dump(prototypes, open('prototypes.pkl', 'wb'))
le = LabelEncoder()
df['Category_ID'] = le.fit_transform(df[label_col])
print("Vectorizing...")
tfidf = TfidfVectorizer(stop_words='english', max_features=5000)
tfidf.fit(df['cleaned_resume'])
requiredText = tfidf.transform(df['cleaned_resume'])
print("Training Classifier...")
clf = OneVsRestClassifier(KNeighborsClassifier())
clf.fit(requiredText, df['Category_ID'])
print("Saving models...")
pickle.dump(clf, open('clf.pkl', 'wb'))
pickle.dump(tfidf, open('tfidf.pkl', 'wb'))
pickle.dump(le, open('encoder.pkl', 'wb'))
print("SUCCESS: Classification models + Prototypes saved.")
if __name__ == "__main__":
train_classifier()