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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +46 -21
app.py CHANGED
@@ -1,59 +1,84 @@
1
  import gradio as gr
2
  from transformers import pipeline
3
  import pdfplumber
 
4
 
5
- # Ленивая инициализация модели (создадим при первом вызове)
6
  summarizer = None
7
 
8
  def get_summarizer():
9
  global summarizer
10
  if summarizer is None:
11
- # Более лёгкая модель, чем facebook/bart-large-cnn
 
12
  summarizer = pipeline(
13
  "summarization",
14
  model="sshleifer/distilbart-cnn-12-6"
15
  )
16
  return summarizer
17
 
18
- # Функция обработки файла
19
- def summarize_file(file):
20
- if file is None:
21
- return "⚠️ Пожалуйста, загрузите файл."
 
 
 
 
22
 
23
- # Читаем текст из PDF или TXT
24
- if file.name.endswith(".pdf"):
25
  text = ""
26
- with pdfplumber.open(file.name) as pdf:
27
  for page in pdf.pages:
28
  text += page.extract_text() or ""
29
- else:
30
- # Другие форматы считаем как текстовый файл в UTF-8
31
- text = file.read().decode("utf-8", errors="ignore")
 
 
 
 
 
 
 
 
 
 
 
 
32
 
33
- text = text.strip()
 
34
 
35
- # Проверяем размер текста
36
  if len(text) < 50:
37
  return "⚠️ Слишком короткий текст для суммаризации."
38
 
39
- # Ограничим длину текста, чтобы не перегружать модель
40
  if len(text) > 3000:
41
  text = text[:3000]
42
 
43
- # Создаём резюме
44
  summarizer = get_summarizer()
45
- summary = summarizer(text, max_length=200, min_length=50, do_sample=False)
 
 
 
 
 
46
  return summary[0]["summary_text"]
47
 
48
- # Создаём интерфейс Gradio
49
  demo = gr.Interface(
50
  fn=summarize_file,
51
- inputs=gr.File(label="Загрузите файл (.pdf или .txt)"),
 
 
 
52
  outputs=gr.Textbox(label="Результат суммаризации"),
53
  title="Eroha Summarizer 🧠",
54
  description="Загрузите документ (PDF или TXT), и модель создаст краткое резюме.",
55
  )
56
 
57
- # Запуск приложения (для Spaces достаточно просто demo.launch())
58
  if __name__ == "__main__":
59
- demo.launch(server_name="0.0.0.0", server_port=7860)
 
 
1
  import gradio as gr
2
  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()