Selaa lähdekoodia

traduction paragraphes par paragraphes

main
Alex 2 viikkoa sitten
vanhempi
commit
b359f8e53d
1 muutettua tiedostoa jossa 48 lisäystä ja 9 poistoa
  1. 48
    9
      main.py

+ 48
- 9
main.py Näytä tiedosto

@@ -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…
Peruuta
Tallenna