File size: 3,773 Bytes
a539744
11ef3f4
5be6938
97098d9
433e6be
97098d9
 
3cafd09
97098d9
 
 
 
 
 
 
 
3cafd09
97098d9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
433e6be
 
97098d9
 
 
 
 
 
 
433e6be
 
 
 
 
 
 
a539744
97098d9
11ef3f4
97098d9
433e6be
 
 
 
 
97098d9
433e6be
 
11ef3f4
556706a
11ef3f4
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import gradio as gr
import re

# Функция для извлечения комментариев
def extract_comments(input_text, expected_count):
    # Шаблон для разделения комментариев по ключевым словам
    comment_blocks = re.split(r'Ответить|Действия с комментарием|Скрыть ответы|Показать перевод', input_text)

    # Паттерны для извлечения данных
    patterns = [
        r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sНравится:\s*(\d+))?\s*$",  # Нравится
        r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sЛайков:\s*(\d+))?\s*$",      # Лайков
        r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\sLike:\s*(\d+))?\s*$",        # Like
        r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*likes)?\s*$",        # likes
        r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*like)?\s*$",         # like
    ]
    
    results = []
    
    # Для каждого блока текста
    for block in comment_blocks:
        block = block.strip()  # Убираем лишние пробелы и пустые строки
        if block:  # Если блок не пустой
            for pattern in patterns:
                match = re.search(pattern, block)
                if match:
                    # Извлекаем данные
                    username = match.group(1)
                    text = match.group(2).strip()
                    likes = int(match.group(3)) if match.group(3) else 0
                    
                    # Добавляем в результаты
                    results.append({"Пользователь": username, "Текст": text, "Лайков": likes})
                    break  # Переходим к следующему блоку, как только нашли совпадение
    
    # Проверяем, совпадает ли количество комментариев с ожидаемым
    if len(results) == expected_count:
        display_text = ""
        for result in results:
            display_text += f"Пользователь: {result['Пользователь']}\n"
            display_text += f"Текст: {result['Текст']}\n"
            display_text += f"Лайков: {result['Лайков']}\n"
            display_text += "-" * 50 + "\n"
        return display_text
    else:
        return f"Ошибка! Количество найденных комментариев: {len(results)}, ожидалось: {expected_count}."


# Функция для отображения результатов в удобном виде
def display_results(input_text, expected_count):
    return extract_comments(input_text, expected_count)

# Создание интерфейса с Gradio
iface = gr.Interface(
    fn=display_results,  # Функция, которая будет вызываться
    inputs=[
        gr.Textbox(label="Введите текст комментариев", lines=10),  # Текстовый ввод для комментариев
        gr.Number(label="Ожидаемое количество комментариев", value=94)  # Ввод для количества комментариев
    ],  
    outputs="text",  # Вывод результатов в текстовом формате
    title="Анализ комментариев",  # Название интерфейса
    description="Введите текст комментариев и ожидаемое количество, чтобы проверить, совпадает ли результат с ожиданиями.",
    theme="default"  # Тема оформления
)

# Запуск интерфейса
iface.launch()