File size: 3,474 Bytes
06b2393
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import pandas as pd
from langdetect import detect
import argostranslate.package
import argostranslate.translate
from tqdm import tqdm
import os

print("--- PRÉPARATION DE L'IA DE TRADUCTION HORS-LIGNE ---")
# 1. Mise à jour et téléchargement du dictionnaire Anglais -> Français
argostranslate.package.update_package_index()
available_packages = argostranslate.package.get_available_packages()

try:
    package_to_install = next(
        filter(lambda x: x.from_code == 'en' and x.to_code == 'fr', available_packages)
    )
    argostranslate.package.install_from_path(package_to_install.download())
    print("✅ Dictionnaire installé et prêt !")
except StopIteration:
    print("⚠️ Le dictionnaire est déjà installé ou introuvable.")

# 2. Configuration des fichiers
chemin_fichier_source = '1_fichiers_fusionnes_non_traduits.csv'
chemin_fichier_final = '2_fichier_final_TOTALEMENT_traduit.csv'


# Fonction de traduction intelligente
def traduire_cellule(texte):
    if pd.isna(texte) or not isinstance(texte, str) or len(texte.strip()) < 3:
        return texte
    try:
        langue = detect(texte)
        if langue == 'fr':
            return texte
        elif langue == 'en':
            return argostranslate.translate.translate(texte, 'en', 'fr')
        else:
            return texte
    except Exception:
        return texte


# 3. LECTURE PAR BLOCS (CHUNKS) - La sécurité Anti-Crash
taille_bloc = 10000  # Le script sauvegarde toutes les 10 000 lignes
lignes_deja_traitees = 0

# Vérifier si on a déjà commencé le travail avant
if os.path.exists(chemin_fichier_final):
    # On compte combien de lignes sont déjà dans le fichier final
    df_existant = pd.read_csv(chemin_fichier_final, usecols=[0], low_memory=False)
    lignes_deja_traitees = len(df_existant)
    print(f"\n🔄 Reprise du travail détectée : {lignes_deja_traitees} lignes déjà traduites !")
    mode_ecriture = 'a'  # 'a' pour Append (ajouter à la fin)
    ecrire_en_tete = False
else:
    print("\n🚀 Démarrage d'une nouvelle traduction totale...")
    mode_ecriture = 'w'  # 'w' pour Write (nouveau fichier)
    ecrire_en_tete = True

print(f"--- TRADUCTION EN COURS (Sauvegarde toutes les {taille_bloc} lignes) ---")

# On lit le fichier source par petits morceaux de 10 000 lignes
lecteur_csv = pd.read_csv(chemin_fichier_source, chunksize=taille_bloc, low_memory=False)

lignes_actuelles = 0

for bloc_df in lecteur_csv:
    lignes_actuelles += len(bloc_df)

    # On saute les blocs qui ont déjà été traduits lors d'une session précédente
    if lignes_actuelles <= lignes_deja_traitees:
        continue

    print(f"\nTraitement du bloc : de {lignes_actuelles - len(bloc_df)} à {lignes_actuelles} lignes...")

    colonnes_texte = bloc_df.select_dtypes(include=['object']).columns

    # On traduit toutes les colonnes de texte de ce bloc
    for col in colonnes_texte:
        bloc_df[col] = bloc_df[col].apply(traduire_cellule)

    # On sauvegarde immédiatement ce bloc dans le fichier final !
    bloc_df.to_csv(chemin_fichier_final, mode=mode_ecriture, header=ecrire_en_tete, index=False, encoding='utf-8')

    # Après le premier bloc, on ne réécrit plus l'en-tête, on ajoute juste les lignes en dessous
    mode_ecriture = 'a'
    ecrire_en_tete = False
    print(f"💾 Sauvegarde réussie. On passe à la suite...")

print(f"\n🎉 SUCCÈS ABSOLU ! Les 4,6 millions de lignes ont été traduites dans : {chemin_fichier_final}")