Yerzhxn commited on
Commit
55031b9
·
verified ·
1 Parent(s): e890e86

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -54
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
- if 'skills' not in df_vacancy.columns or 'skills' not in df_resume.columns or 'name' not in df_vacancy.columns or 'name' not in df_resume.columns or 'NKZ' not in df_nkz.columns or 'skills' not in df_skills.columns:
27
- raise ValueError("Файлы должны содержать колонки 'skills', 'name' и 'NKZ'")
 
 
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
- skills_options = sorted(df_skills[df_skills['NKZ'] == df_nkz[df_nkz['name'] == selected_nkz]['NKZ'].values[0]]['skills'].unique().tolist())
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
- selected_ids = []
 
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
- ids_to_compare = df_vacancy['arr'].apply(lambda x: [int(i) for i in x.split(',') if i.strip().isdigit()]).tolist()
82
- names_to_compare = df_vacancy['name'].tolist()
83
  else:
84
- ids_to_compare = df_resume['arr'].apply(lambda x: [int(i) for i in x.split(',') if i.strip().isdigit()]).tolist()
85
- names_to_compare = df_resume['name'].tolist()
86
-
87
  # Поиск совпадений по навыкам
88
  matching_results = []
89
- for i, skills_text in enumerate(skills_to_compare):
90
- match_count = sum(skill in skills_text for skill in selected_skills)
 
91
  if match_count >= len(selected_skills) / 2:
92
  matching_results.append({
93
- 'Name': names_to_compare[i],
94
- 'Matching Skills': [skill for skill in selected_skills if skill in skills_text],
95
  'Match Count': match_count
96
  })
97
-
98
- # Вывод результатов, где совпадение как минимум половины выбранных навыков
99
- st.write("Результаты с совпадением как минимум половины выбранных навыков:")
100
- matching_results = []
101
- if selected_ids:
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("Пожалуйста, введите имя и выберите навыки для сравнения.")