diff --git a/llm_translate_text.py b/llm_translate_text.py index c72b0fc..346ceac 100644 --- a/llm_translate_text.py +++ b/llm_translate_text.py @@ -10,12 +10,12 @@ client = OpenAI(api_key=api_key()) # Diccionario de idiomas IDIOMAS = { - 1: ("English", "en"), - 2: ("Portuguese", "pt"), - 3: ("Spanish", "es"), - 4: ("Russian", "ru"), - 5: ("French", "fr"), - 6: ("German", "de"), + 1: ("English", "en-GB"), + 2: ("Portuguese", "pt-PT"), + 3: ("Spanish", "es-ES"), + 4: ("Russian", "ru-RU"), + 5: ("French", "fr-FR"), + 6: ("German", "de-DE"), } @@ -65,6 +65,7 @@ def translate_batch(texts, source_lang, target_lang): logger.info( f"Solicitando traducción de {source_lang} a {target_lang} para el lote de textos:\n{joined_text}" ) + print("Traduciendo batch ... ") response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ @@ -79,6 +80,7 @@ def translate_batch(texts, source_lang, target_lang): ) translations = response.choices[0].message.content.strip().split("\n") logger.info(f"Respuestas recibidas:\n{translations}") + print("Recibida traduccion.") return translations @@ -97,30 +99,32 @@ def texto_requiere_traduccion(texto): def main(file_path, target_lang_code, traducir_todo, batch_size=10): df = pd.read_excel(file_path) source_col = "it-IT" + source_translated_col = target_lang_code target_col = f"{target_lang_code} Translated" - if target_col in df.columns and not traducir_todo: - df[target_col] = df[target_col] - else: + # Asegurarse de que la columna de destino existe + if target_col not in df.columns: df[target_col] = None texts_to_translate = [] indices_to_translate = [] - if traducir_todo: - for index, text in df[source_col].astype(str).items(): - processed_text = transformar_texto(text) + for index, row in df.iterrows(): + source_text = str(row[source_col]) + source_translated_text = str(row[source_translated_col]) if source_translated_col in df.columns else "" + processed_text = transformar_texto(source_text) + + if traducir_todo: + # Traducir todas las celdas del idioma de destino if texto_requiere_traduccion(processed_text): - texts_to_translate.append(text) - indices_to_translate.append(index) - else: - for index, text in ( - df.loc[df[target_col].isnull(), source_col].astype(str).items() - ): - processed_text = transformar_texto(text) - if texto_requiere_traduccion(processed_text): - texts_to_translate.append(text) + texts_to_translate.append(processed_text) indices_to_translate.append(index) + else: + # Traducir solo las celdas vacías en el idioma de destino original + if pd.isna(row[source_translated_col]) or source_translated_text.strip() == "": + if texto_requiere_traduccion(processed_text): + texts_to_translate.append(processed_text) + indices_to_translate.append(index) num_texts = len(texts_to_translate) logger.info(f"Número total de textos a traducir: {num_texts}") @@ -129,15 +133,13 @@ def main(file_path, target_lang_code, traducir_todo, batch_size=10): for start_idx in range(0, num_texts, batch_size): end_idx = min(start_idx + batch_size, num_texts) batch_texts = texts_to_translate[start_idx:end_idx] - batch_translations = translate_batch(batch_texts, "Italian", target_lang_code) + batch_translations = translate_batch(batch_texts, 'Italian', target_lang_code) translations.extend(batch_translations) logger.info(f"Número total de traducciones recibidas: {len(translations)}") if len(translations) != len(indices_to_translate): - logger.warning( - f"Desajuste entre el número de traducciones ({len(translations)}) y el número de índices ({len(indices_to_translate)})" - ) + logger.warning(f"Desajuste entre el número de traducciones ({len(translations)}) y el número de índices ({len(indices_to_translate)})") for i, index in enumerate(indices_to_translate): if i < len(translations): @@ -145,9 +147,7 @@ def main(file_path, target_lang_code, traducir_todo, batch_size=10): else: logger.error(f"No hay traducción disponible para el índice {index}") - output_path = os.path.join( - os.path.dirname(file_path), "master_export2translate_translated.xlsx" - ) + output_path = os.path.join(os.path.dirname(file_path), 'master_export2translate_translated.xlsx') df.to_excel(output_path, index=False) logger.info(f"Archivo traducido guardado en: {output_path}") print(f"Archivo traducido guardado en: {output_path}") diff --git a/master_export2translate.xlsx b/master_export2translate.xlsx index 0850456..037f526 100644 Binary files a/master_export2translate.xlsx and b/master_export2translate.xlsx differ diff --git a/master_export2translate_translated.xlsx b/master_export2translate_translated.xlsx new file mode 100644 index 0000000..4299fd4 Binary files /dev/null and b/master_export2translate_translated.xlsx differ diff --git a/translate_log.log b/translate_log.log new file mode 100644 index 0000000..c4e5f9e --- /dev/null +++ b/translate_log.log @@ -0,0 +1,47 @@ +2024-07-30 16:11:05,490 - DEBUG - Decisión de traducción para texto ' SK<#>F': No (palabras > 3 letras: False, solo campos especiales: True) +2024-07-30 16:11:05,491 - DEBUG - Decisión de traducción para texto ' SK<#>T': No (palabras > 3 letras: False, solo campos especiales: True) +2024-07-30 16:11:05,491 - DEBUG - Decisión de traducción para texto '### ERRORE ###': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,492 - DEBUG - Decisión de traducción para texto 'Bypass': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,492 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General - Attesa EBI': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,492 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General - Attesa FBI': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,492 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General - ': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,492 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General - Pressure sensor Maximun reached': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,492 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General - Tank under minimun level': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,492 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General - Stop Filler for Overtemperature': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,492 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General -': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General - Signals Forced': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'W<#>/<#>/<#> General - Richiesta Di Calibrazione Da FBI': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'Waiting for product': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'Waiting Infeed Selector Enable': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'Waiting Minimal Accumulation': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'Warnings': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'Watchdog del sistema': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'Water supply': Sí (palabras > 3 letras: True, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'X<#> M<#>': No (palabras > 3 letras: False, solo campos especiales: True) +2024-07-30 16:11:05,493 - DEBUG - Decisión de traducción para texto 'YV<#>': No (palabras > 3 letras: False, solo campos especiales: True) +2024-07-30 16:11:05,493 - INFO - Número total de textos a traducir: 17 +2024-07-30 16:11:05,493 - INFO - Solicitando traducción de Italian a ru-RU para el lote de textos: +### ERRORE ### +Bypass +W<#>/<#>/<#> General - Attesa EBI +W<#>/<#>/<#> General - Attesa FBI +W<#>/<#>/<#> General - +W<#>/<#>/<#> General - Pressure sensor Maximun reached +W<#>/<#>/<#> General - Tank under minimun level +W<#>/<#>/<#> General - Stop Filler for Overtemperature +W<#>/<#>/<#> General - +W<#>/<#>/<#> General - Signals Forced +2024-07-30 16:11:08,884 - INFO - Respuestas recibidas: +['### ОШИБКА ###', 'Обход', 'W<#>/<#>/<#> Общее - Ожидание EBI', 'W<#>/<#>/<#> Общее - Ожидание FBI', 'W<#>/<#>/<#> Общее - ', 'W<#>/<#>/<#> Общее - Достигнут максимум датчика давления', 'W<#>/<#>/<#> Общее - Резервуар ниже минимального уровня', 'W<#>/<#>/<#> Общее - Остановка насоса из-за перегрева', 'W<#>/<#>/<#> Общее -', 'W<#>/<#>/<#> Общее - Принудительные сигналы'] +2024-07-30 16:11:08,884 - INFO - Solicitando traducción de Italian a ru-RU para el lote de textos: +W<#>/<#>/<#> General - Richiesta Di Calibrazione Da FBI +Waiting for product +Waiting Infeed Selector Enable +Waiting Minimal Accumulation +Warnings +Watchdog del sistema +Water supply +2024-07-30 16:11:10,624 - INFO - Respuestas recibidas: +['W<#>/<#>/<#> Генерал - Запрос на калибровку от ФБР', 'Ожидание продукта', 'Ожидание активации селектора подачи', 'Ожидание минимальной накопительной способности', 'Предупреждения', 'Дежурный системы', 'Подача воды'] +2024-07-30 16:11:10,624 - INFO - Número total de traducciones recibidas: 17 +2024-07-30 16:11:10,669 - INFO - Archivo traducido guardado en: master_export2translate_translated.xlsx