Spaces:
Running
Running
File size: 2,460 Bytes
ad5f036 71b5660 fc561bf 71b5660 a3b5165 7e47a32 0dfa820 7e47a32 71b5660 0dfa820 fc561bf 0dfa820 71b5660 0dfa820 fc561bf 0dfa820 fc561bf a3b5165 0dfa820 71b5660 a3b5165 0dfa820 7e47a32 0dfa820 71b5660 0dfa820 71b5660 0dfa820 ad5f036 71b5660 0dfa820 71b5660 0dfa820 ad5f036 7e47a32 fc561bf |
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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
import gradio as gr
from transformers import pipeline
import pdfplumber
import os
# --- Ленивая загрузка модели ---
summarizer = None
def load_model():
global summarizer
if summarizer is None:
summarizer = pipeline(
"summarization",
model="sshleifer/distilbart-cnn-12-6"
)
return summarizer
# --- Безопасное чтение PDF ---
def extract_pdf_text(path):
text = ""
try:
with pdfplumber.open(path) as pdf:
for page in pdf.pages:
chunk = page.extract_text()
if chunk:
text += chunk + "\n"
except Exception as e:
return "", f"Ошибка при чтении PDF: {e}"
return text, None
# --- Универсальное чтение файла ---
def read_file(path):
if not path:
return "", "Файл не передан."
path = str(path).strip()
if path.lower().endswith(".pdf"):
return extract_pdf_text(path)
try:
with open(path, "r", encoding="utf-8", errors="ignore") as f:
return f.read(), None
except Exception as e:
return "", f"Ошибка при чтении TXT: {e}"
# --- Основная функция ---
def summarize_file(path):
text, err = read_file(path)
if err:
return f"⚠️ {err}"
if not text.strip():
return "⚠️ Не удалось извлечь текст."
if len(text) < 80:
return "⚠️ Слишком мало текста для суммаризации."
model = load_model()
# Ограничиваем текст для избежания OOM
text = text[:4000]
try:
summary = model(
text,
max_length=180,
min_length=60,
do_sample=False
)
return summary[0]["summary_text"]
except Exception as e:
return f"⚠️ Ошибка суммаризации: {e}"
# --- Интерфейс Gradio ---
demo = gr.Interface(
fn=summarize_file,
inputs=gr.File(type="filepath", label="Загрузите файл (.pdf или .txt)"),
outputs=gr.Textbox(label="Результат суммаризации"),
title="Eroha Summarizer 🧠",
description="Загрузите документ (PDF или TXT), и модель создаст краткое резюме."
)
if __name__ == "__main__":
demo.launch()
|