Bentham commited on
Commit
76171bc
·
verified ·
1 Parent(s): 79ff9c8
Files changed (1) hide show
  1. main.py +9 -51
main.py CHANGED
@@ -139,7 +139,7 @@ def delete_files_after_delay(file_paths: List[str], delay: int = 6000):
139
  async def convert_to_accessible_html(input_filename, ext, base_filename, image_counter, images_data):
140
  try:
141
  if ext == '.pdf':
142
- # PDF -> HTML avec pages
143
  html_content = pdf_to_html(input_filename)
144
  # Pour le PDF, on a déjà des <!--PAGE_X--> par page
145
  elif ext in ['.ppt', '.pptx']:
@@ -152,15 +152,6 @@ async def convert_to_accessible_html(input_filename, ext, base_filename, image_c
152
  text = convert_doc_to_text(input_filename)
153
  html_content = text_to_html(text)
154
  html_content = insert_page_comments_every_20_paragraphs(html_content)
155
- elif ext in ['.html', '.htm']:
156
- with open(input_filename, 'r', encoding='utf-8') as f:
157
- html_content = f.read()
158
- try:
159
- doc = Document(html_content)
160
- html_content = doc.summary()
161
- except Exception as e:
162
- logging.error(f"Erreur lors du nettoyage HTML : {str(e)}")
163
- html_content = insert_page_comments_every_20_paragraphs(html_content)
164
  else:
165
  # Formats gérés par Pandoc
166
  input_format = get_pandoc_format(ext)
@@ -184,10 +175,14 @@ async def convert_to_accessible_html(input_filename, ext, base_filename, image_c
184
  )
185
  )))
186
 
187
- results = await asyncio.gather(*(t for _, t in tasks))
188
 
189
  for (image_key, _), description in zip(tasks, results):
190
- images_data[image_key]['description'] = description
 
 
 
 
191
 
192
  await html_rewrite_task
193
  rewritten_html = html_rewrite_task.result()
@@ -228,6 +223,7 @@ def insert_page_comments_every_20_paragraphs(html_content: str) -> str:
228
 
229
  def insert_css_into_html(html_content: str) -> str:
