cv-detector
Version:
you have to upload the cv in the pdf format and run the command in the terminal node "your file name.js" and then press "Enter". It will shows the name, email, contact and matched skills specified by you.
95 lines (75 loc) • 4.61 kB
JavaScript
const fs = require('fs');
const PDFParser = require('pdf-parse');
function parseCV(filePath) {
fs.readFile(filePath, (error, pdfData) => {
if (error) {
console.error('Error reading PDF file:', error);
return;
}
PDFParser(pdfData)
.then((data) => {
const text = data.text;
// Extract name, email, and contact information
const name = extractName(text);
const email = extractEmail(text);
const contact = extractContact(text);
const skills = extractSkills(text);
// Display the extracted information
console.log('Name:', name);
console.log('Email:', email);
console.log('Contact:', contact);
console.log('Skills:', skills);
})
.catch((error) => {
console.error('Error parsing PDF:', error);
});
});
}
// Function to extract name
function extractName(text) {
const nameRegex = /(Mr\.|Mrs\.|Ms\.)?\s*([A-Za-z]+)\s*([A-Za-z]+)\b/g;
const matches = text.match(nameRegex);
if (matches && matches.length > 0) {
// Extract the first match as the name
const fullName = matches[0].trim();
return fullName;
}
return '';
}
// Function to extract email
function extractEmail(text) {
const emailRegex = /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;
const matches = text.match(emailRegex);
if (matches && matches.length > 0) {
// Extract the first match as the email
const email = matches[0].trim();
return email;
}
return '';
}
// Function to extract contact
function extractContact(text) {
const contactRegex = /(\+\d{1,2}\s?)?(\d{3}[-.\s]?\d{3}[-.\s]?\d{4}|\(\d{3}\)\s?\d{3}[-.\s]?\d{4})\b/g;
const matches = text.match(contactRegex);
if (matches && matches.length > 0) {
// Extract the first match as the contact number
const contact = matches[0].trim();
return contact;
}
return '';
}
// Function to extract skills
function extractSkills(text) {
// List of skills
const skills = [
"Html", "Css", "Javascript", "React", "Node", "Express", "MongoDB", "Python", "Django", "Flask", "C", "C++", "Java", "Android", "Php", "Laravel", "Wordpress", "Mysql", "Sql", "Git", "Github", "Data Structures", "Algorithms", "Machine Learning", "Deep Learning", "Artificial Intelligence", "Computer Vision", "Natural Language Processing", "Data Science", "Computer Networks", "Operating Systems", "Computer Architecture", "Computer Organization", "Cloud Computing", "Docker", "Kubernetes", "Azure", "Aws", "Google Cloud", "Heroku", "Digital Ocean", "Linux", "Unix", "Windows", "MacOS", "Raspberry Pi", "Arduino", "Iot", "Blockchain", "Ethical Hacking", "Penetration Testing", "Cyber Security", "Web Security", "Network Security", "Information Security", "Cryptography", "Quantum Computing", "Quantum Cryptography", "Quantum Algorithms", "Quantum Machine Learning", "Quantum Artificial Intelligence", "Quantum Internet", "Quantum Sensors", "Quantum Communication", "Quantum Teleportation", "Quantum Entanglement", "Quantum Key Distribution", "Quantum Computing as a Service", "Quantum Cloud Computing", "Quantum Annealing", "Quantum Supremacy", "Quantum Computing Languages", "Quantum Programming", "Quantum Software", "Quantum Hardware", "Quantum Chips", "Quantum Computers", "Quantum Simulators", "Quantum Cryptocurrency", "Quantum Blockchain", "Quantum Internet of Things", "Quantum Sensors", "Quantum Communication", "Quantum Teleportation", "Quantum Entanglement", "Quantum Key Distribution", "Quantum Computing as a Service", "Quantum Cloud Computing", "Quantum Annealing", "Quantum Supremacy", "Quantum Computing Languages", "Quantum Programming", "Quantum Software", "Quantum Hardware", "Quantum Chips", "Quantum Computers", "Quantum Simulators", "Quantum Cryptocurrency", "Quantum Blockchain", "Quantum Internet of Things", "Quantum Sensors", "Quantum Communication", "Quantum Teleportation", "Quantum Entanglement", "Quantum Key Distribution", "Quantum Computing as a Service", "Quantum Cloud Computing"
];
// match all words in the text against the skills list and return the matched ones
const matchedSkills = text
.split(/\s|\n/)
.filter(word => skills.includes(word));
// remove duplicates from the matched skills list
const uniqueSkills = [...new Set(matchedSkills)];
return uniqueSkills;
}
module.exports = parseCV;