Yermek68 commited on
Commit
0dfa820
·
verified ·
1 Parent(s): a3b5165

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -28
app.py CHANGED
@@ -6,7 +6,7 @@ import os
6
  # --- Ленивая загрузка модели ---
7
  summarizer = None
8
 
9
- def get_summarizer():
10
  global summarizer
11
  if summarizer is None:
12
  summarizer = pipeline(
@@ -15,47 +15,69 @@ def get_summarizer():
15
  )
16
  return summarizer
17
 
18
- # --- Чтение текста из файла ---
19
- def read_text_from_file(file):
20
- if file is None:
21
- return ""
 
 
 
 
 
 
 
 
22
 
23
- filepath = file # Gradio отдаёт именно путь к временному файлу
24
- filepath_lower = filepath.lower()
 
 
 
25
 
26
- # PDF
27
- if filepath_lower.endswith(".pdf"):
28
- text = ""
29
- with pdfplumber.open(filepath) as pdf:
30
- for page in pdf.pages:
31
- text += page.extract_text() or ""
32
- return text
33
 
34
- # TXT / другие
35
- with open(filepath, "r", encoding="utf-8", errors="ignore") as f:
36
- return f.read()
 
 
37
 
38
  # --- Основная функция ---
39
- def summarize_file(file):
40
- text = read_text_from_file(file)
 
 
41
 
42
  if not text.strip():
43
- return "⚠️ Не удалось извлечь текст из файла."
 
 
 
44
 
45
- if len(text) < 50:
46
- return "⚠️ Слишком короткий текст для суммаризации."
47
 
48
- model = get_summarizer()
49
- summary = model(text, max_length=200, min_length=50, do_sample=False)
50
- return summary[0]["summary_text"]
 
 
 
 
 
 
 
 
 
 
51
 
52
- # --- Интерфейс ---
53
  demo = gr.Interface(
54
  fn=summarize_file,
55
- inputs=gr.File(label="Загрузите файл (.pdf или .txt)", type="filepath"),
56
  outputs=gr.Textbox(label="Результат суммаризации"),
57
  title="Eroha Summarizer 🧠",
58
- description="Загрузите документ (PDF или TXT), и модель создаст краткое резюме.",
59
  )
60
 
61
  if __name__ == "__main__":
 
6
  # --- Ленивая загрузка модели ---
7
  summarizer = None
8
 
9
+ def load_model():
10
  global summarizer
11
  if summarizer is None:
12
  summarizer = pipeline(
 
15
  )
16
  return summarizer
17
 
18
+ # --- Безопасное чтение PDF ---
19
+ def extract_pdf_text(path):
20
+ text = ""
21
+ try:
22
+ with pdfplumber.open(path) as pdf:
23
+ for page in pdf.pages:
24
+ chunk = page.extract_text()
25
+ if chunk:
26
+ text += chunk + "\n"
27
+ except Exception as e:
28
+ return "", f"Ошибка при чтении PDF: {e}"
29
+ return text, None
30
 
31
+ # --- Универсальное чтение файла ---
32
+ def read_file(path):
33
+ if not path:
34
+ return "", "Файл не передан."
35
+ path = str(path).strip()
36
 
37
+ if path.lower().endswith(".pdf"):
38
+ return extract_pdf_text(path)
 
 
 
 
 
39
 
40
+ try:
41
+ with open(path, "r", encoding="utf-8", errors="ignore") as f:
42
+ return f.read(), None
43
+ except Exception as e:
44
+ return "", f"Ошибка при чтении TXT: {e}"
45
 
46
  # --- Основная функция ---
47
+ def summarize_file(path):
48
+ text, err = read_file(path)
49
+ if err:
50
+ return f"⚠️ {err}"
51
 
52
  if not text.strip():
53
+ return "⚠️ Не удалось извлечь текст."
54
+
55
+ if len(text) < 80:
56
+ return "⚠️ Слишком мало текста для суммаризации."
57
 
58
+ model = load_model()
 
59
 
60
+ # Ограничиваем текст для избежания OOM
61
+ text = text[:4000]
62
+
63
+ try:
64
+ summary = model(
65
+ text,
66
+ max_length=180,
67
+ min_length=60,
68
+ do_sample=False
69
+ )
70
+ return summary[0]["summary_text"]
71
+ except Exception as e:
72
+ return f"⚠️ Ошибка суммаризации: {e}"
73
 
74
+ # --- Интерфейс Gradio ---
75
  demo = gr.Interface(
76
  fn=summarize_file,
77
+ inputs=gr.File(type="filepath", label="Загрузите файл (.pdf или .txt)"),
78
  outputs=gr.Textbox(label="Результат суммаризации"),
79
  title="Eroha Summarizer 🧠",
80
+ description="Загрузите документ (PDF или TXT), и модель создаст краткое резюме."
81
  )
82
 
83
  if __name__ == "__main__":