Giter Site home page Giter Site logo

srbhr / resume-matcher Goto Github PK

View Code? Open in Web Editor NEW
4.5K 25.0 1.6K 98.63 MB

Resume Matcher is an open source, free tool to improve your resume. It works by using language models to compare and rank resumes with job descriptions.

Home Page: https://www.resumematcher.fyi/

License: Apache License 2.0

Python 99.67% Dockerfile 0.33%
text-similarity natural-language-processing word-embeddings python machine-learning resume vector-search resume-builder resume-parser ats

resume-matcher's Introduction


Stars Apache 2.0 Issues Forks Python

Discord Twitter Resume Matcher

Upvote us on ProductHunt πŸš€.

Resume Matcher - Free and Open-Source ATS Tool to Match Resumes to Job Desc. | Product Hunt

Don't let your resume be a roadblock from getting your next job. Use Resume Matcher!

Resume_Matcher_streamlit_demo

How does it work?

The Resume Matcher takes your resume and job descriptions as input, parses them using Python, and mimics the functionalities of an ATS, providing you with insights and suggestions to make your resume ATS-friendly.

The process is as follows:

  1. Parsing: The system uses Python to parse both your resume and the provided job description, just like an ATS would.

  2. Keyword Extraction: The tool uses advanced machine learning algorithms to extract the most relevant keywords from the job description. These keywords represent the skills, qualifications, and experiences the employer seeks.

  3. Key Terms Extraction: Beyond keyword extraction, the tool uses textacy to identify the main key terms or themes in the job description. This step helps in understanding the broader context of what the resume is about.

  4. Vector Similarity Using FastEmbedd: The tool uses FastEmbedd, a highly efficient embedding system, to measure how closely your resume matches the job description. The more similar they are, the higher the likelihood that your resume will pass the ATS screening.


How to install

Follow these steps to set up the environment and run the application.

  1. Fork the repository here.

  2. Clone the forked repository.

    git clone https://github.com/<YOUR-USERNAME>/Resume-Matcher.git
    cd Resume-Matcher
  3. Create a Python Virtual Environment:

    • Using virtualenv:

      Note: Check how to install virtualenv on your system here link.

      virtualenv env

    OR

    • Create a Python Virtual Environment:

      python -m venv env
  4. Activate the Virtual Environment.

    • On Windows.

      env\Scripts\activate
    • On macOS and Linux.

      source env/bin/activate

    OPTIONAL (For pyenv users)

    Run the application with pyenv (Refer this article)

    • Build dependencies (on ubuntu)

      sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python openssl
      
      
      sudo apt-get install build-essential zlib1g-dev libffi-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev liblzma-dev libncurses-dev
      
      sudo apt-get install python-tk python3-tk tk-dev
      
      sudo apt-get install build-essential zlib1g-dev libffi-dev libssl-dev libbz2-dev libreadline-dev libsqlite3-dev liblzma-dev
      
      
    • pyenv installer

         curl https://pyenv.run | bash
      
    • Install desired python version

        pyenv install -v 3.11.0
      
    • pyenv with virtual enviroment

         pyenv virtualenv 3.11.0 venv
      
    • Activate virtualenv with pyenv

         pyenv activate venv
      
  5. Install Dependencies:

    pip install -r requirements.txt
  6. Prepare Data:

    • Resumes: Place your resumes in PDF format in the Data/Resumes folder. Remove any existing contents in this folder.
    • Job Descriptions: Place your job descriptions in PDF format in the Data/JobDescription folder. Remove any existing contents in this folder.
  7. Parse Resumes to JSON:

    python run_first.py
  8. Run the Application:

    streamlit run streamlit_app.py

Note: For local versions, you do not need to run "streamlit_second.py" as it is specifically for deploying to Streamlit servers.

Additional Note: The Vector Similarity part is precomputed to optimize performance due to the resource-intensive nature of sentence encoders that require significant GPU and RAM resources. If you are interested in leveraging this feature in a Google Colab environment for free, refer to the upcoming blog (link to be provided) for further guidance.


Docker

  1. Build the image and start application

        docker-compose up
  2. Open localhost:80 on your browser


Running the Web Application

The full stack Next.js (React and FastAPI) web application allows users to interact with the Resume Matcher tool interactively via a web browser.

Warning

The results returned from through the web app are currently entirely mocked / faked. This means that the results returned are not real and are just for demonstration purposes. This will be implemented with real data results in a future release.

To run the full stack web application (frontend client and backend api servers), follow the instructions over on the webapp README file.


Google Colab

  1. Create an account in ngrok and get you token
  2. img_1.png
  3. Go to archive/resume_matcher_colab.ipynb and run the notebook.
  4. Enter your ngrok token and run the notebook.
  5. Copy the url and open it in your browser.
  6. img_2.png

Cohere and Qdrant

  1. Visit Cohere website registration and create an account.
  2. Go to API keys and copy your cohere api key.
  3. Visit Qdrant website and create an account.
  4. Get your api key and cluster url.
  5. Go to open dashboard in qdrant and enter your api key for only the first time

1. Now create a yaml file named config.yml in Scripts/Similarity/ folder. 2. The format for the conifg file should be as below: ```yaml cohere: api_key: cohere_key qdrant: api_key: qdrant_api_key url: qdrant_cluster_url ``` 3. Please replace your values without any quotes.

Note: Please make sure that Qdrant_client's version is higher than v1.1

Note: This part needs updating w.r.t to the new FastEmbed changes.


Code Formatting

This project uses Black for code formatting. We believe this helps to keep the code base consistent and reduces the cognitive load when reading code.

Before submitting your pull request, please make sure your changes are in accordance with the Black style guide. You can format your code by running the following command in your terminal:

black .

Pre-commit Hooks

We also use pre-commit to automatically check for common issues before commits are submitted. This includes checks for code formatting with Black.

If you haven't already, please install the pre-commit hooks by running the following command in your terminal:

pip install pre-commit
pre-commit install

Now, the pre-commit hooks will automatically run every time you commit your changes. If any of the hooks fail, the commit will be aborted.

Join Us, Contribute!

