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("Пожалуйста, заполните хотя бы одно поле.")
|