1NEYRON1 commited on
Commit
b4c0a34
·
1 Parent(s): 5f01a56

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +93 -103
app.py CHANGED
@@ -1,104 +1,94 @@
1
  import streamlit as st
2
-
3
- st.title("This is a title")
4
- st.header("This is a header")
5
- st.subheader("This is a subheader")
6
- st.text("This is a text")
7
- st.markdown("# This is a markdown header 1")
8
- st.markdown("## This is a markdown header 2")
9
- st.markdown("### This is a markdown header 3")
10
- st.markdown("This is a markdown: *bold* **italic** `inline code` ~strikethrough~")
11
- st.markdown("""This is a code block with syntax highlighting
12
- ```python
13
- print("Hello world!")
14
- ```
15
- """)
16
- st.html(
17
- "image from url example with html: "
18
- "<img src='https://www.wallpaperflare.com/static/450/825/286/kitten-cute-animals-grass-5k-wallpaper.jpg' width=400px>",
19
- )
20
-
21
-
22
- st.write("Text with write")
23
- st.write(range(10))
24
-
25
- st.success("Success")
26
- st.info("Information")
27
- st.warning("Warning")
28
- st.error("Error")
29
- exp = ZeroDivisionError("Trying to divide by Zero")
30
- st.exception(exp)
31
-
32
- from urllib import request
33
- request.urlretrieve(
34
- "http://craphound.com/images/1006884_2adf8fc7.jpg",
35
- "image_example.jpg",
36
- )
37
-
38
- from PIL import Image
39
- img = Image.open("image_example.jpg")
40
- img
41
-
42
- # картинка (без html - из переменной)
43
- st.image(img, width=200)
44
-
45
- # чекбокс
46
- if st.checkbox("Show/Hide"):
47
- st.text("Showing the widget")
48
- else:
49
- st.warning("Not showing what is inside")
50
-
51
- # выбор опции кружочками
52
- status = st.radio("Select Gender: ", ('Male', 'Female'))
53
- if (status == 'Male'):
54
- st.success("Male")
55
- else:
56
- st.success("Female")
57
-
58
- # выбор опции выпадающим меню
59
- hobby = st.selectbox(
60
- "Hobbies: ",
61
- ['Dancing', 'Reading', 'Sports'],
62
- )
63
- st.write("Your hobby is: ", hobby)
64
-
65
- # выбор нескольких опций
66
- hobbies = st.multiselect(
67
- "Hobbies: ",
68
- ['Dancing', 'Reading', 'Sports'],
69
- )
70
- st.write("You selected", len(hobbies), 'hobbies')
71
-
72
- # кнопка без функционала
73
- st.button("Click me for no reason")
74
-
75
- # кнопка, показывающая текст, когда нажата
76
- if(st.button("Click me")):
77
- st.text("You did it, you clicked me!!!")
78
-
79
- # текстовый input: label - название, value - что написано по дефолту
80
- name = st.text_input(label="Enter Your name", value="Type Here ...")
81
- if(st.button('Submit')):
82
- result = name.title()
83
- st.success(result)
84
-
85
- # слайдер
86
- level = st.slider("Select the level", 1, 5)
87
- st.text('Selected: {}'.format(level))
88
-
89
- # инициализируем переменные
90
- st.session_state.key1 = 'value1' # Attribute API
91
- st.session_state['key2'] = 'value2' # Dictionary like API
92
-
93
- # посмотреть что в st.session_state
94
- st.write(st.session_state)
95
-
96
- # magic
97
- st.session_state
98
-
99
- # ошибка если неправильный ключ
100
- st.write(st.session_state['missing_key'])
101
-
102
- # key - позволяет указать в какое поле session_state записать объект
103
- st.text_input("Please input something", key="my input")
104
- st.session_state
 
1
  import streamlit as st
