traduction paragraphes par paragraphes
This commit is contained in:
parent
be1129475e
commit
b359f8e53d
57
main.py
57
main.py
@ -30,6 +30,43 @@ def extract_text_from_pdf(pdf_path):
|
||||
text_by_page.append(text)
|
||||
return text_by_page
|
||||
|
||||
def merge_paragraphs_across_pages(pages_text):
|
||||
"""Divise le texte en chunks raisonnables pour la traduction."""
|
||||
import re
|
||||
|
||||
# Concatène tout le texte
|
||||
full_text = "\n".join(pages_text)
|
||||
|
||||
# Essaie d'abord de diviser par les doubles sauts de ligne
|
||||
paragraphs = re.split(r'\n\s*\n+', full_text.strip())
|
||||
|
||||
# Si on obtient seulement un paragraphe, on divise par une taille maximale
|
||||
if len(paragraphs) == 1:
|
||||
print("Aucune séparation par double saut de ligne détectée. Division par taille...")
|
||||
# Divise par les phrases (points suivis d'un espace)
|
||||
sentences = re.split(r'(?<=[.!?])\s+', full_text.strip())
|
||||
|
||||
# Regroupe les phrases en chunks d'environ 1500 caractères
|
||||
max_chunk_size = 1500
|
||||
paragraphs = []
|
||||
current_chunk = ""
|
||||
|
||||
for sentence in sentences:
|
||||
if len(current_chunk) + len(sentence) < max_chunk_size:
|
||||
current_chunk += (" " + sentence) if current_chunk else sentence
|
||||
else:
|
||||
if current_chunk:
|
||||
paragraphs.append(current_chunk)
|
||||
current_chunk = sentence
|
||||
|
||||
if current_chunk:
|
||||
paragraphs.append(current_chunk)
|
||||
else:
|
||||
# Normalise les sauts de ligne internes
|
||||
paragraphs = [re.sub(r'\n+', ' ', p.strip()) for p in paragraphs if p.strip()]
|
||||
|
||||
return paragraphs
|
||||
|
||||
def send_to_ollama(prompt, model=OLLAMA_MODEL, context_size=128000):
|
||||
"""Envoie une requête à Ollama et retourne la réponse."""
|
||||
payload = {
|
||||
@ -120,26 +157,28 @@ def create_pdf_from_results(results, output_path):
|
||||
print(f"PDF généré avec succès : {output_path}")
|
||||
|
||||
def main():
|
||||
# Extraction du texte
|
||||
# Extraction du texte page par page
|
||||
pages = extract_text_from_pdf(PDF_PATH)
|
||||
print(f"Nombre de pages extraites : {len(pages)}")
|
||||
|
||||
# Fusion des paragraphes qui s'étendent sur plusieurs pages
|
||||
paragraphs = merge_paragraphs_across_pages(pages)
|
||||
print(f"Nombre de paragraphes complets extraits : {len(paragraphs)}")
|
||||
|
||||
# Dictionnaire pour stocker les résultats
|
||||
results = {}
|
||||
|
||||
# Traitement page par page
|
||||
for i, page_text in enumerate(pages, start=1):
|
||||
if( i > 2) : # Limite le nombre de pages pour les tests
|
||||
break
|
||||
print(f"{15 * '-'} Traduction de la page {i}/{len(pages)}...")
|
||||
prompt = f"Traduis le texte suivant de l'ukrainien vers le français : {page_text}"
|
||||
# Traitement des paragraphes complets
|
||||
for i, paragraph_text in enumerate(paragraphs, start=1):
|
||||
print(f"{15 * '-'} Traduction du paragraphe {i}/{len(paragraphs)}...\n{paragraph_text}\n")
|
||||
prompt = f"Traduis le texte suivant de l'ukrainien vers le français : {paragraph_text}"
|
||||
try:
|
||||
result = send_to_ollama(prompt)
|
||||
print(f"{result}.")
|
||||
results[i] = result
|
||||
except Exception as e:
|
||||
print(f"Erreur lors du traitement de la page {i} : {e}")
|
||||
results[i] = f"Erreur lors du traitement de la page {i} : {e}"
|
||||
print(f"Erreur lors du traitement du paragraphe {i} : {e}")
|
||||
results[i] = f"Erreur lors du traitement du paragraphe {i} : {e}"
|
||||
|
||||
# Création du PDF avec tous les résultats
|
||||
create_pdf_from_results(results, OUTPUT_PDF_PATH)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user