Traduction pages par pages
This commit is contained in:
parent
ad4d611346
commit
10eedffe7d
|
|
@ -23,6 +23,7 @@ SYSTEM """
|
||||||
Tu es un traducteur professionnel spécialisé dans la traduction de texte ukrainien vers le français.
|
Tu es un traducteur professionnel spécialisé dans la traduction de texte ukrainien vers le français.
|
||||||
Traduis fidèlement et naturellement en respectant l'intonation originale utilisée par l'auteur du texte.
|
Traduis fidèlement et naturellement en respectant l'intonation originale utilisée par l'auteur du texte.
|
||||||
Tu ne dois pas interpréter les pensées ou les réflexions de l'auteur.
|
Tu ne dois pas interpréter les pensées ou les réflexions de l'auteur.
|
||||||
|
ne rajoutes pas de texte avant ou après le texte fourni.
|
||||||
Tu dois toujours répondre en français.
|
Tu dois toujours répondre en français.
|
||||||
"""
|
"""
|
||||||
```
|
```
|
||||||
|
|
|
||||||
44
main.py
44
main.py
|
|
@ -6,6 +6,9 @@ from reportlab.lib.units import inch
|
||||||
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
|
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer
|
||||||
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
|
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
|
||||||
from reportlab.lib.enums import TA_JUSTIFY
|
from reportlab.lib.enums import TA_JUSTIFY
|
||||||
|
from reportlab.pdfbase import pdfmetrics
|
||||||
|
from reportlab.pdfbase.ttfonts import TTFont
|
||||||
|
import os
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
PDF_PATH = "TaniaBorecMemoir(Ukr).pdf" # Fichier original
|
PDF_PATH = "TaniaBorecMemoir(Ukr).pdf" # Fichier original
|
||||||
|
|
@ -14,12 +17,17 @@ OLLAMA_URL = "http://localhost:11434/api/generate" # URL par défaut d'Ollama
|
||||||
OUTPUT_PDF_PATH = PDF_PATH.replace(".pdf", " (FR).pdf") # Chemin du PDF de sortie
|
OUTPUT_PDF_PATH = PDF_PATH.replace(".pdf", " (FR).pdf") # Chemin du PDF de sortie
|
||||||
|
|
||||||
def extract_text_from_pdf(pdf_path):
|
def extract_text_from_pdf(pdf_path):
|
||||||
"""Extrait le texte page par page d'un PDF."""
|
"""Extrait le texte page par page d'un PDF sans les numéros de pages."""
|
||||||
|
import re
|
||||||
text_by_page = []
|
text_by_page = []
|
||||||
with open(pdf_path, "rb") as file:
|
with open(pdf_path, "rb") as file:
|
||||||
reader = PyPDF2.PdfReader(file)
|
reader = PyPDF2.PdfReader(file)
|
||||||
for page in reader.pages:
|
for page in reader.pages:
|
||||||
text_by_page.append(page.extract_text())
|
text = page.extract_text()
|
||||||
|
# Supprime les numéros de pages (nombres seuls en début/fin de ligne)
|
||||||
|
text = re.sub(r'^\d+\s*\n', '', text, flags=re.MULTILINE)
|
||||||
|
text = re.sub(r'\n\s*\d+\s*$', '', text, flags=re.MULTILINE)
|
||||||
|
text_by_page.append(text)
|
||||||
return text_by_page
|
return text_by_page
|
||||||
|
|
||||||
def send_to_ollama(prompt, model=OLLAMA_MODEL, context_size=128000):
|
def send_to_ollama(prompt, model=OLLAMA_MODEL, context_size=128000):
|
||||||
|
|
@ -36,6 +44,27 @@ def send_to_ollama(prompt, model=OLLAMA_MODEL, context_size=128000):
|
||||||
else:
|
else:
|
||||||
raise Exception(f"Erreur Ollama: {response.text}")
|
raise Exception(f"Erreur Ollama: {response.text}")
|
||||||
|
|
||||||
|
def register_unicode_font():
|
||||||
|
"""Enregistre une police TrueType qui supporte le cyrilique."""
|
||||||
|
# Recherche une police système qui supporte le cyrilique
|
||||||
|
font_paths = [
|
||||||
|
r"C:\Windows\Fonts\DejaVuSans.ttf",
|
||||||
|
r"C:\Windows\Fonts\Calibri.ttf",
|
||||||
|
r"C:\Windows\Fonts\arial.ttf",
|
||||||
|
]
|
||||||
|
|
||||||
|
for font_path in font_paths:
|
||||||
|
if os.path.exists(font_path):
|
||||||
|
try:
|
||||||
|
pdfmetrics.registerFont(TTFont('UnicodeFont', font_path))
|
||||||
|
return 'UnicodeFont'
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Erreur lors de l'enregistrement de {font_path}: {e}")
|
||||||
|
|
||||||
|
# Si aucune police spéciale trouvée, utilise Helvetica par défaut
|
||||||
|
print("Aucune police Unicode trouvée, utilisation d'Helvetica")
|
||||||
|
return 'Helvetica'
|
||||||
|
|
||||||
def create_pdf_from_results(results, output_path):
|
def create_pdf_from_results(results, output_path):
|
||||||
"""Crée un PDF à partir des résultats de traduction."""
|
"""Crée un PDF à partir des résultats de traduction."""
|
||||||
doc = SimpleDocTemplate(output_path, pagesize=letter, topMargin=inch, bottomMargin=inch)
|
doc = SimpleDocTemplate(output_path, pagesize=letter, topMargin=inch, bottomMargin=inch)
|
||||||
|
|
@ -75,8 +104,9 @@ def create_pdf_from_results(results, output_path):
|
||||||
|
|
||||||
# Contenu
|
# Contenu
|
||||||
for page_num, translation in results.items():
|
for page_num, translation in results.items():
|
||||||
story.append(Paragraph(f"Page {page_num}", page_style))
|
# Préserver la mise en page en convertissant les sauts de ligne
|
||||||
story.append(Paragraph(translation, body_style))
|
formatted_text = translation.replace("\n", "<br/>")
|
||||||
|
story.append(Paragraph(formatted_text, body_style))
|
||||||
story.append(Spacer(1, 0.1*inch))
|
story.append(Spacer(1, 0.1*inch))
|
||||||
|
|
||||||
# Construction du PDF
|
# Construction du PDF
|
||||||
|
|
@ -93,12 +123,16 @@ def main():
|
||||||
|
|
||||||
# Traitement page par page
|
# Traitement page par page
|
||||||
for i, page_text in enumerate(pages, start=1):
|
for i, page_text in enumerate(pages, start=1):
|
||||||
print(f"Traitement de la page {i}/{len(pages)}...")
|
if( i > 3) : # 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}"
|
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}.")
|
||||||
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}")
|
||||||
results[i] = f"Erreur lors du traitement de la page {i} : {e}"
|
results[i] = f"Erreur lors du traitement de la page {i} : {e}"
|
||||||
|
|
||||||
# Création du PDF avec tous les résultats
|
# Création du PDF avec tous les résultats
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue