| text_by_page.append(text) | text_by_page.append(text) | ||||
| return text_by_page | return text_by_page | ||||
| def merge_paragraphs_across_pages(pages_text): | |||||
| def split_pages_in_paragraphs(pages_text): | |||||
| """ | """ | ||||
| Divise le texte en paragraphes en détectant un point suivi d'un saut de ligne ou d'un retour à la ligne. | Divise le texte en paragraphes en détectant un point suivi d'un saut de ligne ou d'un retour à la ligne. | ||||
| Conserve les sauts de ligne à l'intérieur des paragraphes. | Conserve les sauts de ligne à l'intérieur des paragraphes. | ||||
| # Concatène tout le texte | # Concatène tout le texte | ||||
| full_text = "\n".join(pages_text) | full_text = "\n".join(pages_text) | ||||
| # Divise le texte en paragraphes : un point suivi d'un saut de ligne ou d'un retour à la ligne | |||||
| # Remplace les sauts de ligne à l'intérieur des paragraphes par des espaces | |||||
| # (pour éviter les sauts de ligne intempestifs dans un même paragraphe) | |||||
| full_text = re.sub(r'(?<![.!?])\n+(?![.!?])', ' ', full_text) | |||||
| # Divise le texte en paragraphes : un point suivi d'un saut de ligne | |||||
| paragraphs = re.split(r'(?<=[.!?])\s*\n+', full_text.strip()) | paragraphs = re.split(r'(?<=[.!?])\s*\n+', full_text.strip()) | ||||
| # Conserve les sauts de ligne à l'intérieur des paragraphes | |||||
| paragraphs = [p.strip() for p in paragraphs if p.strip()] | |||||
| # Nettoie chaque paragraphe : remplace les sauts de ligne restants par des espaces | |||||
| paragraphs = [re.sub(r'\s+', ' ', p).strip() for p in paragraphs if p.strip()] | |||||
| return paragraphs | return paragraphs | ||||
| # Préserver la mise en page en convertissant les sauts de ligne | # Préserver la mise en page en convertissant les sauts de ligne | ||||
| formatted_text = translation.replace("\n", "<br/>") | formatted_text = translation.replace("\n", "<br/>") | ||||
| story.append(Paragraph(formatted_text, body_style)) | story.append(Paragraph(formatted_text, body_style)) | ||||
| story.append(Spacer(1, 0.1*inch)) | |||||
| # story.append(Spacer(1, 0.1*inch)) | |||||
| # Infos sur le LLM | # Infos sur le LLM | ||||
| story.append(Spacer(1, 0.2*inch)) | story.append(Spacer(1, 0.2*inch)) | ||||
| print(f"Nombre de pages extraites : {len(pages)}") | print(f"Nombre de pages extraites : {len(pages)}") | ||||
| # Fusion des paragraphes qui s'étendent sur plusieurs pages | # Fusion des paragraphes qui s'étendent sur plusieurs pages | ||||
| paragraphs = merge_paragraphs_across_pages(pages) | |||||
| paragraphs = split_pages_in_paragraphs(pages) | |||||
| print(f"Nombre de paragraphes complets extraits : {len(paragraphs)}") | print(f"Nombre de paragraphes complets extraits : {len(paragraphs)}") | ||||
| # Dictionnaire pour stocker les résultats | # Dictionnaire pour stocker les résultats |