Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Adam-s-tech/b924b7a3c586662342e9b639597ae3e9 to your computer and use it in GitHub Desktop.
Save Adam-s-tech/b924b7a3c586662342e9b639597ae3e9 to your computer and use it in GitHub Desktop.

Revisions

  1. @pi-infected pi-infected created this gist Jul 24, 2024.
    101 changes: 101 additions & 0 deletions translate_transcript_file.py
    Original 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.")