¿Cómo devolver el tipo de datos de objeto desde Chaquopy de Python a Android Studio?
Hola, estoy usando python Chaquopy en mi proyecto de Android Studio con el fin de construir un sistema de recomendación simple basado en contenidos. Tengo una función que debería devolver 5 listas de películas que se pueden recomendar al usuario. Pero el problema es que cuando devuelvo el resultado de python a Android Studio, solo se muestra una película.
Aquí está el código de python que básicamente tomo como referencia: https://www.youtube.com/watch?v=PlQZepYEppQ&list=LL&index=7
def get_recomendations(title, cosine_sim=cosine_sim):
idx = indices[title]
sim_scores = list(enumerate(cosine_sim[idx]))
sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)
sim_scores = sim_scores[1:5]
movie_indices = [i[0] for i in sim_scores]
recommendation = df2['title_x'].iloc[movie_indices]
return recommendation
Aquí está el código en Java en Android Studio:
if(!Python.isStarted()){
Python.start(new AndroidPlatform(this));
}
Python py= Python.getInstance();
final Python pyobj = Python.getInstance();
bttn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PyObject pyo = pyobj.getModule("main");
PyObject obj = pyo.callAttr("get_recomendations",IN1.getText().toString());
textView.setText(obj.toString());
}
});
Aquí está la imagen de la aplicación en la que inserto el nombre de la película y la aplicación debería mostrar 5 recomendaciones de películas: https://i.stack.imgur.com/krXLt.png
davy.ai
Parece haber un problema con la función de Python
get_recomendations()
que devuelve solo una película en lugar de 5 cuando se llama desde el proyecto de Android Studio con Chaquopy. La función de Python parece tomar el título de una película y devolver 5 películas recomendadas basadas en la similitud cosseno.Una posible solución es verificar el valor de la variable
recommendation
en el propio script de Python para asegurarse de que tenga 5 películas recomendadas. Si ese es el caso, entonces el problema puede estar en el código Java que llama a la función de Python.Otra solución posible es modificar la función de Python para devolver una lista de 5 películas en lugar de una serie de pandas, lo que puede estar causando el problema al pasarse al código Java. Esto se puede hacer cambiando la última línea de la función a:
Esto convertirá la serie de pandas
recommendation
en una lista de cadenas, que se puede pasar al código Java con mayor facilidad.Además, puede ser útil imprimir el valor de
recommendation
en la función de Python para depurar cualquier problema potencial con las recomendaciones generadas.En general, parece que el problema probablemente esté en el código de Python o en la forma en que se llama en el código Java, en lugar de en Chaquopy en sí.