boompack commited on
Commit
97098d9
·
verified ·
1 Parent(s): 53f820e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +51 -59
app.py CHANGED
@@ -1,71 +1,63 @@
1
  import gradio as gr
2
  import re
3
 
4
- # Функция для обработки входного текста
5
- def process_text(input_text, comment_count, pattern):
6
- # Печать входных данных для отладки
7
- print(f"Входные данные: {input_text}")
8
 
9
- # Регулярное выражение для извлечения данных
10
- if pattern == "Нравится":
11
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sНравится:\s*(\d+))?\s*$"
12
- elif pattern == "Лайков":
13
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sЛайков:\s*(\d+))?\s*$"
14
- elif pattern == "Like":
15
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sLike:\s*(\d+))?\s*$"
16
- elif pattern == "likes":
17
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*likes)?\s*$"
18
- elif pattern == "like":
19
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*like)?\s*$"
20
- elif pattern == "like +":
21
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*like)?\s*\+\s*$"
22
- elif pattern == "Плюс":
23
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*)\s*\+\s*$"
24
- elif pattern == "Минус":
25
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*)\s*-\s*$"
26
- elif pattern == "Равно":
27
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*)\s*=\s*$"
28
- elif pattern == "Точка":
29
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*)\s*\.\s*$"
30
- elif pattern == "Запятая":
31
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*)\s*\,\s*$"
32
- elif pattern == "Точка с запятой":
33
- pattern = r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*)\s*\;\s*$"
34
-
35
- # Проверка пустого ввода
36
- if not input_text.strip():
37
- return "Пожалуйста, введите текст."
38
-
39
- # Поиск всех совпадений в тексте
40
- matches = re.findall(pattern, input_text)
41
 
42
- # Печать найденных совпадений для отладки
43
- print(f"Найденные совпадения: {matches}")
44
-
45
- # Проверка наличия совпадений
46
- if not matches:
47
- return "Совпадения не найдены. Пожалуйста, проверьте ввод."
48
-
49
- # Проверка количества комментариев
50
- actual_comment_count = len(matches)
51
- if actual_comment_count != int(comment_count):
52
- return f"Предупреждение: найдено {actual_comment_count} комментариев, но указано {comment_count}."
 
 
 
 
 
 
53
 
54
- # Формируем вывод
55
- output = []
56
- for i, match in enumerate(matches, 1):
57
- username, text, likes = match
58
- output.append(f'{i}. Пользователь: "{username}", Текст: "{text.strip()}", Лайков: {likes}')
59
 
60
- return "\n".join(output)
 
 
 
 
 
 
 
 
 
 
 
 
 
61
 
62
- # Настройка Gradio интерфейса
63
  iface = gr.Interface(
64
- fn=lambda input_text, comment_count, pattern: process_text(input_text, comment_count, pattern),
65
- inputs=[gr.Textbox(lines=10, placeholder="Введите текст сюда..."),
66
- gr.Number(label="Количество комментариев", value=0),
67
- gr.Dropdown(label="Шаблон", choices=["Нравится", "Лайков", "Like", "likes", "like", "like +", "Плюс", "Минус", "Равно", "Точка", "Запятая", "Точка с запятой"])],
68
- outputs=gr.Textbox(lines=10, placeholder="Результат...")
 
69
  )
70
 
71
  # Запуск интерфейса
 
1
  import gradio as gr
2
  import re
3
 
4
+ # Функция для извлечения комментариев
5
+ def extract_comments(input_text):
6
+ # Шаблон для разделения комментариев по ключевым словам
7
+ comment_blocks = re.split(r'Ответить|Действия с комментарием|Скрыть ответы|Показать перевод', input_text)
8
 
9
+ # Паттерны для извлечения данных
10
+ patterns = [
11
+ r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sНравится:\s*(\d+))?\s*$", # Нравится
12
+ r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sЛайков:\s*(\d+))?\s*$", # Лайков
13
+ r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sLike:\s*(\d+))?\s*$", # Like
14
+ r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*likes)?\s*$", # likes
15
+ r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*like)?\s*$", # like
16
+ ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
+ results = []
19
+
20
+ # Для каждого блока текста
21
+ for block in comment_blocks:
22
+ block = block.strip() # Убираем лишние пробелы и пустые строки
23
+ if block: # Если блок не пустой
24
+ for pattern in patterns:
25
+ match = re.search(pattern, block)
26
+ if match:
27
+ # Извлекаем данные
28
+ username = match.group(1)
29
+ text = match.group(2).strip()
30
+ likes = int(match.group(3)) if match.group(3) else 0
31
+
32
+ # Добавляем в результаты
33
+ results.append({"Пользователь": username, "Текст": text, "Лайков": likes})
34
+ break # Переходим к следующему блоку, как только нашли совпадение
35
 
36
+ return results
 
 
 
 
37
 
38
+ # Функция для отображения результатов в удобном виде
39
+ def display_results(input_text):
40
+ results = extract_comments(input_text)
41
+
42
+ if not results:
43
+ return "Нет комментариев для отображения."
44
+ else:
45
+ display_text = ""
46
+ for result in results:
47
+ display_text += f"Пользователь: {result['Пользователь']}\n"
48
+ display_text += f"Текст: {result['Текст']}\n"
49
+ display_text += f"Лайков: {result['Лайков']}\n"
50
+ display_text += "-" * 50 + "\n"
51
+ return display_text
52
 
53
+ # Создание интерфейса с Gradio
54
  iface = gr.Interface(
55
+ fn=display_results, # Функция, которая будет вызываться
56
+ inputs="text", # Текстовый ввод для пользователей
57
+ outputs="text", # Вывод результатов в текстовом формате
58
+ title="Анализ комментариев", # Название интерфейса
59
+ description="Введите текст комментариев, и система автоматически разделит их, извлекая информацию о пользователях и лайках.",
60
+ theme="default" # Тема оформления
61
  )
62
 
63
  # Запуск интерфейса