Pull Requests & Issues are not just welcomed, they're celebrated! Let's create together.

πŸŽ‰ Join our lively Discord community and discuss away!

πŸ’‘ Spot a problem? Create an issue!

πŸ‘©β€πŸ’» Dive in and help resolve existing issues.

πŸ”” Share your thoughts in our Discussions & Announcements.

πŸš€ Explore and improve our Landing Page. PRs always welcome!

πŸ“š Contribute to the Resume Matcher Docs and help people get started with using the software.

Tech Stack

Python Tailwind CSS Next JS FastAPI TypeScript HTML5 CSS3 & More


Please support the development by donating.

BuyMeACoffee Sponsor on GitHub


Heads Up! πŸ“

Your support means the world to us πŸ’™. We're nurturing this project with an open-source community spirit, and we have an ambitious roadmap ahead! Here are some ways you could contribute and make a significant impact:

✨ Transform our Streamlit dashboard into something more robust.

πŸ’‘ Improve our parsing algorithm, making data more accessible.

πŸ–‹ Share your insights and experiences in a blog post to help others.

Take the leap, contribute, and let's grow together! πŸš€


Our Contributors ✨

resume-matcher's People

Contributors

admalekar avatar bandresen avatar dbhardwaj99 avatar dependabot[bot] avatar devasy23 avatar dxxky avatar eltociear avatar gonchik avatar helloojohn avatar himanshu007-creator avatar hunnysajid avatar ilb-96 avatar imhalcyon avatar markkimotho avatar nathantarbert avatar nauxscript avatar panquesito7 avatar pragati2112 avatar raditya3 avatar sahiljani avatar sandipkarmokar avatar sayvai avatar shravan20 avatar srbhr avatar sriramr244 avatar subramanyamchalla24 avatar yichao-cai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

resume-matcher's Issues

Click the β€˜here’ link in the readme to directly fork this repository.

Issue Title

Click the β€˜here’ link in the readme to directly fork this repository.

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

When I click on the β€˜here’ link, it redirects me to this repository. Perhaps it would be better to navigate to the forked page instead.

Screenshots / Code Snippets (if applicable)

image

Ability to upload resume and job description at runtime

Issue Title

Ability to upload resume and job description at runtime

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Right now, we have to copy resume and JD to data directory before starting the app.
Ability to upload JD and resume via dashboard will significantly improve UX

punkt Error while running the app

Issue Title

Type

  • Info

Description

I am getting error while running the app on local.
[nltk_data] Error loading punkt: <urlopen error [WinError 10061] No [nltk_data] connection could be made because the target machine [nltk_data] actively refused it> 2023-08-27 08:35:27.022 Uncaught app exception Traceback (most recent call last): File "D:\Git\Resume-Matcher\env\lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 552, in _run_script exec(code, module.__dict__) File "D:\Git\Resume-Matcher\streamlit_app.py", line 176, in <module> annotated_text(create_annotated_text( File "D:\Git\Resume-Matcher\streamlit_app.py", line 97, in create_annotated_text tokens = nltk.word_tokenize(input_string) File "D:\Git\Resume-Matcher\env\lib\site-packages\nltk\tokenize\__init__.py", line 129, in word_tokenize sentences = [text] if preserve_line else sent_tokenize(text, language) File "D:\Git\Resume-Matcher\env\lib\site-packages\nltk\tokenize\__init__.py", line 106, in sent_tokenize tokenizer = load(f"tokenizers/punkt/{language}.pickle") File "D:\Git\Resume-Matcher\env\lib\site-packages\nltk\data.py", line 750, in load opened_resource = _open(resource_url) File "D:\Git\Resume-Matcher\env\lib\site-packages\nltk\data.py", line 876, in _open return find(path_, path + [""]).open() File "D:\Git\Resume-Matcher\env\lib\site-packages\nltk\data.py", line 583, in find raise LookupError(resource_not_found) LookupError: Resource punkt not found. Please use the NLTK Downloader to obtain the resource: import nltk nltk.download('punkt')

Expected Behavior

App run without any error and show the ATS score

Current Behavior

App throwing error

Steps to Reproduce

NA

Screenshots / Code Snippets (if applicable)

Environment

  • Operating System: Windows 11
  • Browser (if applicable): Mozilla Firefox
  • Version/Commit ID (if applicable): Latest

Possible Solution (if you have any in mind)

Additional Information

ResponseHandlingException: [Errno 11001] getaddrinfo failed

Issue Title

ResponseHandlingException: [Errno 11001] getaddrinfo failed

Type

  • Big
  • Feature Request
  • Info
  • [ x ] Bug
  • Documentation
  • Other (please specify):

Description

ResponseHandlingException: [Errno 11001] getaddrinfo failed

Expected Behavior

haven't seen a good response

Current Behavior

ResponseHandlingException: [Errno 11001] getaddrinfo failed

Steps to Reproduce

  1. i just follow the guide it occur on step 8

Screenshots / Code Snippets (if applicable)

Traceback:
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\streamlit\runtime\scriptrunner\script_runner.py", line 552, in _run_script
exec(code, module.dict)
File "D:\PROJECTS\PY\Resume\Resume-Matcher\streamlit_app.py", line 282, in
result = get_similarity_score(resume_string, jd_string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PROJECTS\PY\Resume\Resume-Matcher\scripts\similarity\get_similarity_score.py", line 153, in get_similarity_score
qdrant_search = QdrantSearch([resume_string], job_description_string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PROJECTS\PY\Resume\Resume-Matcher\scripts\similarity\get_similarity_score.py", line 92, in init
self.qdrant.recreate_collection(
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\qdrant_client\qdrant_client.py", line 1609, in recreate_collection
self.delete_collection(collection_name)
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\qdrant_client\qdrant_client.py", line 1543, in delete_collection
result: Optional[bool] = self.http.collections_api.delete_collection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\qdrant_client\http\api\collections_api.py", line 788, in delete_collection
return self._build_for_delete_collection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\qdrant_client\http\api\collections_api.py", line 268, in build_for_delete_collection
return self.api_client.request(
^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\qdrant_client\http\api_client.py", line 68, in request
return self.send(request, type
)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\qdrant_client\http\api_client.py", line 85, in send
response = self.middleware(request, self.send_inner)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\qdrant_client\http\api_client.py", line 188, in call
return call_next(request)
^^^^^^^^^^^^^^^^^^
File "D:\PROJECTS\PY\Resume\Resume-Matcher\env\Lib\site-packages\qdrant_client\http\api_client.py", line 97, in send_inner
raise ResponseHandlingException(e)

Environment

  • Operating System: Windows
  • Browser (if applicable): Chrome
  • Version/Commit ID (if applicable):

Possible Solution (if you have any in mind)

maybe fix the getadrinfo ?

Additional Information

Feature Request: Enhanced Resume and Job Description Selection Experience (In-app Upload)

Is your feature request related to a problem? Please describe.
The current method of selecting resumes and job descriptions using a slider from 0 to n is cumbersome and lacks user-friendliness. Users find it frustrating to manually input the index of the resume they want. Moreover, the initial setup process involving directory-based resume and job description addition is complicated and not intuitive.
image

Describe the solution you'd like
I propose two main solutions to enhance user experience:

  1. Dropdown Menu Selection: Replace the existing slider with a dropdown menu. Users can now easily select a resume or job description from the available options in a more intuitive way.
    image
    image
    as mentioned in #167
  2. In-App Resume and Job Description Upload: #78 Implement a streamlined process for users to upload resumes and job descriptions directly within the app. This eliminates the need for users to manually add files to directories. Once uploaded, these files should be immediately accessible for selection, ensuring a seamless experience.
    image
    or only upload section like πŸ‘
    image

Describe alternatives you've considered
One alternative considered was keeping the directory-based support for previously uploaded resumes. However, this approach might confuse users if they are asked to select a resume right after uploading one. Therefore, the streamlined approach of using only the currently uploaded resumes and job descriptions is proposed for a more intuitive user experience.

Additional context
I will attach screenshots demonstrating the new dropdown menu for selecting resumes and job descriptions. Regarding the clarification about In-App file upload, the question arises: do we still need to support selecting resumes from previously uploaded ones using the dropdown menu? Personally, I find it counterintuitive to prompt users to select a resume immediately after they've uploaded one. Therefore, the more user-friendly approach would be to use only the currently uploaded files, providing a simpler and streamlined experience for users.

[BUG] - Next.js Full Stack Web App Throws Exception to UI on Startup

Describe the bug
Occasionally (not all the time), whenever I start up the local frontend full stack Next.js webapp, and then attempt to load the frontend UI after the Next.js servers are up and ready, the browser displays an exception thrown by Next.js.

The exception which is occasionally thrown, throws with the error message Attempted to call getErrorMessage() from the server, but getErrorMessage is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a client component.. See screenshot of exception thrown on browser UI, below.

To Reproduce
Steps to reproduce the behavior:

  1. Follow installation and configuration instructions from the README files on the root of the project, and inside the webapp. directory.
  2. Open a terminal / shell
  3. cd into the sub-directory webapp/
  4. Run the command npm run dev to run both the frontend and backend servers concurrently under one terminal session locally.
  5. Once both the frontend and backend servers ready, open the browser and navigate to http://localhost:3000/
  6. You should see an exception message rendered on the UI

Expected behavior
The frontend UI should load correctly, initially prompting the user to upload a Resume / CV.

Screenshots

Exception message rendered on the frontend UI of the full stack Next.js web app.

screenshot of exception thrown on browser UI, with the message "Attempted to call getErrorMessage() from the server, but getErrorMessage is on the client. It's not possible to invoke a client function from the server, it can only be rendered as a Component or passed to props of a client component."

Desktop (please complete the following information):

  • OS: Mac OS Ventura 13.4
  • Browser: Chrome
  • Version: 118.0.5993.96

Additional context
πŸ’‘ It seems that the error.ts file from which the getErrorMessage() function is defined conflicts with the reserved Next.js app router keyword for error.tsx components, and so Next.js (mistakenly) assumes error.ts is client component file, and hence why use client was placed at the top of the error.ts file in the first place to overcome the initial error. However, in hindsight this is not the correct solution as the function should be called on the server-side, and so the solution should be to instead rename error.ts to errors.ts, which also makes more logical sense, and can be extended with additional error handling functions in future.

It tries to install nltk resource everytime user interacts with the webpage.

Issue Title

It tries to install nltk resource everytime user interacts with the website.

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

We can notice in the command line logs that it tries to install nltk resource everytime this script is executed.

Steps to Reproduce

  1. Interact with the webpage
  2. Notice the logs.

Screenshots / Code Snippets (if applicable)

Screenshot 2023-08-05 at 9 02 28 PM

Possible Solution (if you have any in mind)

  1. Need to change the code execution flow.
  2. Check if the resource is already available and only download if not available.

Dependency version conflict

Issue Title

The following dependencies are shown as conflicting when installing via requirements.txt

  • typing_extensions
  • urllib3
    This is breaking the whole installation process

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

The versions of the two dependencies, typing_extensions==4.7.1 and urllib3==2.0.3, are conflicting.
I am using Python 3.11.x; could be that Python 3.10 or less might work. Or changing versions above.

Expected Behavior

Should install all requirements without conflict or just warnings.

Current Behavior

Not installing the entire requirements. So all dependencies are shown as not installed.

Steps to Reproduce

  1. Run pip install -r requirements.txt

Screenshots / Code Snippets (if applicable)

image
image

Environment

  • Operating System: Windows 11 (python3.11.3 venv used)
  • Browser (if applicable): Google Chrome
  • Version/Commit ID (if applicable): NA

Possible Solution (if you have any in mind)

Change/loosen the requirements or mention the python version required.

Additional Information

NA

ValueError: empty vocabulary; perhaps the documents only contain stop words

When I am passing my document in this function

def get_cleaned_words(document):
for i in range(len(document)):
raw = Cleaner(document[i][1])
document[i].append(" ".join(raw[0]))
document[i].append(" ".join(raw[1]))
document[i].append(" ".join(raw[2]))
sentence = do_tfidf(document[i][3].split(" "))
document[i].append(sentence)
return document

error observed : ValueError: empty vocabulary; perhaps the documents only contain stop words

can anyone help

Resource punkt not found.

I am getting the below error and unable to test it. I am trying this on my mac

(Resume-Matcher) ➜ Resume-Matcher git:(main) βœ— streamlit run streamlit_app.py

You can now view your Streamlit app in your browser.

Local URL: http://localhost:8501
Network URL: http://192.168.0.103:8501

[nltk_data] Error loading punkt: <urlopen error [SSL:
[nltk_data] CERTIFICATE_VERIFY_FAILED] certificate verify failed:
[nltk_data] unable to get local issuer certificate (_ssl.c:1002)>
2023-07-27 16:49:19.424 Uncaught app exception
Traceback (most recent call last):
File "/Users/kas772/Surendra/Resume-Matcher/lib/python3.11/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 552, in _run_script
exec(code, module.dict)
File "/Users/kas772/Surendra/Resume-Matcher/streamlit_app.py", line 160, in
annotated_text(create_annotated_text(
^^^^^^^^^^^^^^^^^^^^^^
File "/Users/kas772/Surendra/Resume-Matcher/streamlit_app.py", line 86, in create_annotated_text
tokens = nltk.word_tokenize(input_string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/kas772/Surendra/Resume-Matcher/lib/python3.11/site-packages/nltk/tokenize/init.py", line 129, in word_tokenize
sentences = [text] if preserve_line else sent_tokenize(text, language)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/kas772/Surendra/Resume-Matcher/lib/python3.11/site-packages/nltk/tokenize/init.py", line 106, in sent_tokenize
tokenizer = load(f"tokenizers/punkt/{language}.pickle")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/kas772/Surendra/Resume-Matcher/lib/python3.11/site-packages/nltk/data.py", line 750, in load
opened_resource = _open(resource_url)
^^^^^^^^^^^^^^^^^^^
File "/Users/kas772/Surendra/Resume-Matcher/lib/python3.11/site-packages/nltk/data.py", line 876, in open
return find(path
, path + [""]).open()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/kas772/Surendra/Resume-Matcher/lib/python3.11/site-packages/nltk/data.py", line 583, in find
raise LookupError(resource_not_found)
LookupError:


Resource punkt not found.
Please use the NLTK Downloader to obtain the resource:

import nltk
nltk.download('punkt')

For more information see: https://www.nltk.org/data.html

Attempted to load tokenizers/punkt/PY3/english.pickle

Searched in:
- '/Users/kas772/nltk_data'
- '/Users/kas772/Surendra/Resume-Matcher/nltk_data'
- '/Users/kas772/Surendra/Resume-Matcher/share/nltk_data'
- '/Users/kas772/Surendra/Resume-Matcher/lib/nltk_data'
- '/usr/share/nltk_data'
- '/usr/local/share/nltk_data'
- '/usr/lib/nltk_data'
- '/usr/local/lib/nltk_data'
- ''


Shows incorrect number of resume files available.

Issue Title

Deleted default resume files from Data/Resumes. Placed my resume file to the path and ran the tool. It shows that there are 6 resume files available to analyze.

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Deleted default resume files from Data/Resumes. Placed my resume file to the path and ran the tool. It shows that there are 6 resume files available to analyze.

Steps to Reproduce

  1. Delete default resume files available with the project.
  2. Add a different resume to the directory.
  3. Run the tool.

Screenshots / Code Snippets (if applicable)

Screenshot 2023-08-05 at 8 31 49 PM

Adding a back to top button.

Is your feature request related to a problem? Please describe.
I would like to add the back to top button to the home page using smooth scroll for good user experience.

Describe the solution you'd like
This would enhance the website and user flow will be made easy.

Please assign this issue to me under HacktoberFest 2023.

More examples and screenshots in docs

Issue Title

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

The docs are missing some examples and use cases along with related screenshots on how to use the tool.

Expected Behavior

Current Behavior

Steps to Reproduce

Screenshots / Code Snippets (if applicable)

Environment

  • Operating System:
  • Browser (if applicable):
  • Version/Commit ID (if applicable):

Possible Solution (if you have any in mind)

I am happy to write some examples and take screenshots. Please consider assigning this issue to me.

Additional Information

[Errno -3] Temporary failure in name resolution

  1. Installed version - v0.1.0-alpha.1

  2. added config.yml file with values

  3. run command streamlit run streamlit_app.py

Getting this error

2023-09-11 12:01:14,996 - scripts.similarity.get_similarity_score - INFO - Started getting similarity score
2023-09-11 12:01:15.062 Uncaught app exception
Traceback (most recent call last):
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_exceptions.py", line 10, in map_exceptions
yield
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_backends/sync.py", line 212, in connect_tcp
sock = socket.create_connection(
File "/usr/lib/python3.10/socket.py", line 824, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib/python3.10/socket.py", line 955, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -3] Temporary failure in name resolution

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpx/_transports/default.py", line 66, in map_httpcore_exceptions
yield
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpx/_transports/default.py", line 228, in handle_request
resp = self._pool.handle_request(req)
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_sync/connection_pool.py", line 262, in handle_request
raise exc
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_sync/connection_pool.py", line 245, in handle_request
response = connection.handle_request(request)
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_sync/connection.py", line 99, in handle_request
raise exc
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_sync/connection.py", line 76, in handle_request
stream = self._connect(request)
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_sync/connection.py", line 124, in _connect
stream = self._network_backend.connect_tcp(**kwargs)
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_backends/sync.py", line 211, in connect_tcp
with map_exceptions(exc_map):
File "/usr/lib/python3.10/contextlib.py", line 153, in exit
self.gen.throw(typ, value, traceback)
File "/root/Resume-Matcher/env/lib/python3.10/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions
raise to_exc(exc) from exc
httpcore.ConnectError: [Errno -3] Temporary failure in name resolution

Any idea what's wrong ?

Use Poetry for dependency management

Issue Title

Use Poetry for dependency management

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Both Pip and Poetry are powerful package managers that can be used to manage dependencies in Python. Pip is the default package manager that is best for small projects where you have a small number of dependencies. Poetry is a modern package/dependency manager that is best suited for large and complex projects.

Expected Behavior

Poetry will be used for package/dependency management to make it simplified and more consistent across different platforms. It supports lock files to ensure consistent installations. Different poetry commands will be executed. For example, poetry install, poetry add package-name, poetry update etc.

Current Behavior

Currently, Pip is being used as a package manager which installs dependencies from the requirements.txt file.

Steps to Reproduce

  1. pip install poetry, if poetry is not installed in your virtual environment
  2. poetry install, this will install all of your dependencies
  3. poetry update, if you want to update one/more packages

Screenshots / Code Snippets (if applicable)

Environment

  • Operating System: Windows, MacOS, Linux
  • Browser (if applicable):
  • Version/Commit ID (if applicable):

Possible Solution (if you have any in mind)

Additional Information

Not working properly

I've tried this project and added my own dataset and in output it didn't gave correct score.

Can't get Cohere free api key

Issue Title

Can't get a free api key

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Can't get a free api key

Expected Behavior

Current Behavior

Steps to Reproduce

Screenshots / Code Snippets (if applicable)

image

Environment

  • Operating System:
  • Browser (if applicable):
  • Version/Commit ID (if applicable):

Possible Solution (if you have any in mind)

Additional Information

Lookup error on 'extracted keywords from resume'

Issue Title

Error occuring, looks like an import error. All readme steps followed properly.

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

After starting the streamlit server locally, on extracting keywords from the resume, it displays a lookup error.

Expected Behavior

The streamlit server to display the words extracted from the resume.

Current Behavior

An error is currently displaying.

Steps to Reproduce

  1. Clone repo
  2. Initialise venv
  3. install dependencies
  4. remove exsisting resumes and job descriptions.
  5. Add in new Job description .pdf and Resume .pdf
  6. Parse them
  7. start the streamlit server.

Screenshots / Code Snippets (if applicable)

Error:
LookupError: ********************************************************************** Resource οΏ½[93mpunktοΏ½[0m not found. Please use the NLTK Downloader to obtain the resource: οΏ½[31m>>> import nltk >>> nltk.download('punkt') οΏ½[0m For more information see: https://www.nltk.org/data.html Attempted to load οΏ½[93mtokenizers/punkt/PY3/english.pickleοΏ½[0m Searched in: - '/Users/thomasbooth/nltk_data' - '/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/nltk_data' - '/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/share/nltk_data' - '/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/lib/nltk_data' - '/usr/share/nltk_data' - '/usr/local/share/nltk_data' - '/usr/lib/nltk_data' - '/usr/local/lib/nltk_data' - '' **********************************************************************
Traceback:
File "/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/lib/python3.11/site-packages/streamlit/runtime/scriptrunner/script_runner.py", line 552, in _run_script exec(code, module.__dict__) File "/Users/thomasbooth/Documents/Personal/Resume-Matcher/streamlit_app.py", line 160, in <module> annotated_text(create_annotated_text( ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/thomasbooth/Documents/Personal/Resume-Matcher/streamlit_app.py", line 86, in create_annotated_text tokens = nltk.word_tokenize(input_string) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/lib/python3.11/site-packages/nltk/tokenize/__init__.py", line 129, in word_tokenize sentences = [text] if preserve_line else sent_tokenize(text, language) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/lib/python3.11/site-packages/nltk/tokenize/__init__.py", line 106, in sent_tokenize tokenizer = load(f"tokenizers/punkt/{language}.pickle") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/lib/python3.11/site-packages/nltk/data.py", line 750, in load opened_resource = _open(resource_url) ^^^^^^^^^^^^^^^^^^^ File "/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/lib/python3.11/site-packages/nltk/data.py", line 876, in _open return find(path_, path + [""]).open() ^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/thomasbooth/Documents/Personal/Resume-Matcher/env/lib/python3.11/site-packages/nltk/data.py", line 583, in find raise LookupError(resource_not_found)

Environment

  • Operating System: Mac OS: Ventura 13.4
  • Browser (if applicable): Chrome
  • Version/Commit ID (if applicable): Im on main branch.

Possible Solution (if you have any in mind)

Additional Information

Create Wiki Pages for Resume Matcher

Issue Title

Create a wiki page that describes Resume Matcher and the following:

  • How to Install with images + platform specific instructions.
  • What does each visualization do, inference.

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Feature - Skill Gap Analysis

Issue Title

Add Skill Gap Analysis Feature

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Add a new feature called "Skill Gap Analysis" to Resume Matcher. This feature will help users identify gaps between their skills and job requirements, providing personalized insights and actionable recommendations to bridge those gaps effectively. It aims to empower users with data-driven decisions and improve their chances of landing desired jobs.

Expected Behavior

The "Skill Gap Analysis" feature will enable users to understand their strengths and weaknesses, proactively improve skills, and enhance their job search success.

Steps to Reproduce

  1. Open Resume Matcher web application.
  2. Log in or sign up for an account.
  3. Upload your resume.
  4. Copy and paste a job description.
  5. Click on "Skill Gap Analysis" button/link.
  6. Wait for the analysis to complete.
  7. View the skill comparison and gap identification results.
  8. Review provided recommendations.
  9. Take action to improve identified skill gaps.
  10. Reanalyze after skill improvement.
  11. Provide feedback to the Resume Matcher team.

In local after running python run_first.py resumes and job description are not being processed into json..

have resumes in data folder and run run_first.py
python run_first.py
below are logs for the above command

2023-10-03 18:34:05,089 (run_first.py:31) - INFO: Started to read from Data/Resumes
2023-10-03 18:34:05,089 (run_first.py:28) - INFO: Deleted old files from Data/Processed/Resumes
2023-10-03 18:34:05,089 (run_first.py:38) - INFO: Reading from Data/Resumes is now complete.
2023-10-03 18:34:05,089 (run_first.py:48) - INFO: Started parsing the resumes.
2023-10-03 18:34:09,600 (core.py:64) - INFO: loaded 'en_core_web_md' spaCy language pipeline
^[[15~^[[15~^[[15~^[[15~An error occurred: module 'networkx' has no attribute 'pagerank_scipy'
2023-10-03 18:36:03,071 (run_first.py:52) - INFO: Parsing of the resumes is now complete.
2023-10-03 18:36:03,072 (run_first.py:54) - INFO: Started to read from Data/JobDescription
2023-10-03 18:36:03,072 (run_first.py:28) - INFO: Deleted old files from Data/Processed/JobDescription
2023-10-03 18:36:03,072 (run_first.py:61) - INFO: Reading from Data/JobDescription is now complete.
2023-10-03 18:36:03,072 (run_first.py:72) - INFO: Started parsing the Job Descriptions.
An error occurred: module 'networkx' has no attribute 'pagerank_scipy'
2023-10-03 18:36:03,763 (run_first.py:76) - INFO: Parsing of the Job Descriptions is now complete.
2023-10-03 18:36:03,763 (run_first.py:77) - INFO: Success now run `streamlit run streamlit_second.py`

Better support of PDF generated by Word (Export menu)

Is your feature request related to a problem? Please describe.
1- Parsed Resume Data
They are strange font changes while everything is smooth on Word/PDF
Screenshot 2023-12-06 at 15 45 18

2-Now let's take a look at the extracted keywords from the resume.
It seems the engine misinterpreted an html separator:
Screenshot 2023-12-06 at 15 47 51

Describe the solution you'd like
Text should be better extracted and layout code should be properly removed.

Describe alternatives you've considered
while ATS is crap, maybe you want to recognize company name; for example if there is the company ABC Systems, we should know consider the word Systems in the entity?

Additional context
I was thinking for this project that an AI would experiment changes until the ATS scores reach a certain level?

Deleting processed files before running run_first.py

Issue Title

Make adding new resumes and job descriptions easier

Type

  • Big
  • [ x] Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Adding new resume or job description is troublesome cos i need to manually delete the existing processed files

Expected Behavior

Auto delete all files under processed folder before generating new json files

Current Behavior

Duplicate files will be generated upon adding new resume and job description

Unable To Start Webapp

Describe the bug
I get the Error: connect ECONNREFUSED 127.0.0.1:8000 error when I try to run npm run dev, so I tried to run npm run fastapi-dev in another terminal. However, I get an error saying: sh: 1: source: not found.

Full bug error from npm run fastapi-dev:

> [email protected] fastapi-dev
> source ../env/bin/activate && pip install -r ../requirements.txt && python -m uvicorn backend.api.index:app --reload

sh: 1: source: not found

To Reproduce
Steps to reproduce the behavior:

  1. Type npm run fastapi-dev.

Desktop:

  • OS: WSL2 (Ubuntu 22.04.3 LTS)

qdrant api key

Can you provide us with a link from where can we get the api key please ?

Having less than 2 resumes causes an error: "IndexError: list index out of range"

Issue Title

Having less than 2 resumes causes an error: "IndexError: list index out of range"

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

If you have 2 resumes or less, you will receive an error after launching the app with the command streamlit run streamlit_app.py (or streamlit run streamlit_second.py ). The slider defaults to the max index of the list. Resulting in an attempt to render a non-existent item. Also if you have only 1 resume, you shouldn't have a slider. And if you have no resume, some hint should be displayed to remind the user to add a resume.

This issue should help improve the UX for the time being until the new web app version is available to users.

Expected Behavior

  • If the user has only one resume, remove the slider and display the text "There is 1 resume present.", not "There are X resumes." Then make that resume become the default selection.
  • If the user has no resumes, display the text: "No resumes are present. Please add a resume, then refresh the app."
  • If the user has 2 resumes, there should be two options on the slider, not 3 like now.
  • If the user has more than 2 resumes present, each one will be represented by a slider breakpoint.

There should be no errors, no matter how many resumes the user has. The four points above make sure of that.

Current Behavior

If I have 1 resume, the slider will have 0, 1 and 2 indexes. 1 and 2 do not work. Therefore I need to set the slider to the index 0 to see relevant results.

Steps to Reproduce

  1. Add no more than 2 resumes.
  2. Use the cmd streamlit run streamlit_app.py .
  3. The app will open to an error (in the resume section) as the slider's default selection is set to the maximum index (for this case, 2).

Screenshots / Code Snippets (if applicable)

brave_cDGFzeWdfJ

Environment

  • Operating System: Windows 11 Pro, x64
  • Browser (if applicable): Brave, Version 1.57.49 Chromium: 116.0.5845.96 (Official Build) (64-bit)
  • Version/Commit ID (if applicable):

Possible Solution (if you have any in mind)

Add conditions to display the appropriate content for no resumes, 1 resume, and 1 or more resumes available.

Additional Information

I've worked on a solution and will follow up on this issue with a PR.

Issue with docker pull

Issue Title

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • [x ] Other (please specify):

Description

when doing a docker-compose up got the error regarding the dependencies !

Expected Behavior

Current Behavior

Steps to Reproduce

  1. docker-compose up

Screenshots / Code Snippets (if applicable)

Environment

  • Operating System: ubuntu
  • Browser (if applicable): no
  • Version/Commit ID (if applicable):

Possible Solution (if you have any in mind)

Additional Information

Downloading cohere-4.19.2-py3-none-any.whl.metadata (5.3 kB)
INFO: pip is still looking at multiple versions of qdrant-client to determine which version is compatible with other requirements. This could take a while.
INFO: This is taking longer than usual. You might need to provide the dependency resolver with stricter constraints to reduce runtime. See https://pip.pypa.io/warnings/backtracking for guidance. If you want to abort this run, press Ctrl + C.
ERROR: Cannot install -r requirements.txt (line 101), -r requirements.txt (line 112), -r requirements.txt (line 113), -r requirements.txt (line 55), -r requirements.txt (line 69), -r requirements.txt (line 83), typing_extensions==4.7.1 and urllib3==2.0.3 because these package versions have conflicting dependencies.

The conflict is caused by:
The user requested urllib3==2.0.3
requests 2.31.0 depends on urllib3<3 and >=1.21.1
cohere 4.19.2 depends on urllib3<3 and >=1.26
qdrant-client 1.5.1 depends on urllib3<2.0.0 and >=1.26.14
The user requested urllib3==2.0.3
requests 2.31.0 depends on urllib3<3 and >=1.21.1
cohere 4.19.2 depends on urllib3<3 and >=1.26
qdrant-client 1.5.0 depends on urllib3<2.0.0 and >=1.26.14
The user requested urllib3==2.0.3
requests 2.31.0 depends on urllib3<3 and >=1.21.1
cohere 4.19.2 depends on urllib3<3 and >=1.26
qdrant-client 1.4.0 depends on urllib3<2.0.0 and >=1.26.14
The user requested urllib3==2.0.3
requests 2.31.0 depends on urllib3<3 and >=1.21.1
cohere 4.19.2 depends on urllib3<3 and >=1.26
qdrant-client 1.3.2 depends on urllib3<2.0.0 and >=1.26.14
The user requested typing_extensions==4.7.1
pydantic 1.10.11 depends on typing-extensions>=4.2.0
streamlit 1.24.1 depends on typing-extensions<5 and >=4.0.1
typer 0.9.0 depends on typing-extensions>=3.7.4.3
qdrant-client 1.3.1 depends on typing-extensions<4.6.0 and >=4.0.0
The user requested typing_extensions==4.7.1
pydantic 1.10.11 depends on typing-extensions>=4.2.0
streamlit 1.24.1 depends on typing-extensions<5 and >=4.0.1
typer 0.9.0 depends on typing-extensions>=3.7.4.3
qdrant-client 1.3.0 depends on typing-extensions<4.6.0 and >=4.0.0
The user requested typing_extensions==4.7.1
pydantic 1.10.11 depends on typing-extensions>=4.2.0
streamlit 1.24.1 depends on typing-extensions<5 and >=4.0.1
typer 0.9.0 depends on typing-extensions>=3.7.4.3
qdrant-client 1.2.0 depends on typing-extensions<4.6.0 and >=4.0.0

To fix this you could try to:

  1. loosen the range of package versions you've specified
  2. remove package versions to allow pip attempt to solve the dependency conflict

ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
ERROR: Service 'resume-matcher' failed to build : The command '/bin/sh -c pip install -r requirements.txt' returned a non-zero code: 1

Missing _lzma module

Issue Title

When running run_first I got error that _lzma module is missing.

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

It looks like it's something to do with pyenv, since _lzma is builtin the python since 3.3.

Environment

  • Operating System: MacOS

Possible Solution (if you have any in mind)

As suggested in pyenv/pyenv#1800 (comment)

You need to do brew install xz and then rebuilt pyenv

Conflict in Dependency Versions: urllib3 and typing_extensions

Issue Title

Conflict in Dependency Versions: urllib3 and typing_extensions

Type

  • Big
  • Feature Request
  • Bug
  • Documentation
  • Other (please specify):

Description

There is a conflict in the dependency versions specified in the requirements.txt file, which is preventing the installation of the required packages. The conflict is primarily between the versions of urllib3 and typing_extensions required by different packages.

Expected Behavior

I expected to be able to install the packages specified in the requirements.txt file without any conflicts or issues.

Current Behavior

I encountered the following error message during the installation process:

ERROR: Cannot install -r requirements.txt (line 1), -r requirements.txt (line 101), -r requirements.txt (line 112), -r requirements.txt (line 113), -r requirements.txt (line 55), -r requirements.txt (line 69), -r requirements.txt (line 83), typing_extensions==4.7.1 and urllib3==2.0.3 because these package versions have conflicting dependencies.

The conflict is caused by:
    The user requested urllib3==2.0.3
    requests 2.31.0 depends on urllib3<3 and >=1.21.1
    cohere 4.19.2 depends on urllib3<3 and >=1.26
    qdrant-client 1.5.0 depends on urllib3<2.0.0 and >=1.26.14
    The user requested urllib3==2.0.3
    requests 2.31.0 depends on urllib3<3 and >=1.21.1
    cohere 4.19.2 depends on urllib3<3 and >=1.26
    qdrant-client 1.4.0 depends on urllib3<2.0.0 and >=1.26.14
    The user requested urllib3==2.0.3
    requests 2.31.0 depends on urllib3<3 and >=1.21.1
    cohere 4.19.2 depends on urllib3<3 and >=1.26
    qdrant-client 1.3.2 depends on urllib3<2.0.0 and >=1.26.14
    The user requested typing_extensions==4.7.1
    altair 5.0.1 depends on typing-extensions>=4.0.1; python_version < "3.11"
    pydantic 1.10.11 depends on typing-extensions>=4.2.0
    streamlit 1.24.1 depends on typing-extensions<5 and >=4.0.1
    typer 0.9.0 depends on typing-extensions>=3.7.4.3
    qdrant-client 1.3.1 depends on typing-extensions<4.6.0 and >=4.0.0
    The user requested typing_extensions==4.7.1
    altair 5.0.1 depends on typing-extensions>=4.0.1; python_version < "3.11"
    pydantic 1.10.11 depends on typing-extensions>=4.2.0
    streamlit 1.24.1 depends on typing-extensions<5 and >=4.0.1
    typer 0.9.0 depends on typing-extensions>=3.7.4.3
    qdrant-client 1.3.0 depends on typing-extensions<4.6.0 and >=4.0.0
    The user requested typing_extensions==4.7.1
    altair 5.0.1 depends on typing-extensions>=4.0.1; python_version < "3.11"
    pydantic 1.10.11 depends on typing-extensions>=4.2.0
    streamlit 1.24.1 depends on typing-extensions<5 and >=4.0.1
    typer 0.9.0 depends on typing-extensions>=3.7.4.3
    qdrant-client 1.2.0 depends on typing-extensions<4.6.0 and >=4.0.0

Steps to Reproduce

  1. Clone the repository.
  2. Attempt to install the packages specified in the requirements.txt file using pip.

Environment

  • Operating System: Windows 11 x64
  • Python-version : 3.10.5, pip version 23.2.1
  • Version/Commit ID (if applicable): [Specify the version or commit ID of the repository]

Possible Solution (if you have any in mind)

One possible solution to resolve this conflict is to update the requirements.txt file by loosening the version constraints for urllib3 and typing_extensions to allow for compatible versions to be installed. Alternatively, you can remove version constraints altogether and let pip attempt to resolve the dependencies automatically.

Additional Information

To recreate the same error:

  1. clone the repo
  2. create venv using python -m venv env
  3. activate env
  4. pip install -r requirements.txt

Shift docs to a "Docs" folder.

We already have Resume-Matcher docs here.

Goal is:

  1. To have them in this repository.
  2. Have proper instructions on how to add API keys from Cohere and Qdrant.
  3. How to install on Mac, Ubuntu, and Windows with screenshots.
  4. Webapp running instructions.

All of this should be done in a detailed and concise manner. Information should be easily readable. I'd prefer someone with good writing skills. But y'all can surprise me.

Use sidebar to utilize the screen area better

Is your feature request related to a problem? Please describe.
The intro and links area takes much space that could be instead utilized by the actual app

Describe the solution you'd like
Sharing the links in sidebar would make it available at all times and will also not hinder with the application's usability

Describe alternatives you've considered
N/A - this is a minor cosmetic change - #182

Additional context
Can make it look something like this:
image

May I know where is the score compute?

Hi,
very interesting work!
when I look into it, it shows score simply represents a given data in code. And it does not compute my resume. so where is the score actually computed?

pip issue Arch Linux

Issue Title

pip Installation Issue on Manjaro

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

I am encountering an issue while trying to install dependencies using pip install -r requirements.txt on Manjaro. The error message I am receiving is as follows:

error: externally-managed-environment

Γ— This environment is externally managed
╰─> To install Python packages system-wide, try 'pacman -S
    python-xyz', where xyz is the package you are trying to
    install.
    
    If you wish to install a non-Arch-packaged Python package,
    create a virtual environment using 'python -m venv path/to/venv'.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip.
    
    If you wish to install a non-Arch packaged Python application,
    it may be easiest to use 'pipx install xyz', which will manage a
    virtual environment for you. Make sure you have python-pipx
    installed via pacman.

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

Expected Behavior

I expect pip install -r requirements.txt to install the required Python packages as specified in the requirements.txt file.

Steps to Reproduce

  1. Run pip install -r requirements.txt.

Environment

  • Operating System: Manjaro

Move API keys and qdrant URL from config file to environment varibales.

Issue Title

Place API KEY and URL as environment variable instead of in YAML config file.

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Currently cohere and qdrant api keys are in a yaml config file.

Expected Behavior

Use .env file to store api keys and url as environment variables.

Current Behavior

config.yml(File) is in .gitignore so that Git should ignore this file. But that is not an appropriate way to handle it.

This is a sensitive data and user can accidentally commit this file.

Steps to Reproduce

Screenshots / Code Snippets (if applicable)

Environment

  • Operating System:
  • Browser (if applicable):
  • Version/Commit ID (if applicable):

Possible Solution (if you have any in mind)

We can use python-dotenv module to read environment variables from .env file.

Additional Information

Streamlit App fails if base folder is not named "Resume-Matcher"

Issue Title

streamlit_app does not work if the imported directory differs from "Resume-Matcher"

Type

  • Big
  • Feature Request
  • Info
  • [ x] Bug
  • Documentation
  • Other (please specify):

Description

This script keeps looking for "Resume-Matcher" folder. If you've renamed the imported repo folder to anything else, the streamlit_app script will never load.

cwd = find_path('Resume-Matcher')

cwd = find_path('Resume-Matcher')

Expected Behavior

streamlit_app should load without issues

Current Behavior

streamlit_app does not load at all. Have to force close streamlit from Task Manager

Steps to Reproduce

  1. Import git repo into a folder named anything other than "Resume-Matcher"
  2. git clone https://github.com/srbhr/Resume-Matcher.git Test
  3. Run the normal steps
  4. Try to run streamlit run streamlit_app.py

Screenshots / Code Snippets (if applicable)

N/A

Environment

  • Operating System: Win 10
  • Browser (if applicable): Firefox
  • Version/Commit ID (if applicable): main

Possible Solution (if you have any in mind)

Remove the custom find_path function. The logic in this function will iteratively keep going back 1 level and search again for the folder. Possible infinite loop scenario - function uses While True. Use session state to hold the directory paths.

Additional Information

N/A

Modify README.md

Issue Title

Modify README.md

Type

  • Big
  • Feature Request
  • Info
  • [ x] Bug
  • Documentation
  • Other (please specify):

Description

There is a repeated line README.md

Throws out of range exception when only 1 resume is provided.

Issue Title

Throws out of range exception when only 1 resume is provided.

Type

  • Big
  • Feature Request
  • Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Throws out of range exception when only 1 resume is provided. List size is 1 but slider gives numbers 0,1,2 due to current implementation. Hence there is an out of range exception due to these numbers.

Screenshots / Code Snippets (if applicable)

Screenshot 2023-08-05 at 9 27 11 PM

Environment

  • Operating System:
  • Browser (if applicable):
  • Version/Commit ID (if applicable):

Possible Solution (if you have any in mind)

Additional Information

Modifications needed in extracting phone numbers from resume text.

Issue Title

Modifications needed in extracting phone numbers from resume text

Type

  • Big
  • Feature Request
  • ["x"] Info
  • Bug
  • Documentation
  • Other (please specify):

Description

Tried to extract 10 digit phone number (including country codes) by given regex in extractor.py file but it's is not identifying any.

Expected Behavior

It should pick 10 digit phone number (with or without country codes ) text.

Possible Solution (if you have any in mind)

I modified the regex and replaced with existing.
Modified regex---> r'[+]?[(]?[0-9]{3}[)]?[-\s.]?[0-9]{3}[-\s.]?[0-9]{4,6}'
I removed "^" and "$" characters from start and end of the regex.
Now it's working properly.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.