Просмотр исходного кода

Traduction pages par pages

main
Alex 2 недель назад
Родитель
Сommit
10eedffe7d
2 измененных файлов: 40 добавлений и 5 удалений
  1. 1
    0
      README.md
  2. 39
    5
      main.py

+ 1
- 0
README.md Просмотреть файл

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.
""" """
``` ```

+ 39
- 5
main.py Просмотреть файл

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
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):
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)
# 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))
story.append(Paragraph(translation, body_style))
# Préserver la mise en page en convertissant les sauts de ligne
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
# 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

Загрузка…
Отмена
Сохранить