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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +20 -42
app.py CHANGED
@@ -3,82 +3,60 @@ from transformers import pipeline
3
  import pdfplumber
4
  import os
5
 
6
- # Ленивая инициализация модели
7
  summarizer = None
8
 
9
  def get_summarizer():
10
  global summarizer
11
  if summarizer is None:
12
- # Более лёгкая модель, чем facebook/bart-large-cnn,
13
- # чтобы уменьшить риск проблем с памятью на Space.
14
  summarizer = pipeline(
15
  "summarization",
16
  model="sshleifer/distilbart-cnn-12-6"
17
  )
18
  return summarizer
19
 
20
- def read_text_from_file(file_path: str) -> str:
21
- """
22
- file_path это строка с путём к временному файлу, который создаёт Gradio.
23
- """
24
- if not file_path:
25
  return ""
26
 
27
- file_path_lower = file_path.lower()
 
28
 
29
  # PDF
30
- if file_path_lower.endswith(".pdf"):
31
  text = ""
32
- with pdfplumber.open(file_path) as pdf:
33
  for page in pdf.pages:
34
  text += page.extract_text() or ""
35
  return text
36
 
37
- # Всё остальное считаем текстом в UTF-8
38
- try:
39
- with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
40
- return f.read()
41
- except Exception:
42
- # На всякий случай — бинарный режим с декодированием
43
- with open(file_path, "rb") as f:
44
- return f.read().decode("utf-8", errors="ignore")
45
 
46
- # Основная функция суммаризации
47
- def summarize_file(file_path):
48
- if file_path is None:
49
- return "⚠️ Пожалуйста, загрузите файл."
50
 
51
- # file_path — это строка
52
- text = read_text_from_file(file_path).strip()
53
 
54
  if len(text) < 50:
55
  return "⚠️ Слишком короткий текст для суммаризации."
56
 
57
- # Ограничиваем длину, чтобы модель не упала по памяти
58
- if len(text) > 3000:
59
- text = text[:3000]
60
-
61
- summarizer = get_summarizer()
62
- summary = summarizer(
63
- text,
64
- max_length=200,
65
- min_length=50,
66
- do_sample=False
67
- )
68
  return summary[0]["summary_text"]
69
 
70
- # Интерфейс Gradio
71
  demo = gr.Interface(
72
  fn=summarize_file,
73
- inputs=gr.File(
74
- label="Загрузите файл (.pdf или .txt)",
75
- type="filepath" # ЯВНО говорим: возвращай путь к файлу
76
- ),
77
  outputs=gr.Textbox(label="Результат суммаризации"),
78
  title="Eroha Summarizer 🧠",
79
  description="Загрузите документ (PDF или TXT), и модель создаст краткое резюме.",
80
  )
81
 
82
  if __name__ == "__main__":
83
- # Для Hugging Face Spaces можно вообще просто demo.launch()
84
  demo.launch()
 
3
  import pdfplumber
4
  import os
5
 
6
+ # --- Ленивая загрузка модели ---
7
  summarizer = None
8
 
9
  def get_summarizer():
10
  global summarizer
11
  if summarizer is None:
 
 
12
  summarizer = pipeline(
13
  "summarization",
14
  model="sshleifer/distilbart-cnn-12-6"
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__":
 
62
  demo.launch()