|
|
import streamlit as st |
|
|
import requests |
|
|
|
|
|
@st.cache_data |
|
|
def get_top_relevant_normalized_job_titles(job_title, num_answers): |
|
|
|
|
|
api_endpoint = f'http://james-mapping.xyz/api/v1/related?job_title={job_title}&num_answers={num_answers}' |
|
|
|
|
|
try: |
|
|
|
|
|
response = requests.get(api_endpoint) |
|
|
|
|
|
if response.status_code == 200: |
|
|
|
|
|
response_data = response.json() |
|
|
normed_job_title_list = response_data.get("normed_job_title_list", []) |
|
|
|
|
|
if not normed_job_title_list: |
|
|
return ["No normalized titles found"] |
|
|
|
|
|
|
|
|
while len(normed_job_title_list) < 10: |
|
|
|
|
|
num_answers += 1 |
|
|
api_endpoint = f'http://james-mapping.xyz/api/v1/related?job_title={job_title}&num_answers={num_answers}' |
|
|
response = requests.get(api_endpoint) |
|
|
response_data = response.json() |
|
|
new_titles = response_data.get("normed_job_title_list", []) |
|
|
normed_job_title_list.extend(new_titles) |
|
|
|
|
|
return normed_job_title_list |
|
|
else: |
|
|
|
|
|
return [f'Error: {response.status_code}'] |
|
|
except requests.exceptions.RequestException as e: |
|
|
return [f'Error: {e}'] |
|
|
|
|
|
def main(): |
|
|
|
|
|
st.set_page_config(page_title='JAMES API Demo', layout='centered') |
|
|
st.title('JAMES Job Title Mapping') |
|
|
|
|
|
|
|
|
job_title = st.text_input('Enter a job title') |
|
|
num_answers = st.number_input('Select Number of Answers', min_value=1, max_value=10, step=1, value=5) |
|
|
|
|
|
|
|
|
if st.button(f'Get Top {num_answers} Relevant Titles'): |
|
|
|
|
|
top_normalized_titles = get_top_relevant_normalized_job_titles(job_title, num_answers) |
|
|
|
|
|
st.subheader(f'Top {num_answers} Relevant Titles:') |
|
|
for i, normed_job_title in enumerate(top_normalized_titles[:num_answers], 1): |
|
|
st.text(f'{i}: {normed_job_title}') |
|
|
|
|
|
if __name__ == '__main__': |
|
|
main() |
|
|
|