Update app.py
Browse files
app.py
CHANGED
|
@@ -154,7 +154,7 @@ except OSError as e:
|
|
| 154 |
st.stop() # Остановка выполнения приложения при ошибке
|
| 155 |
|
| 156 |
|
| 157 |
-
def classify_text(title, description
|
| 158 |
"""
|
| 159 |
Классифицирует текст и возвращает результаты в отсортированном виде.
|
| 160 |
|
|
@@ -170,7 +170,6 @@ def classify_text(title, description, show_all=False, threshold=0.95):
|
|
| 170 |
text = f"{title} {description}" # Объединяем заголовок и описание
|
| 171 |
topic_classifier = pipeline("text-classification", model=model, tokenizer=tokenizer, top_k = len(id_to_cat))
|
| 172 |
try:
|
| 173 |
-
|
| 174 |
results = topic_classifier(text)
|
| 175 |
# results = topic_classifier(text, candidate_labels, multi_label=True) # multi_label=True для нескольких меток
|
| 176 |
except Exception as e:
|
|
@@ -180,24 +179,16 @@ def classify_text(title, description, show_all=False, threshold=0.95):
|
|
| 180 |
for i in results[0]:
|
| 181 |
i['label'] = id_to_cat[int(i['label'].split('_')[1])]
|
| 182 |
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
-
|
| 187 |
-
|
| 188 |
-
|
| 189 |
-
cumulative_prob = 0
|
| 190 |
-
filtered_results = []
|
| 191 |
-
for i in results[0]:
|
| 192 |
-
filtered_results.append((i['label'], i['score']))
|
| 193 |
-
cumulative_prob += i['score']
|
| 194 |
-
if cumulative_prob >= threshold:
|
| 195 |
-
break
|
| 196 |
-
return filtered_results
|
| 197 |
|
| 198 |
|
| 199 |
# --- Интерфейс Streamlit ---
|
| 200 |
-
st.title("Классификация статей
|
| 201 |
|
| 202 |
# Ввод данных
|
| 203 |
title = st.text_input("Заголовок статьи")
|
|
@@ -211,18 +202,21 @@ if st.button("Классифицировать"):
|
|
| 211 |
with st.spinner("Идет классификация..."): # Индикатор загрузки
|
| 212 |
results = classify_text(title, description)
|
| 213 |
if results:
|
| 214 |
-
st.subheader("Результаты классификации (
|
|
|
|
| 215 |
for label, score in results:
|
| 216 |
st.write(f"- **{label}**: {score:.4f}")
|
|
|
|
|
|
|
|
|
|
| 217 |
|
| 218 |
# Кнопка "Показать все"
|
| 219 |
if st.button("Показать все категории"):
|
| 220 |
-
all_results = classify_text(title, description, candidate_labels, show_all=True)
|
| 221 |
st.subheader("Полные результаты классификации:")
|
| 222 |
-
for label, score in
|
| 223 |
st.write(f"- **{label}**: {score:.4f}")
|
| 224 |
else:
|
| 225 |
st.info("Не удалось получить результаты классификации.")
|
| 226 |
|
| 227 |
elif title or description: #небольшой костыль, чтобы при старте не было предупреждения
|
| 228 |
-
st.warning("Пожалуйста, заполните
|
|
|
|
| 154 |
st.stop() # Остановка выполнения приложения при ошибке
|
| 155 |
|
| 156 |
|
| 157 |
+
def classify_text(title, description):
|
| 158 |
"""
|
| 159 |
Классифицирует текст и возвращает результаты в отсортированном виде.
|
| 160 |
|
|
|
|
| 170 |
text = f"{title} {description}" # Объединяем заголовок и описание
|
| 171 |
topic_classifier = pipeline("text-classification", model=model, tokenizer=tokenizer, top_k = len(id_to_cat))
|
| 172 |
try:
|
|
|
|
| 173 |
results = topic_classifier(text)
|
| 174 |
# results = topic_classifier(text, candidate_labels, multi_label=True) # multi_label=True для нескольких меток
|
| 175 |
except Exception as e:
|
|
|
|
| 179 |
for i in results[0]:
|
| 180 |
i['label'] = id_to_cat[int(i['label'].split('_')[1])]
|
| 181 |
|
| 182 |
+
|
| 183 |
+
filtered_results = []
|
| 184 |
+
for i in results[0]:
|
| 185 |
+
filtered_results.append((i['label'], i['score']))
|
| 186 |
+
return filtered_results
|
| 187 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
|
| 189 |
|
| 190 |
# --- Интерфейс Streamlit ---
|
| 191 |
+
st.title("Классификация статей 1")
|
| 192 |
|
| 193 |
# Ввод данных
|
| 194 |
title = st.text_input("Заголовок статьи")
|
|
|
|
| 202 |
with st.spinner("Идет классификация..."): # Индикатор загрузки
|
| 203 |
results = classify_text(title, description)
|
| 204 |
if results:
|
| 205 |
+
st.subheader("Результаты классификации (top 95%):")
|
| 206 |
+
cumulative_prob = 0
|
| 207 |
for label, score in results:
|
| 208 |
st.write(f"- **{label}**: {score:.4f}")
|
| 209 |
+
cumulative_prob += score
|
| 210 |
+
if cumulative_prob >= 0.95:
|
| 211 |
+
break
|
| 212 |
|
| 213 |
# Кнопка "Показать все"
|
| 214 |
if st.button("Показать все категории"):
|
|
|
|
| 215 |
st.subheader("Полные результаты классификации:")
|
| 216 |
+
for label, score in results:
|
| 217 |
st.write(f"- **{label}**: {score:.4f}")
|
| 218 |
else:
|
| 219 |
st.info("Не удалось получить результаты классификации.")
|
| 220 |
|
| 221 |
elif title or description: #небольшой костыль, чтобы при старте не было предупреждения
|
| 222 |
+
st.warning("Пожалуйста, заполните хотя бы одно поле.")
|