230
  css_code = """
 
231
  :root {
232
  --font-size-min: 1rem;
233
  --font-size-base: 1rem;
@@ -433,7 +429,7 @@ async def get_image_description(base64_image: str, prompt: str) -> str:
433
  async def rewrite_html_accessible(html_content: str) -> str:
434
  prompt = (
435
  "Je vais te donner un fichier HTML, et je voudrais que tu le réécrives pour permettre l'accessibilité à toutes les formes de handicap, tout en **préservant strictement l'ordre du contenu original**.\n"
436
- "Commence à analyser le plan du document. Il faut d'abord identifier les titres et comprendre leur logique :\n"
437
  "- A priori, les titres qui sont préfixés par une écriture romaine (I, II, III), "
438
  "par un nombre (1, 2, 3) ou par une lettre (a, b, c, ou bien A, B, C) doivent être de même niveau."
439
  "Idem pour les titres rédigés en majuscules.\n"
@@ -484,43 +480,6 @@ async def rewrite_html_accessible(html_content: str) -> str:
484
  except Exception as e:
485
  logging.error(f"Erreur lors de la réécriture du HTML : {str(e)}")
486
  return html_content
487
-
488
- def extract_text_with_image_markers(input_filename: str) -> Tuple[str, List[Tuple[int, bytes]]]:
489
- """
490
- Extrait le texte d'un PDF en insérant des marqueurs pour les images.
491
-
492
- Args:
493
- input_filename (str): Chemin vers le fichier PDF.
494
-
495
- Returns:
496
- Tuple[str, List[Tuple[int, bytes]]]: Le texte extrait avec des marqueurs et une liste d'images extraites.
497
- """
498
- text = ""
499
- images = []
500
- with fitz.open(input_filename) as doc:
501
- for page_num, page in enumerate(doc, start=1):
502
- page_json = page.get_text("json")
503
- blocks = page_json["blocks"]
504
- for block in blocks:
505
- if block['type'] == 0: # Texte
506
- for line in block.get('lines', []):
507
- for span in line.get('spans', []):
508
- text += span.get('text', '')
509
- elif block['type'] == 1: # Image
510
- # Insérer un marqueur unique pour l'image
511
- img_num = len(images) + 1
512
- marker = f"[IMG_{img_num}]"
513
- text += marker
514
- # Extraire l'image
515
- xref = block.get('xref')
516
- try:
517
- base_image = doc.extract_image(xref)
518
- image_bytes = base_image["image"]
519
- images.append((img_num, image_bytes))
520
- except Exception as e:
521
- logging.error(f"Erreur lors de l'extraction de l'image xref={xref} : {str(e)}")
522
- return text, images
523
-
524
 
525
  async def clean_html_content(html_content: str, image_counter: List[int], images_data: Dict[str, Dict[str, str]]) -> str:
526
  soup = BeautifulSoup(html_content, 'html.parser')
@@ -721,7 +680,6 @@ async def convert_file_to_html(
721
  logging.error(f"Erreur lors du démarrage du job : {str(e)}")
722
  return JSONResponse(status_code=500, content={"message": f"Erreur lors du démarrage du job : {str(e)}"})
723
 
724
-
725
  @app.get("/status/{job_id}")
726
  async def check_status(job_id: str):
727
  status_data = get_job_status(job_id)
 
139
  async def convert_to_accessible_html(input_filename, ext, base_filename, image_counter, images_data):
140
  try:
141
  if ext == '.pdf':
142
+ # PDF -> HTML avec pages et marqueurs IMG_X
143
  html_content = pdf_to_html(input_filename)
144
  # Pour le PDF, on a déjà des <!--PAGE_X--> par page
145
  elif ext in ['.ppt', '.pptx']:
 
152
  text = convert_doc_to_text(input_filename)
153
  html_content = text_to_html(text)
154
  html_content = insert_page_comments_every_20_paragraphs(html_content)
 
 
 
 
 
 
 
 
 
155
  else:
156
  # Formats gérés par Pandoc
157
  input_format = get_pandoc_format(ext)
 
175
  )
176
  )))
177
 
178
+ results = await asyncio.gather(*(t for _, t in tasks), return_exceptions=True)
179
 
180
  for (image_key, _), description in zip(tasks, results):
181
+ if isinstance(description, Exception):
182
+ logging.error(f"Erreur lors de la description de l'image {image_key} : {str(description)}")
183
+ images_data[image_key]['description'] = "Description indisponible."
184
+ else:
185
+ images_data[image_key]['description'] = description
186
 
187
  await html_rewrite_task
188
  rewritten_html = html_rewrite_task.result()
 
223
 
224
  def insert_css_into_html(html_content: str) -> str:
225
  css_code = """
226
+ /* Votre code CSS ici */
227
  :root {
228
  --font-size-min: 1rem;
229
  --font-size-base: 1rem;
 
429
  async def rewrite_html_accessible(html_content: str) -> str:
430
  prompt = (
431
  "Je vais te donner un fichier HTML, et je voudrais que tu le réécrives pour permettre l'accessibilité à toutes les formes de handicap, tout en **préservant strictement l'ordre du contenu original**.\n"
432
+ "Commence à analyser le plan du document. Il faut d'abord identifier les titres et comprendre leur logique :\n"
433
  "- A priori, les titres qui sont préfixés par une écriture romaine (I, II, III), "
434
  "par un nombre (1, 2, 3) ou par une lettre (a, b, c, ou bien A, B, C) doivent être de même niveau."
435
  "Idem pour les titres rédigés en majuscules.\n"
 
480
  except Exception as e:
481
  logging.error(f"Erreur lors de la réécriture du HTML : {str(e)}")
482
  return html_content
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
483
 
484
  async def clean_html_content(html_content: str, image_counter: List[int], images_data: Dict[str, Dict[str, str]]) -> str:
485
  soup = BeautifulSoup(html_content, 'html.parser')
 
680
  logging.error(f"Erreur lors du démarrage du job : {str(e)}")
681
  return JSONResponse(status_code=500, content={"message": f"Erreur lors du démarrage du job : {str(e)}"})
682
 
 
683
  @app.get("/status/{job_id}")
684
  async def check_status(job_id: str):
685
  status_data = get_job_status(job_id)