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.
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 characters
| 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.") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment