Spaces:
Sleeping
Sleeping
File size: 4,885 Bytes
561c472 55031b9 561c472 8cdea13 be6b2fb 561c472 e890e86 561c472 52b2523 561c472 9ec1240 561c472 52b2523 55031b9 561c472 a4648d8 9ec1240 52b2523 8cdea13 55031b9 8cdea13 9ec1240 52b2523 8cdea13 55031b9 8cdea13 55031b9 52b2523 8cdea13 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 |
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
skills_options = sorted(df_skills[df_skills['NKZ'] == df_nkz[df_nkz['name'] == selected_nkz]['NKZ'].values[0]]['skills'].unique().tolist())
selected_skills = st.multiselect("Выберите навыки", skills_options)
# Выбор файла для поиска совпадений
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]})
df_to_update = df_vacancy if write_option == "vacancy" else df_resume
df_to_update = pd.concat([df_to_update, new_entry], ignore_index=True)
df_to_update.to_excel(vacancy if write_option == "vacancy" else 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) > 0:
matching_results.append({
'Name': row['name'],
'Matching Skills Count': len(intersection),
'Matching Skills': intersection
})
# Вывод результатов
st.write("Результаты по найденным совпадениям:")
if matching_results:
for result in matching_results:
st.markdown(
f"""
<div style="border: 1px solid #ddd; padding: 10px; border-radius: 5px; margin-bottom: 10px;">
<h4 style="margin: 0;">{result['Name']}</h4>
<p><strong>Количество совпадающих навыков:</strong> {result['Matching Skills Count']}</p>
<p><strong>Совпадающие навыки:</strong> {', '.join(map(str, result['Matching Skills']))}</p>
</div>
""",
unsafe_allow_html=True
)
else:
st.write("Нет совпадений.")
else:
st.error("Пожалуйста, введите имя и выберите навыки для сравнения.")
|