Algunos cambios para adaptar a TranslationConfig
This commit is contained in:
parent
97de43cba7
commit
8fbffef047
|
@ -106,13 +106,13 @@ def translate_batch_openai(texts_dict, source_lang, target_lang):
|
|||
return dict(zip(texts_dict.keys(), translations))
|
||||
|
||||
|
||||
def affinity_batch_openai(tipo_PLC, texts_dict):
|
||||
def affinity_batch_openai(codigo_tipo_PLC, texts_dict):
|
||||
system_prompt = (
|
||||
"Evaluate the semantic similarity between the following table of pairs of texts in json format on a scale from 0 to 1. "
|
||||
"Return the similarity scores for every row in JSON format as a list of numbers, without any additional text or formatting."
|
||||
)
|
||||
original_list = [
|
||||
fc.compactar_celda_traducida(tipo_PLC, key) for key in texts_dict.keys()
|
||||
fc.compactar_celda_traducida(codigo_tipo_PLC, key) for key in texts_dict.keys()
|
||||
]
|
||||
re_translated_list = list(texts_dict.values())
|
||||
|
||||
|
@ -204,6 +204,7 @@ def calcular_afinidad(tipo_PLC, texto1, texto2):
|
|||
|
||||
|
||||
def main(config: TranslationConfig):
|
||||
global logger
|
||||
df = fc.read_dataframe_with_cleanup_retries(config.get_translate_path())
|
||||
|
||||
source_col = config.codigo_columna_maestra
|
||||
|
@ -255,7 +256,6 @@ def main(config: TranslationConfig):
|
|||
print(f"Número total de textos a traducir: {num_texts}")
|
||||
|
||||
# Traducciones
|
||||
# Hacer las traducciones via LLM en batch
|
||||
translations = {}
|
||||
for start_idx in range(0, num_texts, batch_size):
|
||||
end_idx = min(start_idx + batch_size, num_texts)
|
||||
|
@ -263,101 +263,73 @@ def main(config: TranslationConfig):
|
|||
logger.info(f"Traduciendo: celdas desde {start_idx} a {end_idx}.")
|
||||
print(f"Traduciendo : celdas desde: {start_idx} a :{end_idx}.")
|
||||
|
||||
retries = 4 # Número de intentos totales (1 inicial + 1 reintento)
|
||||
retries = 4
|
||||
for attempt in range(retries):
|
||||
try:
|
||||
batch_translations = translate_batch_openai(
|
||||
batch_texts,
|
||||
fc.idiomas_idiomafromcode(codigo_columna_maestra),
|
||||
target_lang,
|
||||
fc.idiomas_idiomafromcode(config.codigo_columna_maestra),
|
||||
fc.idiomas_idiomafromcode(config.codigo_idioma_seleccionado)
|
||||
)
|
||||
translations.update(batch_translations)
|
||||
break # Si la traducción es exitosa, salimos del bucle de reintentos
|
||||
break
|
||||
except Exception as e:
|
||||
if attempt < retries - 1: # Si no es el último intento
|
||||
logger.warning(
|
||||
f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..."
|
||||
)
|
||||
print(
|
||||
f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..."
|
||||
)
|
||||
if attempt < retries - 1:
|
||||
logger.warning(f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...")
|
||||
print(f"Error en el intento {attempt + 1} de traducción de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...")
|
||||
time.sleep(3)
|
||||
else: # Si es el último intento
|
||||
logger.error(
|
||||
f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}"
|
||||
)
|
||||
print(
|
||||
f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}"
|
||||
)
|
||||
else:
|
||||
logger.error(f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}")
|
||||
print(f"Error en todos los intentos de traducción de celdas desde {start_idx} a {end_idx}: {e}")
|
||||
|
||||
logger.info(f"Número total de traducciones recibidas: {len(translations)}")
|
||||
|
||||
# Traduccion inversa
|
||||
# Actualizar el DataFrame con las traducciones y hacemos la Traduccion inversa
|
||||
for index, row in tqdm(
|
||||
df.iterrows(), total=df.shape[0], desc="Procesando traducciones"
|
||||
):
|
||||
for index, row in tqdm(df.iterrows(), total=df.shape[0], desc="Procesando traducciones"):
|
||||
celda_clave = str(row[source_col])
|
||||
if celda_clave in translations:
|
||||
df.at[index, target_col] = translations[celda_clave]
|
||||
# Realizar la traducción de verificación con Google Translate
|
||||
try:
|
||||
google_translation = google_translate(
|
||||
translations[celda_clave],
|
||||
fc.idiomas_shortcodefromcode(codigo_columna_maestra),
|
||||
fc.idiomas_shortcodefromcode(config.codigo_columna_maestra)
|
||||
)
|
||||
df.at[index, check_translate_col] = google_translation
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Error en la traducción de Google para el texto '{celda_clave}': {e}"
|
||||
)
|
||||
logger.error(f"Error en la traducción de Google para el texto '{celda_clave}': {e}")
|
||||
df.at[index, check_translate_col] = "Error en la traducción"
|
||||
df.at[index, affinity_col] = 0.0
|
||||
|
||||
# Afinidades
|
||||
# Se calculan las Afinidades
|
||||
affinities = {}
|
||||
for start_idx in range(0, num_texts, batch_size): # num_text
|
||||
for start_idx in range(0, num_texts, batch_size):
|
||||
end_idx = min(start_idx + batch_size, num_texts)
|
||||
batch_texts = dict(list(texts_to_translate.items())[start_idx:end_idx])
|
||||
logger.info(f"Afinidad: celdas desde {start_idx} a {end_idx}.")
|
||||
print(f"Afinidad: celdas desde: {start_idx} a :{end_idx}.")
|
||||
|
||||
retries = 2 # Número de intentos totales (1 inicial + 1 reintento)
|
||||
retries = 2
|
||||
for attempt in range(retries):
|
||||
try:
|
||||
batch_affinities = affinity_batch_openai(tipo_PLC, batch_texts)
|
||||
batch_affinities = affinity_batch_openai(config.codigo_tipo_PLC, batch_texts)
|
||||
affinities.update(batch_affinities)
|
||||
break # Si la llamada es exitosa, salimos del bucle de reintentos
|
||||
break
|
||||
except Exception as e:
|
||||
if attempt < retries - 1: # Si no es el último intento
|
||||
logger.warning(
|
||||
f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..."
|
||||
)
|
||||
print(
|
||||
f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando..."
|
||||
)
|
||||
if attempt < retries - 1:
|
||||
logger.warning(f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...")
|
||||
print(f"Error en el intento {attempt + 1} de Afinidad de celdas desde {start_idx} a {end_idx}: {e}. Reintentando...")
|
||||
time.sleep(3)
|
||||
else: # Si es el último intento
|
||||
logger.error(
|
||||
f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}"
|
||||
)
|
||||
print(
|
||||
f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}"
|
||||
)
|
||||
# Intentar individualmente si falla en batch
|
||||
else:
|
||||
logger.error(f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}")
|
||||
print(f"Error en todos los intentos de Afinidad de celdas desde {start_idx} a {end_idx}: {e}")
|
||||
for key, value in batch_texts.items():
|
||||
try:
|
||||
score = calcular_afinidad(tipo_PLC, key, value)
|
||||
score = calcular_afinidad(config.codigo_tipo_PLC, key, value)
|
||||
affinities[key] = score
|
||||
except Exception as ind_e:
|
||||
affinities[key] = "0"
|
||||
logger.error(
|
||||
f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}"
|
||||
)
|
||||
print(
|
||||
f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}"
|
||||
)
|
||||
logger.error(f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}")
|
||||
print(f"Error en el cálculo individual de Afinidad para el texto '{key}': {ind_e}")
|
||||
|
||||
# Actualizar el DataFrame con las Afinidades
|
||||
for index, row in df.iterrows():
|
||||
|
@ -370,7 +342,6 @@ def main(config: TranslationConfig):
|
|||
logger.info(f"Archivo traducido guardado en: {output_path}")
|
||||
print(f"Archivo traducido guardado en: {output_path}")
|
||||
|
||||
|
||||
def run(config: TranslationConfig):
|
||||
global logger
|
||||
logger = fc.configurar_logger(config.work_dir)
|
||||
|
|
Loading…
Reference in New Issue