Spaces:
Sleeping
Sleeping
Update app.py
Browse files
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
|
|
|
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 |
-
|
763 |
-
|
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 |
-
#
|
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():
|