es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar el traductor de googletrans en un objeto SQLAlchemy

Estoy intentando traducir algunas columnas de una tabla de MySQL en la nube utilizando la función Translator de googletrans.

import pandas as pd
import googletrans
from googletrans import Translator
import sqlalchemy
import pymysql
import numpy as np
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("mysql+pymysql:......")
Session = sessionmaker(bind = engine)
session = Session()
translator = Translator()

Aquí leo la tabla de MySQL:

sql_stmt = "SELECT * FROM translate"
data = session.execute(sql_stmt)

Luego intento traducirlo:

for to_translate in data:
    data.col1_Translated = translator.translate(to_translate.col1, dest = 'en')
    data.col2_Translated = translator.translate(to_translate.col2, dest = 'en')

Pero cuando intento ver si la traducción se llevó a cabo utilizando el siguiente código, no obtengo ninguna salida.

for rows in data:
    print(rows.col1, rows.col1_Translated, rows.col2, rows.col2_Translated)

Soy nuevo en SQLALchemy y no puedo encontrar una solución. ¿Podría alguien por favor decirme dónde estoy equivocado y cómo acceder a las columnas y aplicar la función del traductor?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que está tratando de asignar valores traducidos a las columnas col1_Translated y col2_Translated del objeto data, que no es un dataframe de pandas. Como está trabajando con un objeto que no es de pandas, sería mejor crear una nueva lista para almacenar los valores traducidos y adjuntarla al resultado de la consulta original.

    Aquí hay una versión actualizada de su código que debería funcionar:

    sql_stmt = "SELECT * FROM translate"
    data = session.execute(sql_stmt)
    translated_rows = []
    
    for row in data:
        # asegúrese de acceder a los valores usando el índice, no los nombres de las columnas
        translated_rows.append((
            row[0], # asumiendo que col1 es la primera columna en su tabla
            translator.translate(row[1], dest='en').text,
            translator.translate(row[2], dest='en').text
        ))
    
    # puede convertir los datos traducidos en un dataframe de pandas si es necesario
    df_translated = pd.DataFrame(translated_rows, columns=['col1', 'col1_Translated', 'col2_Translated'])
    
    # compruebe si la traducción funcionó
    for row in translated_rows:
        print(row[0], row[1], row[2])
    

    Aquí, creamos una nueva lista translated_rows para almacenar los valores traducidos para cada fila del resultado de la consulta original. Luego, para cada fila, accedemos a los valores usando el índice (por ejemplo, row[1] en lugar de row.col1) y aplicamos la función translator.translate() para traducir los valores al inglés. Finalmente, agregamos los valores originales y traducidos a la lista translated_rows.

    Tenga en cuenta que en el último bucle, imprimimos los valores de la lista translated_rows en lugar del objeto data. Además, si su tabla translate tiene muchas filas, es posible que deba considerar dividir las traducciones para evitar superar los límites de velocidad de la API de Google Translate.

Comments are closed.