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)
|
text_by_page.append(text)
|
||||||
return text_by_page
|
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):
|
def send_to_ollama(prompt, model=OLLAMA_MODEL, context_size=128000):
|
||||||
"""Envoie une requête à Ollama et retourne la réponse."""
|
"""Envoie une requête à Ollama et retourne la réponse."""
|
||||||
payload = {
|
payload = {
|
||||||
|
|
@ -120,26 +157,28 @@ def create_pdf_from_results(results, output_path):
|
||||||
print(f"PDF généré avec succès : {output_path}")
|
print(f"PDF généré avec succès : {output_path}")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
# Extraction du texte
|
# Extraction du texte page par page
|
||||||
pages = extract_text_from_pdf(PDF_PATH)
|
pages = extract_text_from_pdf(PDF_PATH)
|
||||||
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
|
||||||
|
paragraphs = merge_paragraphs_across_pages(pages)
|
||||||
|
print(f"Nombre de paragraphes complets extraits : {len(paragraphs)}")
|
||||||
|
|
||||||
# Dictionnaire pour stocker les résultats
|
# Dictionnaire pour stocker les résultats
|
||||||
results = {}
|
results = {}
|
||||||
|
|
||||||
# Traitement page par page
|
# Traitement des paragraphes complets
|
||||||
for i, page_text in enumerate(pages, start=1):
|
for i, paragraph_text in enumerate(paragraphs, start=1):
|
||||||
if( i > 2) : # Limite le nombre de pages pour les tests
|
print(f"{15 * '-'} Traduction du paragraphe {i}/{len(paragraphs)}...\n{paragraph_text}\n")
|
||||||
break
|
prompt = f"Traduis le texte suivant de l'ukrainien vers le français : {paragraph_text}"
|
||||||
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}"
|
|
||||||
try:
|
try:
|
||||||
result = send_to_ollama(prompt)
|
result = send_to_ollama(prompt)
|
||||||
print(f"{result}.")
|
print(f"{result}.")
|
||||||
results[i] = result
|
results[i] = result
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(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 de la page {i} : {e}"
|
results[i] = f"Erreur lors du traitement du paragraphe {i} : {e}"
|
||||||
|
|
||||||
# Création du PDF avec tous les résultats
|
# Création du PDF avec tous les résultats
|
||||||
create_pdf_from_results(results, OUTPUT_PDF_PATH)
|
create_pdf_from_results(results, OUTPUT_PDF_PATH)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue