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( """
Количество совпадающих навыков: {}
Совпадающие навыки:
{}