¿Cómo filtrar por variable que esté en una lista de valores?
Tengo esta consulta SPARQL:
all_actors = rdf.query(
””’ SELECT DISTINCT ?actor
WHERE {
?movie pred:hasActor ?actor .
}
GROUP BY ?actor
HAVING (COUNT(?movie) >= “””’ + str(LEAST_MOVIES) + ””'” ,
initNs={‘pred’: ns_predicates})
y también tengo una serie de pandas (o una lista de Python) de películas llamada unique_movies. Tanto ‘?movie’ como la serie tienen valores de cadenas de caracteres de IDs de IMDb para películas.
Quiero filtrar los resultados en la primera consulta imponiendo que ‘?movie’ debe estar en ‘unique_movies’.
¿Cómo lo hago? ¿Necesito escribir de alguna manera todas las películas en ‘unique_movies’ en texto (hay alrededor de ~200) y realizar concatenación de cadenas? No puedo encontrar ningún ejemplo similar.
Editar:
Intenté esto:
our_movies = ‘ ‘.join(unique_movies.index)
all_actors = rdf.query(
””’ SELECT DISTINCT ?actor
WHERE {
?movie pred:hasActor ?actor .
VALUES ?movie { “””’ + our_movies + ””'” }
}
GROUP BY ?actor
HAVING (COUNT(?movie) >= “””’ + str(LEAST_MOVIES) + ””'” ,
initNs={‘pred’: ns_predicates})
donde our_movies es una cadena como “imdbid1 imdbid2 … imdbidN” pero estoy obteniendo una pyparsing.ParseException: Se esperaba {SelectQuery | ConstructQuery | DescribeQuery | AskQuery}, se encontró ”V’ (en el carácter 106), (línea: 4, col: 17)
davy.ai
Para filtrar los resultados en la primera consulta al exigir que
?movie
esté enunique_movies
, se puede utilizar la cláusulaVALUES
en SPARQL. La cláusulaVALUES
le permite especificar los valores de una variable que deben considerarse durante la evaluación.Se puede generar una cadena de IDs de IMDb para películas a partir de
unique_movies
y luego usar esa cadena en la cláusulaVALUES
para restringir los resultados sólo a las películas enunique_movies
:En su edición, el error
pyparsing.ParseException: Expected {SelectQuery | ConstructQuery | DescribeQuery | AskQuery}, found 'V'
indica que el analizador SPARQL espera uno de los tipos de consulta (como SelectQuery o ConstructQuery), pero encontró una variable (VALUES
). Es probable que este error se deba al hecho de que la cláusulaVALUES
debe estar encerrada entre un par de llaves ({}
), y usted sólo ha encerrado los IDs de las películas entre comillas dobles (""
).