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

traduction paragraphes par paragraphes

main
Alex 2 недель назад
Родитель
Сommit
b359f8e53d
1 измененных файлов: 48 добавлений и 9 удалений
  1. 48
    9
      main.py

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

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 = {
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
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: 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}")
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 # 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)

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