问题
I am using SPARQLWrapper
as follows to run my wikidata query.
from SPARQLWrapper import SPARQLWrapper, JSON
import pandas as pd
sparql = SPARQLWrapper("https://query.wikidata.org/sparql")
sparql.setQuery("""
SELECT DISTINCT ?item {
VALUES ?searchTerm { "word2vec" "fasttext" "natural language processing" "deep learning" "support vector machine" }
SERVICE wikibase:mwapi {
bd:serviceParam wikibase:api "EntitySearch".
bd:serviceParam wikibase:endpoint "www.wikidata.org".
bd:serviceParam wikibase:limit 3 .
bd:serviceParam mwapi:search ?searchTerm.
bd:serviceParam mwapi:language "en".
?item wikibase:apiOutputItem mwapi:item.
?num wikibase:apiOrdinal true.
}
?item (wdt:P279|wdt:P31) ?type
}
ORDER BY ?searchTerm ?num
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
results_df = pd.io.json.json_normalize(results['results']['bindings'])
print(results_df)
I would like to give the wordlist "word2vec" "fasttext" "natural language processing" "deep learning" "support vector machine"
as a python list. i.e. as follows.
mylist = ["word2vec", "fasttext", "natural language processing", "deep learning", "support vector machine"]
In that case, how can I insert mylist
as a parameter to my existing wikidata query that I have mentioned above.
I tried to use f-strings as follows. However, it did not work for me.
sparql.setQuery(f"
SELECT DISTINCT ?item {
VALUES ?searchTerm { {mylist} }
SERVICE wikibase:mwapi {
bd:serviceParam wikibase:api "EntitySearch".
bd:serviceParam wikibase:endpoint "www.wikidata.org".
bd:serviceParam wikibase:limit 3 .
bd:serviceParam mwapi:search ?searchTerm.
bd:serviceParam mwapi:language "en".
?item wikibase:apiOutputItem mwapi:item.
?num wikibase:apiOrdinal true.
}
?item (wdt:P279|wdt:P31) ?type
}
ORDER BY ?searchTerm ?num
")
I am happy to provide more details if needed.
来源:https://stackoverflow.com/questions/56021067/how-to-add-a-list-as-a-parameter-in-sparql-query-in-python