|
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*$", |
|
r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*likes)?\s*$", |
|
r"([a-zA-Z0-9_@]+)\s*(.*?)(?:\s(\d+)\s*like)?\s*$", |
|
] |
|
|
|
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) |
|
|
|
|
|
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() |