Ed5 commited on
Commit
5dac689
·
verified ·
1 Parent(s): 29867a2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -45
app.py CHANGED
@@ -78,7 +78,9 @@ class KDChecker:
78
  text = ""
79
  try:
80
  with pdfplumber.open(pdf_path) as pdf:
81
- for page in pdf.pages:
 
 
82
  text += (page.extract_text() or "") + "\n"
83
  except Exception as e:
84
  print(f"Ошибка чтения PDF {pdf_path}: {e}")
@@ -162,32 +164,30 @@ class KDChecker:
162
  found_by_method = "manual"
163
  is_manual = True
164
  else:
165
- all_pdf_text = ""
166
- for file_path in progress.tqdm(files, desc="Чтение PDF"):
167
- all_pdf_text += self.extract_text(file_path) + "\n"
168
-
169
- pdf_numbers = self.find_all_decimal_numbers(all_pdf_text)
170
- print(f"Найдено номеров: {pdf_numbers}")
171
-
172
  db_clean_keys = set(self.excel_db["Cabinet_Clean"].tolist())
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
 
174
- for cand in pdf_numbers:
175
- if cand in db_clean_keys:
176
- detected_cabinet = cand
177
- found_by_method = "number"
178
- break
179
-
180
  if detected_cabinet == "Не определен":
181
- unique_cabinets = self.excel_db["Cabinet"].unique()
182
- for cab_name in unique_cabinets:
183
- sub_names = [n.strip() for n in cab_name.split(',')]
184
- for sub_name in sub_names:
185
- if len(sub_name) < 5: continue
186
- if sub_name.lower() in all_pdf_text.lower():
187
- detected_cabinet = cab_name
188
- found_by_method = "name"
189
- break
190
- if found_by_method == "name": break
191
 
192
  print(f"Определен шкаф: {detected_cabinet}")
193
 
@@ -200,6 +200,7 @@ class KDChecker:
200
  if not remarks:
201
  return f"⚠️ Для шкафа '{detected_cabinet}' нет замечаний в базе.", None
202
 
 
203
  processed_count = 0
204
  for file_path in files:
205
  fname = os.path.basename(file_path)
@@ -233,24 +234,19 @@ class KDChecker:
233
  form = c.acroForm
234
  width, height = A4
235
 
236
- # --- ШРИФТЫ (ДЛЯ HUGGING FACE) ---
237
  font_name = 'Helvetica'
238
- # На HF файл должен лежать в корне рядом с app.py
239
  local_font = "arial.ttf"
240
 
241
  try:
242
- # Сначала ищем локальный файл (который вы должны загрузить на HF)
243
  if os.path.exists(local_font):
244
  pdfmetrics.registerFont(TTFont('Arial', local_font))
245
  font_name = 'Arial'
246
- # Затем пробуем системный (для Windows тестов)
247
  elif os.path.exists("C:\\Windows\\Fonts\\arial.ttf"):
248
  pdfmetrics.registerFont(TTFont('Arial', "C:\\Windows\\Fonts\\arial.ttf"))
249
  font_name = 'Arial'
250
- else:
251
- print("⚠️ Шрифт arial.ttf не найден! Русский текст может не отображаться.")
252
- except Exception as e:
253
- print(f"Ошибка шрифт��: {e}")
254
 
255
  y = height - 50
256
  c.setFont(font_name, 16)
@@ -316,7 +312,7 @@ class KDChecker:
316
  return path
317
 
318
 
319
- # --- НОВЫЙ ИНТЕРФЕЙС С CSS ---
320
 
