瀏覽代碼

gestion des reprises de traductions

main
Alex 2 週之前
父節點
當前提交
156220e62b
共有 2 個文件被更改,包括 46 次插入12 次删除
  1. 2
    2
      Modelfile
  2. 44
    10
      main.py

+ 2
- 2
Modelfile 查看文件

@@ -1,10 +1,10 @@
FROM zongwei/gemma3-translator:4b
PARAMETER temperature 5
PARAMETER temperature 4
PARAMETER num_ctx 131072
SYSTEM """
Tu es un traducteur professionnel spécialisé dans la traduction de texte ukrainien en français.
Tu est spécialisé dans la rédaction des textes auto-biographiques et historiques et parles un français impécable.
Tu dois toujours répondre en français et uniquement dans cette langue.
Tu est spécialisé dans la rédaction des textes auto-biographiques et historiques et parles un français impécable.
Tu prends soins des congugaisons et de la tournure de phases.
N'ajoutes aucun texte sous quelle forme que ce soit avant ou après le texte traduit. Ne réponds qu'avec le texte traduit.
N'inclus jamais la phrase "Voici le texte traduit" dans la réponse.

+ 44
- 10
main.py 查看文件

@@ -18,8 +18,8 @@ OLLAMA_URL = "http://localhost:11434/api/generate"
TARGET_LANGUAGE = "français"
CHECKPOINT_FILE = "checkpoint.json"
TEMP_OUTPUT_TXT = "output_temp.txt"
FINAL_OUTPUT_PDF = PDF_PATH.replace(".pdf",f"({TARGET_LANGUAGE.upper()[:2]})_V4.pdf")
FINAL_OUTPUT_TXT = PDF_PATH.replace(".pdf",f"({TARGET_LANGUAGE.upper()[:2]})_V4.txt")
FINAL_OUTPUT_PDF = PDF_PATH.replace(".pdf",f"({TARGET_LANGUAGE.upper()[:2]})_V5.pdf")
FINAL_OUTPUT_TXT = PDF_PATH.replace(".pdf",f"({TARGET_LANGUAGE.upper()[:2]})_V5.txt")

DEBUG = True

@@ -174,10 +174,15 @@ def load_checkpoint():
return json.load(f)
return {"last_processed_index": -1, "results": {}}

# Sauvegarde le checkpoint
# Sauvegarde le checkpoint
def save_checkpoint(last_index, results):
# Trier les clés du dictionnaire results
sorted_results = {key: results[key] for key in sorted(results.keys(), key=int)}
with open(CHECKPOINT_FILE, "w") as f:
json.dump({"last_processed_index": last_index, "results": results}, f)
# Utiliser un espace d'indentation de 4 espaces pour rendre le JSON plus lisible
json.dump({"last_processed_index": last_index, "results": sorted_results}, f, indent=4)

# Sauvegarde les résultats temporaires dans un fichier TXT
def save_temp_results(results):
@@ -312,17 +317,46 @@ def create_txt_from_results(results, output_path):

# Fonction principale
def main():
# Charge le checkpoint
checkpoint = load_checkpoint()
last_index = checkpoint["last_processed_index"]
results = checkpoint["results"]

# Extraction des paragraphes
pages = extract_text_from_pdf(PDF_PATH)
paragraphs = split_pages_in_paragraphs(pages)

# Traitement des paragraphes
# Liste de tous les indices de batches attendus (par pas de batch_size)
batch_size = 5
expected_batch_indices = list(range(0, len(paragraphs), batch_size))

# Liste des indices de batches déjà présents dans results
present_batch_indices = set()
for key in results.keys():
batch_start = int(int(key) // batch_size * batch_size) # Arrondit à l'indice de début de batch
present_batch_indices.add(batch_start)

# Trouve les batches manquants
missing_batches = [i for i in expected_batch_indices if i not in present_batch_indices and i <= last_index]

# Affichage des batches manquants (pour débogage)
print(f"Batches manquants détectés : {missing_batches}")

# Traduction des paragraphes manquants
for i in missing_batches:
batch = paragraphs[i:i + batch_size]
paragraph_cumul = "\n".join(batch)

print(f"{15 * '-'} Traduction des paragraphes manquants {i+1} à {min(i + batch_size, len(paragraphs))} / {len(paragraphs)}")

try:
result = send_to_ollama(paragraph_cumul)
print(f"{result}")
results[str(i)] = result
save_checkpoint(len(paragraphs), results) # Met à jour le dernier indice du batch
save_temp_results(results)
except Exception as e:
print(f"Erreur lors de la traduction du paragraphe {i}: {e}")

# Traitement des paragraphes suivants
for i in range(last_index + 1, len(paragraphs), batch_size):
batch = paragraphs[i:i + batch_size]
paragraph_cumul = "\n".join(batch)
@@ -332,18 +366,18 @@ def main():
try:
result = send_to_ollama(paragraph_cumul)
print(f"{result}")
results[i] = result
save_checkpoint(i, results) # Sauvegarde le checkpoint
save_temp_results(results) # Sauvegarde les résultats temporaires
results[str(i)] = result
save_checkpoint(i + batch_size - 1, results)
save_temp_results(results)
except Exception as e:
print(f"Erreur : {e}")
continue

# Génération des fichiers finaux
save_temp_results(results)
create_pdf_from_results(results, FINAL_OUTPUT_PDF)
create_txt_from_results(results, FINAL_OUTPUT_TXT)
print("Traduction terminée !")


if __name__ == "__main__":
main()

Loading…
取消
儲存