fruitpicker01 commited on
Commit
0f89a9a
·
verified ·
1 Parent(s): 1b0cba1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +11 -18
app.py CHANGED
@@ -19,6 +19,8 @@ from datetime import datetime, timedelta
19
  import plotly.express as px
20
  from sklearn.feature_extraction.text import TfidfVectorizer
21
  from sklearn.metrics.pairwise import cosine_similarity
 
 
22
 
23
 
24
  morph = pymorphy2.MorphAnalyzer()
@@ -697,7 +699,8 @@ def load_previous_user_request_from_github():
697
 
698
  def get_reference_message(current_description, gender, generation, psychotype, business_stage, industry, legal_form):
699
  import io
700
- import numpy as np # Убедитесь, что NumPy импортирован
 
701
  repo = "fruitpicker01/Storage_dev"
702
  file_path = "messages.csv"
703
  url = f"https://api.github.com/repos/{repo}/contents/{file_path}"
@@ -747,47 +750,37 @@ def get_reference_message(current_description, gender, generation, psychotype, b
747
  print("Сообщения с заданными параметрами не найдены.")
748
  return None
749
 
750
- # Проверяем наличие столбца 'Описание предложения'
751
  if 'Описание предложения' not in filtered_df.columns:
752
  print("Описание предложения отсутствует в данных.")
753
  return None
754
 
755
- # Заменяем NaN на пустые строки в 'Описание предложения'
756
  filtered_df['Описание предложения'] = filtered_df['Описание предложения'].fillna('')
757
 
758
- # Собираем описания для вычисления сходства
 
759
  descriptions = filtered_df['Описание предложения'].tolist()
760
- descriptions.insert(0, current_description) # Добавляем текущее описание в начало списка
761
 
762
- # Вычисляем TF-IDF векторы и косинусное сходство
763
- vectorizer = TfidfVectorizer()
764
- tfidf_matrix = vectorizer.fit_transform(descriptions)
765
- cosine_similarities = cosine_similarity(tfidf_matrix[0:1], tfidf_matrix[1:]).flatten()
766
 
767
  # Находим максимальное косинусное сходство
768
  max_similarity = cosine_similarities.max()
769
 
770
- # Находим индексы, где косинусное сходство равно максимальному
771
  max_similarity_indices = np.where(cosine_similarities == max_similarity)[0]
772
 
773
  # Получаем строки с максимальным сходством
774
  similar_rows = filtered_df.iloc[max_similarity_indices]
775
 
776
- # Проверяем наличие столбца 'Timestamp'
777
  if 'Timestamp' not in similar_rows.columns:
778
  print("Столбец 'Timestamp' отсутствует в данных.")
779
- # Если нет 'Timestamp', выбираем первую строку
780
  similar_row = similar_rows.iloc[0]
781
  else:
782
- # Создаем копию DataFrame, чтобы избежать предупреждений
783
  similar_rows = similar_rows.copy()
784
- # Преобразуем 'Timestamp' в числовой формат (предполагая, что это UNIX-время)
785
  similar_rows['Timestamp'] = pd.to_numeric(similar_rows['Timestamp'], errors='coerce')
786
-
787
- # Сортируем строки по 'Timestamp' в порядке убывания
788
  similar_rows = similar_rows.sort_values(by='Timestamp', ascending=False)
789
-
790
- # Выбираем первую строку (с самым новым 'Timestamp')
791
  similar_row = similar_rows.iloc[0]
792
 
793
  if pd.notnull(similar_row.get("Откорректированное сообщение", None)) and similar_row["Откорректированное сообщение"].strip():
 
19
  import plotly.express as px
20
  from sklearn.feature_extraction.text import TfidfVectorizer
21
  from sklearn.metrics.pairwise import cosine_similarity
22
+ from sentence_transformers import SentenceTransformer, util
23
+ import numpy as np
24
 
25
 
26
  morph = pymorphy2.MorphAnalyzer()
 
699
 
700
  def get_reference_message(current_description, gender, generation, psychotype, business_stage, industry, legal_form):
701
  import io
702
+ import numpy as np
703
+ from sentence_transformers import SentenceTransformer
704
  repo = "fruitpicker01/Storage_dev"
705
  file_path = "messages.csv"
706
  url = f"https://api.github.com/repos/{repo}/contents/{file_path}"
 
750
  print("Сообщения с заданными параметрами не найдены.")
751
  return None
752
 
 
753
  if 'Описание предложения' not in filtered_df.columns:
754
  print("Описание предложения отсутствует в данных.")
755
  return None
756
 
 
757
  filtered_df['Описание предложения'] = filtered_df['Описание предложения'].fillna('')
758
 
759
+ # Используем модель для получения эмбеддингов
760
+ model = SentenceTransformer('sergeyzh/rubert-tiny-turbo') # Это быстрая и легкая модель
761
  descriptions = filtered_df['Описание предложения'].tolist()
762
+ descriptions.insert(0, current_description) # Добавляем текущее описание
763
 
764
+ embeddings = model.encode(descriptions)
765
+ cosine_similarities = cosine_similarity([embeddings[0]], embeddings[1:]).flatten()
 
 
766
 
767
  # Находим максимальное косинусное сходство
768
  max_similarity = cosine_similarities.max()
769
 
770
+ # Находим индексы с максимальным сходством
771
  max_similarity_indices = np.where(cosine_similarities == max_similarity)[0]
772
 
773
  # Получаем строки с максимальным сходством
774
  similar_rows = filtered_df.iloc[max_similarity_indices]
775
 
776
+ # Обработка Timestamp
777
  if 'Timestamp' not in similar_rows.columns:
778
  print("Столбец 'Timestamp' отсутствует в данных.")
 
779
  similar_row = similar_rows.iloc[0]
780
  else:
 
781
  similar_rows = similar_rows.copy()
 
782
  similar_rows['Timestamp'] = pd.to_numeric(similar_rows['Timestamp'], errors='coerce')
 
 
783
  similar_rows = similar_rows.sort_values(by='Timestamp', ascending=False)
 
 
784
  similar_row = similar_rows.iloc[0]
785
 
786
  if pd.notnull(similar_row.get("Откорректированное сообщение", None)) and similar_row["Откорректированное сообщение"].strip():