2
+ from transformers import pipeline
3
+
4
+ # Загружаем модель (замените на вашу модель, если нужно)
5
+ # Для примера используем zero-shot-classification
6
+ try:
7
+ classifier = pipeline("zero-shot-classification")
8
+ except OSError as e:
9
+ st.error(f"Ошибка загрузки модели: {e}. Убедитесь, что модель доступна или укажите другую.")
10
+ st.stop() # Остановка выполнения приложения при ошибке
11
+
12
+
13
+ # model =
14
+ # tokenizer =
15
+ # topic_classifier = pipeline("text-classification", model=model, tokenizer=tokenizer)
16
+ topic_classifier = pipeline("text-classification")
17
+
18
+ text = "This is an example sentence for topic classification."
19
+ result = topic_classifier(text)
20
+ print(result)
21
+
22
+ def classify_text(title, description, candidate_labels, show_all=False, threshold=0.95):
23
+ """
24
+ Классифицирует текст и возвращает результаты в отсортированном виде.
25
+
26
+ Args:
27
+ title (str): Заголовок текста.
28
+ description (str): Краткое описание текста.
29
+ candidate_labels (list): Список меток-кандидатов.
30
+ show_all (bool): Показывать ли все результаты, независимо от порога.
31
+ threshold (float): Порог суммарной вероятности.
32
+
33
+ Returns:
34
+ list: Отсортированный список результатов классификации.
35
+ """
36
+ text = f"{title} {description}" # Объединяем заголовок и описание
37
+ try:
38
+ results = topic_classifier(text)
39
+ # results = topic_classifier(text, candidate_labels, multi_label=True) # multi_label=True для нескольких меток
40
+ except Exception as e:
41
+ st.error(f"Ошибка классификации: {e}")
42
+ return []
43
+
44
+ # Сортируем результаты по убыванию вероятности
45
+ sorted_results = sorted(zip(results['labels'], results['scores']), key=lambda x: x[1], reverse=True)
46
+
47
+ if show_all:
48
+ return sorted_results
49
+ else:
50
+ cumulative_prob = 0
51
+ filtered_results = []
52
+ for label, score in sorted_results:
53
+ filtered_results.append((label, score))
54
+ cumulative_prob += score
55
+ if cumulative_prob >= threshold:
56
+ break
57
+ return filtered_results
58
+
59
+
60
+ # --- Интерфейс Streamlit ---
61
+ st.title("Классификация статей")
62
+
63
+ # Ввод данных
64
+ title = st.text_input("Заголовок статьи")
65
+ description = st.text_area("Краткое описание статьи", height=150)
66
+
67
+ # Ввод меток-кандидатов (разделенных запятыми)
68
+ default_labels = "политика, экономика, спорт, культура, технологии, наука, происшествия"
69
+ candidate_labels_str = st.text_input("Метки-кандидаты (через запятую)", default_labels)
70
+ candidate_labels = [label.strip() for label in candidate_labels_str.split(",") if label.strip()]
71
+
72
+ # Кнопка "Классифицировать"
73
+ if st.button("Классифицировать"):
74
+ if not title or not description or not candidate_labels:
75
+ st.warning("Пожалуйста, заполните все поля.")
76
+ else:
77
+ with st.spinner("Идет классификация..."): # Индикатор загрузки
78
+ results = classify_text(title, description, candidate_labels)
79
+ if results:
80
+ st.subheader("Результаты классификации ограничением по вероятности):")
81
+ for label, score in results:
82
+ st.write(f"- **{label}**: {score:.4f}")
83
+
84
+ # Кнопка "Показать все"
85
+ if st.button("Показать все категории"):
86
+ all_results = classify_text(title, description, candidate_labels, show_all=True)
87
+ st.subheader("Полные результаты классификации:")
88
+ for label, score in all_results:
89
+ st.write(f"- **{label}**: {score:.4f}")
90
+ else:
91
+ st.info("Не удалось получить результаты классификации.")
92
+
93
+ elif title or description or candidate_labels_str != default_labels: #небольшой костыль, чтобы при старте не было предупреждения
94
+ st.warning("Пожалуйста, заполните все поля.")