Yerzhxn commited on
Commit
c357db0
·
verified ·
1 Parent(s): a79be0b

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +16 -12
app.py CHANGED
@@ -18,7 +18,7 @@ if 'skills' not in df_vacancy.columns or 'skills' not in df_resume.columns or 'n
18
  raise ValueError("Файлы должны содержать колонки 'skills', 'name', 'NKZ' и 'id'")
19
 
20
  # Streamlit интерфейс
21
- st.title("Поиск совпадений по навыкам на основе корреляции")
22
 
23
  # Ввод текста для добавления в колонку 'name'
24
  new_name = st.text_input("Введите название")
@@ -42,25 +42,29 @@ file_option = st.selectbox("Выберите тип", ("Вакансия", "Ре
42
 
43
  # Определение DataFrame для поиска совпадений
44
  if file_option == "Вакансия":
45
- ids_to_compare = df_vacancy['arr'].apply(lambda x: [int(i) for i in x.split(',')]).tolist()
46
  names_to_compare = df_vacancy['name'].tolist()
47
  else:
48
- ids_to_compare = df_resume['arr'].apply(lambda x: [int(i) for i in x.split(',')]).tolist()
49
  names_to_compare = df_resume['name'].tolist()
50
 
51
- # Вычисление корреляции для поиска сходства
 
52
  matching_results = []
53
  if selected_ids:
54
  for i, ids_array in enumerate(ids_to_compare):
55
- min_len = min(len(selected_ids), len(ids_array))
56
- if min_len > 1: # Для вычисления корреляции необходимо как минимум два элемента
57
- correlation = np.corrcoef(selected_ids[:min_len], ids_array[:min_len])[0, 1]
58
- else:
59
- correlation = 0
60
- if correlation > 0.5:
 
 
 
61
  matching_results.append({
62
  'Name': names_to_compare[i],
63
- 'Correlation': correlation
64
  })
65
 
66
  # Вывод результатов
@@ -71,7 +75,7 @@ if matching_results:
71
  f"""
72
  <div style="border: 1px solid #ddd; padding: 10px; border-radius: 5px; margin-bottom: 10px;">
73
  <h4 style="margin: 0;">{result['Name']}</h4>
74
- <p><strong>Корреляция:</strong> {result['Correlation']:.2f}</p>
75
  </div>
76
  """,
77
  unsafe_allow_html=True
 
18
  raise ValueError("Файлы должны содержать колонки 'skills', 'name', 'NKZ' и 'id'")
19
 
20
  # Streamlit интерфейс
21
+ st.title("Поиск совпадений по навыкам на основе косинусного сходства")
22
 
23
  # Ввод текста для добавления в колонку 'name'
24
  new_name = st.text_input("Введите название")
 
42
 
43
  # Определение DataFrame для поиска совпадений
44
  if file_option == "Вакансия":
45
+ ids_to_compare = df_vacancy['skills'].apply(lambda x: [int(i) for i in x.split(',')]).tolist()
46
  names_to_compare = df_vacancy['name'].tolist()
47
  else:
48
+ ids_to_compare = df_resume['skills'].apply(lambda x: [int(i) for i in x.split(',')]).tolist()
49
  names_to_compare = df_resume['name'].tolist()
50
 
51
+ # Вычисление косинусного сходства для поиска сходства
52
+ from sklearn.metrics.pairwise import cosine_similarity
53
  matching_results = []
54
  if selected_ids:
55
  for i, ids_array in enumerate(ids_to_compare):
56
+ # Дополнение меньшего массива нулями для одинаковой длины
57
+ max_len = max(len(selected_ids), len(ids_array))
58
+ selected_ids_padded = np.pad(selected_ids, (0, max_len - len(selected_ids)), 'constant')
59
+ ids_array_padded = np.pad(ids_array, (0, max_len - len(ids_array)), 'constant')
60
+
61
+ # Вычисление косинусного сходства
62
+ similarity = cosine_similarity([selected_ids_padded], [ids_array_padded])[0][0]
63
+
64
+ if similarity > 0.5:
65
  matching_results.append({
66
  'Name': names_to_compare[i],
67
+ 'Similarity': similarity
68
  })
69
 
70
  # Вывод результатов
 
75
  f"""
76
  <div style="border: 1px solid #ddd; padding: 10px; border-radius: 5px; margin-bottom: 10px;">
77
  <h4 style="margin: 0;">{result['Name']}</h4>
78
+ <p><strong>Косинусное сходство:</strong> {result['Similarity']:.2f}</p>
79
  </div>
80
  """,
81
  unsafe_allow_html=True