Forked from pi-infected/translate_transcript_file.py
Created
September 17, 2024 22:13
-
-
Save Adam-s-tech/b924b7a3c586662342e9b639597ae3e9 to your computer and use it in GitHub Desktop.
Revisions
-
pi-infected created this gist
Jul 24, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,101 @@ import re import json from tqdm import tqdm from time import sleep from openai import OpenAI import openai # Configurez votre clé API OpenAI openai_api_key = '<ta-clef-openai>' # Remplacez par votre clé API OpenAI client = OpenAI(api_key=openai_api_key) def openai_json_gen(task, model="gpt-4o-mini"): valid = False messages = [ {"role": "system", "content": "Tu es un assistant utile"}, {"role": "user", "content": task} ] data = {} while not valid: try: response = client.chat.completions.create( model=model, response_format={"type": "json_object"}, messages=messages, ) data = json.loads(response.choices[0].message.content) valid = True except openai.APIError as e: print(f"OpenAI API returned an API Error: {e}") sleep(10) except openai.AuthenticationError as e: print(f"OpenAI API request was not authorized: {e}") return None except openai.RateLimitError as e: print(f"OpenAI API request exceeded rate limit: {e}") model = "gpt-3.5-turbo" sleep(360) except Exception as e: print(f"An exception occurred: {type(e).__name__}: {e}") sleep(1) return data # Fonction pour traduire et mettre en forme le texte en utilisant l'API ChatGPT def translate_and_format_text(text): prompt = ( f"Ton but est de mettre en forme un transcript de vidéo youtube. " f"Si ce transcript est en anglais, tu le ré-écriras en français. " f"Si il manque des mots ou si le transcript est mal écris tu le ré-écriras proprement.\n\n" f"Voici le transcript : '{text}'\n\n" f"Tu me donneras ta réponse en JSON, qui sera un dictionnaire avec une seule clef 'result', qui contiendra le transcript mis en forme." ) while True: result = openai_json_gen(prompt) if 'result' in result and isinstance(result['result'], str): result = result['result'] break return result # Lire le contenu du fichier with open('final_output.txt', 'r', encoding='utf-8') as file: content = file.read() # Diviser le contenu en blocs de texte basés sur les liens vidéo YouTube blocks = re.split(r'(https://www\.youtube\.com/watch\?v=[^\s]+)', content) # Initialiser la barre de progression progress_bar = tqdm(total=len(blocks) // 2, desc='Traitement des transcripts', unit='bloc') # Réécrire le fichier avec le contenu traduit en français with open('final_output_translated.txt', 'w', encoding='utf-8') as file: for i in range(1, len(blocks), 2): link = blocks[i] text = blocks[i + 1].strip() if i + 1 < len(blocks) else "" # Vérifier si le bloc de texte n'est pas vide if text: try: # Traduire et mettre en forme le texte translated_text = translate_and_format_text(text) except Exception as e: # En cas d'erreur, on peut gérer l'exception ici print(f"Erreur lors de la traduction : {e}") translated_text = text # Utiliser le texte original en cas d'erreur # Écrire le lien et le texte (traduit et mis en forme) dans le fichier file.write(f"{link}\n{translated_text}\n") # Mettre à jour la barre de progression progress_bar.update(1) # Fermer la barre de progression progress_bar.close() print("Le fichier a été traduit et réécrit avec succès.")