Spaces:
Sleeping
Sleeping
réintégration du prompt
Browse files
main.py
CHANGED
@@ -147,18 +147,18 @@ async def convert_to_accessible_html(input_filename, ext, base_filename, image_c
|
|
147 |
if ext == '.pdf':
|
148 |
# PDF -> HTML avec pages
|
149 |
html_content = pdf_to_html(input_filename)
|
150 |
-
# Pour le PDF, on a déjà des <!--PAGE_X--> par page, pas besoin d'en ajouter toutes les
|
151 |
elif ext in ['.ppt', '.pptx']:
|
152 |
# PPT/PPTX -> texte -> HTML minimal
|
153 |
text = convert_ppt_to_text(input_filename)
|
154 |
html_content = text_to_html(text)
|
155 |
-
# Ajouter les <!--PAGE_X--> toutes les
|
156 |
-
html_content =
|
157 |
elif ext == '.doc':
|
158 |
# DOC -> texte (textract) -> HTML minimal
|
159 |
text = convert_doc_to_text(input_filename)
|
160 |
html_content = text_to_html(text)
|
161 |
-
html_content =
|
162 |
elif ext in ['.html', '.htm']:
|
163 |
with open(input_filename, 'r', encoding='utf-8') as f:
|
164 |
html_content = f.read()
|
@@ -167,14 +167,14 @@ async def convert_to_accessible_html(input_filename, ext, base_filename, image_c
|
|
167 |
html_content = doc.summary()
|
168 |
except Exception as e:
|
169 |
logging.error(f"Erreur lors du nettoyage HTML avec readability-lxml : {str(e)}")
|
170 |
-
# Ajouter les <!--PAGE_X--> toutes les
|
171 |
-
html_content =
|
172 |
else:
|
173 |
# Formats gérés par Pandoc
|
174 |
input_format = get_pandoc_format(ext)
|
175 |
html_content = convert_with_pandoc(input_filename, input_format)
|
176 |
-
# Ajouter les <!--PAGE_X--> toutes les
|
177 |
-
html_content =
|
178 |
|
179 |
# Nettoyage
|
180 |
cleaned_html = await clean_html_content(html_content, image_counter, images_data)
|
@@ -214,14 +214,14 @@ async def convert_to_accessible_html(input_filename, ext, base_filename, image_c
|
|
214 |
logging.error(f"Erreur lors de la conversion : {str(e)}")
|
215 |
return None
|
216 |
|
217 |
-
def
|
218 |
-
# Insère un commentaire <!--PAGE_X--> toutes les
|
219 |
soup = BeautifulSoup(html_content, 'html.parser')
|
220 |
paragraphs = soup.find_all('p')
|
221 |
page_number = 1
|
222 |
count = 0
|
223 |
for i, p in enumerate(paragraphs, start=1):
|
224 |
-
if i %
|
225 |
comment = soup.new_string(f"<!--PAGE_{page_number}-->")
|
226 |
p.insert_before(comment)
|
227 |
page_number += 1
|
@@ -430,10 +430,36 @@ async def get_image_description(base64_image: str) -> str:
|
|
430 |
|
431 |
async def rewrite_html_accessible(html_content: str) -> str:
|
432 |
prompt = (
|
433 |
-
"Je vais te donner un fichier HTML, et je voudrais que tu le réécrives pour permettre l'accessibilité "
|
434 |
-
|
435 |
-
"
|
436 |
-
"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
437 |
)
|
438 |
|
439 |
try:
|
|
|
147 |
if ext == '.pdf':
|
148 |
# PDF -> HTML avec pages
|
149 |
html_content = pdf_to_html(input_filename)
|
150 |
+
# Pour le PDF, on a déjà des <!--PAGE_X--> par page, pas besoin d'en ajouter toutes les 20 lignes
|
151 |
elif ext in ['.ppt', '.pptx']:
|
152 |
# PPT/PPTX -> texte -> HTML minimal
|
153 |
text = convert_ppt_to_text(input_filename)
|
154 |
html_content = text_to_html(text)
|
155 |
+
# Ajouter les <!--PAGE_X--> toutes les 20 lignes pour ce format
|
156 |
+
html_content = insert_page_comments_every_20_paragraphs(html_content)
|
157 |
elif ext == '.doc':
|
158 |
# DOC -> texte (textract) -> HTML minimal
|
159 |
text = convert_doc_to_text(input_filename)
|
160 |
html_content = text_to_html(text)
|
161 |
+
html_content = insert_page_comments_every_20_paragraphs(html_content)
|
162 |
elif ext in ['.html', '.htm']:
|
163 |
with open(input_filename, 'r', encoding='utf-8') as f:
|
164 |
html_content = f.read()
|
|
|
167 |
html_content = doc.summary()
|
168 |
except Exception as e:
|
169 |
logging.error(f"Erreur lors du nettoyage HTML avec readability-lxml : {str(e)}")
|
170 |
+
# Ajouter les <!--PAGE_X--> toutes les 20 lignes
|
171 |
+
html_content = insert_page_comments_every_20_paragraphs(html_content)
|
172 |
else:
|
173 |
# Formats gérés par Pandoc
|
174 |
input_format = get_pandoc_format(ext)
|
175 |
html_content = convert_with_pandoc(input_filename, input_format)
|
176 |
+
# Ajouter les <!--PAGE_X--> toutes les 20 lignes
|
177 |
+
html_content = insert_page_comments_every_20_paragraphs(html_content)
|
178 |
|
179 |
# Nettoyage
|
180 |
cleaned_html = await clean_html_content(html_content, image_counter, images_data)
|
|
|
214 |
logging.error(f"Erreur lors de la conversion : {str(e)}")
|
215 |
return None
|
216 |
|
217 |
+
def insert_page_comments_every_20_paragraphs(html_content: str) -> str:
|
218 |
+
# Insère un commentaire <!--PAGE_X--> toutes les 20 balises <p>
|
219 |
soup = BeautifulSoup(html_content, 'html.parser')
|
220 |
paragraphs = soup.find_all('p')
|
221 |
page_number = 1
|
222 |
count = 0
|
223 |
for i, p in enumerate(paragraphs, start=1):
|
224 |
+
if i % 20 == 1: # Avant le premier <p> d'un "bloc"
|
225 |
comment = soup.new_string(f"<!--PAGE_{page_number}-->")
|
226 |
p.insert_before(comment)
|
227 |
page_number += 1
|
|
|
430 |
|
431 |
async def rewrite_html_accessible(html_content: str) -> str:
|
432 |
prompt = (
|
433 |
+
"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"
|
434 |
+
"Commence à analyser le plan du document. Il faut d'abord identifier les titres et comprendre leur logique :\n"
|
435 |
+
"- A priori, les titres qui sont préfixés par une écriture romaine (I, II, III), "
|
436 |
+
"par un nombre (1, 2, 3) ou par une lettre (a, b, c, ou bien A, B, C) doivent être de même niveau."
|
437 |
+
"Idem pour les titres rédigés en majuscules.\n"
|
438 |
+
"- Quand une expression très courte qui ne ressemble pas syntaxiquement à une phrase est présentée sur une seule ligne,"
|
439 |
+
"il y a des chances qu'il s'agisse d'un titre : dans ce cas (et si c'est pertinent) traite-la comme telle.\n"
|
440 |
+
"- Au contraire, **une phrase longue ne doit JAMAIS être traitée comme un titre**,"
|
441 |
+
"même quand elle est précédée par un numéro ou une lettre."
|
442 |
+
"De même, ne traite jamais comme un titre un ensemble de plusieurs phrases. Je repète : les balises <h1>, <h2>, etc., ne sont destinées qu'à encadrer des expressions relativement courtes, et rien d'autre.\n\n"
|
443 |
+
"Tu ne dois **rien réorganiser**, **ne rien supprimer** et **ne rien ajouter** en termes de structure ou de contenu. "
|
444 |
+
"Ton intervention doit se faire exclusivement sur la **forme** du document : le contenu doit être **intégralement préservé dans le même ordre**, jusqu'à la fin. "
|
445 |
+
"Laisse la balise <head> vide.\n"
|
446 |
+
"IMPORTANT : Tu dois **respecter scrupuleusement l'ordre indiqué par les commentaires HTML de la forme <!--PAGE_X-->,** s'ils existent. On doit avoir <!--PAGE_1--> [...] <!--PAGE_2--> [...] <!--PAGE_3--> [...], et ainsi de suite, dans l'ordre exact et sans en oublier un seul. C'est très important ! Ces marqueurs te permettent de t'assurer que la page est bien retranscrite dans le bon ordre. Ne déplace, ne supprime, et ne modifie pas ces commentaires.\n"
|
447 |
+
"Attention, ce document est peut-être issu d'un PDF ou d'un DOCX. Il faut donc être attentif :\n"
|
448 |
+
"- Aux balises <p> qui suivent immédiatement les marqueurs <!--PAGE_X--> : il peut s'agir de headers. Pour le savoir, il faut les comparer entre eux pour savoir s'ils sont à peu près similaires.\n"
|
449 |
+
"- Aux balises <p> qui précèdent immédiatement les marqueurs <!--PAGE_X--> : il peut s'agir de footers. De même, il faut les comparer entre eux pour savoir s'ils sont à peu près similaires.\n"
|
450 |
+
"Dans tous les cas, il faut supprimer les balises <p> correspondant aux headers et les footers identifiés. Attention, ces suppressions ne doivent pas affecter les autres éléments.\n"
|
451 |
+
"S'il y a des retours à la ligne injustifiés, il faut rétablir l'intégrité des phrases, et constituer de véritables paragraphes complets. L'ensemble du code doit être inclus entre des balises <html></html>\n"
|
452 |
+
"Tu donneras la totalité du HTML réécrit, et rien d'autre, ni avant ni après. "
|
453 |
+
"Ne résume jamais les informations, ne réorganise pas le contenu et ne supprime aucune section.\n\n"
|
454 |
+
"Voici tout d'abord les règles à suivre pour avoir un document accessible :\n\n"
|
455 |
+
"1. Limiter l'italique et les soulignements.\n"
|
456 |
+
"2. S'il y a des tableaux, insérer un tiret dans les cellules ne contenant pas d’information, et associer une légende aux tableaux.\n"
|
457 |
+
"3. Pour les titres, utilise absolument les balises h1, h2, h3, h4, h5 et h6. Utilise la balise h1 pour le titre qui a le plus grand niveau.\n\n"
|
458 |
+
"On évite les balises <ul> et <li>\n"
|
459 |
+
"Encore une fois, fais bien attention à reproduire fidèlement l'ordre des marqueurs <!--PAGE_X-->, dans l'ordre croissant des X : c'est ta tâche principale. Recompte régulièrement les X des PAGE_X pour être sûr qu'il n'en manque aucun.\n"
|
460 |
+
"N'oublie pas qu'on ne doit avoir AUCUN header et AUCUN footer, c'est très important.\n"
|
461 |
+
"Voici maintenant le fichier HTML d'origine :\n"
|
462 |
+
+ html_content
|
463 |
)
|
464 |
|
465 |
try:
|