{"id":25376476,"url":"https://github.com/zahidshaikh10101/hirebot","last_synced_at":"2026-04-20T06:03:49.705Z","repository":{"id":277394017,"uuid":"932295180","full_name":"zahidshaikh10101/HireBot","owner":"zahidshaikh10101","description":"HireBot is built using Streamlit. It extracts key details from a resume (PDF) and provides insights like skills, experience, education, strengths, and weaknesses. It also integrates a job search feature to match resumes with relevant job postings.","archived":false,"fork":false,"pushed_at":"2025-02-16T18:29:40.000Z","size":417,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-09T09:50:12.825Z","etag":null,"topics":["api","beautifulsoup","gemini","generative-ai","nlp","python","streamlit","transformers"],"latest_commit_sha":null,"homepage":"https://hirebot-z7s8s6.streamlit.app/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zahidshaikh10101.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-13T17:24:11.000Z","updated_at":"2025-02-16T18:29:43.000Z","dependencies_parsed_at":"2025-02-13T18:32:26.252Z","dependency_job_id":"f0fefe29-afa7-4155-bbe9-61200562ded0","html_url":"https://github.com/zahidshaikh10101/HireBot","commit_stats":null,"previous_names":["zahidshaikh10101/hirebot"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zahidshaikh10101/HireBot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zahidshaikh10101%2FHireBot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zahidshaikh10101%2FHireBot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zahidshaikh10101%2FHireBot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zahidshaikh10101%2FHireBot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zahidshaikh10101","download_url":"https://codeload.github.com/zahidshaikh10101/HireBot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zahidshaikh10101%2FHireBot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32035278,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","beautifulsoup","gemini","generative-ai","nlp","python","streamlit","transformers"],"created_at":"2025-02-15T04:28:03.650Z","updated_at":"2026-04-20T06:03:49.670Z","avatar_url":"https://github.com/zahidshaikh10101.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HireBot\n\n### Resume Parsing Functions:\n\n- **extract\\_text\\_from\\_pdf(pdf\\_file):** Extracts text content from a given PDF file by reading its bytes and using a text extraction function.\n- **extract\\_contact\\_number\\_from\\_resume(text):** Uses regex to identify and extract a contact number from the resume text.\n- **extract\\_email\\_from\\_resume(text):** Uses regex to identify and extract an email address from the resume text.\n- **extract\\_name(resume\\_text):** Uses the spaCy NLP library and pattern matching to extract a full name (first, middle, and last names) from the resume text.\n- **extract\\_degree\\_name(resume\\_text):** Uses a generative AI model to extract the degree name from the resume text, ensuring that the current degree appears first.\n- **extract\\_college\\_name(resume\\_text):** Uses a generative AI model to extract the college/university name from the resume text.\n- **extract\\_company\\_name(resume\\_text):** Uses a generative AI model to identify company names and their corresponding years of experience from the resume text.\n- **extract\\_total\\_experience(resume\\_text):** Uses a generative AI model to calculate the total years of experience by summing up the experience across multiple companies.\n- **extract\\_strength(resume\\_text):** Identifies four key strengths from the resume text using Google Generative AI.\n- **extract\\_weakness(resume\\_text):** Identifies four key weaknesses from the resume text using Google Generative AI.\n- **extract\\_skills(resume\\_text):** Extracts and returns the top 20 relevant skills from the resume text, ensuring uniqueness.\n- **extract\\_designation(resume\\_text):** Identifies job designations mentioned in the resume, prioritizing the most recent one.\n- **extract\\_recommended\\_skills(designations):** Suggests 15 relevant skills based on the extracted job designations.\n- **extract\\_recommended\\_job\\_position(designations):** Recommends 10 job positions based on the extracted designations.\n- **extract\\_social(resume\\_text):** Extracts LinkedIn and GitHub profile links from the resume text using regex.\n\n### Match Percentage Calculation:\n\n- **extract\\_match\\_percentage(resume\\_text, job\\_description):** Uses a weighted scoring system to determine how well a resume matches a job description based on four criteria: skills, experience, education, and keywords.\n\n#### Weighted Function Breakdown:\n\nMatch Percentage is computed as:\n\n```\nMatch Percentage = (Skills Score × 0.40) + (Experience Score × 0.30) + (Education Score × 0.15) + (Keywords Score × 0.15)\n```\n\n- **Skills (40%)**: Exact skill matches score highest, related skills score lower.\n- **Experience (30%)**: More years of experience get higher scores.\n- **Education (15%)**: Full match gets full points; related degrees get partial points.\n- **Keywords (15%)**: Important job description keywords are matched against the resume.\n\nThis ensures that skills and experience have the most weight, while education and keyword relevance contribute to the final match percentage.\n\n## Resume Analyzer Features\n\nA Streamlit-based resume analysis tool that allows users to upload a PDF resume and extract key information, providing insights into the candidate’s personal details, education, professional experience, skills, strengths, and weaknesses.\n\n### How It Works:\n\n1. **User Uploads a Resume:**\n\n   - The user selects the \"Resume Analyzer\" page and uploads a PDF file.\n   - If no file is uploaded, a warning message prompts the user.\n\n2. **Resume Processing with a Progress Bar:**\n\n   - Progress stages: Text extraction → Analysis → Output generation → Final results.\n\n3. **Extracting Resume Information:**\n\n   - The function `extract_resume_information(pdf_file)` processes the file and extracts:\n     - **Basic Information:** Name, email, contact number, LinkedIn, GitHub, years of experience.\n     - **Education Details:** Degree name and university.\n     - **Professional Details:** Previous company, designations, and recommended job roles.\n     - **Skills:** Extracted and recommended skills.\n     - **Strengths \u0026 Weaknesses:** Key strengths and weaknesses identified from the resume.\n\n### Key Features:\n\n✔️ PDF Upload Support\\\n✔️ Real-time Progress Updates\\\n✔️ Automatic Resume Parsing\\\n✔️ Skill \u0026 Job Recommendations\\\n✔️ Strength \u0026 Weakness Analysis\n\nThis interactive resume analyzer streamlines resume processing and provides insights for recruiters and job seekers. 🚀\n\n## Job Search Feature\n\nA Streamlit web app feature that allows users to upload a resume (PDF), extract job-related details (role, experience, skills), and search for matching job postings via an API.\n\n### How It Works:\n\n1. **Resume Upload \u0026 Extraction:**\n\n   - User uploads a PDF resume.\n   - The function `extract_resume_information_job_search()` extracts job-related details.\n\n2. **User Input Fields:**\n\n   - Extracted job role is auto-filled in a text box.\n   - Users enter preferred location and select employment type (Full-time, Part-time, Intern, Contractor).\n   - Job postings can be filtered by date posted (Today, Week, Month).\n   - Skills are extracted from the resume and displayed using `st_tags`.\n\n3. **Job Search via API:**\n\n   - Upon submission, an API request is sent to `jobs-api14.p.rapidapi.com`.\n   - Filters include job role, location, employment type, and date posted.\n   - The response is parsed, extracting job details (title, company, location, employment type, date posted, job provider).\n\n4. **Displaying Job Listings:**\n\n   - Results are shown as interactive job cards using HTML and CSS.\n   - Each job listing includes a **match percentage** (calculated via `extract_match_percentage()`).\n   - Users can expand/collapse the job description.\n   - \"Apply Now\" button directs users to the job application link.\n\n5. **Error Handling \u0026 API Limitations:**\n\n   - Displays a message if no jobs are found.\n   - A 30-second delay (`time.sleep(30)`) prevents API rate limiting.\n\n### Key Features:\n\n✅ Resume parsing for automated job search input\\\n✅ API-based job retrieval with filtering options\\\n✅ Match percentage calculation for better job relevance\\\n✅ Interactive job cards with \"Read More\" functionality\\\n✅ Streamlit UI integration for a seamless user experience\n\nThis feature simplifies the job search process by leveraging resume insights and real-time job postings. 🚀\n\n## Installation \u0026 Usage\n\n### Prerequisites\n\n- Python 3.8+\n- Install dependencies using:\n\n```\npip install -r requirements.txt\n```\n\n### Running the Application\n\nTo start the Streamlit app, run:\n\n```\nstreamlit run app.py\n```\n\n### Screenshot\n\u003cimg width=\"557\" alt=\"app\" src=\"https://github.com/zahidshaikh10101/Hirebot/blob/1b5a6c27d1b204c5675296cc0a7091569210b442/images/RP%20-%201.png\"\u003e \n\u003cimg width=\"557\" alt=\"app\" src=\"https://github.com/zahidshaikh10101/Hirebot/blob/1b5a6c27d1b204c5675296cc0a7091569210b442/images/RP%20-%202.png\"\u003e \n\u003cimg width=\"557\" alt=\"app\" src=\"https://github.com/zahidshaikh10101/Hirebot/blob/1b5a6c27d1b204c5675296cc0a7091569210b442/images/RP%20-%203.png\"\u003e \n\u003cimg width=\"557\" alt=\"app\" src=\"https://github.com/zahidshaikh10101/Hirebot/blob/3cd925e9f7210dcc85c33ee91503f60631174a71/images/JS%20-1.png\"\u003e \n\u003cimg width=\"557\" alt=\"app\" src=\"https://github.com/zahidshaikh10101/Hirebot/blob/1b5a6c27d1b204c5675296cc0a7091569210b442/images/JS%20-%203.png\"\u003e \n\u003cimg width=\"557\" alt=\"app\" src=\"https://github.com/zahidshaikh10101/Hirebot/blob/6d08e3068ba36b48d3182d29139d85b5c38c48d2/images/JS%20-2%20.png\"\u003e \n\n\n### API Keys Setup\n\n- Ensure you have API keys configured for job search functionalities.\n- Add them in a `.env` file or directly in the script.\n\n## Contributing\n\nPull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzahidshaikh10101%2Fhirebot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzahidshaikh10101%2Fhirebot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzahidshaikh10101%2Fhirebot/lists"}