Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,15 +1,6 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
import pandas as pd
|
12 |
import streamlit as st
|
|
|
13 |
|
14 |
# Загрузка данных из четырех Excel файлов
|
15 |
vacancy = 'vacancy_new_new.xlsx'
|
@@ -23,8 +14,10 @@ df_nkz = pd.read_excel(file_nkz)
|
|
23 |
df_skills = pd.read_excel(file_skills)
|
24 |
|
25 |
# Проверка, что в файлах есть нужные колонки
|
26 |
-
|
27 |
-
|
|
|
|
|
28 |
|
29 |
# Streamlit интерфейс
|
30 |
st.title("Поиск совпадений по навыкам")
|
@@ -37,13 +30,12 @@ nkz_options = df_nkz['name'].unique().tolist()
|
|
37 |
selected_nkz = st.selectbox("Выберите профессию по НКЗ", nkz_options)
|
38 |
|
39 |
# Множественный выбор из колонки 'skills' из файла label_skills
|
40 |
-
|
41 |
-
|
42 |
-
selected_skills = st.multiselect("Выберите навыки", skills_options)
|
43 |
-
if selected_skills:
|
44 |
-
selected_ids = df_skills[df_skills['skills'].isin(selected_skills)]['id'].tolist()
|
45 |
else:
|
46 |
-
|
|
|
47 |
# Выбор файла для поиска совпадений
|
48 |
file_option = st.selectbox("Выберите тип", ("Вакансия", "Резюме"))
|
49 |
|
@@ -54,7 +46,7 @@ write_option = "resume" if file_option == "Вакансия" else "vacancy"
|
|
54 |
add_entry = st.button("Добавить новую запись")
|
55 |
if add_entry:
|
56 |
if new_name and selected_skills:
|
57 |
-
new_entry = pd.DataFrame({'name': [new_name], 'NKZ': [selected_nkz], 'skills': [' '.join(selected_skills)]})
|
58 |
if write_option == "vacancy":
|
59 |
df_vacancy = pd.concat([df_vacancy, new_entry], ignore_index=True)
|
60 |
df_vacancy.to_excel(vacancy, index=False)
|
@@ -67,51 +59,29 @@ if add_entry:
|
|
67 |
|
68 |
if st.button("Найти совпадения"):
|
69 |
if new_name and selected_skills:
|
70 |
-
# Добавление новой записи в противоположный файл
|
71 |
-
new_entry = pd.DataFrame({'name': [new_name], 'NKZ': [selected_nkz], 'skills': [' '.join(selected_skills)]})
|
72 |
-
if write_option == "vacancy":
|
73 |
-
df_vacancy = pd.concat([df_vacancy, new_entry], ignore_index=True)
|
74 |
-
df_vacancy.to_excel(vacancy, index=False)
|
75 |
-
else:
|
76 |
-
df_resume = pd.concat([df_resume, new_entry], ignore_index=True)
|
77 |
-
df_resume.to_excel(resume, index=False)
|
78 |
-
|
79 |
# Определение DataFrame для поиска совпадений
|
80 |
if file_option == "Вакансия":
|
81 |
-
|
82 |
-
names_to_compare = df_vacancy['name'].tolist()
|
83 |
else:
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
# Поиск совпадений по навыкам
|
88 |
matching_results = []
|
89 |
-
for i,
|
90 |
-
|
|
|
91 |
if match_count >= len(selected_skills) / 2:
|
92 |
matching_results.append({
|
93 |
-
'Name':
|
94 |
-
'Matching Skills': [skill for skill in selected_skills if skill in
|
95 |
'Match Count': match_count
|
96 |
})
|
97 |
-
|
98 |
-
# Вывод
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
for i, ids_array in enumerate(ids_to_compare):
|
103 |
-
min_len = min(len(selected_ids), len(ids_array))
|
104 |
-
if min_len > 1: # Для вычисления корреляции необходимо как минимум два элемента
|
105 |
-
correlation = np.corrcoef(selected_ids[:min_len], ids_array[:min_len])[0, 1]
|
106 |
-
else:
|
107 |
-
correlation = 0
|
108 |
-
if correlation > 0.5:
|
109 |
-
matching_results.append({
|
110 |
-
'Name': names_to_compare[i],
|
111 |
-
'Correlation': correlation
|
112 |
-
})
|
113 |
else:
|
114 |
st.write("Нет совпадений с как минимум половиной выбранных навыков.")
|
115 |
else:
|
116 |
st.error("Пожалуйста, введите имя и выберите навыки для сравнения.")
|
117 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import pandas as pd
|
2 |
import streamlit as st
|
3 |
+
import numpy as np
|
4 |
|
5 |
# Загрузка данных из четырех Excel файлов
|
6 |
vacancy = 'vacancy_new_new.xlsx'
|
|
|
14 |
df_skills = pd.read_excel(file_skills)
|
15 |
|
16 |
# Проверка, что в файлах есть нужные колонки
|
17 |
+
required_columns = {'skills', 'name', 'NKZ'}
|
18 |
+
for df, filename in zip([df_vacancy, df_resume, df_nkz, df_skills], [vacancy, resume, file_nkz, file_skills]):
|
19 |
+
if not required_columns.issubset(df.columns):
|
20 |
+
raise ValueError(f"Файл {filename} должен содержать колонки {required_columns}")
|
21 |
|
22 |
# Streamlit интерфейс
|
23 |
st.title("Поиск совпадений по навыкам")
|
|
|
30 |
selected_nkz = st.selectbox("Выберите профессию по НКЗ", nkz_options)
|
31 |
|
32 |
# Множественный выбор из колонки 'skills' из файла label_skills
|
33 |
+
if selected_nkz:
|
34 |
+
skills_options = df_skills[df_skills['NKZ'] == df_nkz[df_nkz['name'] == selected_nkz]['NKZ'].values[0]]['skills'].unique().tolist()
|
35 |
+
selected_skills = st.multiselect("Выберите навыки", sorted(skills_options))
|
|
|
|
|
36 |
else:
|
37 |
+
selected_skills = []
|
38 |
+
|
39 |
# Выбор файла для поиска совпадений
|
40 |
file_option = st.selectbox("Выберите тип", ("Вакансия", "Резюме"))
|
41 |
|
|
|
46 |
add_entry = st.button("Добавить новую запись")
|
47 |
if add_entry:
|
48 |
if new_name and selected_skills:
|
49 |
+
new_entry = pd.DataFrame({'name': [new_name], 'NKZ': [selected_nkz], 'skills': [', '.join(selected_skills)]})
|
50 |
if write_option == "vacancy":
|
51 |
df_vacancy = pd.concat([df_vacancy, new_entry], ignore_index=True)
|
52 |
df_vacancy.to_excel(vacancy, index=False)
|
|
|
59 |
|
60 |
if st.button("Найти совпадения"):
|
61 |
if new_name and selected_skills:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
62 |
# Определение DataFrame для поиска совпадений
|
63 |
if file_option == "Вакансия":
|
64 |
+
df_to_compare = df_vacancy
|
|
|
65 |
else:
|
66 |
+
df_to_compare = df_resume
|
67 |
+
|
|
|
68 |
# Поиск совпадений по навыкам
|
69 |
matching_results = []
|
70 |
+
for i, row in df_to_compare.iterrows():
|
71 |
+
existing_skills = row['skills'].split(', ')
|
72 |
+
match_count = sum(skill in existing_skills for skill in selected_skills)
|
73 |
if match_count >= len(selected_skills) / 2:
|
74 |
matching_results.append({
|
75 |
+
'Name': row['name'],
|
76 |
+
'Matching Skills': [skill for skill in selected_skills if skill in existing_skills],
|
77 |
'Match Count': match_count
|
78 |
})
|
79 |
+
|
80 |
+
# Вывод результатов
|
81 |
+
if matching_results:
|
82 |
+
st.write("Результаты с совпадением как минимум половины выбранных навыков:")
|
83 |
+
st.write(pd.DataFrame(matching_results))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
84 |
else:
|
85 |
st.write("Нет совпадений с как минимум половиной выбранных навыков.")
|
86 |
else:
|
87 |
st.error("Пожалуйста, введите имя и выберите навыки для сравнения.")
|
|