UNPKG

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
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;