Spaces:
Sleeping
Sleeping
File size: 5,339 Bytes
561c472 55031b9 561c472 8cdea13 be6b2fb 561c472 e890e86 561c472 52b2523 561c472 9ec1240 561c472 084c60c 55031b9 561c472 a4648d8 4a268ab 084c60c a4648d8 9ec1240 52b2523 8cdea13 55031b9 8cdea13 9ec1240 52b2523 8cdea13 084c60c 8cdea13 084c60c 8cdea13 55031b9 8cdea13 55031b9 52b2523 633f2ac 52b2523 9ec1240 8cdea13 9ec1240 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
import pandas as pd
import streamlit as st
import numpy as np
# Загрузка данных из Excel файлов
vacancy = 'vacancy_new_new.xlsx'
resume = 'resume_new_new.xlsx'
file_nkz = 'label_NKZ.xlsx'
file_skills = 'label_skills_new.xlsx'
df_vacancy = pd.read_excel(vacancy)
df_resume = pd.read_excel(resume)
df_nkz = pd.read_excel(file_nkz)
df_skills = pd.read_excel(file_skills)
# Проверка, что в файлах есть нужные колонки
required_columns = {'skills', 'name', 'NKZ', 'id'}
for df, fname in zip([df_vacancy, df_resume, df_nkz, df_skills], [vacancy, resume, file_nkz, file_skills]):
if not required_columns.intersection(df.columns):
raise ValueError(f"Файл {fname} должен содержать колонки {required_columns}")
# Streamlit интерфейс
st.title("Поиск совпадений по навыкам")
# Ввод текста для добавления в колонку 'name'
new_name = st.text_input("Введите название")
# Выбор из колонки 'NKZ' из файла label_NKZ
nkz_options = df_nkz['name'].unique().tolist()
selected_nkz = st.selectbox("Выберите профессию по НКЗ", nkz_options)
# Множественный выбор из колонки 'skills' из файла label_skills
if selected_nkz:
nkz_code = df_nkz[df_nkz['name'] == selected_nkz]['NKZ'].values[0]
skills_options = sorted(df_skills[df_skills['NKZ'] == nkz_code]['skills'].unique().tolist())
selected_skills = st.multiselect("Выберите навыки", skills_options)
else:
selected_skills = []
# Выбор файла для поиска совпадений
file_option = st.selectbox("Выберите тип", ("Вакансия", "Резюме"))
# Выбор файла для записи новой записи
write_option = "vacancy" if file_option == "Вакансия" else "resume"
# Кнопка для добавления новой записи
add_entry = st.button("Добавить новую запись")
if add_entry:
if new_name and selected_skills:
skills_ids = df_skills[df_skills['skills'].isin(selected_skills)]['id'].values
skills_ids_str = ','.join(map(str, skills_ids))
new_entry = pd.DataFrame({'name': [new_name], 'NKZ': [selected_nkz], 'skills': [' '.join(selected_skills)], 'arr': [skills_ids_str]})
if write_option == "vacancy":
df_vacancy = pd.concat([df_vacancy, new_entry], ignore_index=True)
df_vacancy.to_excel(vacancy, index=False)
else:
df_resume = pd.concat([df_resume, new_entry], ignore_index=True)
df_resume.to_excel(resume, index=False)
st.success("Новая запись была успешно добавлена.")
else:
st.error("Пожалуйста, введите имя и выберите навыки для добавления записи.")
# Кнопка для поиска совпадений
if st.button("Найти совпадения"):
if new_name and selected_skills:
# Определение DataFrame для поиска совпадений
df_to_search = df_vacancy if file_option == "Вакансия" else df_resume
skills_ids = set(df_skills[df_skills['skills'].isin(selected_skills)]['id'].values)
# Поиск совпадений по пересечению
matching_results = []
for index, row in df_to_search.iterrows():
if 'arr' in row and isinstance(row['arr'], str):
arr_values = set(map(int, row['arr'].split(',')))
intersection = skills_ids.intersection(arr_values)
if len(intersection) > len(selected_skills) / 2:
matching_skills = [df_skills[df_skills['id'] == skill_id]['skills'].values[0] for skill_id in intersection]
matching_results.append({
'Name': row['name'],
'Matching Skills Count': len(intersection),
'Matching Skills': matching_skills
})
# Вывод результатов
st.write("Результаты по найденным совпадениям:")
if matching_results:
for result in matching_results:
st.markdown(
"""
<div style="border: 1px solid #ddd; padding: 10px; border-radius: 5px; margin-bottom: 10px;">
<h4 style="margin: 0;">{}</h4>
<p><strong>Количество совпадающих навыков:</strong> {}</p>
<p><strong>Совпадающие навыки:</strong><br>
{}</p>
</div>
""".format(
result['Name'],
result['Matching Skills Count'],
'<br>'.join(['• ' + skill for skill in result['Matching Skills']])
),
unsafe_allow_html=True
)
else:
st.write("Нет совпадений.")
else:
st.error("Пожалуйста, введите имя и выберите навыки для сравнения.")
|