321
  css = """
322
  .gradio-container { max-width: 95% !important; }
@@ -329,9 +325,6 @@ footer { display: none !important; }
329
  def create_app():
330
  checker = KDChecker()
331
 
332
- # Чтобы исправить warning, убираем css и theme отсюда, если версия gradio очень новая,
333
- # НО для Hugging Face обычно лучше оставить здесь для предпросмотра.
334
- # Если все еще ругается - перенесем в launch.
335
  with gr.Blocks(title="Генератор чек-листов КД") as app:
336
  gr.Markdown("## ✅ Генератор чек-листов КД")
337
 
@@ -361,14 +354,6 @@ def create_app():
361
 
362
  return app
363
 
364
- # --- ЗАПУСК ДЛЯ HUGGING FACE ---
365
  if __name__ == "__main__":
366
  app = create_app()
367
- # ДЛЯ HUGGING FACE SPACES НУЖНО ПРОСТО .launch() БЕЗ АРГУМЕНТОВ!
368
- # Мы передаем CSS и Theme сюда, чтобы убрать Warning
369
- app.launch(
370
- server_name="0.0.0.0", # Важно для Docker контейнеров
371
- server_port=7860, # Стандартный порт HF
372
- css=css, # Передали стили сюда
373
- theme=gr.themes.Soft() # Передали тему сюда
374
- )
 
78
  text = ""
79
  try:
80
  with pdfplumber.open(pdf_path) as pdf:
81
+ # Читаем только первые 2 страницы для скорости, обычно номер там
82
+ # Если нужно читать весь файл - уберите [:2]
83
+ for page in pdf.pages[:5]:
84
  text += (page.extract_text() or "") + "\n"
85
  except Exception as e:
86
  print(f"Ошибка чтения PDF {pdf_path}: {e}")
 
164
  found_by_method = "manual"
165
  is_manual = True
166
  else:
167
+ # === ОПТИМИЗАЦИЯ: Читаем файлы по очереди и прерываемся, если нашли ===
 
 
 
 
 
 
168
  db_clean_keys = set(self.excel_db["Cabinet_Clean"].tolist())
169
+
170
+ for file_path in progress.tqdm(files, desc="Поиск номера шкафа"):
171
+ text = self.extract_text(file_path)
172
+ pdf_numbers = self.find_all_decimal_numbers(text)
173
+
174
+ # Проверяем, есть ли найденные номера в базе
175
+ for cand in pdf_numbers:
176
+ if cand in db_clean_keys:
177
+ detected_cabinet = cand
178
+ found_by_method = "number"
179
+ break # Прерываем поиск по номерам в текущем файле
180
+
181
+ if found_by_method == "number":
182
+ print(f"✅ Шкаф найден в файле: {os.path.basename(file_path)}")
183
+ break # Прерываем чтение остальных файлов!
184
 
185
+ # Если по номерам не нашли, пробуем по имени (тоже не читаем все подряд)
 
 
 
 
 
186
  if detected_cabinet == "Не определен":
187
+ # Здесь сложнее, так как имя может быть в любом файле.
188
+ # Но если мы уже прочитали часть файлов и не нашли номер,
189
+ # скорее всего это ручной ввод.
190
+ pass
 
 
 
 
 
 
191
 
192
  print(f"Определен шкаф: {detected_cabinet}")
193
 
 
200
  if not remarks:
201
  return f"⚠️ Для шкафа '{detected_cabinet}' нет замечаний в базе.", None
202
 
203
+ # Формируем список задач (здесь уже не читаем PDF, только имена файлов)
204
  processed_count = 0
205
  for file_path in files:
206
  fname = os.path.basename(file_path)
 
234
  form = c.acroForm
235
  width, height = A4
236
 
237
+ # --- ШРИФТЫ ---
238
  font_name = 'Helvetica'
 
239
  local_font = "arial.ttf"
240
 
241
  try:
 
242
  if os.path.exists(local_font):
243
  pdfmetrics.registerFont(TTFont('Arial', local_font))
244
  font_name = 'Arial'
 
245
  elif os.path.exists("C:\\Windows\\Fonts\\arial.ttf"):
246
  pdfmetrics.registerFont(TTFont('Arial', "C:\\Windows\\Fonts\\arial.ttf"))
247
  font_name = 'Arial'
248
+ except:
249
+ pass
 
 
250
 
251
  y = height - 50
252
  c.setFont(font_name, 16)
 
312
  return path
313
 
314
 
315
+ # --- ИНТЕРФЕЙС ---
316
 
317
  css = """
318
  .gradio-container { max-width: 95% !important; }
 
325
  def create_app():
326
  checker = KDChecker()
327
 
 
 
 
328
  with gr.Blocks(title="Генератор чек-листов КД") as app:
329
  gr.Markdown("## ✅ Генератор чек-листов КД")
330
 
 
354
 
355
  return app
356
 
 
357
  if __name__ == "__main__":
358
  app = create_app()
359
+ app.launch(server_name="0.0.0.0", server_port=7860, css=css, theme=gr.themes.Soft())